Changeset 1022 for TI12-security


Ignore:
Timestamp:
25/05/06 18:37:45 (13 years ago)
Author:
pjkersha
Message:

Updates to Tests/security.py and NDG/SecurityCGI.py: call to AA to get login hosts works but no further.

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

Legend:

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

    r1018 r1022  
    1717import cgi 
    1818import os 
     19import base64 
     20 
     21# Set cookie expiry 
     22from datetime import datetime 
     23from datetime import timedelta 
    1924 
    2025from NDG.SecurityClient import * 
    21 from NDG.Session import UserSession  
     26from NDG.Session import UserSession 
    2227from NDG.Session import UserSessionError 
    2328 
     
    2530class SecurityCGIError(Exception): 
    2631    """Exception handling for NDG Security CGI class.""" 
    27      
     32 
    2833    def __init__(self, msg): 
    2934        self.__msg = msg 
     
    5459                 returnURI=None,  
    5560                 trustedHostInfo=None, 
     61                 cookieLifetimeHrs=12, 
    5662                 wsDebug=False, 
    5763                 **cgiFieldStorageKwArgs): 
     
    5965                              this file.  Modify if you inherit from this 
    6066                              class. 
    61         smWSDL:    URI For Session Manager WSDL used for user  
     67        smWSDL:               URI For Session Manager WSDL used for user 
    6268                              authentication 
    63         returnURI:            the address to redirect back to following a  
     69        aaWSDL:               URI for Attribute Authority WSDL used to get a 
     70                              list of login URI for trusted hosts 
     71        returnURI:            the address to redirect back to following a 
    6472                              redirect   
    6573                              to the user's home site to obtain their  
    6674                              credentials 
    67         trustedHostInfo:     dictionary of URIs for trusted hosts indexed by 
     75        trustedHostInfo:      dictionary of URIs for trusted hosts indexed by 
    6876                              hostname 
     77        cookieLifetimeHrs:    cookie lifetime in hours 
    6978        wsDebug:              print output from WS transactions to stderr""" 
    7079         
     
    8190        self.clntPriKeyFilePath = clntPriKeyFilePath 
    8291        self.clntPriKeyPwd = clntPriKeyPwd 
    83          
     92 
    8493        if scriptName: 
    8594            self.scriptName = scriptName 
     
    8998        self.returnURI = returnURI 
    9099        self.trustedHostInfo = trustedHostInfo 
     100        self.cookieLifetimeHrs = cookieLifetimeHrs 
     101 
     102        # Work out expiry time offset from the time this script is run 
     103        self.dtCookieExpiry = datetime.utcnow() 
     104        self.dtCookieExpiry += timedelta(seconds=self.cookieLifetimeHrs*60*60) 
     105 
    91106        self.__wsDebug = False 
    92107        self.__authorisationMethod = None 
     
    98113    def processFields(self, **kwargs): 
    99114        """Call appropriate actions according to the fields set""" 
    100          
     115 
    101116        if 'requestURI' in self: 
    102117            # Request credentials from user's home site 
    103118            self.requestCreds(**kwargs) 
    104      
    105         elif 'NDG-ID1' in self and 'NDG-ID2' in self and 'expires' in self: 
     119 
     120        elif 'NDG-ID1' in self and 'NDG-ID2' in self: 
    106121            # Receive credentials back from home site and set a new cookie at 
    107122            # remote site 
    108             self.receiveCredsResponse(self['NDG-ID1'].value,  
     123            self.receiveCredsResponse(self['NDG-ID1'].value, 
    109124                                      self['NDG-ID2'].value, 
    110                                       self['NDG-ID2']['expires'],  
    111125                                      **kwargs) 
    112      
     126 
    113127        elif 'authenticate' in self: 
    114128            # User has logged on at home site and a cookie is now set -  
     
    144158                     pageTitle='', 
    145159                     headTags='', 
    146                      delayTime=0, 
    147                      redirectMsg=''): 
     160                     delayTime=3, 
     161                     redirectMsg='Redirecting'): 
    148162        """Request credentials from a user's home site 
    149163         
     
    159173        if requestURI is None: 
    160174            requestURI = self['requestURI'].value 
    161              
    162         print """Content-type: text/html 
    163      
     175 
     176        output = """Content-type: text/html 
     177 
    164178<html> 
    165179<head> 
     
    173187</html>""" % \ 
    174188    (pageTitle, delayTime, requestURI, self.returnURI, headTags, redirectMsg) 
    175      
    176      
    177     #_________________________________________________________________________ 
    178     def receiveCredsResponse(self,  
     189        sys.stderr.write(output) 
     190        print output 
     191     
     192     
     193    #_________________________________________________________________________ 
     194    def receiveCredsResponse(self, 
    179195                             sessID, 
    180                              sessMgrURI,  
    181                              expiry, 
     196                             sessMgrURI, 
    182197                             pageTitle='', 
    183198                             hdrTxt='', 
     
    187202     
    188203        sessCookie = UserSession.createSecurityCookie(sessID, 
    189                                                       sessMgrURI, 
    190                                                       expiryStr=expiry) 
    191      
     204                                                sessMgrURI, 
     205                                                dtExpiry=self.dtCookieExpiry) 
     206 
    192207        print """Content-type: text/html" 
    193208%s 
     
    278293<head> 
    279294<title>%s</title> 
    280 <meta http-equiv="REFRESH"  
    281 content="%d; url=%s?NDG-ID1=%s&NDG-ID2=%s&expires=%s"> 
     295<meta http-equiv="REFRESH" 
     296content="%d; url=%s?NDG-ID1=%s&NDG-ID2=%s"> 
    282297%s 
    283298</head> 
     
    286301</body> 
    287302</html>""" % ( cookieTxt, 
    288                pageTitle,  
    289                delayTime,  
    290                returnURI,  
     303               pageTitle, 
     304               delayTime, 
     305               returnURI, 
    291306               sessCookie['NDG-ID1'].value, 
    292307               sessCookie['NDG-ID2'].value, 
    293                base64.b64encode(sessCookie['NDG-ID1']['expires']), 
    294                redirectMsg)     
    295      
     308               hdrTxt, 
     309               redirectMsg) 
     310 
    296311     
    297312    #_________________________________________________________________________ 
  • TI12-security/trunk/python/NDG/Session.py

    r1005 r1022  
    280280         
    281281        # Call class method  
    282         self.__class__.createSecurityCookie(sessID,  
     282        return self.__class__.createSecurityCookie(sessID,  
    283283                                            encrSessMgrWSDLuri, 
    284284                                            dtExpiry=dtExpiry, 
    285                                             cookieDomain=self.__cookieDomain) 
     285                                            cookieDomain=self.__cookieDomain, 
     286                                            asString=asString) 
    286287         
    287288     
  • TI12-security/trunk/python/Tests/SecurityClientTest.py

    r1021 r1022  
    8383         
    8484 
    85     def cookieConnectTest(self): 
    86          
    87         userName = 'lawrence' 
     85    def testCookieConnect(self): 
     86         
     87        import pdb 
     88        pdb.set_trace() 
     89        userName = 'gabriel' 
    8890        try: 
    8991            # Connect as if acting as a browser client - a cookie is returned 
     
    99101             
    100102 
    101     def proxyCertConnectTest(self): 
     103    def testProxyCertConnect(self): 
    102104         
    103105        userName = 'gabriel' 
     
    117119 
    118120 
    119     def cookieReqAuthorisationTest(self): 
     121    def testCookieReqAuthorisation(self): 
    120122        try: 
    121123            # Request an attribute certificate from an Attribute Authority  
     
    141143 
    142144 
    143     def proxyCertReqAuthorisationTest(self): 
     145    def testProxyCertReqAuthorisation(self): 
    144146        try: 
    145147            # Request an attribute certificate from an Attribute Authority  
  • TI12-security/trunk/python/Tests/security.py

    r1018 r1022  
    1 #!/usr/bin/env python 
     1#!/usr/local/NDG/ActivePython-2.4/bin/python 
    22 
    33"""Example NDG Security CGI service based on SecurityCGI base class 
     
    1212version 1.0 or later. 
    1313""" 
     14import os 
    1415from NDG.SecurityCGI import * 
    1516 
     
    1718class TestSecurityCGI(SecurityCGI): 
    1819    """CGI interface test class for NDG Security""" 
    19      
     20 
     21 
    2022    #_________________________________________________________________________ 
    2123    def showLogin(self, returnURI=None, **kwargs): 
    2224        """Display initial NDG login form""" 
    23      
     25 
    2426        if returnURI: 
    2527            returnURIfield = \ 
     
    2729        else: 
    2830            returnURIfield = '' 
    29              
    30              
     31 
     32 
    3133        if bAuthorise: 
    3234            authoriseArg = "<input type=hidden name=authorise value=\"1\">" 
    3335        else: 
    3436            authoriseArg = "" 
    35      
    36      
     37 
     38 
    3739        # Set authorisation method default 
    3840        authorisationMethodChk = {  "allowMapping":              '', 
     
    154156              authorisationMethodChk['allowMappingWithPrompt'], \ 
    155157              authorisationMethodChk['noMapping']) 
    156      
     158 
    157159        # end of showLogin() 
    158      
    159      
     160 
     161 
    160162    def showHomeSiteSelect(self, **kwargs): 
    161163 
    162164        if not self.trustedHostInfo: 
    163             self.getTrustedHostInfo()    
    164                  
     165            self.getTrustedHostInfo() 
     166 
    165167        print """Content-type: text/html 
    166                  
     168 
    167169<html> 
    168170<head> 
     
    190192    <tr> 
    191193      <td> 
    192         <select name="requestURI">         
     194        <select name="requestURI"> 
    193195          <option value="">Select your home site...""" % self.scriptName 
    194            
    195         for hostname, uri in self.trustedHostInfo.items(): 
    196             print "<option value=\"%s\">%s" % (uri, hostname) 
    197                  
     196 
     197        for hostname, info in self.trustedHostInfo.items(): 
     198            print "<option value=\"%s\">%s" % (info['loginURI'], hostname) 
     199 
    198200        print \ 
    199201"""     </select> 
     
    206208    </table> 
    207209    </form> 
    208 </body></html>""" 
    209      
     210</body> 
     211</html>""" 
     212 
    210213        # end of showHomeSiteSelect() 
    211214 
    212          
     215 
    213216         
    214217if __name__ == "__main__": 
     
    216219    smWSDL = "http://gabriel.bnsc.rl.ac.uk/sessionMgr.wsdl" 
    217220    aaWSDL = 'http://gabriel.bnsc.rl.ac.uk/attAuthority.wsdl' 
    218      
     221 
    219222    smPubKeyFilePath = "/usr/local/NDG/conf/certs/gabriel-sm-cert.pem" 
    220223    aaPubKeyFilePath = "/usr/local/NDG/conf/certs/gabriel-aa-cert.pem" 
     
    222225    clntPubKeyFilePath = "../certs/GabrielCGI-cert.pem" 
    223226    clntPriKeyFilePath = "../certs/GabrielCGI-key.pem" 
    224      
     227 
    225228    returnURI = "https://gabriel.bnsc.rl.ac.uk/cgi-bin/security.py" 
    226      
    227     securityCGI = SecurityCGI(smWSDL, 
    228                               aaWSDL, 
    229                               smPubKeyFilePath=smPubKeyFilePath, 
    230                               aaPubKeyFilePath=aaPubKeyFilePath, 
    231                               clntPubKeyFilePath=clntPubKeyFilePath, 
    232                               clntPriKeyFilePath=clntPriKeyFilePath, 
    233                               returnURI=returnURI) 
     229 
     230    securityCGI = TestSecurityCGI(smWSDL, 
     231                                  aaWSDL, 
     232                                                                  scriptName=os.path.basename(__file__), 
     233                                  smPubKeyFilePath=smPubKeyFilePath, 
     234                                  aaPubKeyFilePath=aaPubKeyFilePath, 
     235                                  clntPubKeyFilePath=clntPubKeyFilePath, 
     236                                  clntPriKeyFilePath=clntPriKeyFilePath, 
     237                                  returnURI=returnURI) 
    234238    securityCGI() 
Note: See TracChangeset for help on using the changeset viewer.