Create database upgrade framework
[cascardo/ipsilon.git] / ipsilon / providers / openidp.py
index 4e47d3e..21e48a3 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2014  Ipsilon project Contributors, for licensee see COPYING
+# Copyright (C) 2014 Ipsilon project Contributors, for license see COPYING
 
 from __future__ import absolute_import
 
@@ -19,6 +19,7 @@ class IdpProvider(ProviderBase):
         super(IdpProvider, self).__init__('openid', 'openid', *pargs)
         self.mapping = InfoMapping()
         self.page = None
+        self.datastore = None
         self.server = None
         self.basepath = None
         self.extensions = LoadExtensions()
@@ -104,15 +105,18 @@ Provides OpenID 2.0 authentication infrastructure. """
         return self.get_config_value('default allowed attributes')
 
     def get_tree(self, site):
-        self.init_idp()
         self.page = OpenID(site, self)
         # self.admin = AdminPage(site, self)
 
         return self.page
 
+    def used_datastores(self):
+        return [self.datastore]
+
     def init_idp(self):
+        self.datastore = OpenIDStore(self.get_config_value('database url'))
         self.server = Server(
-            OpenIDStore(self.get_config_value('database url')),
+            self.datastore,
             op_endpoint=self.endpoint_url)
 
         # Expose OpenID presence in the root
@@ -143,8 +147,10 @@ class Installer(ProviderInstaller):
                            help='Configure OpenID Provider')
         group.add_argument('--openid-dburi',
                            help='OpenID database URI')
+        group.add_argument('--openid-extensions', default='',
+                           help='List of OpenID Extensions to enable')
 
-    def configure(self, opts):
+    def configure(self, opts, changes):
         if opts['openid'] != 'yes':
             return
 
@@ -160,10 +166,11 @@ class Installer(ProviderInstaller):
         po.wipe_data()
         po.wipe_config_values()
         config = {'endpoint url': url,
-                  'identity_url_template': '%sid/%%(username)s' % url,
+                  'identity url template': '%sid/%%(username)s' % url,
                   'database url': opts['openid_dburi'] or
                   opts['database_url'] % {
-                      'datadir': opts['data_dir'], 'dbname': 'openid'}}
+                      'datadir': opts['data_dir'], 'dbname': 'openid'},
+                  'enabled extensions': opts['openid_extensions']}
         po.save_plugin_config(config)
 
         # Update global config to add login plugin