Changeset 6893


Ignore:
Timestamp:
26/05/10 16:38:39 (9 years ago)
Author:
pjkersha
Message:

Progress testing with new myproxy-ws-logon.sh web service client shell script and test app running in paster over SSL.

Location:
TI12-security/trunk/MyProxyServerUtils/myproxy
Files:
3 added
1 deleted
9 edited

Legend:

Unmodified
Added
Removed
  • TI12-security/trunk/MyProxyServerUtils/myproxy/__init__.py

    r6888 r6893  
    1515__contact__ = "Philip.Kershaw@stfc.ac.uk" 
    1616__revision__ = '$Id$' 
    17  
    1817__import__('pkg_resources').declare_namespace(__name__) 
  • TI12-security/trunk/MyProxyServerUtils/myproxy/server/__init__.py

    r6881 r6893  
     1"""MyProxy Server Utilities server package 
     2""" 
     3__author__ = "P J Kershaw" 
     4__date__ = "21/05/10" 
     5__copyright__ = "(C) 2010 Science and Technology Facilities Council" 
     6__license__ = """BSD - See LICENSE file in top-level directory""" 
     7__contact__ = "Philip.Kershaw@stfc.ac.uk" 
     8__revision__ = '$Id$' 
  • TI12-security/trunk/MyProxyServerUtils/myproxy/server/test/__init__.py

    r6892 r6893  
    2020     
    2121    def __init__(self, app=None, cfgFilePath=None, port=7443, host='0.0.0.0', 
    22                  ssl_context=None): 
     22                 ssl_context=None, withLoggingConfig=True): 
    2323        """Load an application configuration from cfgFilePath ini file and  
    2424        instantiate Paste server object 
     
    2727         
    2828        if cfgFilePath: 
    29             fileConfig(cfgFilePath) 
     29            if withLoggingConfig: 
     30                fileConfig(cfgFilePath) 
    3031            app = loadapp('config:%s' % cfgFilePath) 
    3132             
  • TI12-security/trunk/MyProxyServerUtils/myproxy/server/test/myproxy-ws-logon.sh

    r6892 r6893  
    1010# 
    1111# $Id$ 
    12 cmdline_opt=`getopt -o hU:l:o: --long help,uri,username,out -n "$0" -- "$@"` 
     12cmdline_opt=`getopt -o hU:l:So: --long help,uri:,username:,stdin_pass,out:: -n "$0" -- "$@"` 
    1313 
    1414usage="Usage: myproxy-logon [-U MyProxy Web Service URI][-l username] ...\n 
     
    1818       -U | --uri                        MyProxy web service URI\n 
    1919       -l | --username        <username> Username for the delegated proxy\n 
     20       -S | --stdin_pass                 pass password from stdin rather prompt from tty\n 
    2021       -o | --out             <path>     Location of delegated proxy\n 
    2122                                         (use '-' for stdout)\n 
     
    3435        -U|--uri) uri=$2 ; shift 2 ;; 
    3536        -l|--username) username=$2 ; shift 2 ;; 
     37        -S|--stdin_pass) stdin_pass=True ; shift 1 ;; 
    3638        -o|--out) outfilepath=$2 ; shift 2 ;; 
    3739        --) shift ; break ;; 
     
    5254 
    5355# Read password 
    54 stty -echo 
    55 read -p "Enter MyProxy pass phrase: " password; echo 
    56 stty echo 
     56if [ $stdin_pass ]; then 
     57    read password; 
     58else 
     59    stty -echo 
     60    read -p "Enter MyProxy pass phrase: " password; echo 
     61    stty echo 
     62fi 
    5763 
    5864# Set-up trust root 
     
    8288 
    8389# Post request to MyProxy web service passing username/password for HTTP Basic 
    84 # auth based authentication 
    85 wget $uri --http-user=$username --http-password=$password --post-file=./user.csr --ca-directory=$cadir -O $outfilepath 
    86 if [ $? ne 0 ]; then 
     90# auth based authentication.   
     91# Nb.  
     92# 1) -t 1 to ensure only one attempt is made 
     93# 2) --auth-no-challenge force sending of username/password to allow for servers that may not issue an authentication challenge 
     94wget $uri --http-user=$username --http-password=$password --post-file=$certreqfilepath --ca-directory=$cadir -O $outfilepath -t 1 --auth-no-challenge 
     95if [ "$?" != "0" ]; then 
     96    cat $outfilepath 
    8797    exit 1 
    8898fi 
  • TI12-security/trunk/MyProxyServerUtils/myproxy/server/test/myproxywsgi.ini

    r6888 r6893  
    2222myproxy.logonFuncEnvKeyName = MYPROXY_LOGON_FUNC 
    2323myproxy.rePathMatchList = /logon 
    24 myproxy.client.hostname = localhost 
     24#myproxy.client.hostname = localhost 
     25myproxy.client.hostname = myproxy.ceda.ac.uk 
    2526myproxy.client.caCertDir = /etc/grid-security/certificates 
  • TI12-security/trunk/MyProxyServerUtils/myproxy/server/test/test_myproxywsgi.cfg

    r6888 r6893  
    1515username: pjk 
    1616password = mypassword 
     17uri = https://localhost:10443/logon 
  • TI12-security/trunk/MyProxyServerUtils/myproxy/server/test/test_myproxywsgi_with_paster.py

    r6892 r6893  
    1111from os import path, waitpid 
    1212from getpass import getpass 
     13from cStringIO import StringIO 
    1314from ConfigParser import SafeConfigParser, NoOptionError 
    1415import subprocess 
     
    2627    """Test MyProxy Logon App WSGI in Paster web application server container 
    2728    """ 
     29    THIS_DIR = path.dirname(__file__) 
    2830    INI_FILENAME = 'myproxywsgi.ini' 
    29     THIS_DIR = path.dirname(__file__) 
     31    INI_FILEPATH = path.join(THIS_DIR, INI_FILENAME)   
    3032    CONFIG_FILENAME = 'test_myproxywsgi.cfg' 
    3133    CONFIG_FILEPATH = path.join(THIS_DIR, CONFIG_FILENAME)   
     
    3436 
    3537    SERVICE_PORTNUM = 10443 
    36     SCRIPT_CMD = 'myproxy-logon.sh' 
    37     WGET_USER_OPTNAME = '--http-user' 
    38     WGET_PASSWD_OPTNAME = '--http-password' 
    39     WGET_OUTPUT_OPTNAME = '--output-document' 
    40     WGET_STDOUT = '-' 
     38    SCRIPT_CMD = 'myproxy-ws-logon.sh' 
     39    SCRIPT_URI_OPTNAME = '--uri' 
     40    SCRIPT_USER_OPTNAME = '--username' 
     41    SCRIPT_PASSWD_OPTNAME = '--stdin_pass' 
     42    SCRIPT_OUTPUT_OPTNAME = '--out' 
     43    SCRIPT_STDIN_PASS = '--stdin_pass' 
    4144     
    4245    def __init__(self, *arg, **kw): 
     
    4548        self.disableServiceStartup = False 
    4649         
    47         self.cfg = SafeConfigParser({'here': MyProxyLogonAppTestCase.THIS_DIR}) 
     50        self.cfg = SafeConfigParser({'here': self.__class__.THIS_DIR}) 
    4851        self.cfg.optionxform = str 
    49         self.cfg.read(MyProxyLogonAppWithPasterTestCase.CONFIG_FILEPATH) 
     52        self.cfg.read(self.__class__.CONFIG_FILEPATH) 
     53         
     54        # Start the MyProxy web service 
     55        self.addService(cfgFilePath=self.__class__.INI_FILEPATH,  
     56                        port=self.__class__.SERVICE_PORTNUM, 
     57                        withSSL=True, 
     58                        withLoggingConfig=False) 
    5059     
    5160    def test01Script(self): 
    52         # Test wget/openssl script access 
     61        # Test wget/openssl based client script access 
    5362        username = self.cfg.get('test01Logon', 'username') 
    5463        try:  
     
    5766            password = getpass('test01Logon password: ') 
    5867 
    59         cmd = "%s %s %s=%s %s=%s %s=%s" % ( 
    60             self.__class__.SCRIPT_CMD, uri, 
    61             self.__class__.WGET_USER_OPTNAME, username, 
    62             self.__class__.WGET_PASSWD_OPTNAME, password, 
    63             self.__class__.WGET_OUTPUT_OPTNAME, self.__class__.WGET_STDOUT 
     68        uri = self.cfg.get('test01Logon', 'uri') 
     69         
     70        cmd = ( 
     71            self.__class__.SCRIPT_CMD,  
     72            "%s=%s" % (self.__class__.SCRIPT_URI_OPTNAME, uri), 
     73            "%s=%s" % (self.__class__.SCRIPT_USER_OPTNAME, username), 
     74            self.__class__.SCRIPT_STDIN_PASS 
    6475        ) 
    65          
    66         p = subprocess.Popen(cmd, shell=True) 
    67         status = waitpid(p.pid, 0) 
    68         self.failIf(status[-1] != 0, "Expecting 0 exit status for %r" % cmd) 
     76                 
     77        p1 = subprocess.Popen(["echo", password], stdout=subprocess.PIPE) 
     78        p2 = subprocess.Popen(cmd, stdin=p1.stdout, stdout=subprocess.PIPE, 
     79                              stderr=subprocess.PIPE, 
     80                              env={'X509_CERT_DIR':self.__class__.THIS_DIR}) 
     81        stdoutdata, stderrdata = p2.communicate() 
     82#        self.failIf(status[-1] != 0, "Expecting 0 exit status for %r" % cmd) 
     83        print stdoutdata 
    6984  
    7085    def addService(self, *arg, **kw): 
     
    106121                service.terminateThread() 
    107122                 
    108         super(MyProxyLogonAppWithPasterTestCase, self).__del__() 
     123        parentObj = super(MyProxyLogonAppWithPasterTestCase, self) 
     124        if hasattr(parentObj, '__del__'): 
     125            parentObj.__del__() 
    109126         
  • TI12-security/trunk/MyProxyServerUtils/myproxy/server/wsgi/httpbasicauth.py

    r6888 r6893  
    77__license__ = "BSD - see LICENSE file in top-level directory" 
    88__contact__ = "Philip.Kershaw@stfc.ac.uk" 
    9 __revision__ = "$Id: $" 
     9__revision__ = "$Id$" 
    1010import logging 
    1111log = logging.getLogger(__name__) 
  • TI12-security/trunk/MyProxyServerUtils/myproxy/server/wsgi/middleware.py

    r6888 r6893  
    2020from myproxy.client import MyProxyClient, MyProxyClientError 
    2121        
    22          
    23 class MyProxyClientMiddlewareConfigError(Exception): 
     22 
     23class MyProxyClientMiddlewareError(Exception): 
     24    """Runtime error with MyProxyClientMiddleware""" 
     25 
     26        
     27class MyProxyClientMiddlewareConfigError(MyProxyClientMiddlewareError): 
    2428    """Configuration error with MyProxyClientMiddleware""" 
    2529 
     
    185189                wsgiInput = environ[ 
    186190                                MyProxyClientMiddleware.WSGI_INPUT_ENV_KEYNAME] 
    187                 pemCertReq = wsgiInput.read() 
     191                 
     192                contentLength = int(environ.get('CONTENT_LENGTH', -1)) 
     193                if contentLength == -1: 
     194                    raise MyProxyClientMiddlewareError('No "CONTENT_LENGTH" ' 
     195                                                       'setting found in ' 
     196                                                       'environ') 
     197                     
     198                pemCertReq = wsgiInput.read(contentLength) 
    188199                 
    189200                # Restore WSGI file object with duck typing(!) 
     
    206217                            "request " % environ.get('REQUEST_METHOD',  
    207218                                                     '<Not set>')) 
    208                  
     219                log.error(response) 
     220                start_response(status, 
     221                               [('Content-length', str(len(response))), 
     222                                ('Content-type', 'text/plain')]) 
     223                return [response]   
     224                           
    209225            try: 
    210226                credentials = self.myProxyClient.logon(username,  
     
    219235             
    220236            except socket.error, e: 
    221                 raise MyProxyClientMiddlewareConfigError("Socket error " 
     237                raise MyProxyClientMiddlewareError("Socket error " 
    222238                                        "with MyProxy server %r: %s" %  
    223239                                        (self.myProxyClient.hostname, e)) 
Note: See TracChangeset for help on using the changeset viewer.