Changeset 6246 for TI12-security


Ignore:
Timestamp:
04/01/10 11:22:32 (10 years ago)
Author:
pjkersha
Message:

User selection of OpenID Provider AX attributes completed: OpenIDProviderMiddleware.do_allow now correctly reviews and updates the response returned to the RP checking user selection of AX parameters POST'ed from the decide page.

Location:
TI12-security/trunk/NDGSecurity/python/ndg_security_server/ndg/security/server/wsgi
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • TI12-security/trunk/NDGSecurity/python/ndg_security_server/ndg/security/server/wsgi/authn.py

    r6245 r6246  
    536536            if SessionHandlerMiddleware.USERNAME_SESSION_KEYNAME not in session\ 
    537537               and SessionHandlerMiddleware.USERNAME_ENVIRON_KEYNAME in environ: 
    538                 log.debug("SessionHandlerMiddleware: updating session " 
     538                log.debug("SessionHandlerMiddleware.__call__: updating session " 
    539539                          "username=%s", environ[ 
    540540                            SessionHandlerMiddleware.USERNAME_ENVIRON_KEYNAME]) 
     
    548548                        SessionHandlerMiddleware.USERDATA_ENVIRON_KEYNAME, '')     
    549549            if remoteUserData: 
    550                 log.debug("SessionHandlerMiddleware: found REMOTE_USER_DATA=" 
    551                           "%s, set from OpenID Relying Party signin", 
     550                log.debug("SessionHandlerMiddleware.__call__: found " 
     551                          "REMOTE_USER_DATA=%s, set from OpenID Relying Party " 
     552                          "signin",  
    552553                          environ[ 
    553                           SessionHandlerMiddleware.USERDATA_ENVIRON_KEYNAME]) 
     554                              SessionHandlerMiddleware.USERDATA_ENVIRON_KEYNAME 
     555                          ]) 
    554556                 
    555557                # eval is safe here because AuthKit cookie is signed and  
     
    570572                        ] = SessionHandlerMiddleware._parseOpenIdAX(ax) 
    571573                         
    572                         log.debug("SessionHandlerMiddleware: updated session " 
    573                                   "with OpenID AX values: %r" %  
     574                        log.debug("SessionHandlerMiddleware.__call__: updated " 
     575                                  "session with OpenID AX values: %r" %  
    574576                                  session[ 
    575577                                    SessionHandlerMiddleware.AX_SESSION_KEYNAME 
     
    590592                        session.save() 
    591593                         
    592                         log.debug("SessionHandlerMiddleware: updated session " 
     594                        log.debug("SessionHandlerMiddleware.__call__: updated " 
     595                                  "session " 
    593596                                  "with sessionManagerURI=%s and " 
    594597                                  "sessionId=%s",  
     
    601604                setUser( 
    602605                    session[SessionHandlerMiddleware.USERNAME_SESSION_KEYNAME]) 
     606            else: 
     607                log.debug("SessionHandlerMiddleware.__call__: REMOTE_USER_DATA " 
     608                          "is not set") 
    603609 
    604610            _start_response = start_response 
  • TI12-security/trunk/NDGSecurity/python/ndg_security_server/ndg/security/server/wsgi/openid/provider/__init__.py

    r6244 r6246  
    8383  
    8484# Place here to avoid circular import error with IdentityMapping class      
    85 from ndg.security.server.wsgi.openid.provider.authninterface import \ 
    86     AbstractAuthNInterface, AuthNInterfaceError 
    87 from ndg.security.server.wsgi.openid.provider.axinterface import AXInterface,\ 
    88     MissingRequiredAttrs, AXInterfaceReloginRequired 
     85from ndg.security.server.wsgi.openid.provider.authninterface import ( 
     86    AbstractAuthNInterface, AuthNInterfaceError) 
     87from ndg.security.server.wsgi.openid.provider.axinterface import (AXInterface, 
     88    MissingRequiredAttrs, AXInterfaceReloginRequired) 
    8989 
    9090 
     
    9595    doesn't apply to attributes that are optional""" 
    9696 
     97 
    9798class OpenIDProviderReloginRequired(AXInterfaceReloginRequired): 
    9899    pass 
     
    103104class OpenIDProviderMiddlewareError(Exception): 
    104105    """OpenID Provider WSGI Middleware Error""" 
     106 
    105107 
    106108class OpenIDProviderConfigError(OpenIDProviderMiddlewareError): 
     
    670672             
    671673            # Check for POST'ed user explicit setting of AX parameters 
    672             userAXSettings = [] 
    673             for fieldName in self.query: 
    674                 if fieldName.startswith('ax.'): 
    675                     userAXSettings.append(self.query[fieldName]) 
    676              
    677             if userAXSettings: 
    678                 # Get all the content namespaced as AX type 
    679                 axArgs = self.oidResponse.fields.getArgs(ax.AXMessage.ns_uri) 
    680                  
    681                 # Add to access object for convenient access based on type URI 
    682                 axFetchResponse = ax.FetchResponse() 
    683                 axFetchResponse.parseExtensionArgs(axArgs) 
    684                 for i in axFetchResponse.data.keys(): 
    685                     if i not in userAXSettings: 
    686                         del axFetchResponse.data[i] 
     674            self._applyUserAXSelections() 
    687675                     
    688676            return self._displayResponse(self.oidResponse) 
     
    704692                                          'administrator.', 
    705693                                          code=400) 
    706  
     694             
     695    def _applyUserAXSelections(self): 
     696        """Helper for do_allow method - process the query response checking  
     697        user Attribute Exchange settings deleting optional attributes if the  
     698        user has deselected them from the decide interface.  All mandatory 
     699        attributes will be returned regardless if the user submitted and called  
     700        do_allow() 
     701        """ 
     702         
     703        # Process decide page AX POST'ed items 
     704        userAXSettings = {} 
     705        for fieldName in self.query: 
     706            if fieldName.startswith('ax.'): 
     707                alias = fieldName.rsplit('ax.', 1)[-1] 
     708                userAXSettings[alias] = self.query[fieldName] 
     709         
     710        # Apply user selections to the response 
     711        if userAXSettings: 
     712            # Get all the content namespaced as AX type 
     713            axArgs = self.oidResponse.fields.getArgs(ax.AXMessage.ns_uri) 
     714            for i in axArgs.keys(): 
     715                # Parse alias name but note not all keys are alias and so will 
     716                # not use the '.' delimiter 
     717                keyParts = i.split('.') 
     718                if len(keyParts) > 1 and not keyParts[1] in userAXSettings: 
     719                    self.oidResponse.fields.delArg(ax.AXMessage.ns_uri, i) 
     720                     
    707721    def do_login(self, environ, start_response, **kw): 
    708722        """Display Login form 
Note: See TracChangeset for help on using the changeset viewer.