Changeset 1340


Ignore:
Timestamp:
28/07/06 17:20:33 (13 years ago)
Author:
pjkersha
Message:

Tests/SecurityCGItest: ServiceProviderSecurityCGI now takes returnURI arg. showHomeSiteSelect renamed ->
testSPshowIdPsiteSelect.

NDG/AttAuthorityIO, NDG/SessionMgrIO, NDG/SecurityCGI.py, www/cgi-bin/idp.py and cgi-bin/sp.py:

  • fix to major bug - calls to super should give class name explicitly and not self.class otherwise

derived classes will pick up the wrong super class.

NDG/SecurityCGI.py: major fixes and improvements; bug still exists with _returnCredsResponse

NDG/Session.py: fix call to createSecurityCookie call.

Location:
TI12-security/trunk/python
Files:
11 edited

Legend:

Unmodified
Added
Removed
  • TI12-security/trunk/python/NDG/AttAuthorityIO.py

    r1176 r1340  
    6060                 
    6161        # Call super class update with revised attribute certificate list 
    62         super(self.__class__, self).update(userAttCert=attCert, **xmlTags) 
     62        super(AuthorisationReq, self).update(userAttCert=attCert, **xmlTags) 
    6363                                            
    6464                                            
     
    9898        adds extra "ns0" namespaces which invalidate the signature(!)""" 
    9999         
    100         rootElem = super(self.__class__, self).parseXML(rtnRootElem=True) 
     100        rootElem = super(AuthorisationReq, self).parseXML(rtnRootElem=True) 
    101101        if 'userAttCert' in self: 
    102102 
     
    149149         
    150150        # Allow credentials to be accessed like dictionary keys 
    151         super(self.__class__, self).__init__(**xmlMsgKeys) 
     151        super(AuthorisationResp, self).__init__(**xmlMsgKeys) 
    152152         
    153153        if 'credential' not in self and 'errMsg' not in self: 
     
    175175                 
    176176        # Call super class update with revised attribute certificate list 
    177         super(self.__class__, self).update(credential=attCert, **xmlTags) 
     177        super(AuthorisationResp, self).update(credential=attCert, **xmlTags) 
    178178                                            
    179179                                            
     
    236236        adds extra "ns0" namespaces which invalidate the signature(!)""" 
    237237         
    238         rootElem = super(self.__class__, self).parseXML(rtnRootElem=True) 
     238        rootElem = super(AuthorisationResp, self).parseXML(rtnRootElem=True) 
    239239        if 'credential' in self: 
    240240 
     
    298298         
    299299        # Allow user credentials to be access like dictionary keys 
    300         super(self.__class__, self).__init__(**xmlMsgKeys) 
     300        super(HostInfoResp, self).__init__(**xmlMsgKeys) 
    301301         
    302302         
     
    341341        to parse trusted hosts info""" 
    342342         
    343         rootElem = super(self.__class__, self).parseXML(rtnRootElem=True) 
     343        rootElem = super(HostInfoResp, self).parseXML(rtnRootElem=True) 
    344344         
    345345        if 'thisHost' not in self: 
     
    417417         
    418418        # Allow user credentials to be access like dictionary keys 
    419         super(self.__class__, self).__init__(**xmlMsgKeys) 
     419        super(TrustedHostInfoResp, self).__init__(**xmlMsgKeys) 
    420420         
    421421         
     
    470470        to parse trusted hosts info""" 
    471471         
    472         rootElem = super(self.__class__, self).parseXML(rtnRootElem=True) 
     472        rootElem = super(TrustedHostInfoResp, self).parseXML(rtnRootElem=True) 
    473473         
    474474        if 'trustedHosts' not in self: 
     
    544544         
    545545        # Allow user credentials to be access like dictionary keys 
    546         super(self.__class__, self).__init__(**xmlMsgKeys) 
     546        super(PubKeyResp, self).__init__(**xmlMsgKeys) 
    547547         
    548548                                
  • TI12-security/trunk/python/NDG/SecurityCGI.py

    r1339 r1340  
    5959    Security 
    6060     
    61     Service Provider   - serves NDG resources over http 
    62     Identity Provider  - holds NDG user accounts and supports authentication 
    63                          over http 
     61    Service Provider (SP)    - serves NDG resources over http/https 
     62    Identity Provider (IdP)  - holds NDG user accounts and supports  
     63                               authentication over https 
    6464    """ 
    6565 
     66    # Field used in forms/URI args to tell the Identity Provider the  
     67    # Service Provider URI to return credentials to.  It must use HTTPS 
     68    # unless returnURI and IdP URI are in the same domain. 
     69    returnURItag = "returnURI" 
     70     
     71    # Attribute Certificate request options 
    6672    acAllowMapping = "allowMapping" 
    6773    acAllowMappingWithPrompt = "allowMappingWithPrompt" 
     
    6975     
    7076    acMappingFlags = [acAllowMapping, acAllowMappingWithPrompt, acNoMapping] 
     77 
     78    # Check returnURI uses HTTPS 
     79    _httpsSpecifier = "https:" 
     80    _httpSpecifier = "http:"     
     81     
    7182     
    7283    #_________________________________________________________________________ 
    7384    def __init__(self, 
     85                 scriptName, 
    7486                 clntPubKeyFilePath=None, 
    7587                 clntPriKeyFilePath=None, 
    7688                 clntPriKeyPwd=None, 
    77                  scriptName=__file__, 
    7889                 wsDebug=False, 
    7990                 **cgiFieldStorageKwArgs): 
    80         """clntPubKeyFilePath:    file path to client public key.  The CGI 
     91        """scriptName:            Name of IdP script specified as the action 
     92                                  for HTML forms 
     93        clntPubKeyFilePath:    file path to client public key.  The CGI 
    8194                                  script must have access to a public/private 
    8295                                  key to enable encryption of return traffic 
     
    112125     
    113126    #_________________________________________________________________________ 
    114     # Use instance name as an alias to processFields method 
    115     __call__ = processFields 
     127    # Could have used __call__ = processFields here but then derived classes 
     128    # using __call__ would pick up _SecurityCGI.processFields instead of any 
     129    # overridden version they implemented 
     130    def __call__(self, **kwargs): 
     131        """Alias to processFields method""" 
     132        self.processFields(**kwargs) 
    116133 
    117134 
     
    189206        # Instantiate WS proxy and request authorisation 
    190207        try: 
    191             if not self.smClnt: 
    192                 self.smClnt = SessionClient(\ 
     208            if not self._smClnt: 
     209                self._smClnt = SessionClient(\ 
    193210                            smWSDLuri=self.smWSDLuri, 
    194211                            smPubKeyFilePath=self.smPubKeyFilePath, 
     
    197214                            traceFile=self._wsDebug and sys.stderr or None) 
    198215 
    199             authzResp = self.smClnt.reqAuthorisation(sessCookie=sessCookie, 
     216            authzResp = self._smClnt.reqAuthorisation(sessCookie=sessCookie, 
    200217                                    aaWSDLuri=self.aaWSDLuri, 
    201218                                    aaPubKey=self.aaPubKey, 
     
    305322    """ 
    306323     
     324    # Field name used in forms and URI args to specify the URI for the 
     325    # Identity Provider to redirect to following submit action in 
     326    # showIdPsiteSelect method 
     327    requestURItag = 'requestURI' 
     328     
    307329    #_________________________________________________________________________ 
    308330    def __init__(self, 
     331                 scriptName, 
     332                 returnURI, 
    309333                 aaWSDLuri, 
    310334                 aaPubKeyFilePath=None, 
    311335                 smWSDLuri=None, 
    312336                 smPubKeyFilePath=None, 
    313                  trustedHostInfo=None, 
     337                 trustedIdPs=None, 
    314338                 cookieLifetimeHrs=8, 
    315339                 **securityCGIKwArgs): 
    316         """aaWSDLuri:         URI for Attribute Authority WSDL used to get a 
     340        """scriptName:        Name of the script that uses this code.  It's 
     341                              needed as the action of the HTML form for 
     342                              showIdPsiteSelect to ensure that it can call 
     343                              _requestCreds() 
     344        returnURI:            Specifies the URI that the IdP selected by the 
     345                              user should redirect back to once the user's 
     346                              credentials have been obtained.  - Used by 
     347                              _requestCreds. 
     348        aaWSDLuri:            URI for Attribute Authority WSDL used to get a 
    317349                              list of login URI for trusted hosts 
    318350        smWSDLuri:            URI For Session Manager WSDL used for querying 
     
    322354                              If not set, the client will make a WS call for 
    323355                              it. 
    324         trustedHostInfo:      dictionary of URIs for trusted hosts indexed by 
     356        trustedIdPs:          dictionary of URIs for trusted hosts indexed by 
    325357                              hostname 
    326358        cookieLifetimeHrs:    cookie lifetime in hours for new cookie set in 
     
    328360        wsDebug:              print output from WS transactions to stderr""" 
    329361 
     362        self.returnURI = returnURI 
     363         
    330364        self.aaWSDLuri = aaWSDLuri 
    331         self.aaClnt = None 
     365        self._aaClnt = None 
    332366         
    333367        self.aaPubKeyFilePath = aaPubKeyFilePath 
    334368 
    335369        self.smWSDLuri = smWSDLuri 
    336         self.smClnt = None 
     370        self._smClnt = None 
    337371         
    338372        self.smPubKeyFilePath = smPubKeyFilePath 
    339373 
    340374 
    341         self.trustedHostInfo = trustedHostInfo 
     375        self.trustedIdPs = trustedIdPs 
    342376        self.cookieLifetimeHrs = cookieLifetimeHrs 
    343377 
     
    348382        self._wsDebug = False         
    349383                 
    350         super(self.__class__, self).__init__(**securityCGIKwArgs) 
     384        super(ServiceProviderSecurityCGI, self).__init__(scriptName, 
     385                                                         **securityCGIKwArgs) 
    351386 
    352387  
     
    355390        """Call appropriate actions according to the fields set""" 
    356391 
    357         if 'requestURI' in self: 
     392        if self.requestURItag in self: 
    358393            # Request credentials from user's identity provider 
    359394            self._requestCreds(**kwargs) 
     
    365400 
    366401            self._receiveCredsResponse(encodedExpiry=encodedExpiry, **kwargs) 
    367      
    368      
    369     #_________________________________________________________________________ 
    370     def showHomeSiteSelect(self, 
    371                            trustedHostInfo=None, 
    372                            scriptName=None, 
    373                            contentTypeHdr=True, 
    374                            htmlTag=True, 
    375                            hdrTag=True, 
    376                            hdrTxt=_defStyle, 
    377                            bodyTag=True, 
    378                            pageTitle="Select your home site ..."): 
    379  
    380         if trustedHostInfo: 
    381             self.trustedHostInfo = trustedHostInfo 
    382  
    383         if not self.trustedHostInfo: 
    384             self.getTrustedHostInfo() 
     402 
     403        else: 
     404            # Default to list of sites for user to select for login 
     405            self.showIdPsiteSelect(**kwargs) 
     406 
     407     
     408    #_________________________________________________________________________ 
     409    def showIdPsiteSelect(self, 
     410                          trustedIdPs=None, 
     411                          scriptName=None, 
     412                          contentTypeHdr=True, 
     413                          htmlTag=True, 
     414                          hdrTag=True, 
     415                          hdrTxt=_defStyle, 
     416                          bodyTag=True, 
     417                          pageTitle="Select your home site ..."): 
     418        """Display a list of Identity Provider sites for the user to select 
     419        to retrieve their credentials.  The user must have an account with one 
     420        of these sites in order to be able to proceed 
     421         
     422        Override this method as required for custom IdP page presentation. 
     423        However, the following field must be set: 
     424         
     425        ServiceProviderSecurityCGI.requestURItag  
     426         
     427        This is the URI of the IdP login the user selected""" 
     428         
     429        if trustedIdPs: 
     430            if not isinstance(trustedIdPs, dict): 
     431                raise SecurityCGIError, \ 
     432                            "Expecting a dictionary type for \"trustedIdPs\"" 
     433                             
     434            self.trustedIdPs = trustedIdPs 
     435 
     436 
     437        if not self.trustedIdPs: 
     438            self.getTrustedIdPs() 
    385439             
    386440        if scriptName: 
     
    411465    <tr> 
    412466      <td> 
    413         <select name="requestURI">         
    414           <option value="">Select your home site...""" % self.scriptName 
     467        <select name="%s">         
     468          <option value="">Select your home site...""" % \ 
     469                                      (self.scriptName, self.requestURItag) 
    415470           
    416         for hostname, info in self.trustedHostInfo.items(): 
     471        for IdPname, info in self.trustedIdPs.items(): 
    417472            print "          <option value=\"%s\">%s" % \ 
    418                                                 (info['loginURI'], hostname) 
     473                                                (info['loginURI'], IdPname) 
    419474                 
    420475        print \ 
     
    435490            print "</html>" 
    436491     
    437         # end of showHomeSiteSelect() 
     492        # end of showIdPsiteSelect() 
    438493 
    439494 
     
    464519 
    465520    #_________________________________________________________________________ 
    466     def getTrustedHostInfo(self): 
    467         """Call Attribute Authority to find out trusted hosts.  These can be 
    468         use to populate list for use to select Identity Provider for login""" 
     521    def getTrustedIdPs(self): 
     522        """Call Attribute Authority to find out IdPs that this SP trusts.   
     523        i.e. the SP's Attribute Authority includes them in it's map 
     524        configuration.  These can be use to populate list for a user to select  
     525        their Identity Provider for login""" 
    469526         
    470527        try: 
    471             if not self.aaClnt: 
    472                 self.aaClnt = AttAuthorityClient(aaWSDL=self.aaWSDLuri, 
     528            if not self._aaClnt: 
     529                self._aaClnt = AttAuthorityClient(aaWSDL=self.aaWSDLuri, 
    473530                            aaPubKeyFilePath=self.aaPubKeyFilePath, 
    474531                            clntPubKeyFilePath=self.clntPubKeyFilePath, 
     
    476533                            traceFile=self._wsDebug and sys.stderr or None) 
    477534 
    478             # Include *this* host as a trusted host 
    479             self.trustedHostInfo = self.aaClnt.getHostInfo(\ 
     535            # Include *this* host as a trusted Identity Provider 
     536            self.trustedIdPs = self._aaClnt.getHostInfo(\ 
    480537                                           clntPriKeyPwd=self.clntPriKeyPwd) 
    481538             
    482539            # Retrieve other info for other trusted hosts 
    483             self.trustedHostInfo.update(self.aaClnt.getTrustedHostInfo(\ 
     540            self.trustedIdPs.update(self._aaClnt.getTrustedHostInfo(\ 
    484541                                           clntPriKeyPwd=self.clntPriKeyPwd)) 
    485542        except Exception, e: 
    486             raise SecurityCGIError, "Attribute Authority client: %s" % e 
     543            raise SecurityCGIError, "Getting list of trusted IdPs: %s" % e 
    487544 
    488545     
     
    518575    def _requestCreds(self, 
    519576                      requestURI=None, 
    520                       returnURI=None, 
    521577                      pageTitle='', 
    522578                      headTags='', 
     
    526582         
    527583        requestURI:   site to request credentials from - default is  
    528                       'requestURI' CGI form value 
     584                      self.requestURItag CGI form value 
    529585        pageTitle:    Give the redirect page a title 
    530586        headTags:     Optionally add additional tags in <head/> section 
     
    534590                      formatted HTML""" 
    535591 
    536         if returnURI is None: 
    537             returnURI = self['returnURI'].value 
    538  
    539592        if requestURI is None: 
    540             requestURI = self['requestURI'].value 
    541  
     593            try: 
     594                requestURI = self[self.requestURItag].value 
     595                     
     596            except KeyError, e: 
     597                raise SecurityCGIError, "Requesting credentials from an " + \ 
     598                                   "Identity provider: %s key is not set" % e 
     599     
    542600        print """Content-type: text/html 
    543601 
     
    545603<head> 
    546604<title>%s</title> 
    547 <meta http-equiv="REFRESH" content="%d; url=%s?returnURI=%s"> 
     605<meta http-equiv="REFRESH" content="%d; url=%s?%s=%s"> 
    548606%s 
    549607</head> 
     
    551609%s 
    552610</body> 
    553 </html>""" % \ 
    554     (pageTitle, delayTime, requestURI, returnURI, headTags, redirectMsg) 
     611</html>""" % (pageTitle,  
     612              delayTime,  
     613              requestURI,  
     614              self.returnURItag,  
     615              self.returnURI,  
     616              headTags,  
     617              redirectMsg) 
    555618 
    556619 
     
    575638    can them set a new security cookie it's target domain.""" 
    576639     
    577     # _processCredsRequest must check that the returnURI given uses HTTPS 
    578     __httpsSpecifier = "https:" 
    579      
    580      
    581     #_________________________________________________________________________ 
    582     def __init__(self,  
     640    # Form field name/URI keyword set by showLogin form in order to call 
     641    # _authenticate() 
     642    authenticateTag = "authenticate" 
     643     
     644     
     645    #_________________________________________________________________________ 
     646    def __init__(self, 
     647                 scriptName,  
    583648                 smWSDLuri, 
    584649                 smPubKeyFilePath=None, 
     
    586651                 passPhrase=None, 
    587652                 **securityCGIKwArgs): 
    588         """smWSDLuri:         URI For Session Manager WSDL used for user 
     653        """scriptName:        Name of IdP script specified as the action for  
     654                              HTML forms 
     655        smWSDLuri:            URI For Session Manager WSDL used for user 
    589656                              authentication 
    590657        smPubKeyFilePath:     file path for Session Manager public key.  If 
     
    596663 
    597664        self.smWSDLuri = smWSDLuri 
    598         self.smClnt = None 
     665        self._smClnt = None 
    599666         
    600667        self.smPubKeyFilePath = smPubKeyFilePath 
     
    603670        self.passPhrase = passPhrase 
    604671                                 
    605         super(self.__class__, self).__init__(**securityCGIKwArgs) 
     672        super(IdentityProviderSecurityCGI, self).__init__(scriptName, 
     673                                                          **securityCGIKwArgs) 
    606674 
    607675     
     
    610678        """Call appropriate actions according to the fields set""" 
    611679    
    612         bAuthorise = "authorise" in self 
    613          
    614         if 'returnURI' in self: 
    615             # Identity provider receives request from remote site for  
    616             # credentials and returns them 
    617             self._processCredsRequest(**kwargs) 
    618  
    619         elif 'authenticate' in self: 
     680        if self.authenticateTag in self: 
    620681            # User has entered login details - now authenticate using the  
    621682            # Session Manager WS 
    622683            sessCookie = self._authenticate() 
    623684             
    624             if bAuthorise: 
     685            if "authorise" in self: 
    625686                # Authorisation and authentication arguments were set -  
    626687                # Now call authorisation passing the session cookie 
    627688                self._getAttCert(sessCookie) 
    628689             
    629             if 'returnURI' in self: 
     690            if self.returnURItag in self: 
    630691                # The authentication process is as a result of a redirect  
    631692                # request from another site - redirect back to the remote site 
     
    634695                                          setCookie=True,  
    635696                                          **kwargs) 
     697        elif self.returnURItag in self: 
     698            # Identity provider receives request from remote site for  
     699            # credentials and returns them 
     700            self._processCredsRequest(**kwargs) 
    636701                 
    637         elif bAuthorise: 
     702        elif "authorise" in self: 
    638703            # Handle a get attribute certificate request 
    639704            self._getAttCert() 
    640705                     
    641706        else: 
    642             # Remote site presents possible sites for user to get their  
    643             # credentials from 
    644             self.showHomeSiteSelect(**kwargs) 
     707            # Present login as the default behaviour 
     708            self.showLogin(**kwargs) 
    645709 
    646710 
     
    655719 
    656720        if returnURI is None: 
    657             returnURI = self['returnURI'].value 
     721            try: 
     722                returnURI = self[self.returnURItag].value 
     723                 
     724            except KeyError, e: 
     725                raise SecurityCGIError, \ 
     726                    "Processing credentials request:  %s is not set" % e 
    658727         
    659728                                                      
     
    663732            # Get session ID from existing cookie 
    664733            sessCookie = SimpleCookie(os.environ['HTTP_COOKIE']) 
    665             bValidSessCookie = UserSession.isValidSecurityCookie(sessCookie) 
    666              
    667         else: 
    668             bValidSessCookie = False 
    669734        
    670               
    671         # Check that the returnURI is over https, if not credentials would be 
    672         # returned to the service provider in clear text and could be snooped 
    673         # The exception to this is where returnURI and IdP URI are in the  
    674         # same domain.  In this case credentials would not be passed between 
    675         # SP and IdP URIs anyway 
    676         if returnURI[0:6] != self.__httpsSpecifier and \ 
    677            not bValidSessCookie or \ 
    678            sessCookie[UserSession.cookieTags[0]]['domain'] not in returnURI:            
    679             raise SecurityCGIError, "Specified returnURI must use HTTPS" 
    680  
    681735 
    682736        # Check for NDG cookie 
    683         if sessCookie and bValidSessCookie: 
     737        if sessCookie and UserSession.isValidSecurityCookie(sessCookie): 
    684738                 
    685739            # Return cookie to requestor 
     
    721775 
    722776        if returnURI is None: 
    723             returnURI = self['returnURI'].value 
     777            try: 
     778                returnURI = self[self.returnURItag].value 
     779            except KeyError: 
     780                raise SecurityCGIError, \ 
     781                                "No returnURI set for return of credentials" 
     782             
     783        # Check that the returnURI is over https, if not credentials would 
     784        # be returned to the service provider in clear text and could be  
     785        # snooped.  The exception to this is where returnURI and IdP URI  
     786        # are in the same domain.  In this case credentials would not be  
     787        # passed between SP and IdP URIs anyway 
     788        cookieDomain = sessCookie[UserSession.cookieTags[0]]['domain'] 
     789        if returnURI[0:6] != self._httpsSpecifier and \ 
     790           cookieDomain not in returnURI:            
     791            raise SecurityCGIError, "Specified returnURI must use HTTPS" 
     792 
    724793                                          
    725794        if setCookie: 
     
    756825<head> 
    757826<title>%s</title> 
    758 <meta http-equiv="REFRESH" 
    759 content="%d; url=%s%s"> 
     827<meta http-equiv="REFRESH" content="%d; url=%s%s"> 
    760828%s 
    761829</head> 
     
    784852                    'passPhrase' in self and self['passPhrase'].value or None 
    785853                     
    786         returnURI = 'returnURI' in self and self['returnURI'].value or None 
     854        returnURI = self.returnURItag in self and \ 
     855                                        self[self.returnURItag].value or None 
    787856             
    788857             
     
    802871        # Instantiate WS proxy and request connection 
    803872        try: 
    804             if not self.smClnt: 
    805                 self.smClnt = SessionClient(smWSDL=self.smWSDLuri, 
     873            if not self._smClnt: 
     874                self._smClnt = SessionClient(smWSDL=self.smWSDLuri, 
    806875                               smPubKeyFilePath=self.smPubKeyFilePath, 
    807876                               clntPubKeyFilePath=self.clntPubKeyFilePath, 
     
    809878                               traceFile=self._wsDebug and sys.stderr or None) 
    810879 
    811             sSessCookie = self.smClnt.connect(userName=self.userName, 
    812                                          pPhrase=self.passPhrase, 
    813                                          clntPriKeyPwd=self.clntPriKeyPwd) 
     880            sSessCookie = self._smClnt.connect(userName=self.userName, 
     881                                             pPhrase=self.passPhrase, 
     882                                             clntPriKeyPwd=self.clntPriKeyPwd) 
    814883            sessCookie = SimpleCookie(sSessCookie) 
    815884            return sessCookie 
     
    819888                           bAuthorise=bAuthorise, 
    820889                           pageTitle="Login - internal error") 
    821             raise SecurityCGIError, "Session client: %s" % e 
     890            raise SecurityCGIError, "Authenticating user: %s" % e 
    822891 
    823892     
    824893    #_________________________________________________________________________ 
    825894    def showLogin(self, 
     895                  scriptName=None, 
    826896                  returnURI=None, 
    827897                  contentTypeHdr=True, 
    828898                  htmlTag=True, 
    829                   pageTitle='', 
     899                  pageTitle='NDG Login', 
    830900                  hdrTxt=_defStyle, 
    831901                  headTag=True, 
    832902                  bodyTag=True, 
    833903                  bAuthorise=False): 
    834         """Display initial NDG login form""" 
    835      
     904        """Display initial NDG login form 
     905         
     906        Override this method in a derived class in order to define a custom 
     907        login with the required look and feel for the IdP organisation 
     908         
     909        Derived class method MUST include the form field, 
     910         
     911        IdentityProviderSecurityCGI.authenticateTag 
     912         
     913        in order to correctly call this classes' _authenticate() method e.g. 
     914         
     915        ...<input type=hidden name=%s value="1">...' % \ 
     916                                IdentityProviderSecurityCGI.authenticateTag 
     917        """ 
     918     
     919        if scriptName: 
     920            self.scriptName = scriptName 
     921             
    836922        if contentTypeHdr: print "Content-type: text/html\n\n" 
    837923         
     
    848934 
    849935 
    850         if returnURI is None and 'returnURI' in self: 
    851             returnURI = self['returnURI'].value 
     936        if returnURI is None and self.returnURItag in self: 
     937            returnURI = self[self.returnURItag].value 
    852938 
    853939        if returnURI: 
    854             returnURIfield = \ 
    855                 "<input type=hidden name=returnURI value=\"%s\">" % returnURI 
     940            returnURIfield = "<input type=hidden name=%s value=\"%s\">" % \ 
     941                                                (self.returnURItag, returnURI) 
    856942        else: 
    857943            returnURIfield = '' 
     
    9161002        </td> 
    9171003    </tr> 
    918     <input type=hidden name=authenticate value="1"> 
    919     %s"""  % (self.scriptName, returnURIfield) 
     1004    <input type=hidden name=%s value="1"> 
     1005    %s"""  % (self.scriptName, self.authenticateTag, returnURIfield) 
    9201006     
    9211007        print \ 
  • TI12-security/trunk/python/NDG/Session.py

    r1331 r1340  
    289289         
    290290        # Call class method  
    291         return self.__class__.createSecurityCookie(sessID,  
    292                                             encrSessMgrWSDLuri, 
    293                                             dtExpiry=dtExpiry, 
     291        cookieTags = UserSession.cookieTags 
     292        cookieTagsKwArgs = {}.fromkeys(cookieTags) 
     293        cookieTagsKwArgs[cookieTags[0]] = sessID 
     294        cookieTagsKwArgs[cookieTags[1]] = encrSessMgrWSDLuri 
     295         
     296        return self.__class__.createSecurityCookie(dtExpiry=dtExpiry, 
    294297                                            cookieDomain=self.__cookieDomain, 
    295                                             asString=asString) 
     298                                            asString=asString, 
     299                                            **cookieTagsKwArgs) 
    296300 
    297301     
  • TI12-security/trunk/python/NDG/SessionMgrIO.py

    r930 r1340  
    7676                 
    7777        # Allow user credentials to be access like dictionary keys 
    78         super(self.__class__, self).__init__(**xmlMsgKeys) 
     78        super(ConnectReq, self).__init__(**xmlMsgKeys) 
    7979 
    8080 
     
    8484        to convert boolean""" 
    8585         
    86         rootElem = super(self.__class__, self).parseXML(rtnRootElem=True) 
     86        rootElem = super(ConnectReq, self).parseXML(rtnRootElem=True) 
    8787         
    8888        if 'getCookie' in self: 
     
    121121         
    122122        # Allow user credentials to be access like dictionary keys 
    123         super(self.__class__, self).__init__(**xmlMsgKeys) 
     123        super(ConnectResp, self).__init__(**xmlMsgKeys) 
    124124         
    125125                                
     
    175175                 
    176176        # Allow user credentials to be access like dictionary keys 
    177         super(self.__class__, self).__init__(**xmlMsgKeys) 
     177        super(AddUserReq, self).__init__(**xmlMsgKeys) 
    178178      
    179179 
     
    204204                 
    205205        # Allow user credentials to be access like dictionary keys 
    206         super(self.__class__, self).__init__(**xmlMsgKeys) 
     206        super(AddUserResp, self).__init__(**xmlMsgKeys) 
    207207         
    208208                                
     
    261261                        
    262262        # Allow user credentials to be access like dictionary keys 
    263         super(self.__class__, self).__init__(**xmlMsgKeys) 
     263        super(AuthorisationReq, self).__init__(**xmlMsgKeys) 
    264264 
    265265                                
     
    305305                 
    306306        # Call super class update with revised attribute certificate list 
    307         super(self.__class__, self).update(extAttCertList=extAttCertList, 
     307        super(AuthorisationReq, self).update(extAttCertList=extAttCertList, 
    308308                                           **xmlTags) 
    309309 
     
    354354        to convert boolean""" 
    355355         
    356         super(self.__class__, self).parseXML() 
     356        super(AuthorisationReq, self).parseXML() 
    357357         
    358358        if 'mapFromTrustedHosts' in self: 
     
    428428         
    429429        # Allow user credentials to be access like dictionary keys 
    430         super(self.__class__, self).__init__(**xmlMsgKeys) 
     430        super(AuthorisationResp, self).__init__(**xmlMsgKeys) 
    431431         
    432432                                
     
    469469                 
    470470        # Call super class update with revised attribute certificate list 
    471         super(self.__class__, self).update(attCert=setAttCert(attCert), 
    472                                            extAttCertList=extAttCertList, 
    473                                            **xmlTags) 
     471        super(AuthorisationResp, self).update(attCert=setAttCert(attCert), 
     472                                              extAttCertList=extAttCertList, 
     473                                              **xmlTags) 
    474474 
    475475 
     
    526526        to parse extAttCertList tag""" 
    527527         
    528         super(self.__class__, self).parseXML() 
     528        super(AuthorisationResp, self).parseXML() 
    529529 
    530530        # Nb. ElementTree parses attCert XML, it adds 'ns0' namespaces to all 
     
    604604         
    605605        # Allow user credentials to be access like dictionary keys 
    606         super(self.__class__, self).__init__(**xmlMsgKeys) 
     606        super(PubKeyResp, self).__init__(**xmlMsgKeys) 
    607607         
    608608                                
  • TI12-security/trunk/python/Tests/SecurityCGItest.py

    r1339 r1340  
    1212""" 
    1313import unittest 
     14import os 
    1415 
    1516from NDG.SecurityCGI import IdentityProviderSecurityCGI, \ 
     
    2021 
    2122    def setUp(self): 
     23        returnURI = "https://gabriel.bnsc.rl.ac.uk/sp.py" 
     24         
    2225        smWSDLuri = "http://gabriel.bnsc.rl.ac.uk/sessionMgr.wsdl" 
    2326        aaWSDLuri = "http://gabriel.bnsc.rl.ac.uk/attAuthority.wsdl" 
     
    3033        clntPriKeyPwd = open('./tmp2').read().strip() 
    3134         
    32         self.idpCGI = IdentityProviderSecurityCGI(smWSDLuri, 
     35        self.idpCGI = IdentityProviderSecurityCGI(os.path.basename(__file__), 
     36                                        smWSDLuri, 
     37                                        smPubKeyFilePath=smPubKeyFilePath, 
    3338                                        clntPubKeyFilePath=clntPubKeyFilePath, 
    3439                                        clntPriKeyFilePath=clntPriKeyFilePath, 
    3540                                        clntPriKeyPwd=clntPriKeyPwd) 
    3641         
    37         self.spCGI = ServiceProviderSecurityCGI(aaWSDLuri, 
     42        self.spCGI = ServiceProviderSecurityCGI(os.path.basename(__file__), 
     43                                        returnURI, 
     44                                        aaWSDLuri, 
     45                                        aaPubKeyFilePath=aaPubKeyFilePath, 
    3846                                        clntPubKeyFilePath=clntPubKeyFilePath, 
    3947                                        clntPriKeyFilePath=clntPriKeyFilePath, 
     
    4957            self.fail(str(e)) 
    5058 
    51     def testSPshowHomeSiteSelect(self): 
     59    def testSPshowIdPsiteSelect(self): 
    5260         
     61        #import pdb;pdb.set_trace() 
    5362        try: 
    54             self.spCGI.showHomeSiteSelect() 
     63            self.spCGI.showIdPsiteSelect() 
    5564             
    5665        except Exception, e: 
     
    6069         
    6170        try: 
    62             import os 
    6371            import base64 
    6472            from NDG.Session import UserSession, UserSessionError 
     
    8088                  ( 
    8189                    "testIdPshowLogin", 
    82                     "testSPshowHomeSiteSelect", 
     90                    "testSPshowIdPsiteSelect", 
    8391                    "testSPshowCredsReceived", 
    8492                  )) 
  • TI12-security/trunk/python/Tests/security.py

    r1203 r1340  
    176176 
    177177 
    178     def showHomeSiteSelect(self, **kwargs): 
     178    def showIdPsiteSelect(self, **kwargs): 
    179179 
    180180        if not self.trustedHostInfo: 
     
    227227</html>""" 
    228228 
    229         # end of showHomeSiteSelect() 
     229        # end of showIdPsiteSelect() 
    230230 
    231231 
  • TI12-security/trunk/python/Tests/xDomainCredsTransfer.py

    r1125 r1340  
    5454                            redirectMsg='Processing request from remote site...') 
    5555    else: 
    56         showHomeSiteSelect() 
     56        showIdPsiteSelect() 
    5757 
    5858 
     
    324324 
    325325 
    326 def showHomeSiteSelect(heading="NDG Home Site Select..."): 
     326def showIdPsiteSelect(heading="NDG Home Site Select..."): 
    327327 
    328328    print """Content-type: text/html 
     
    375375</html>""" 
    376376 
    377     # end of showHomeSiteSelect() 
     377    # end of showIdPsiteSelect() 
    378378 
    379379if __name__ == "__main__": 
  • TI12-security/trunk/python/www/cgi-bin/idp.py

    r1339 r1340  
    2222    def showLogin(self, pageTitle="NDG Login", **kwargs): 
    2323        """Display initial NDG login form""" 
    24         super(self.__class__, self).showLogin(pageTitle=pageTitle, **kwargs) 
     24        super(IdPcgi, self).showLogin(pageTitle=pageTitle, **kwargs) 
    2525 
    2626 
     
    3434    clntPriKeyFilePath = "../certs/GabrielCGI-key.pem" 
    3535 
    36     idpCGI = IdPcgi(smWSDLuri, 
    37                     scriptName=os.path.basename(__file__), 
     36    idpCGI = IdPcgi(os.path.basename(__file__), 
     37                    smWSDLuri, 
    3838                    smPubKeyFilePath=smPubKeyFilePath, 
    3939                    clntPubKeyFilePath=clntPubKeyFilePath, 
  • TI12-security/trunk/python/www/cgi-bin/security.py

    r1300 r1340  
    176176 
    177177 
    178     def showHomeSiteSelect(self, **kwargs): 
     178    def showIdPsiteSelect(self, **kwargs): 
    179179 
    180180        if not self.trustedHostInfo: 
     
    227227</html>""" 
    228228 
    229         # end of showHomeSiteSelect() 
     229        # end of showIdPsiteSelect() 
    230230 
    231231 
  • TI12-security/trunk/python/www/cgi-bin/sp.py

    r1337 r1340  
    2121 
    2222    #_________________________________________________________________________ 
    23     def showHomeSiteSelect(self,  
     23    def showIdPsiteSelect(self,  
    2424               pageTitle='Select your home site to retrieve your credentials', 
    2525               **kwargs): 
    2626 
    27         super(self.__class__, self).showHomeSiteSelect(pageTitle, **kwargs) 
     27        super(SPcgi, self).showIdPsiteSelect(pageTitle=pageTitle, **kwargs) 
    2828 
    2929 
     
    3737        been authenticated.  Derived class should override this method as 
    3838        required""" 
    39         super(self.__class__, self).showCredsReceived(sessCookie, 
    40                                                       pageTitle=pageTitle, 
    41                                                       bodyTxt=bodyTxt) 
     39        super(SPcgi, self).showCredsReceived(sessCookie, 
     40                                             pageTitle=pageTitle, 
     41                                             bodyTxt=bodyTxt) 
    4242 
    4343 
     
    4545if __name__ == "__main__": 
    4646 
     47    returnURI = 'https://gabriel.bnsc.rl.ac.uk/sp.py' 
    4748    aaWSDL = 'http://gabriel.bnsc.rl.ac.uk/attAuthority.wsdl' 
    4849    aaPubKeyFilePath = "/usr/local/NDG/conf/certs/gabriel-aa-cert.pem" 
     
    5152    clntPriKeyFilePath = "../certs/GabrielCGI-key.pem" 
    5253 
    53     spCGI = SPcgi(aaWSDL, 
    54                   scriptName=os.path.basename(__file__), 
     54    spCGI = SPcgi(os.path.basename(__file__), 
     55                  returnURI, 
     56                  aaWSDL, 
    5557                  aaPubKeyFilePath=aaPubKeyFilePath, 
    5658                  clntPubKeyFilePath=clntPubKeyFilePath, 
Note: See TracChangeset for help on using the changeset viewer.