Changeset 6937 for TI12-security/trunk


Ignore:
Timestamp:
04/06/10 16:40:43 (9 years ago)
Author:
pjkersha
Message:

Incomplete - task 5: MyProxy? Logon HTTPS Interface

Location:
TI12-security/trunk/MyProxyLogonWebService
Files:
2 added
3 edited
1 moved

Legend:

Unmodified
Added
Removed
  • TI12-security/trunk/MyProxyLogonWebService/myproxy/server/test/myproxy-ws-logon.sh

    r6936 r6937  
    9595#wget $uri --http-user=$username --http-password=$password --post-file=$certreqfilepath --ca-directory=$cadir -O $outfilepath -t 1 --auth-no-challenge 
    9696#response=$(curl $uri -u $username:$password -d "$(cat $certreqfilepath)" --capath $cadir -w " %{http_code}" -s -S) 
    97 response=$(curl $uri -u $username:$password -F "certificate_request=@${certreqfilepath};type=text/plain" --capath $cadir -w " %{http_code}" -s -S) 
     97#response=$(curl $uri -u $username:$password -F "certificate_request=@${certreqfilepath};get_trustroots=1" --capath $cadir -w " %{http_code}" -s -S) 
     98response=$(curl $uri -u $username:$password --data-urlencode "certificate_request=$(cat $certreqfilepath)" --capath $cadir -w " %{http_code}" -s -S) 
    9899responsemsg=$(echo "$response"|sed '$s/ *\([^ ]* *\)$//') 
    99100responsecode=$(echo $response|awk '{print $NF}') 
  • TI12-security/trunk/MyProxyLogonWebService/myproxy/server/test/myproxywsgi.ini

    r6897 r6937  
    2424myproxy.rePathMatchList = /logon 
    2525#myproxy.client.hostname = localhost 
    26 myproxy.client.hostname = myproxy.ceda.ac.uk 
     26myproxy.client.hostname = gabriel.badc.rl.ac.uk 
    2727myproxy.client.caCertDir = /etc/grid-security/certificates 
  • TI12-security/trunk/MyProxyLogonWebService/myproxy/server/wsgi/middleware.py

    r6897 r6937  
    1717from cStringIO import StringIO 
    1818 
     19from webob import Request 
    1920from OpenSSL import crypto 
     21 
    2022from myproxy.client import MyProxyClient, MyProxyClientError 
    2123from myproxy.server.wsgi.httpbasicauth import HttpBasicAuthResponseException 
     
    4547                              'MyProxyClientMiddleware.logon') 
    4648     
    47     WSGI_INPUT_ENV_KEYNAME = 'wsgi.input' 
     49    CERTIFICATE_REQUST_POST_PARAM_KEYNAME = 'certificate_request' 
     50    GET_TRUSTROOTS_PARAM_KEYNAME = 'get_trustroots' 
     51    GET_TRUSTROOTS_TRUE_STR = '1' 
    4852     
    4953    # Option prefixes 
     
    193197                          requestMethod) 
    194198                raise HttpBasicAuthResponseException(response,  
    195                                                      httplib.METHOD_NOT_ALLOWED)  
    196              
    197             wsgiInput = environ[MyProxyClientMiddleware.WSGI_INPUT_ENV_KEYNAME] 
    198                  
    199             contentLength = int(environ.get('CONTENT_LENGTH', -1)) 
    200             if contentLength == -1: 
    201                 raise MyProxyClientMiddlewareError('No "CONTENT_LENGTH" ' 
    202                                                    'setting found in ' 
    203                                                    'environ') 
    204                  
    205             pemCertReq = wsgiInput.read(contentLength) 
    206              
    207             # Restore WSGI file object with duck typing(!) 
    208             wsgiInput = StringIO() 
    209             wsgiInput.write(pemCertReq) 
    210             wsgiInput.seek(0) 
     199                                                     httplib.METHOD_NOT_ALLOWED) 
     200             
     201            request = Request(environ) 
     202            certReqKey = self.__class__.CERTIFICATE_REQUST_POST_PARAM_KEYNAME 
     203            pemCertReq = request.POST.get(certReqKey) 
     204            if pemCertReq is None: 
     205                response = "No %r form variable set" % certReqKey 
     206                log.error(response) 
     207                raise HttpBasicAuthResponseException(response,  
     208                                                     httplib.BAD_REQUEST) 
     209            log.debug("cert req = %r", pemCertReq) 
     210            getTrustRootsKey = self.__class__.GET_TRUSTROOTS_PARAM_KEYNAME 
     211            getTrustRoots = (request.postvars.get(getTrustRootsKey) ==  
     212                             self.__class__.GET_TRUSTROOTS_TRUE_STR) 
    211213             
    212214            # Expecting PEM encoded request 
     
    224226            asn1CertReq = crypto.dump_certificate_request(crypto.FILETYPE_ASN1,  
    225227                                                          certReq) 
    226   
     228             
    227229            try: 
     230                if getTrustRoots: 
     231                    trustRootsDict = self.myProxyClient.getTrustRoots() 
     232                     
     233                    trustRoots = '\n'.join([ 
     234                        "FILEDATA_%s=%s" % (fileName, fileContents)  
     235                        for fileName, fileContents in trustRootsDict.items() 
     236                    ]) 
     237                else: 
     238                    trustRoots = '' 
     239                 
    228240                credentials = self.myProxyClient.logon(username,  
    229241                                                       password, 
     
    231243                status = self.getStatusMessage(httplib.OK) 
    232244                response = '\n'.join(credentials) 
     245                response += '\n'+trustRoots 
    233246                 
    234247                start_response(status, 
Note: See TracChangeset for help on using the changeset viewer.