X-Git-Url: http://git.cascardo.info/?p=cascardo%2Fipsilon.git;a=blobdiff_plain;f=ipsilon%2Fproviders%2Fcommon.py;h=c4d66584b27814b7d3a287b615effc602c8598a5;hp=dfa2627c00a7b3e11293aca767e3631119f73c1e;hb=485baf6ee7a315d1af1086fe5b5da8cff6c4ba37;hpb=45cb73a21a90084818c3057e362ef9459f1600f3 diff --git a/ipsilon/providers/common.py b/ipsilon/providers/common.py index dfa2627..c4d6658 100644 --- a/ipsilon/providers/common.py +++ b/ipsilon/providers/common.py @@ -1,24 +1,12 @@ -# Copyright (C) 2014 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 . +# Copyright (C) 2014 Ipsilon project Contributors, for license see COPYING from ipsilon.util.log import Log from ipsilon.util.plugin import PluginInstaller, PluginLoader -from ipsilon.util.plugin import PluginObject, PluginConfig +from ipsilon.util.plugin import PluginObject +from ipsilon.util.config import ConfigHelper from ipsilon.util.page import Page +from ipsilon.util.page import admin_protect +from ipsilon.rest.common import RestPage import cherrypy @@ -37,20 +25,20 @@ class AuthenticationError(ProviderException): def __init__(self, message, code): super(AuthenticationError, self).__init__(message) self.code = code - self._debug('%s [%s]' % (message, code)) + self.debug('%s [%s]' % (message, code)) class InvalidRequest(ProviderException): def __init__(self, message): super(InvalidRequest, self).__init__(message) - self._debug(message) + self.debug(message) -class ProviderBase(PluginConfig, PluginObject): +class ProviderBase(ConfigHelper, PluginObject): def __init__(self, name, path, *pargs): - PluginConfig.__init__(self) + ConfigHelper.__init__(self) PluginObject.__init__(self, *pargs) self.name = name self._root = None @@ -65,7 +53,7 @@ class ProviderBase(PluginConfig, PluginObject): self._root = root # init pages and admin interfaces self.tree = self.get_tree(site) - self._debug('IdP Provider registered: %s' % self.name) + self.debug('IdP Provider registered: %s' % self.name) def on_enable(self): self._root.add_subtree(self.name, self.tree) @@ -100,9 +88,9 @@ class ProviderPageBase(Page): else: raise cherrypy.HTTPError(405) - def _debug(self, fact): + def debug(self, fact): superfact = '%s: %s' % (self.plugin_name, fact) - super(ProviderPageBase, self)._debug(superfact) + super(ProviderPageBase, self).debug(superfact) def _audit(self, fact): cherrypy.log('%s: %s' % (self.plugin_name, fact)) @@ -111,6 +99,25 @@ class ProviderPageBase(Page): FACILITY = 'provider_config' +class ProviderInstaller(object): + def __init__(self): + self.facility = FACILITY + self.ptype = 'provider' + self.name = None + + def unconfigure(self, opts, changes): + return + + def install_args(self, group): + raise NotImplementedError + + def validate_args(self, args): + return + + def configure(self, opts, changes): + raise NotImplementedError + + class LoadProviders(Log): def __init__(self, root, site): @@ -119,14 +126,14 @@ class LoadProviders(Log): site[FACILITY] = plugins available = plugins.available.keys() - self._debug('Available providers: %s' % str(available)) + self.debug('Available providers: %s' % str(available)) for item in plugins.available: plugin = plugins.available[item] plugin.register(root, site) for item in plugins.enabled: - self._debug('Provider plugin in enabled list: %s' % item) + self.debug('Provider plugin in enabled list: %s' % item) if item not in plugins.available: continue plugins.available[item].enable() @@ -137,3 +144,47 @@ class ProvidersInstall(object): def __init__(self): pi = PluginInstaller(ProvidersInstall, FACILITY) self.plugins = pi.get_plugins() + + +class RestProviderBase(RestPage): + + def __init__(self, site, config): + super(RestProviderBase, self).__init__(site) + self.plugin_name = config.name + self.cfg = config + + @admin_protect + def GET(self, *args, **kwargs): + raise cherrypy.HTTPError(501) + + @admin_protect + def POST(self, *args, **kwargs): + raise cherrypy.HTTPError(501) + + @admin_protect + def DELETE(self, *args, **kwargs): + raise cherrypy.HTTPError(501) + + @admin_protect + def PUT(self, *args, **kwargs): + raise cherrypy.HTTPError(501) + + def root(self, *args, **kwargs): + method = cherrypy.request.method + + preop = getattr(self, 'pre_%s' % method, None) + if preop and callable(preop): + preop(*args, **kwargs) + + op = getattr(self, method, self.GET) + if callable(op): + return op(*args, **kwargs) + else: + raise cherrypy.HTTPError(405) + + def debug(self, fact): + superfact = '%s: %s' % (self.plugin_name, fact) + super(RestProviderBase, self).debug(superfact) + + def _audit(self, fact): + cherrypy.log('%s: %s' % (self.plugin_name, fact))