From 92496ab03df595a19b61cfe4d0f0b3050262241d Mon Sep 17 00:00:00 2001 From: Simo Sorce Date: Wed, 4 Dec 2013 15:24:10 -0500 Subject: [PATCH] Add Admin preferences system Signed-off-by: Simo Sorce --- examples/ipsilon.conf | 1 + src/ipsilon.py | 5 ++++ src/util/data.py | 65 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 71 insertions(+) create mode 100755 src/util/data.py diff --git a/examples/ipsilon.conf b/examples/ipsilon.conf index 6d594c2..8329d01 100644 --- a/examples/ipsilon.conf +++ b/examples/ipsilon.conf @@ -1,3 +1,4 @@ [global] log.iscreen = "error" providers.dir = "../src/providers" +admin.config.db = "/var/lib/ipsilon/adminconfig.sqlite" diff --git a/src/ipsilon.py b/src/ipsilon.py index 76db812..15b0ec8 100755 --- a/src/ipsilon.py +++ b/src/ipsilon.py @@ -24,6 +24,7 @@ import atexit import threading import cherrypy from util import plugin +from util import data class Root(object): @@ -38,6 +39,10 @@ plugins = plugin.Plugins() idp_providers = plugins.get_providers() cherrypy.config.update({'idp_providers': idp_providers}) +datastore = data.Store() +admin_config = datastore.get_admin_config() +cherrypy.config.update(admin_config) + if __name__ == "__main__": cherrypy.quickstart(Root()) diff --git a/src/util/data.py b/src/util/data.py new file mode 100755 index 0000000..871f991 --- /dev/null +++ b/src/util/data.py @@ -0,0 +1,65 @@ +#!/usr/bin/python +# +# Copyright (C) 2013 Simo Sorce +# +# see file 'COPYING' for use and warranty information +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +import os +import sqlite3 +import cherrypy + +class Store(object): + + def __init__(self, path=None): + if path is None: + self._path = os.getcwd() + else: + self._path = path + + def _load_config(self, dbname): + con = None + rows = [] + try: + con = sqlite3.connect(dbname) + cur = con.cursor() + cur.executescript(""" + CREATE TABLE IF NOT EXISTS config(name TEXT, value TEXT) + """) + cur.execute("SELECT * FROM config") + rows = cur.fetchall() + con.commit() + except sqlite3.Error, e: + if con: + con.rollback() + cherrypy.log.error("Failed to load config: [%s]" % e) + finally: + if con: + con.close() + + conf = {} + for row in rows: + conf[row[0]] = row[1] + + return conf + + def get_admin_config(self): + path = None + if 'admin.config.db' in cherrypy.config: + path = cherrypy.config['admin.config.db'] + if not path: + path = os.path.join(self._path, 'adminconfig.sqlite') + + return self._load_config(path) -- 2.20.1