Author: dimuthul
Date: Sun Mar  2 22:27:47 2008
New Revision: 14424

Log:

Loading the keystore once
Fixing a bug when deleting the Personal Rp.



Modified:
   
trunk/solutions/identity/modules/identity-provider/src/main/java/org/wso2/solutions/identity/admin/KeystoreUtilAdmin.java
   
trunk/solutions/identity/modules/identity-provider/src/main/java/org/wso2/solutions/identity/admin/RelyingPartyAdmin.java
   
trunk/solutions/identity/modules/identity-provider/src/main/java/org/wso2/solutions/identity/persistence/IPPersistenceManager.java
   
trunk/solutions/identity/modules/identity-provider/src/main/java/org/wso2/solutions/identity/persistence/dao/UserPersonalRelyingPartyDAO.java
   
trunk/solutions/identity/modules/user-ui/src/main/java/org/wso2/solutions/identity/user/ui/action/UploadRelyingPartyCertificateAction.java

Modified: 
trunk/solutions/identity/modules/identity-provider/src/main/java/org/wso2/solutions/identity/admin/KeystoreUtilAdmin.java
==============================================================================
--- 
trunk/solutions/identity/modules/identity-provider/src/main/java/org/wso2/solutions/identity/admin/KeystoreUtilAdmin.java
   (original)
+++ 
trunk/solutions/identity/modules/identity-provider/src/main/java/org/wso2/solutions/identity/admin/KeystoreUtilAdmin.java
   Sun Mar  2 22:27:47 2008
@@ -31,6 +31,15 @@
      * Instance of the main keystore of the identity provider
      */
     private static KeyStore identityProviderKeystore = null;
+    
+    /**
+     * The key store that holds certificaates of 
+     * personal Relying Parties of users.
+     * This holds trusted Relying party certificates
+     */
+    private static KeyStore userRPTruststore = null;
+    
+    
 
     /**
      * Provides the instance of the main keystore of the identity provider.
@@ -42,10 +51,25 @@
         if(identityProviderKeystore != null) {
             return identityProviderKeystore;
         }
-
+        
         return loadKeystore();
     }
     
+    /**
+     * Provides the instance of the main keystore of the identity provider.
+     * @return A java.security.Keystore instance
+     * @throws IdentityProviderException
+     */
+    private KeyStore getUserRPTrustStore() throws IdentityProviderException {
+
+        if(userRPTruststore != null) {
+            return userRPTruststore;
+        }
+        
+        return loadUserRPTrustStore();
+    }
+  
+    
     
     /**
      * Load the main keystore of the identity provider usign the configuration
@@ -78,6 +102,39 @@
         
     }
     
+    
+    /**
+     * Load the key store that holds user trusted relying parties.
+     * @return A java.security.Keystore instance
+     * @throws IdentityProviderException
+     */
+    private KeyStore loadUserRPTrustStore() throws IdentityProviderException {
+
+        ServerConfiguration serverConfig = ServerConfiguration.getInstance();
+        String storeFilePath = serverConfig
+                
.getFirstProperty(IdentityProviderConstants.ServerConfig.USER_TRUSTED_RP_STORE_LOCATION);
+        String type = serverConfig
+                
.getFirstProperty(IdentityProviderConstants.ServerConfig.USER_TRUSTED_RP_STORE_TYPE);
+        String passwd = serverConfig
+                
.getFirstProperty(IdentityProviderConstants.ServerConfig.USER_TRUSTED_RP_STORE_PASSWORD);
+
+        try {
+            FileInputStream is = new FileInputStream(storeFilePath);
+
+            userRPTruststore = KeyStore.getInstance(type);
+
+            userRPTruststore.load(is, passwd.toCharArray());
+            is.close();
+            return userRPTruststore;
+        } catch (Exception e) {
+            throw new IdentityProviderException("errorInKeystoreAccess",
+                    new String[] { storeFilePath }, e);
+        }
+        
+    }
+    
+    
+    
     public boolean isCertExists(X509Certificate cert)
             throws IdentityProviderException {
         try {
@@ -130,18 +187,15 @@
      */
     public String importCertToUserTrustStore(X509Certificate cert)
             throws IdentityProviderException {
+        KeyStore store = getUserRPTrustStore();
         ServerConfiguration serverConfig = ServerConfiguration.getInstance();
         String storeFilePath = serverConfig
-                
.getFirstProperty(IdentityProviderConstants.ServerConfig.USER_TRUSTED_RP_STORE_LOCATION);
-        String type = serverConfig
-                
.getFirstProperty(IdentityProviderConstants.ServerConfig.USER_TRUSTED_RP_STORE_TYPE);
+            
.getFirstProperty(IdentityProviderConstants.ServerConfig.USER_TRUSTED_RP_STORE_LOCATION);
         String passwd = serverConfig
-                
.getFirstProperty(IdentityProviderConstants.ServerConfig.USER_TRUSTED_RP_STORE_PASSWORD);
+            
.getFirstProperty(IdentityProviderConstants.ServerConfig.USER_TRUSTED_RP_STORE_PASSWORD);
+
         String alias = null;
         try {
-            FileInputStream is = new FileInputStream(storeFilePath);
-            KeyStore store = KeyStore.getInstance(type);
-            store.load(is, passwd.toCharArray());
             alias = getAlias(cert);
             if (store.getCertificate(alias) == null) {
                 // then import
@@ -155,40 +209,34 @@
             throw new IdentityProviderException("errorInKeystoreAccess",
                     new String[] { storeFilePath }, e);
         }
-
+        
+        //to reflect the changes
+        this.loadUserRPTrustStore();
         return alias;
     }
 
     public X509Certificate getCertificateFromUserTrustedRP(String alias)
             throws IdentityProviderException {
-        ServerConfiguration serverConfig = ServerConfiguration.getInstance();
-        String storeFilePath = serverConfig
-                
.getFirstProperty(IdentityProviderConstants.ServerConfig.USER_TRUSTED_RP_STORE_LOCATION);
-        String type = serverConfig
-                
.getFirstProperty(IdentityProviderConstants.ServerConfig.USER_TRUSTED_RP_STORE_TYPE);
-        String passwd = serverConfig
-                
.getFirstProperty(IdentityProviderConstants.ServerConfig.USER_TRUSTED_RP_STORE_PASSWORD);
+        KeyStore store = this.loadUserRPTrustStore();
         X509Certificate cert = null;
         try {
-            FileInputStream is = new FileInputStream(storeFilePath);
-            KeyStore store = KeyStore.getInstance(type);
-            store.load(is, passwd.toCharArray());
-            cert = (X509Certificate)store.getCertificate(alias);
+            cert = (X509Certificate) store.getCertificate(alias);
         } catch (Exception e) {
             throw new IdentityProviderException("errorInKeystoreAccess",
-                    new String[] { storeFilePath }, e);
+                    new String[]{"User Personal RelyingParty Trust Storee"}, 
e);
         }
-        
+
         return cert;
     }
-    
+
     /**
      * Removes the Certificate from default store
      * 
      * @param alias
      * @throws IdentityProviderException
      */
-    public void deleteRelyingParty(String alias) throws 
IdentityProviderException {
+    public void deleteRelyingParty(String alias)
+            throws IdentityProviderException {
 
         KeyStore store = getKeyStore();
         try {
@@ -208,7 +256,8 @@
      * @param alias
      * @throws IdentityProviderException
      */
-    public void removeCertEntryFromUserTrustedRP(String alias) throws 
IdentityProviderException {
+    public void removeCertEntryFromUserTrustedRP(String alias)
+            throws IdentityProviderException {
         ServerConfiguration serverConfig = ServerConfiguration.getInstance();
         String storeFilePath = serverConfig
                 
.getFirstProperty(IdentityProviderConstants.ServerConfig.USER_TRUSTED_RP_STORE_LOCATION);

Modified: 
trunk/solutions/identity/modules/identity-provider/src/main/java/org/wso2/solutions/identity/admin/RelyingPartyAdmin.java
==============================================================================
--- 
trunk/solutions/identity/modules/identity-provider/src/main/java/org/wso2/solutions/identity/admin/RelyingPartyAdmin.java
   (original)
+++ 
trunk/solutions/identity/modules/identity-provider/src/main/java/org/wso2/solutions/identity/admin/RelyingPartyAdmin.java
   Sun Mar  2 22:27:47 2008
@@ -22,8 +22,10 @@
 import org.wso2.solutions.identity.IdentityProviderException;
 import org.wso2.solutions.identity.i18n.Messages;
 import org.wso2.solutions.identity.persistence.IPPersistenceManager;
+import org.wso2.solutions.identity.persistence.dao.UserPersonalRelyingPartyDAO;
 import org.wso2.solutions.identity.persistence.dataobject.OpenIDUserRPDO;
 import org.wso2.solutions.identity.persistence.dataobject.RelyingPartyDO;
+import 
org.wso2.solutions.identity.persistence.dataobject.UserPersonalRelyingPartyIdentifier;
 import org.wso2.solutions.identity.persistence.dataobject.UserTrustedRPDO;
 
 
@@ -57,6 +59,10 @@
         }
 
     }
+    
+    public UserTrustedRPDO getPersonalRelyingParty(String alias, String user) 
throws AxisFault {
+        return dbMan.getPersonalRelyingParty(user, alias);
+    }
 
     public void create(UserTrustedRPDO rp) throws AxisFault {
         try {
@@ -116,8 +122,10 @@
         UserTrustedRPDO rpDO = dbMan.getPersonalRelyingParty(user, hostName);
         dbMan.delete(rpDO);
         
-        KeystoreUtilAdmin ksAdmin = new KeystoreUtilAdmin();
-        ksAdmin.removeCertEntryFromUserTrustedRP(hostName);
+        if(dbMan.getPersonalRelyingPartyByHostName(hostName).length==0){
+            KeystoreUtilAdmin ksAdmin = new KeystoreUtilAdmin();
+            ksAdmin.removeCertEntryFromUserTrustedRP(hostName);
+        }
         
     }
 

Modified: 
trunk/solutions/identity/modules/identity-provider/src/main/java/org/wso2/solutions/identity/persistence/IPPersistenceManager.java
==============================================================================
--- 
trunk/solutions/identity/modules/identity-provider/src/main/java/org/wso2/solutions/identity/persistence/IPPersistenceManager.java
  (original)
+++ 
trunk/solutions/identity/modules/identity-provider/src/main/java/org/wso2/solutions/identity/persistence/IPPersistenceManager.java
  Sun Mar  2 22:27:47 2008
@@ -15,6 +15,7 @@
  */
 package org.wso2.solutions.identity.persistence;
 
+import org.apache.axis2.AxisFault;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.hibernate.Session;
@@ -49,6 +50,7 @@
 import 
org.wso2.solutions.identity.persistence.dataobject.RegisteredInfoCardInfoDO;
 import org.wso2.solutions.identity.persistence.dataobject.RelyingPartyDO;
 import org.wso2.solutions.identity.persistence.dataobject.RevokedInfoCardDO;
+import 
org.wso2.solutions.identity.persistence.dataobject.UserPersonalRelyingPartyIdentifier;
 import org.wso2.solutions.identity.persistence.dataobject.UserTrustedRPDO;
 
 import java.util.Date;
@@ -460,4 +462,9 @@
         OpenIDUserRPDAO dao = new OpenIDUserRPDAO(hbConfig);
         return dao.getOpenIDDefaultUserProfile(userName,rpUrl);
     } 
+    
+    public UserTrustedRPDO[] getPersonalRelyingPartyByHostName(String 
hostName) {
+        UserPersonalRelyingPartyDAO dao = new 
UserPersonalRelyingPartyDAO(hbConfig);
+        return dao.getPersonalRelyingPartyByHostName(hostName);
+    }
 }
\ No newline at end of file

Modified: 
trunk/solutions/identity/modules/identity-provider/src/main/java/org/wso2/solutions/identity/persistence/dao/UserPersonalRelyingPartyDAO.java
==============================================================================
--- 
trunk/solutions/identity/modules/identity-provider/src/main/java/org/wso2/solutions/identity/persistence/dao/UserPersonalRelyingPartyDAO.java
       (original)
+++ 
trunk/solutions/identity/modules/identity-provider/src/main/java/org/wso2/solutions/identity/persistence/dao/UserPersonalRelyingPartyDAO.java
       Sun Mar  2 22:27:47 2008
@@ -16,6 +16,7 @@
 
 package org.wso2.solutions.identity.persistence.dao;
 
+import java.util.Iterator;
 import java.util.List;
 
 import org.hibernate.Session;
@@ -78,4 +79,26 @@
         return rp;
     }
     
+    
+    public UserTrustedRPDO[] getPersonalRelyingPartyByHostName(String 
hostName) {
+        Session session = hbConfig.getCurrentSession();
+        Transaction tx = session.beginTransaction();
+        String stmt = "from UserTrustedRPDO as utrp where 
utrp.identifier.hostName = '"+ hostName+"'";
+
+        UserTrustedRPDO[] rps = new UserTrustedRPDO[0];
+        try {
+            List lst = session.createQuery(stmt).list();
+            rps = (UserTrustedRPDO[])lst.toArray(new 
UserTrustedRPDO[lst.size()]);
+            tx.commit();
+        } catch (Throwable e) {
+            tx.rollback();
+            String msg = messages.getMessage("errorQuerryingClaimData");
+            log.error(msg, e);
+            throw new RuntimeException(msg, e);
+        } finally {
+            hbConfig.closeSession();
+        }
+
+        return rps;
+    }
 }

Modified: 
trunk/solutions/identity/modules/user-ui/src/main/java/org/wso2/solutions/identity/user/ui/action/UploadRelyingPartyCertificateAction.java
==============================================================================
--- 
trunk/solutions/identity/modules/user-ui/src/main/java/org/wso2/solutions/identity/user/ui/action/UploadRelyingPartyCertificateAction.java
  (original)
+++ 
trunk/solutions/identity/modules/user-ui/src/main/java/org/wso2/solutions/identity/user/ui/action/UploadRelyingPartyCertificateAction.java
  Sun Mar  2 22:27:47 2008
@@ -23,6 +23,8 @@
 import java.security.cert.X509Certificate;
 import java.util.Map;
 
+import org.apache.axis2.AxisFault;
+import org.wso2.solutions.identity.IdentityProviderException;
 import org.wso2.solutions.identity.admin.KeystoreUtilAdmin;
 import org.wso2.solutions.identity.admin.RelyingPartyAdmin;
 import org.wso2.solutions.identity.admin.ReportAdmin;
@@ -62,16 +64,27 @@
             return ERROR;
         }
         
-        String alias = ksAdmin.importCertToUserTrustStore(cert);
-        UserTrustedRPDO rp = new UserTrustedRPDO();
-        UserPersonalRelyingPartyIdentifier identifier = new 
UserPersonalRelyingPartyIdentifier();
-        identifier.setHostName(alias);
-        identifier.setUserId(user);
-        rp.setIdentifier(identifier);
-
-        RelyingPartyAdmin admin = new RelyingPartyAdmin();
-        admin.create(rp);
-        ReportAdmin.record(user, ActionDO.ACTION_USER_ADD_RP, "RP=" + alias);
+        String alias = null;
+        try {
+            alias = ksAdmin.importCertToUserTrustStore(cert);
+            UserTrustedRPDO rp = new UserTrustedRPDO();
+            UserPersonalRelyingPartyIdentifier identifier = new 
UserPersonalRelyingPartyIdentifier();
+            identifier.setHostName(alias);
+            identifier.setUserId(user);
+            rp.setIdentifier(identifier);
+            
+            RelyingPartyAdmin admin = new RelyingPartyAdmin();
+            if(admin.getPersonalRelyingParty(alias, user) == null){
+                admin.create(rp);
+                ReportAdmin.record(user, ActionDO.ACTION_USER_ADD_RP, "RP=" + 
alias);
+            }else{
+                this.addInfoMessage("You have already uploaded the 
certificate");
+            }
+        }catch (IdentityProviderException e) {
+           this.addErrorMessage(e.getMessage());
+           return ERROR;
+        }
+        
         return SUCCESS;
     }
 

_______________________________________________
Identity-dev mailing list
[email protected]
http://wso2.org/cgi-bin/mailman/listinfo/identity-dev

Reply via email to