Changeset 4549


Ignore:
Timestamp:
05/12/08 16:38:20 (11 years ago)
Author:
pjkersha
Message:

OpenID Provider Authentication interface:

  • started work on porting Buffet based RenderingInterface? from Pylons project into openid.provider.renderinginterface sub-package.
Location:
TI12-security/trunk/python
Files:
2 edited
1 moved

Legend:

Unmodified
Added
Removed
  • TI12-security/trunk/python/ndg.security.server/ndg/security/server/wsgi/openid/provider/__init__.py

    r4545 r4549  
    11181118        return [] 
    11191119     
     1120     
     1121class RenderingInterfaceError(Exception): 
     1122    """Base class for RenderingInterface exceptions 
     1123     
     1124    A standard message is raised set by the msg class variable but the actual 
     1125    exception details are logged to the error log.  The use of a standard  
     1126    message enables callers to use its content for user error messages. 
     1127     
     1128    @type msg: basestring 
     1129    @cvar msg: standard message to be raised for this exception""" 
     1130    userMsg = ("An internal error occurred with the page layout,  Please " 
     1131               "contact your system administrator") 
     1132    errorMsg = "RenderingInterface error" 
     1133     
     1134    def __init__(self, *arg, **kw): 
     1135        if len(arg) > 0: 
     1136            msg = arg[0] 
     1137        else: 
     1138            msg = self.__class__.errorMsg 
     1139             
     1140        log.error(msg) 
     1141        Exception.__init__(self, msg, **kw) 
     1142         
     1143class RenderingInterfaceInitError(RenderingInterfaceError): 
     1144    """Error with initialisation of RenderingInterface.  Raise from __init__""" 
     1145    errorMsg = "RenderingInterface initialisation error" 
     1146     
     1147class RenderingInterfaceConfigError(RenderingInterfaceError): 
     1148    """Error with Authentication configuration.  Raise from __init__""" 
     1149    errorMsg = "RenderingInterface configuration error"     
    11201150     
    11211151class RenderingInterface(object): 
  • TI12-security/trunk/python/ndg.security.server/ndg/security/server/wsgi/openid/provider/renderinginterface/buffet.py

    r4548 r4549  
    1 """NDG Security OpenID Provider Pylons utilities 
    2  
    3 Includes Pylons based rendering interface for OpenIDProviderMiddleware 
     1"""NDG Security Pylons Buffet based Rendering Interface for  
     2OpenIDProviderMiddleware 
    43 
    54NERC Data Grid Project 
     
    1615from pylons.templating import Buffet 
    1716from pylons import config 
    18 import ndg.security.server.sso.sso.lib.helpers as h 
    1917import logging 
    2018log = logging.getLogger(__name__) 
     19 
     20from ndg.security.server.wsgi.openid.provider import RenderingInterface, \ 
     21    AuthNInterfaceConfigError 
    2122 
    2223# Boiler plate to create renderer 
     
    7374from ndg.security.server.wsgi.openid.provider import RenderingInterface 
    7475 
    75 class OpenIDProviderKidRendering(RenderingInterface): 
    76     """Provide Kid Templating for OpenID Provider Middleware via Buffet 
     76class BuffetRendering(RenderingInterface): 
     77    """Provide Templating for OpenID Provider Middleware via Buffet 
    7778    class""" 
    78      
    79     @staticmethod 
    80     def _render(templateName, **kw): 
     79 
     80    propNames = ('templateType', 'templateRoot') 
     81    def __init__(self, **prop): 
     82        try: 
     83            for p in prop: 
     84                setattr(self, p, prop[p]) 
     85        except KeyError, e: 
     86            raise AuthNInterfaceConfigError("Missing property: %s" % e)    
     87          
     88        self._buffet = OpenIDProviderRenderingBuffet(self.templateType,  
     89                                                template_root=templateRoot) 
     90         
     91    def _render(self, templateName, **kw): 
    8192        '''Wrapper for Buffet.render''' 
    82         rendering = buffet.render(template_name=templateName, namespace=kw) 
     93        rendering = self._buffet.render(template_name=templateName,  
     94                                        namespace=kw) 
    8395        return rendering 
    8496     
    8597    def login(self, environ, start_response, success_to=None, fail_to=None,  
    8698              msg=''): 
    87         """Set-up Kid template for OpenID Provider Login""" 
     99        """Set-up template for OpenID Provider Login""" 
    88100        c = State(urls=self.urls, session=self.session) 
    89101        c.title = "OpenID Login" 
     
    92104        c.xml = msg 
    93105         
    94         response = OpenIDProviderKidRendering._render('ndg.security.login',  
    95                                                       c=c, g=config, h=h) 
     106        response = BuffetRendering._render('ndg.security.login',  
     107                                           c=c, g=config, h=h) 
    96108        start_response('200 OK',  
    97109                       [('Content-type', 'text/html'+self.charset), 
     
    101113         
    102114    def mainPage(self, environ, start_response): 
    103         """Set-up Kid template for OpenID Provider Login""" 
     115        """Set-up template for OpenID Provider Login""" 
    104116        c = State(urls=self.urls, session=self.session) 
    105117        c.title = "OpenID Provider" 
     
    107119                        self.urls['url_serveryadis'] 
    108120     
    109         response = OpenIDProviderKidRendering._render('ndg.security.mainPage',  
    110                                                       c=c, g=config, h=h) 
     121        response = BuffetRendering._render('ndg.security.mainPage',  
     122                                           c=c, g=config, h=h) 
    111123        start_response('200 OK',  
    112124                       [('Content-type', 'text/html'+self.charset), 
     
    118130        path = environ['PATH_INFO'].rstrip('/') 
    119131        idPath = self.urls['url_id'].replace(self.base_url, '') 
    120         username = path[len(idPath)+1:] 
    121         if not username: 
     132        userIdentifier = path[len(idPath)+1:] 
     133        if not userIdentifier: 
    122134            h.redirect_to(self.urls['url_mainpage']) 
    123135             
     
    129141               
    130142        yadis_loc_tag = '<meta http-equiv="x-xrds-location" content="%s"/>' % \ 
    131             (self.urls['url_yadis']+'/'+username) 
     143            (self.urls['url_yadis']+'/'+userIdentifier) 
    132144             
    133145        c.headExtras = link_tag + yadis_loc_tag 
     
    135147        c.xml = "<b><pre>%s</pre></b>" % identityURL 
    136148         
    137         response = OpenIDProviderKidRendering._render( 
    138                                                 'ndg.security.identityPage',  
    139                                                 c=c, g=config, h=h)     
     149        response = BuffetRendering._render('ndg.security.identityPage',  
     150                                           c=c, g=config, h=h)     
    140151        start_response("200 OK",  
    141152                       [('Content-type', 'text/html'+self.charset), 
     
    152163        c.oidRequest = oidRequest 
    153164         
    154         response=OpenIDProviderKidRendering._render('ndg.security.decidePage',  
    155                                                     c=c, g=config, h=h) 
     165        response=BuffetRendering._render('ndg.security.decidePage',  
     166                                         c=c, g=config, h=h) 
    156167        start_response("200 OK",  
    157168                       [('Content-type', 'text/html'+self.charset), 
     
    167178                       [('Content-type', 'text/html'+self.charset), 
    168179                        ('Content-length', str(len(response)))]) 
    169         response = OpenIDProviderKidRendering._render('ndg.security.error',  
    170                                                       c=c, g=config, h=h) 
     180        response = BuffetRendering._render('ndg.security.error',  
     181                                           c=c, g=config, h=h) 
    171182        return response 
    172      
    173 # Earth System Grid interoperability tests 
    174  
    175 #esgAxAttr = {'urn:esg.security.gateway': 'BADC', 
    176 #        'urn:esg.security.authority': 'group_IPCC_role_default', 
    177 #        'http://axschema.org/namePerson/last': 'UserLastName', 
    178 #        'http://axschema.org/contact/country/home': 'UK', 
    179 #        'http://axschema.org/namePerson/middle': 'UserMiddleName', 
    180 #        'urn:esg.security.uuid': '0123456789abcdef', 
    181 #        'http://axschema.org/namePerson/first': 'UserFirstName', 
    182 #        'http://axschema.org/namePerson/friendly': '', 
    183 #        'http://axschema.org/contact/email': 'tester@test.com', 
    184 #        'urn:esg.security.organization': 'British Atmospheric Data Centre', 
    185 #} 
    186  
    187 esgAxAttr = { 
    188  'http://openid.net/schema/contact/state/home': 'Oxfordshire',  
    189  'http://openid.net/schema/namePerson/middle': 'George',  
    190  'http://openid.net/schema/contact/city/home': 'Didcot',  
    191  'http://openid.net/schema/person/guid': '0123456789abcdef',  
    192  'http://openid.net/schema/namePerson/friendly': 'username',  
    193  'http://openid.net/schema/company/name': 'The British Atmospheric Data Centre',  
    194  'http://openid.net/schema/contact/country/home': 'UK',  
    195  'http://openid.net/schema/namePerson/first': 'John',  
    196  'http://openid.net/schema/namePerson/last': 'Smith',  
    197  'http://openid.net/schema/contact/internet/email': 'testABC@rl.ac.uk', 
    198  'http://www.earthsystemgrid.org/authority': 'group_IPCC_role_default', 
    199  'http://www.earthsystemgrid.org/gateway': 'BADC', 
    200 } 
    201 esgAxAlias = { 
    202  'http://openid.net/schema/contact/state/home': 'state',  
    203  'http://openid.net/schema/namePerson/middle': 'middlename',  
    204  'http://openid.net/schema/contact/city/home': 'city',  
    205  'http://openid.net/schema/person/guid': 'uuid',  
    206  'http://openid.net/schema/namePerson/friendly': 'username',  
    207  'http://openid.net/schema/company/name': 'organization',  
    208  'http://openid.net/schema/contact/country/home': 'country',  
    209  'http://openid.net/schema/namePerson/first': 'firstname',  
    210  'http://openid.net/schema/namePerson/last': 'lastname',  
    211  'http://openid.net/schema/contact/internet/email': 'email', 
    212  'http://www.earthsystemgrid.org/authority': 'authority', 
    213  'http://www.earthsystemgrid.org/gateway': 'gateway', 
    214               } 
    215  
    216 esgSRegAttr = { 
    217     'nickname':'', 
    218     'email':'E-mail Address', 
    219     'country':'UK', 
    220     'language':'English', 
    221     'timezone':'BST', 
    222     } 
    223  
    224  
    225 def esgSRegResponseHandler(username): 
    226     """Interface function to OpenIdProviderMiddleware to set custom attributes 
    227     """ 
    228     attr = esgSRegAttr.copy() 
    229 #    attr['username'] = username 
    230     attr['nickname'] = username 
    231     return attr 
    232  
    233 def esgAXResponseHandler(axReq, axResp, username):   
    234     """Respond to attributes requested by Relying Party via the Attribute 
    235     Exchange interface""" 
    236     attr = esgAxAttr.copy() 
    237     attr['http://openid.net/schema/namePerson/friendly'] = username 
    238      
    239     for typeURI, attrInfo in axReq.requested_attributes.items(): 
    240         # Value input must be list type 
    241         axResp.setValues(typeURI, [attr[typeURI]]) 
  • TI12-security/trunk/python/ndg.security.test/ndg/security/test/combinedservices/services.ini

    r4545 r4549  
    326326#openid.provider.consumer_store_dirpath=./ 
    327327openid.provider.trace=False 
    328 #openid.provider.renderingClass=ndg.security.server.pylons.container.lib.openid_provider_util.OpenIDProviderKidRendering 
    329 openid.provider.renderingClass=ndg.security.server.wsgi.openid.provider.DemoRenderingInterface 
    330 openid.provider.sregResponseHandler=ndg.security.server.pylons.container.lib.openid_provider_util:esgSRegResponseHandler 
    331 openid.provider.axResponseHandler=ndg.security.server.pylons.container.lib.openid_provider_util:esgAXResponseHandler 
     328openid.provider.renderingClass=ndg.security.server.wsgi.openid.provider.renderinginterface.buffet.BuffetRendering 
     329#openid.provider.renderingClass=ndg.security.server.wsgi.openid.provider.DemoRenderingInterface 
     330 
     331openid.provider.rendering.templateType = kid 
     332openid.provider.rendering.templateRoot = ndg.security.server.pylons.container.templates 
     333 
     334# Layout 
     335openid.provider.rendering.server = http://localhost:8000 
     336openid.provider.rendering.LeftLogo = %(server)s/layout/NERC_Logo.gif 
     337openid.provider.rendering.LeftAlt = Natural Environment Research Council 
     338openid.provider.rendering.ndgLink = http://ndg.nerc.ac.uk/ 
     339openid.provider.rendering.ndgImage = %(server)s/layout/ndg_logo_circle.gif 
     340openid.provider.rendering.disclaimer = This site is for test purposes only and is under active development. 
     341openid.provider.rendering.stfcLink = http://ceda.stfc.ac.uk/ 
     342openid.provider.rendering.stfcImage = %(server)s/layout/stfc-circle-sm.gif 
     343openid.provider.rendering.helpIcon = %(server)s/layout/icons/help.png 
     344 
     345 
     346#openid.provider.sregResponseHandler=ndg.security.server.pylons.container.lib.openid_provider_util:esgSRegResponseHandler 
     347#openid.provider.axResponseHandler=ndg.security.server.pylons.container.lib.openid_provider_util:esgAXResponseHandler 
    332348 
    333349# Basic Authentication interface to demonstrate capabilities 
Note: See TracChangeset for help on using the changeset viewer.