Require admin when accessing REST pages
[cascardo/ipsilon.git] / ipsilon / providers / common.py
index dfa2627..169fddc 100644 (file)
@@ -19,6 +19,8 @@ from ipsilon.util.log import Log
 from ipsilon.util.plugin import PluginInstaller, PluginLoader
 from ipsilon.util.plugin import PluginObject, PluginConfig
 from ipsilon.util.page import Page
+from ipsilon.util.page import admin_protect
+from ipsilon.rest.common import RestPage
 import cherrypy
 
 
@@ -111,6 +113,22 @@ 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):
+        return
+
+    def install_args(self, group):
+        raise NotImplementedError
+
+    def configure(self, opts):
+        raise NotImplementedError
+
+
 class LoadProviders(Log):
 
     def __init__(self, root, site):
@@ -137,3 +155,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))