Add Admin preferences system
authorSimo Sorce <simo@redhat.com>
Wed, 4 Dec 2013 20:24:10 +0000 (15:24 -0500)
committerSimo Sorce <simo@redhat.com>
Thu, 5 Dec 2013 03:42:48 +0000 (22:42 -0500)
Signed-off-by: Simo Sorce <simo@redhat.com>
examples/ipsilon.conf
src/ipsilon.py
src/util/data.py [new file with mode: 0755]

index 6d594c2..8329d01 100644 (file)
@@ -1,3 +1,4 @@
 [global]
 log.iscreen = "error"
 providers.dir = "../src/providers"
+admin.config.db = "/var/lib/ipsilon/adminconfig.sqlite"
index 76db812..15b0ec8 100755 (executable)
@@ -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 (executable)
index 0000000..871f991
--- /dev/null
@@ -0,0 +1,65 @@
+#!/usr/bin/python
+#
+# Copyright (C) 2013  Simo Sorce <simo@redhat.com>
+#
+# 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 <http://www.gnu.org/licenses/>.
+
+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)