X-Git-Url: http://git.cascardo.info/?p=cascardo%2Fipsilon.git;a=blobdiff_plain;f=ipsilon%2Fproviders%2Fopenidp.py;h=8f745784211fbbb2bcdbf837f4043e4f1532dadd;hp=335b41bd38a066a32dc80a929e85e909d81af7a8;hb=485baf6ee7a315d1af1086fe5b5da8cff6c4ba37;hpb=b7b80c5c0fc1895e85aae3acbfcbbc593a42697f diff --git a/ipsilon/providers/openidp.py b/ipsilon/providers/openidp.py old mode 100755 new mode 100644 index 335b41b..8f74578 --- a/ipsilon/providers/openidp.py +++ b/ipsilon/providers/openidp.py @@ -1,10 +1,9 @@ -#!/usr/bin/python -# -# 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 -from ipsilon.providers.common import ProviderBase +from ipsilon.providers.common import ProviderBase, ProviderInstaller +from ipsilon.providers.openid.store import OpenIDStore from ipsilon.providers.openid.auth import OpenID from ipsilon.providers.openid.extensions.common import LoadExtensions from ipsilon.util.plugin import PluginObject @@ -12,8 +11,6 @@ from ipsilon.util import config as pconfig from ipsilon.info.common import InfoMapping from openid.server.server import Server -# TODO: Move this to the database -from openid.store.memstore import MemoryStore class IdpProvider(ProviderBase): @@ -25,13 +22,15 @@ class IdpProvider(ProviderBase): self.server = None self.basepath = None self.extensions = LoadExtensions() - print self.extensions.available() - print self.extensions.available().keys() self.description = """ Provides OpenID 2.0 authentication infrastructure. """ self.new_config( self.name, + pconfig.String( + 'database url', + 'Database URL for OpenID temp storage', + 'openid.sqlite'), pconfig.String( 'default email domain', 'Used for users missing the email property.', @@ -54,6 +53,14 @@ Provides OpenID 2.0 authentication infrastructure. """ 'enabled extensions', 'Choose the extensions to enable', self.extensions.available().keys()), + pconfig.MappingList( + 'default attribute mapping', + 'Defines how to map attributes before calling extensions', + [['*', '*']]), + pconfig.ComplexList( + 'default allowed attributes', + 'Defines a list of allowed attributes, applied after mapping', + ['*']), ) @property @@ -88,11 +95,26 @@ Provides OpenID 2.0 authentication infrastructure. """ def enabled_extensions(self): return self.get_config_value('enabled extensions') + @property + def default_attribute_mapping(self): + return self.get_config_value('default attribute mapping') + + @property + def default_allowed_attributes(self): + 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 init_idp(self): + self.server = Server( + OpenIDStore(self.get_config_value('database url')), + op_endpoint=self.endpoint_url) + # Expose OpenID presence in the root headers = self._root.default_headers headers['X-XRDS-Location'] = self.endpoint_url+'XRDS' @@ -103,29 +125,28 @@ Provides OpenID 2.0 authentication infrastructure. """ HEAD_LINK % ('openid.server', self.endpoint_url)] html_heads['openid'] = openid_heads - return self.page - - def init_idp(self): - self.server = Server(MemoryStore(), op_endpoint=self.endpoint_url) - def on_enable(self): super(IdpProvider, self).on_enable() self.init_idp() self.extensions.enable(self._config['enabled extensions'].get_value()) -class Installer(object): +class Installer(ProviderInstaller): def __init__(self, *pargs): + super(Installer, self).__init__() self.name = 'openid' - self.ptype = 'provider' self.pargs = pargs def install_args(self, group): group.add_argument('--openid', choices=['yes', 'no'], default='yes', 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 @@ -141,7 +162,11 @@ class Installer(object): 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'}, + 'enabled extensions': opts['openid_extensions']} po.save_plugin_config(config) # Update global config to add login plugin