Add AdminPage abstraction on top of util.Page
authorSimo Sorce <simo@redhat.com>
Tue, 7 Oct 2014 02:48:07 +0000 (22:48 -0400)
committerPatrick Uiterwijk <puiterwijk@redhat.com>
Tue, 7 Oct 2014 14:48:31 +0000 (16:48 +0200)
This is to allow different default headers between Admin pages and
other pages.
In particular we set no-caching headers to all admin pages to force
browsers to refresh as often as possible.

Signed-off-by: Simo Sorce <simo@redhat.com>
Reviewed-by: Patrick Uiterwijk <puiterwijk@redhat.com>
ipsilon/admin/common.py
ipsilon/admin/info.py
ipsilon/admin/login.py
ipsilon/admin/providers.py
ipsilon/providers/saml2/admin.py
ipsilon/providers/saml2idp.py

index b8572e3..19ca6ff 100755 (executable)
@@ -22,7 +22,18 @@ from ipsilon.util.page import Page
 from ipsilon.util.page import admin_protect, auth_protect
 
 
 from ipsilon.util.page import admin_protect, auth_protect
 
 
-class AdminPluginPage(Page):
+class AdminPage(Page):
+
+    def __init__(self, *args, **kwargs):
+        super(AdminPage, self).__init__(*args, **kwargs)
+        self.default_headers.update({
+            'Cache-Control': 'no-cache, must-revalidate',
+            'Pragma': 'no-cache',
+            'Expires': 'Thu, 01 Dec 1994 16:00:00 GMT',
+        })
+
+
+class AdminPluginPage(AdminPage):
 
     def __init__(self, obj, site, parent):
         super(AdminPluginPage, self).__init__(site, form=True)
 
     def __init__(self, obj, site, parent):
         super(AdminPluginPage, self).__init__(site, form=True)
@@ -103,7 +114,7 @@ class AdminPluginPage(Page):
                               options=self.plugin_config)
 
 
                               options=self.plugin_config)
 
 
-class Admin(Page):
+class Admin(AdminPage):
 
     def __init__(self, site, mount):
         super(Admin, self).__init__(site)
 
     def __init__(self, site, mount):
         super(Admin, self).__init__(site)
index 4a8aaba..1ce06f1 100755 (executable)
@@ -3,14 +3,14 @@
 # Copyright (C) 2014  Ipsilon Contributors see COPYING for license
 
 import cherrypy
 # Copyright (C) 2014  Ipsilon Contributors see COPYING for license
 
 import cherrypy
-from ipsilon.util.page import Page
 from ipsilon.util.page import admin_protect, auth_protect
 from ipsilon.util.plugin import PluginObject
 from ipsilon.admin.common import AdminPluginPage
 from ipsilon.util.page import admin_protect, auth_protect
 from ipsilon.util.plugin import PluginObject
 from ipsilon.admin.common import AdminPluginPage
+from ipsilon.admin.common import AdminPage
 from ipsilon.info.common import FACILITY
 
 
 from ipsilon.info.common import FACILITY
 
 
-class InfoPluginsOrder(Page):
+class InfoPluginsOrder(AdminPage):
 
     def __init__(self, site, parent):
         super(InfoPluginsOrder, self).__init__(site, form=True)
 
     def __init__(self, site, parent):
         super(InfoPluginsOrder, self).__init__(site, form=True)
@@ -84,7 +84,7 @@ class InfoPluginsOrder(Page):
                               options=opts)
 
 
                               options=opts)
 
 
-class InfoPlugins(Page):
+class InfoPlugins(AdminPage):
     def __init__(self, site, parent):
         super(InfoPlugins, self).__init__(site)
         self._master = parent
     def __init__(self, site, parent):
         super(InfoPlugins, self).__init__(site)
         self._master = parent
index 165b4ab..62e0a0e 100755 (executable)
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 import cherrypy
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 import cherrypy
-from ipsilon.util.page import Page
 from ipsilon.util.page import admin_protect, auth_protect
 from ipsilon.util.plugin import PluginObject
 from ipsilon.admin.common import AdminPluginPage
 from ipsilon.util.page import admin_protect, auth_protect
 from ipsilon.util.plugin import PluginObject
 from ipsilon.admin.common import AdminPluginPage
+from ipsilon.admin.common import AdminPage
 from ipsilon.login.common import FACILITY
 
 
 from ipsilon.login.common import FACILITY
 
 
@@ -34,7 +34,7 @@ def save_enabled_plugins(names):
     po.save_plugin_config(FACILITY)
 
 
     po.save_plugin_config(FACILITY)
 
 
-class LoginPluginsOrder(Page):
+class LoginPluginsOrder(AdminPage):
 
     def __init__(self, site, parent):
         super(LoginPluginsOrder, self).__init__(site, form=True)
 
     def __init__(self, site, parent):
         super(LoginPluginsOrder, self).__init__(site, form=True)
@@ -116,7 +116,7 @@ class LoginPluginsOrder(Page):
                               options=opts)
 
 
                               options=opts)
 
 
-class LoginPlugins(Page):
+class LoginPlugins(AdminPage):
     def __init__(self, site, parent):
         super(LoginPlugins, self).__init__(site)
         self._master = parent
     def __init__(self, site, parent):
         super(LoginPlugins, self).__init__(site)
         self._master = parent
index 31e11ef..ce21e16 100755 (executable)
 
 
 import cherrypy
 
 
 import cherrypy
-from ipsilon.util.page import Page
 from ipsilon.util.page import admin_protect, auth_protect
 from ipsilon.providers.common import FACILITY
 from ipsilon.admin.common import AdminPluginPage
 from ipsilon.util.page import admin_protect, auth_protect
 from ipsilon.providers.common import FACILITY
 from ipsilon.admin.common import AdminPluginPage
+from ipsilon.admin.common import AdminPage
 
 
 
 
-class ProviderPlugins(Page):
+class ProviderPlugins(AdminPage):
     def __init__(self, site, parent):
         super(ProviderPlugins, self).__init__(site)
         self._master = parent
     def __init__(self, site, parent):
         super(ProviderPlugins, self).__init__(site)
         self._master = parent
index 7e14312..dae4a47 100755 (executable)
@@ -18,7 +18,7 @@
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 import cherrypy
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 import cherrypy
-from ipsilon.util.page import Page
+from ipsilon.admin.common import AdminPage
 from ipsilon.providers.saml2.provider import ServiceProvider
 from ipsilon.providers.saml2.provider import ServiceProviderCreator
 from ipsilon.providers.saml2.provider import InvalidProviderId
 from ipsilon.providers.saml2.provider import ServiceProvider
 from ipsilon.providers.saml2.provider import ServiceProviderCreator
 from ipsilon.providers.saml2.provider import InvalidProviderId
@@ -29,7 +29,7 @@ import requests
 VALID_IN_NAME = r'[^\ a-zA-Z0-9]'
 
 
 VALID_IN_NAME = r'[^\ a-zA-Z0-9]'
 
 
-class NewSPAdminPage(Page):
+class NewSPAdminPage(AdminPage):
 
     def __init__(self, site, parent):
         super(NewSPAdminPage, self).__init__(site, form=True)
 
     def __init__(self, site, parent):
         super(NewSPAdminPage, self).__init__(site, form=True)
@@ -127,7 +127,7 @@ class UnauthorizedUser(Exception):
     pass
 
 
     pass
 
 
-class SPAdminPage(Page):
+class SPAdminPage(AdminPage):
 
     def __init__(self, sp, site, parent):
         super(SPAdminPage, self).__init__(site, form=True)
 
     def __init__(self, sp, site, parent):
         super(SPAdminPage, self).__init__(site, form=True)
@@ -277,15 +277,15 @@ class SPAdminPage(Page):
     delete.public_function = True
 
 
     delete.public_function = True
 
 
-class AdminPage(Page):
+class Saml2AdminPage(AdminPage):
     def __init__(self, site, config):
     def __init__(self, site, config):
-        super(AdminPage, self).__init__(site)
+        super(Saml2AdminPage, self).__init__(site)
         self.name = 'admin'
         self.cfg = config
         self.providers = []
         self.menu = []
         self.url = None
         self.name = 'admin'
         self.cfg = config
         self.providers = []
         self.menu = []
         self.url = None
-        self.sp = Page(self._site)
+        self.sp = AdminPage(self._site)
 
     def add_sp(self, name, sp):
         page = SPAdminPage(sp, self._site, self)
 
     def add_sp(self, name, sp):
         page = SPAdminPage(sp, self._site, self)
index e30e4a1..7508760 100755 (executable)
@@ -20,7 +20,7 @@
 from ipsilon.providers.common import ProviderBase, ProviderPageBase
 from ipsilon.providers.common import FACILITY
 from ipsilon.providers.saml2.auth import AuthenticateRequest
 from ipsilon.providers.common import ProviderBase, ProviderPageBase
 from ipsilon.providers.common import FACILITY
 from ipsilon.providers.saml2.auth import AuthenticateRequest
-from ipsilon.providers.saml2.admin import AdminPage
+from ipsilon.providers.saml2.admin import Saml2AdminPage
 from ipsilon.providers.saml2.provider import IdentityProvider
 from ipsilon.tools.certs import Certificate
 from ipsilon.tools import saml2metadata as metadata
 from ipsilon.providers.saml2.provider import IdentityProvider
 from ipsilon.tools.certs import Certificate
 from ipsilon.tools import saml2metadata as metadata
@@ -214,7 +214,7 @@ Provides SAML 2.0 authentication infrastructure. """
     def get_tree(self, site):
         self.idp = self.init_idp()
         self.page = SAML2(site, self)
     def get_tree(self, site):
         self.idp = self.init_idp()
         self.page = SAML2(site, self)
-        self.admin = AdminPage(site, self)
+        self.admin = Saml2AdminPage(site, self)
         return self.page
 
     def init_idp(self):
         return self.page
 
     def init_idp(self):