Changeset 89


Ignore:
Timestamp:
01/12/04 16:18:58 (16 years ago)
Author:
nbennett
Message:

* empty log message *

Location:
dataportal/trunk/acmnerc/src/uk/ac/cclrc/authorisation
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • dataportal/trunk/acmnerc/src/uk/ac/cclrc/authorisation/server/ACServer.java

    r88 r89  
    6262    private String dbDNstartValue, dbDNequalityString, dbDNdelimString; 
    6363    private String extdbDNstartValue, extdbDNequalityString, extdbDNdelimString; 
    64     private String affilOrgsQuery, affilOrgsQuery2, mapFilePath, mappingPreference; 
     64    private String affilOrgsQuery, affilOrgsQuery2, mapFilePath, mappingPreference, pubKeyQuery; 
    6565     
    6666    static Logger log = Logger.getLogger(ACServer.class); 
     
    129129            sf.setNewString( quotedMappedRolesQuery2 ); 
    130130            mappedRolesQuery2 = sf.removeQuotes();             
     131 
     132            String quotedPubKeyQuery = prop.getProperty("pub_key_query"); 
     133            sf.setNewString( quotedPubKeyQuery ); 
     134            pubKeyQuery = sf.removeQuotes();                         
    131135             
    132136        } 
     
    220224        } 
    221225    } 
    222      
    223    
     226 
     227    private PublicKey getPublicKey( String extOrg ) throws Exception 
     228    { 
     229        RSAPublicKey pubKey = null; 
     230         
     231        if( mappingPreference.equals( "file" ) ) 
     232        { 
     233            SAXBuilder saxb = new SAXBuilder(); 
     234            org.jdom.Document mapFileDoc = saxb.build( mapFilePath ); 
     235            Element root = mapFileDoc.getRootElement(); 
     236            List trustedElements = root.getChildren("trusted"); 
     237            Element trustedElement = null; 
     238            String extPKPath = null; 
     239            for( int i = 0; i < trustedElements.size(); i++ ) 
     240            { 
     241                trustedElement = (Element)trustedElements.get( i ); 
     242                String trustedAttValue = trustedElement.getAttributeValue("name"); 
     243                if( trustedAttValue.equals( extOrg ) ) 
     244                { 
     245                    extPKPath = trustedElement.getChildText( "ServerCertFile" ); 
     246                    break; 
     247                } 
     248            } 
     249             
     250            File keyFile = new File( extPKPath ); 
     251            if( !keyFile.exists() ) 
     252            { 
     253                throw new FileNotFoundException( keyFile.getAbsolutePath()+" not found on the system" );             
     254            } 
     255            InputStream inStream = new FileInputStream( keyFile ); 
     256            CertificateFactory cf = CertificateFactory.getInstance("X.509"); 
     257            X509Certificate cert1 = (X509Certificate)cf.generateCertificate(inStream); 
     258            inStream.close(); 
     259            pubKey = (RSAPublicKey)cert1.getPublicKey(); 
     260             
     261            // NDB - demo-code 
     262            System.out.println("**********************************************"); 
     263            System.out.println("Extracted path of " + extOrg + "_public key from mapping file: " + keyFile.getAbsolutePath()); 
     264            System.out.println("//////////////////////////////////////////////"); 
     265            System.out.println( pubKey ); 
     266            System.out.println(""); 
     267            System.out.println(""); 
     268             
     269        } 
     270        else if( mappingPreference.equals( "database" ) ) 
     271        { 
     272            ResultSet rs = query( pubKeyQuery + extOrg + "';" ); 
     273            rs.next(); 
     274            String keyString = rs.getString( 1 ); 
     275            byte[] byteArray = keyString.getBytes(); 
     276            ByteArrayInputStream bais = new ByteArrayInputStream( byteArray ); 
     277            for( int i = 0; i < byteArray.length; i++ ) 
     278            { 
     279                bais.read(); 
     280            } 
     281            CertificateFactory cf = CertificateFactory.getInstance("X.509"); 
     282            X509Certificate cert1 = (X509Certificate)cf.generateCertificate( bais ); 
     283            bais.close(); 
     284            pubKey = (RSAPublicKey)cert1.getPublicKey(); 
     285             
     286            // NDB - demo-code 
     287            System.out.println("**********************************************"); 
     288            System.out.println("Extracted " + extOrg + "_public key from appropriate database table"); 
     289            System.out.println("//////////////////////////////////////////////"); 
     290            System.out.println( pubKey ); 
     291            System.out.println(""); 
     292            System.out.println(""); 
     293             
     294        } 
     295        else 
     296        { 
     297            throw new Exception( "Invalid mapping preference in configuration file" ); 
     298        } 
     299        return pubKey; 
     300    } 
     301     
    224302    private Document createMappedAuthorisationToken( String proxyCertString, org.w3c.dom.Element extToken ) throws Exception 
    225303    { 
     
    231309            TokenReader reader = new TokenReader(); 
    232310            uk.ac.cclrc.authorisation.AttributeList list =  reader.getAttributes( extToken ); 
     311            //String acInfoString = list.getAcInfoAsXMLString(); 
     312            org.w3c.dom.Element acInfoElement = list.getAcInfoAsW3CElement(); 
     313             
     314            org.w3c.dom.Node sigNode = extToken.getLastChild(); 
     315            String sigString = ((org.w3c.dom.Element)sigNode).getFirstChild().getNodeValue(); 
     316             
     317            String extOrg = this.getOrgFromExtToken( extToken ); 
     318             
     319            PublicKey extPK = getPublicKey( extOrg ); 
     320            byte[] decodedSigString = org.globus.util.Base64.decode(sigString.getBytes()); 
     321            Signature sigVerifier = Signature.getInstance( signatureAlgorithm ); 
     322            sigVerifier.initVerify( extPK ); 
     323            sigVerifier.update(acInfoElement.toString().getBytes()); 
     324             
     325            boolean trueSignature = sigVerifier.verify(decodedSigString); 
     326 
     327            if( !trueSignature ) 
     328            { 
     329                throw new Exception( "Signature on authorisation token is not valid." + 
     330                "  It has not been produced from the private key of the trusted host." ); 
     331            } 
     332            
    233333            String extFacility = list.getIssuerName(); 
    234334 
    235              
    236335            String extdbDNstartValue = prop.getProperty(extFacility+"_db_DN_start_value"); 
    237336             
     
    350449            sf.setNewString( unquotedRoles ); 
    351450            String roles = sf.addQuotesToList(); 
    352             String extOrg = this.getOrgFromExtToken( extToken ); 
    353451             
    354452            ResultSet rs = null; 
     
    452550            return ACDocument; 
    453551        } catch (Exception e) { 
    454             log.error("Unable to create authorisation token",e); 
     552            log.error("Unable to create mapped authorisation token",e); 
    455553            throw e; 
    456554        } 
     
    524622    { 
    525623        try { 
    526             Class.forName(dbDriverClass); // Nov 04 
    527             conn = DriverManager.getConnection(dbDriverString+"//"+server+":"+ port+"/"+dbName); // Nov 04 
    528             stat = conn.createStatement(); 
    529              
    530             ResultSet rs = stat.executeQuery(mappedRolesQuery1 + extOrg + mappedRolesQuery2 + roles + ");" ); // Nov 04 
     624            ResultSet rs = query(mappedRolesQuery1 + extOrg + mappedRolesQuery2 + roles + ");" ); // Nov 04 
    531625            rs.next(); 
    532626            return rs;         
    533         } 
    534         catch (ClassNotFoundException e) { 
    535             log.error(e); 
    536             throw e; // need to modify it 
    537         }catch (SQLException e) { 
    538             log.error(e); 
    539             throw e; // need to modify it 
    540627        } 
    541628        catch (Exception e) { 
     
    784871        try 
    785872        { 
     873            ResultSet rs = query(userQuery + dn + "'"); // Nov 04 
     874            userPresent = rs.next(); 
     875        } 
     876        catch (Exception e) 
     877        { 
     878            log.error(e); 
     879            throw e; // need to modify it 
     880        } 
     881        return userPresent; 
     882    } 
     883     
     884    private ResultSet getUserPrivilegesFromDB(String userDn) throws ClassNotFoundException,SQLException ,Exception{ 
     885        try { 
     886            ResultSet rs = query(stdRolesQuery + userDn + "'"); // Nov 04 
     887             
     888            if(rs.next()){ 
     889                 
     890                return rs; 
     891            } 
     892            else 
     893            { 
     894                log.warn("DN "+userDn +" not in database."); 
     895                return rs; 
     896            } 
     897             
     898        } 
     899        catch (Exception e) { 
     900            log.error(e); 
     901            throw e; // need to modify it 
     902        } 
     903    } 
     904    
     905    public synchronized ResultSet query(String expression) throws Exception 
     906    { 
     907        try 
     908        { 
    786909            Class.forName(dbDriverClass); // Nov 04 
    787910            conn = DriverManager.getConnection(dbDriverString+"//"+server+":"+ port+"/"+dbName); // Nov 04 
    788911            stat = conn.createStatement(); 
    789             ResultSet rs = stat.executeQuery(userQuery + dn + "'"); // Nov 04 
    790             userPresent = rs.next(); 
    791         } 
    792         catch (ClassNotFoundException e) 
    793         { 
    794             log.error(e); 
    795             throw e; // need to modify it 
    796         } 
    797         catch (SQLException e) 
    798         { 
    799             log.error(e); 
    800             throw e; // need to modify it 
    801         } 
    802         catch (Exception e) 
    803         { 
    804             log.error(e); 
    805             throw e; // need to modify it 
    806         } 
    807         return userPresent; 
    808     } 
    809      
    810     private ResultSet getUserPrivilegesFromDB(String userDn) throws ClassNotFoundException,SQLException ,Exception{ 
    811         try { 
    812             //Initialize Database 
    813             // Class.forName("org.postgresql.Driver"); NDB 
    814             Class.forName(dbDriverClass); // Nov 04 
    815             // System.out.println("jdbc:postgresql://"+server+":"+ port+"/"+dbName+"  "+userName+ "        "+password); 
    816             // conn = DriverManager.getConnection("jdbc:postgresql://"+server+":"+ port+"/"+dbName,userName,password); NDB 
    817             // conn = DriverManager.getConnection("jdbc:mysql://"+server+":"+ port+"/"+dbName + "?user=" + userName + "&password=" + password); use this once username and password are set 
    818             conn = DriverManager.getConnection(dbDriverString+"//"+server+":"+ port+"/"+dbName); // Nov 04 
    819              
    820             stat = conn.createStatement(); 
    821             ResultSet rs = stat.executeQuery(stdRolesQuery + userDn + "'"); // Nov 04 
    822              
    823             if(rs.next()){ 
    824                  
    825                 return rs; 
    826             } 
    827             else 
    828             { 
    829                 log.warn("DN "+userDn +" not in database."); 
    830                 return rs; 
    831             } 
    832              
    833         }catch (ClassNotFoundException e) { 
     912            ResultSet rs = stat.executeQuery(expression);       // run the query 
     913            return rs; 
     914        } 
     915        catch (ClassNotFoundException e) { 
    834916            log.error(e); 
    835917            throw e; // need to modify it 
     
    842924            throw e; // need to modify it 
    843925        } 
    844     } 
    845     
    846     public synchronized ResultSet query(String expression) throws SQLException { 
    847         Statement st = null; 
    848         ResultSet rs = null; 
    849         Connection conn = null; 
    850         st = conn.createStatement(); 
    851         rs = st.executeQuery(expression);       // run the query 
    852         return rs; 
    853926    } 
    854927    public void saveToDb(){ 
     
    9271000    } 
    9281001     
    929     public Vector getTrustedHostsFromDB() throws Exception 
     1002    public HashSet getTrustedHostsFromDB() throws Exception 
    9301003    { 
    9311004        try { 
    932             Class.forName(dbDriverClass); // Nov 04 
    933             conn = DriverManager.getConnection(dbDriverString+"//"+server+":"+ port+"/"+dbName); // Nov 04 
    934             stat = conn.createStatement(); 
    935              
    936             ResultSet rs = stat.executeQuery( affilOrgsQuery ); // Nov 04 
    937             Vector affilOrgs = new Vector(); 
     1005            ResultSet rs = query( affilOrgsQuery ); // Nov 04 
     1006            HashSet affilOrgs = new HashSet(); 
    9381007            while( rs.next() ) 
    9391008            { 
    9401009                String nextOrg = rs.getString( 1 ); 
    941                 affilOrgs.addElement( nextOrg ); 
     1010                affilOrgs.add( nextOrg ); 
    9421011            } 
    9431012             
     
    9511020            return affilOrgs;         
    9521021        } 
    953         catch (ClassNotFoundException e) { 
    954             log.error(e); 
    955             throw e; // need to modify it 
    956         }catch (SQLException e) { 
    957             log.error(e); 
    958             throw e; // need to modify it 
    959         } 
    9601022        catch (Exception e) { 
    9611023            log.error(e); 
     
    9651027    } 
    9661028 
    967     public Vector getTrustedHostsFromMapFile( String roles ) throws Exception 
     1029    public HashSet getTrustedHostsFromMapFile( String roles ) throws Exception 
    9681030    { 
    9691031        String[] roleArray = roles.split( ","); 
    970         Vector trustedHosts = new Vector(); 
     1032        HashSet trustedHosts = new HashSet(); 
    9711033         
    9721034        SAXBuilder saxb = new SAXBuilder(); 
     
    9891051                    if( roleArray[ k ].equals( roleAttValue ) ) 
    9901052                    { 
    991                         trustedHosts.addElement( trustedAttValue ); 
     1053                        trustedHosts.add( trustedAttValue ); 
    9921054                        break; 
    9931055                    } 
     
    10091071    } 
    10101072 
    1011     public Vector getTrustedHostsFromMapFile() throws Exception 
    1012     { 
    1013         Vector trustedHosts = new Vector(); 
     1073    public HashSet getTrustedHostsFromMapFile() throws Exception 
     1074    { 
     1075        HashSet trustedHosts = new HashSet(); 
    10141076         
    10151077        SAXBuilder saxb = new SAXBuilder(); 
     
    10231085            trustedElement = (Element)trustedElements.get( i ); 
    10241086            String trustedAttValue = trustedElement.getAttributeValue("name"); 
    1025             trustedHosts.addElement( trustedAttValue ); 
     1087            trustedHosts.add( trustedAttValue ); 
    10261088        } 
    10271089         
     
    10371099     
    10381100     
    1039     public Vector getTrustedHostsFromDB( String roles ) throws Exception 
     1101    public HashSet getTrustedHostsFromDB( String roles ) throws Exception 
    10401102    { 
    10411103        try { 
    1042             Class.forName(dbDriverClass); // Nov 04 
    1043             conn = DriverManager.getConnection(dbDriverString+"//"+server+":"+ port+"/"+dbName); // Nov 04 
    1044             stat = conn.createStatement(); 
    1045              
    1046             ResultSet rs = stat.executeQuery( affilOrgsQuery2 + roles + ");" ); // Nov 04 
    1047             Vector affilOrgs = new Vector(); 
     1104            ResultSet rs = query( affilOrgsQuery2 + roles + ");" ); // Nov 04 
     1105            HashSet affilOrgs = new HashSet(); 
    10481106            while( rs.next() ) 
    10491107            { 
    10501108                String nextOrg = rs.getString( 1 ); 
    1051                 affilOrgs.addElement( nextOrg ); 
     1109                affilOrgs.add( nextOrg ); 
    10521110            } 
    10531111             
     
    10611119             
    10621120            return affilOrgs;         
    1063         } 
    1064         catch (ClassNotFoundException e) { 
    1065             log.error(e); 
    1066             throw e; // need to modify it 
    1067         }catch (SQLException e) { 
    1068             log.error(e); 
    1069             throw e; // need to modify it 
    10701121        } 
    10711122        catch (Exception e) { 
  • dataportal/trunk/acmnerc/src/uk/ac/cclrc/authorisation/unittest/TestACServer_1.java

    r88 r89  
    3636            ACServer acs= new ACServer(); 
    3737             
    38             Vector trustedHosts = acs.getTrustedHostsFromDB(); 
    39              
    40             for( int i = 0; i < trustedHosts.size(); i++ ) 
     38            HashSet trustedHosts = acs.getTrustedHostsFromDB(); 
     39            Iterator it = trustedHosts.iterator(); 
     40            while( it.hasNext() ) 
    4141            { 
    42                 System.out.println( (String)trustedHosts.elementAt( i ) ); 
     42                System.out.println( (String)it.next() ); 
    4343            } 
    4444 
    4545            trustedHosts = acs.getTrustedHostsFromMapFile(); 
    46              
    47             for( int i = 0; i < trustedHosts.size(); i++ ) 
     46            it = trustedHosts.iterator(); 
     47            while( it.hasNext() ) 
    4848            { 
    49                 System.out.println( (String)trustedHosts.elementAt( i ) ); 
     49                System.out.println( (String)it.next() ); 
    5050            } 
    5151             
     
    8484            System.out.println(""); 
    8585             
    86             // Load external authorisation token - UNCOMMENT ON FRIDAY 
    87          
     86        
    8887            SAXBuilder saxb = new SAXBuilder(); 
    89             org.jdom.Document authTokenDoc = saxb.build("file:///C:/badcAuthToken.cred"); 
     88            org.jdom.Document authTokenDoc = saxb.build("file:///C:/bodcAuthToken.cred"); 
    9089            org.w3c.dom.Document domDoc = Converter.JDOMtoDOM( authTokenDoc ); 
    9190            org.w3c.dom.Element foreignToken = domDoc.getDocumentElement(); 
Note: See TracChangeset for help on using the changeset viewer.