Changeset 4565


Ignore:
Timestamp:
08/12/08 17:00:33 (11 years ago)
Author:
pjkersha
Message:

OpenID Provider Rendering interface:

  • Completed port of Buffet based RenderingInterface? from Pylons project into openid.provider.renderinginterface.buffet sub-package.

WSGI Paste test harness requires StaticURLParser instance to enable serving of graphics and stylesheets referenced in kid files.

Location:
TI12-security/trunk/python
Files:
26 added
9 edited

Legend:

Unmodified
Added
Removed
  • TI12-security/trunk/python/ndg.security.server/ndg/security/server/pylons/development.ini

    r4154 r4565  
    5252 
    5353# OpenID Provider 
    54 #openid_provider.path.openidserver=/openidserver 
    55 #openid_provider.path.login=/login 
    56 #openid_provider.path.loginsubmit=/loginsubmit 
    57 #openid_provider.path.id=/id 
    58 #openid_provider.path.yadis=/yadis 
    59 #openid_provider.path.serveryadis=/serveryadis 
    60 #openid_provider.path.allow=/allow 
    61 #openid_provider.path.decide=/decide 
    62 #openid_provider.path.mainpage=/ 
     54#openid.provider.path.openidserver=/openidserver 
     55#openid.provider.path.login=/login 
     56#openid.provider.path.loginsubmit=/loginsubmit 
     57#openid.provider.path.id=/id 
     58#openid.provider.path.yadis=/yadis 
     59#openid.provider.path.serveryadis=/serveryadis 
     60#openid.provider.path.allow=/allow 
     61#openid.provider.path.decide=/decide 
     62#openid.provider.path.mainpage=/ 
    6363 
    64 openid_provider.path.openidserver=/openid/openidserver 
    65 openid_provider.path.login=/openid/login 
    66 openid_provider.path.loginsubmit=/openid/loginsubmit 
    67 openid_provider.path.id=/openid/id 
    68 openid_provider.path.yadis=/openid/yadis 
    69 openid_provider.path.serveryadis=/openid/serveryadis 
    70 openid_provider.path.allow=/openid/allow 
    71 openid_provider.path.decide=/openid/decide 
    72 openid_provider.path.mainpage=/openid 
    73 openid_provider.session_middleware=beaker.session  
    74 #openid_provider.base_url=http://localhost:8200 
    75 openid_provider.base_url=https://gabriel.badc.rl.ac.uk 
    76 #openid_provider.consumer_store_dirpath=./ 
    77 openid_provider.charset=None 
    78 openid_provider.trace=False 
    79 openid_provider.renderingClass=ndg.security.server.pylons.container.lib.openid_provider_util.OpenIDProviderKidRendering 
    80 openid_provider.sregResponseHandler=ndg.security.server.pylons.container.lib.openid_provider_util:esgSRegResponseHandler 
    81 openid_provider.axResponseHandler=ndg.security.server.pylons.container.lib.openid_provider_util:esgAXResponseHandler 
     64openid.provider.path.openidserver=/openid/openidserver 
     65openid.provider.path.login=/openid/login 
     66openid.provider.path.loginsubmit=/openid/loginsubmit 
     67openid.provider.path.id=/openid/id 
     68openid.provider.path.yadis=/openid/yadis 
     69openid.provider.path.serveryadis=/openid/serveryadis 
     70openid.provider.path.allow=/openid/allow 
     71openid.provider.path.decide=/openid/decide 
     72openid.provider.path.mainpage=/openid 
     73openid.provider.session_middleware=beaker.session  
     74#openid.provider.base_url=http://localhost:8200 
     75openid.provider.base_url=https://gabriel.badc.rl.ac.uk 
     76#openid.provider.consumer_store_dirpath=./ 
     77openid.provider.charset=None 
     78openid.provider.trace=False 
     79openid.provider.renderingClass=ndg.security.server.pylons.container.lib.openid.provider_util.OpenIDProviderKidRendering 
     80openid.provider.sregResponseHandler=ndg.security.server.pylons.container.lib.openid.provider_util:esgSRegResponseHandler 
     81openid.provider.axResponseHandler=ndg.security.server.pylons.container.lib.openid.provider_util:esgAXResponseHandler 
    8282 
    8383# Basic authentication for testing/admin - comma delimited list of  
    8484# <username>:<password> pairs 
    85 openid_provider.usercreds=pjk:test, luca:esgndgtest 
     85openid.provider.usercreds=pjk:test, luca:esgndgtest 
    8686 
    8787# Logging configuration 
  • TI12-security/trunk/python/ndg.security.server/ndg/security/server/wsgi/openid/provider/__init__.py

    r4559 r4565  
    168168    """OpenID Provider WSGI Middleware Error""" 
    169169 
    170 class OpenIDProviderConfigError(Exception): 
     170class OpenIDProviderConfigError(OpenIDProviderMiddlewareError): 
    171171    """OpenID Provider Configuration Error""" 
    172     
     172 
     173class OpenIDProviderMissingRequiredAXAttrs(OpenIDProviderMiddlewareError):  
     174    """Raise if a Relying Party *requires* one or more attributes via 
     175    the AX interface but this OpenID Provider cannot return them.  This doesn't 
     176    apply to attributes that are optional""" 
     177 
     178class OpenIDProviderMissingAXResponseHandler(OpenIDProviderMiddlewareError):  
     179    """Raise if a Relying Party *requires* one or more attributes via 
     180    the AX interface but no AX Response handler has been set""" 
     181   
    173182class OpenIDProviderMiddleware(object): 
    174183    """WSGI Middleware to implement an OpenID Provider 
     
    253262        # Convert from string type where required    
    254263        opt['charset'] = opt.get('charset', '') 
    255         opt['trace'] = bool(opt.get('trace', 'False'))  
     264        opt['trace'] = opt.get('trace', 'false').lower() == 'true' 
    256265          
    257266        renderingClassVal = opt.get('renderingClass', None)       
     
    293302            self._authN = authNInterfaceClass(**authNInterfaceProperties) 
    294303        except Exception, e: 
    295             log.error("Error instantiating authentication interface...") 
     304            log.error("Error instantiating authentication interface: %s" % e) 
    296305            raise 
    297306 
     
    333342                                                (renderingClass,  
    334343                                                 RenderingInterface)) 
     344         
     345        # Extract rendering interface specific properties 
     346        renderingProperties = dict([(k.replace('rendering_', ''), v)  
     347                                         for k,v in opt.items()  
     348                                         if k.startswith('rendering_')])     
    335349 
    336350        try: 
    337             self._render = renderingClass(self._authN,  
    338                                           self.base_url,  
    339                                           self.urls) 
     351            self._render = renderingClass(self._authN, 
     352                                          self.base_url, 
     353                                          self.urls, 
     354                                          **renderingProperties) 
    340355        except Exception, e: 
    341             log.error("Error instantiating rendering interface...") 
     356            log.error("Error instantiating rendering interface: %s" % e) 
    342357            raise 
    343358                     
     
    374389        app_conf or keywords 
    375390         
     391        Nb. exclusions for authN and rendering interface properties. 
     392         
    376393        @type opt: dict 
    377394        @param opt: existing options set.  These will be updated by this 
     
    393410                # Allow for authN.* properties used by the Authentication 
    394411                # Interface  
    395                 if filtK not in cls.defOpt and not filtK.startswith('authN_'): 
     412                if filtK not in cls.defOpt and \ 
     413                   not filtK.startswith('authN_') and \ 
     414                   not filtK.startswith('rendering_'): 
    396415                    badOpt += [k]                 
    397416                else: 
     
    593612              
    594613            try: 
    595                 oidResponse = self._identityApproved(oidRequest, identity) 
     614                oidResponse = self._identityApprovedPostProcessing(oidRequest,  
     615                                                                   identity) 
     616 
     617            except (OpenIDProviderMissingRequiredAXAttrs,  
     618                    OpenIDProviderMissingAXResponseHandler): 
     619                response = self._render.errorPage(environ, start_response, 
     620                    'The site where you wish to signin requires ' 
     621                    'additional information which this site isn\'t ' 
     622                    'configured to provide.  Please report this fault to ' 
     623                    'your site administrator.') 
     624                return response 
     625                     
    596626            except Exception, e: 
    597627                log.error("Setting response following ID Approval: %s" % e) 
    598628                return self._render.errorPage(environ, start_response, 
    599                                               'Error setting response. ' 
    600                                               'Please report the error to ' 
    601                                               'your site administrator.') 
     629                        'An error occurred setting additional parameters ' 
     630                        'required by the site requesting your ID.  Please ' 
     631                        'report this fault to your site administrator.') 
    602632            else: 
    603633                return self._displayResponse(oidResponse) 
     
    761791           not oidRequest.idSelect(): 
    762792            try: 
    763                 response = self._identityApproved(oidRequest,  
    764                                                   oidRequest.identity) 
     793                response = self._identityApprovedPostProcessing(oidRequest,  
     794                                                        oidRequest.identity) 
     795            except (OpenIDProviderMissingRequiredAXAttrs,  
     796                    OpenIDProviderMissingAXResponseHandler): 
     797                response = self._render.errorPage(environ, start_response, 
     798                    'The site where you wish to signin requires ' 
     799                    'additional information which this site isn\'t ' 
     800                    'configured to provide.  Please report this fault to ' 
     801                    'your site administrator.') 
     802                return response 
     803                     
    765804            except Exception, e: 
    766805                log.error("Setting response following ID Approval: %s" % e) 
    767806                response = self._render.errorPage(environ, start_response, 
    768                                                   'Error setting response. ' 
    769                                                   'Please report the error to ' 
    770                                                   'your site administrator.') 
     807                        'An error occurred setting additional parameters ' 
     808                        'required by the site requesting your ID.  Please ' 
     809                        'report this fault to your site administrator.') 
    771810                return response 
    772811 
     
    870909                       "been set" % requiredAttr) 
    871910                log.error(msg) 
    872                 raise OpenIDProviderConfigError(msg) 
     911                raise OpenIDProviderMissingAXResponseHandler(msg) 
    873912             
    874913            return 
     
    878917        # possibly via FetchRequest.getRequiredAttrs() 
    879918        try: 
    880             self.axResponseHandler(ax_req, ax_resp,  
    881                                    self.session.get('username')) 
     919            self.axResponseHandler(ax_req,ax_resp,self.session.get('username')) 
     920             
     921        except OpenIDProviderMissingRequiredAXAttrs, e: 
     922            log.error("OpenID Provider is unable to set the AX attributes " 
     923                      "required by the Relying Party's request: %s" % e) 
     924            raise 
     925         
    882926        except Exception, e: 
    883927            log.error("%s exception raised setting requested Attribute " 
     
    888932         
    889933         
    890     def _identityApproved(self, oidRequest, identifier=None): 
     934    def _identityApprovedPostProcessing(self, oidRequest, identifier=None): 
    891935        '''Action following approval of a Relying Party by the user.  Add 
    892936        Simple Registration and/or Attribute Exchange parameters if handlers 
    893         were specified - See _addSRegResponse and _addAXResponse methods 
     937        were specified - See _addSRegResponse and _addAXResponse methods - and 
     938        only if the Relying Party has requested them 
    894939         
    895940        @type oidRequest: openid.server.server.CheckIDRequest 
     
    935980                # User has approved this Relying Party 
    936981                try: 
    937                     oidResponse = self._identityApproved(oidRequest) 
     982                    oidResponse = self._identityApprovedPostProcessing( 
     983                                                                    oidRequest) 
     984                except (OpenIDProviderMissingRequiredAXAttrs,  
     985                        OpenIDProviderMissingAXResponseHandler): 
     986                    response = self._render.errorPage(environ, start_response, 
     987                        'The site where you wish to signin requires ' 
     988                        'additional information which this site isn\'t ' 
     989                        'configured to provide.  Please report this fault to ' 
     990                        'your site administrator.') 
     991                    return response 
     992                     
    938993                except Exception, e: 
    939994                    log.error("Setting response following ID Approval: %s" % e) 
    940995                    response = self._render.errorPage(environ, start_response, 
    941                         'Error setting response.  Please report the error to ' 
    942                         'your site administrator.') 
     996                        'An error occurred setting additional parameters ' 
     997                        'required by the site requesting your ID.  Please ' 
     998                        'report this fault to your site administrator.') 
    943999                    return response 
    9441000                 
  • TI12-security/trunk/python/ndg.security.server/ndg/security/server/wsgi/openid/provider/authninterface/basic.py

    r4559 r4565  
    1818import logging 
    1919log = logging.getLogger(__name__) 
    20      
     20 
     21from ndg.security.server.wsgi.openid.provider import AbstractAuthNInterface 
     22  
    2123     
    2224class BasicAuthNInterface(AbstractAuthNInterface): 
     
    6466            raise AuthNInterfaceConfigError('Mismatch between usernames in ' 
    6567                                            '"userCreds" and ' 
    66                                             '"username2UserIdentifiers" options')    
     68                                            '"username2UserIdentifiers" ' 
     69                                            'options')    
    6770     
    6871    def logon(self, environ, userIdentifier, username, password): 
  • TI12-security/trunk/python/ndg.security.server/ndg/security/server/wsgi/openid/provider/authninterface/sessionmanager.py

    r4545 r4565  
    3131    '''Authentication interface class for OpenIDProviderMiddleware to enable 
    3232    authentication to a Session Manager instance running in the same WSGI 
    33     stack or via a SOAP call to a remote service''' 
     33    stack or via a SOAP call to a remote service 
     34     
     35    @type dbParamNames: tuple 
     36    @cvar dbParamNames: permitted config keywords.  Nb. SQL queries takes 
     37    String Template style '$' substitutions for username, password and OpenID 
     38    identifier''' 
    3439     
    3540    dbParamNames = ( 
     
    8792             
    8893            try: 
    89                 queryInputs = dict(username=username, 
    90                                    userIdentifier=userIdentifier) 
    91                 query = Template(self.logonSQLQuery).substitute(queryInputs) 
    92                 result = connection.execute(query) 
     94                try: 
     95                    queryInputs = dict(username=username, 
     96                                       userIdentifier=userIdentifier) 
     97                    query=Template(self.logonSQLQuery).substitute(queryInputs) 
     98                    result = connection.execute(query) 
     99                except Exception, e: 
     100                    log.error('Connecting database for user logon query : %s' % 
     101                              e) 
     102                    raise 
     103                 
    93104                if not result.rowcount: 
    94105                    raise AuthNInterfaceUsername2IdentifierMismatch() 
  • TI12-security/trunk/python/ndg.security.server/ndg/security/server/wsgi/openid/provider/renderinginterface/buffet/__init__.py

    r4554 r4565  
    1212__contact__ = "Philip.Kershaw@stfc.ac.uk" 
    1313__revision__ = "$Id$" 
    14 import pylons 
    15 from pylons.templating import Buffet 
    16 from pylons import config 
    1714import logging 
    1815log = logging.getLogger(__name__) 
    1916 
     17import httplib 
     18from pylons.templating import Buffet 
     19 
     20# Rendering classes for OpenID Provider must derive from generic render  
     21# interface 
    2022from ndg.security.server.wsgi.openid.provider import RenderingInterface, \ 
    2123    AuthNInterfaceConfigError 
     
    2527    def _update_names(self, ns): 
    2628        return ns 
    27  
    28 try: 
    29     def_eng = config['buffet.template_engines'][0] 
    30     buffet = OpenIDProviderRenderingBuffet( 
    31         def_eng['engine'], 
    32         template_root=def_eng['template_root'], 
    33         **def_eng['template_options'] 
    34     ) 
    35      
    36     for e in config['buffet.template_engines'][1:]: 
    37         buffet.prepare( 
    38             e['engine'], 
    39             template_root=e['template_root'], 
    40             alias=e['alias'], 
    41             **e['template_options'] 
    42         ) 
    43 except: 
    44     templateRoot = 'ndg.security.server.pylons.container.templates' 
    45     buffet = OpenIDProviderRenderingBuffet('kid', template_root=templateRoot) 
    46 #{'mako.directories': ['/home/pjkersha/workspace/security/python/ndg.security.server/ndg/security/server/pylons/container/templates'],  
    47 #'myghty.component_root': [{'templates': '/home/pjkersha/workspace/security/python/ndg.security.server/ndg/security/server/pylons/container/templates'}],  
    48 #'myghty.data_dir': '/home/pjkersha/workspace/security/python/ndg.security.server/ndg/security/server/pylons/data/templates',  
    49 #'kid.encoding': 'utf-8',  
    50 #'kid.assume_encoding': 'utf-8',  
    51 #'mako.module_directory': '/home/pjkersha/workspace/security/python/ndg.security.server/ndg/security/server/pylons/data/templates',  
    52 #'myghty.allow_globals': ['c', 'g', 'h', 'render', 'request', 'session', 'translator', 'ungettext', '_', 'N_'],  
    53 #'myghty.output_encoding': 'utf-8',  
    54 #'myghty.raise_error': True,  
    55 #'mako.output_encoding': 'utf-8',  
    56 #'mako.filesystem_checks': True} 
    57  
    58  
    59 class State: 
    60     '''Convenience class for passing parameters from rendering interface to 
    61     individual template files''' 
    62     def __init__(self, urls={}, session={}): 
    63         self.title = '' 
    64         self.xml = '' 
    65         self.headExtras = '' 
    66         self.session = session 
    67         self.loginStatus = True 
    68         self.urls = urls 
    69  
    70 import httplib 
    71  
    72 # Rendering classes for OpenID Provider must derive from generic render  
    73 # interface 
    74 from ndg.security.server.wsgi.openid.provider import RenderingInterface 
    7529 
    7630class BuffetRendering(RenderingInterface): 
     
    9246    ) 
    9347         
    94     def __init__(self, **prop): 
     48    def __init__(self, *arg, **opt): 
     49        '''Extend RenderingInterface to include config and set-up for Buffet 
     50        object 
     51         
     52        @type *arg: tuple 
     53        @param *arg: RenderingInterface parent class arguments 
     54        @type **opt: dict 
     55        @param **opt: additional keywords to set-up Buffet rendering''' 
     56        super(BuffetRendering, self).__init__(*arg, **opt) 
     57         
    9558        try: 
    96             for p in prop: 
    97                 setattr(self, p, prop[p]) 
     59            for i in opt: 
     60                setattr(self, i, opt[i]) 
    9861        except KeyError, e: 
    9962            raise AuthNInterfaceConfigError("Missing property: %s" % e)    
    10063          
    101         self._buffet=OpenIDProviderRenderingBuffet(self.templateType,  
    102                                                    template_root=templateRoot) 
     64        self._buffet = OpenIDProviderRenderingBuffet(self.templateType,  
     65                                            template_root=self.templateRoot) 
    10366         
    104     def _render(self, templateName, **kw): 
     67        self.title = '' 
     68        self.xml = '' 
     69        self.headExtras = '' 
     70        self.loginStatus = True 
     71         
     72    def _render(self, templateName, c=None, **kw): 
    10573        '''Wrapper for Buffet.render''' 
     74        if c is None: 
     75            c = self 
     76             
     77        kw['c'] = c 
     78         
    10679        rendering = self._buffet.render(template_name=templateName,  
    10780                                        namespace=kw) 
     
    11184              msg=''): 
    11285        """Set-up template for OpenID Provider Login""" 
    113         c = State(urls=self.urls, session=self.session) 
    114         c.title = "OpenID Login" 
    115         c.success_to = success_to or self.urls['url_mainpage'] 
    116         c.fail_to = fail_to or self.urls['url_mainpage']  
    117         c.xml = msg 
     86        self.title = "OpenID Login" 
     87        self.success_to = success_to or self.urls['url_mainpage'] 
     88        self.fail_to = fail_to or self.urls['url_mainpage']  
     89        self.xml = msg 
    11890         
    119         response = BuffetRendering._render('ndg.security.login',  
    120                                            c=c, g=config, h=h) 
     91        response = self._render('ndg.security.login') 
    12192        start_response('200 OK',  
    12293                       [('Content-type', 'text/html'+self.charset), 
     
    12798    def mainPage(self, environ, start_response): 
    12899        """Set-up template for OpenID Provider Login""" 
    129         c = State(urls=self.urls, session=self.session) 
    130         c.title = "OpenID Provider" 
    131         c.headExtras = '<meta http-equiv="x-xrds-location" content="%s"/>' % \ 
     100        self.title = "OpenID Provider" 
     101        self.headExtras = '<meta http-equiv="x-xrds-location" content="%s"/>'%\ 
    132102                        self.urls['url_serveryadis'] 
    133103     
    134         response = BuffetRendering._render('ndg.security.mainPage',  
    135                                            c=c, g=config, h=h) 
     104        response = self._render('ndg.security.mainPage') 
    136105        start_response('200 OK',  
    137106                       [('Content-type', 'text/html'+self.charset), 
     
    147116            h.redirect_to(self.urls['url_mainpage']) 
    148117             
    149         c = State(urls=self.urls, session=self.session) 
    150         c.title = "OpenID Identity Page" 
     118        self.title = "OpenID Identity Page" 
    151119                         
    152120        link_tag = '<link rel="openid.server" href="%s"/>' % \ 
    153               self.urls['url_openidserver'] 
     121                    self.urls['url_openidserver'] 
    154122               
    155123        yadis_loc_tag = '<meta http-equiv="x-xrds-location" content="%s"/>' % \ 
    156124            (self.urls['url_yadis']+'/'+userIdentifier) 
    157125             
    158         c.headExtras = link_tag + yadis_loc_tag 
     126        self.headExtras = link_tag + yadis_loc_tag 
    159127        identityURL = self.base_url + path 
    160         c.xml = "<b><pre>%s</pre></b>" % identityURL 
     128        self.xml = "<b><pre>%s</pre></b>" % identityURL 
    161129         
    162         response = BuffetRendering._render('ndg.security.identityPage',  
    163                                            c=c, g=config, h=h)     
     130        response = self._render('ndg.security.identityPage')     
    164131        start_response("200 OK",  
    165132                       [('Content-type', 'text/html'+self.charset), 
     
    171138        """Handle user interaction required before final submit back to Relying 
    172139        Party""" 
    173         c = State(urls=self.urls, session=self.session) 
    174         c.title = 'Approve OpenID Request?' 
    175         c.trust_root = oidRequest.trust_root 
    176         c.oidRequest = oidRequest 
     140        self.title = 'Approve OpenID Request?' 
     141        self.trust_root = oidRequest.trust_root 
     142        self.oidRequest = oidRequest 
     143        self.environ = environ 
    177144         
    178         response=BuffetRendering._render('ndg.security.decidePage',  
    179                                          c=c, g=config, h=h) 
     145        response = self._render('ndg.security.decidePage') 
    180146        start_response("200 OK",  
    181147                       [('Content-type', 'text/html'+self.charset), 
     
    185151         
    186152    def errorPage(self, environ, start_response, msg, code=500): 
    187         c = State(urls=self.urls, session=self.session) 
    188         c.title = 'Error with OpenID Provider' 
    189         c.xml = msg 
     153        '''Display error information''' 
     154        self.title = 'Error with OpenID Provider' 
     155        self.xml = msg 
     156        response = self._render('ndg.security.error') 
    190157        start_response('%d %s' % (code, httplib.responses[code]),  
    191158                       [('Content-type', 'text/html'+self.charset), 
    192159                        ('Content-length', str(len(response)))]) 
    193         response = BuffetRendering._render('ndg.security.error',  
    194                                            c=c, g=config, h=h) 
    195160        return response 
  • TI12-security/trunk/python/ndg.security.server/ndg/security/server/wsgi/openid/provider/renderinginterface/buffet/templates/ndg/security/decidePage.kid

    r4554 r4565  
    1212                <?python 
    1313                        if c.oidRequest.idSelect(): 
    14                                 identityURL = c.urls['url_id']+'/'+c.session['username'] 
     14                                userIdentifier = c._authN.username2UserIdentifiers( 
     15                                                                                                c.environ, 
     16                                                                                                c.session['username'])[0] 
     17                                identityURL = c.urls['url_id']+'/'+userIdentifier 
    1518                        else: 
    1619                                identityURL = c.oidRequest.identity 
     
    3336                <form method="POST" action="${c.urls['url_allow']}"> 
    3437                        <table> 
     38                                <input type="hidden" name="identity" value="$identityURL" /> 
    3539                                <tr> 
    3640                                        <td> 
  • TI12-security/trunk/python/ndg.security.server/ndg/security/server/wsgi/openid/provider/renderinginterface/buffet/templates/ndg/security/ndgPage.kid

    r4554 r4565  
    2626    <div py:def="header()"> 
    2727        <div id="header"/> 
    28         <div id="logo"><img src="${g['LeftLogo']}" alt="${g['LeftAlt']}" /></div> 
     28        <div id="logo"><img src="${c.leftLogo}" alt="${c.leftAlt}" /></div> 
    2929    </div> 
    3030     
     
    5959                <td align="left" width="60%"> 
    6060                    <table><tbody> 
    61                     <tr><td><span py:replace="linkimage(g.ndgLink,g.ndgImage,'NDG')"/></td> 
     61                    <tr><td><span py:replace="linkimage(c.ndgLink,c.ndgImage,'NDG')"/></td> 
    6262                    <td>OpenID Provider Site for <a href="http://ndg.nerc.ac.uk"> NERC DataGrid</a> 
    63                     ${g.disclaimer} </td> 
     63                    ${c.disclaimer} </td> 
    6464                    </tr> 
    6565                    </tbody></table> 
     
    9393                    </div> 
    9494                </td> 
    95                 <td align="right"><span py:replace="linkimage(g.stfcLink,g.stfcImage,'Hosted by the STFC CEDA')"/></td> 
     95                <td align="right"><span py:replace="linkimage(c.stfcLink,c.stfcImage,'Hosted by the STFC CEDA')"/></td> 
    9696            </tr> 
    9797        </tbody></table></center> 
  • TI12-security/trunk/python/ndg.security.test/ndg/security/test/combinedservices/serverapp.py

    r4538 r4565  
    167167    from paste.httpserver import serve 
    168168    from paste.deploy import loadapp 
    169  
     169     
     170    from paste.urlparser import StaticURLParser 
     171    from paste.cascade import Cascade 
     172     
    170173    app = loadapp('config:%s' % cfgFilePath) 
    171     serve(app, host='0.0.0.0', port=port) 
     174    rootPath = os.path.join(os.environ['NDGSEC_COMBINED_SRVS_UNITTEST_DIR'],  
     175                            'openidprovider') 
     176     
     177    # Include to enable stylesheet and graphics 
     178    staticURLParser = StaticURLParser(rootPath) 
     179    app2 = Cascade([staticURLParser, app]) 
     180    serve(app2, host='0.0.0.0', port=port) 
  • TI12-security/trunk/python/ndg.security.test/ndg/security/test/combinedservices/services.ini

    r4554 r4565  
    330330openid.provider.rendering.templateType = kid 
    331331openid.provider.rendering.templateRoot = ndg.security.server.wsgi.openid.provider.renderinginterface.buffet.templates 
     332openid.provider.rendering.kid.assume_encoding= utf-8 
     333openid.provider.rendering.kid.encoding = utf-8 
    332334 
    333335# Layout 
    334 openid.provider.rendering.baseURL = http://localhost:8000 
     336openid.provider.rendering.baseURL = %(openid.provider.base_url)s 
    335337openid.provider.rendering.leftLogo = %(openid.provider.rendering.baseURL)s/layout/NERC_Logo.gif 
    336338openid.provider.rendering.leftAlt = Natural Environment Research Council 
Note: See TracChangeset for help on using the changeset viewer.