/* * Copyright (c) 2010, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. * * WSO2 Inc. licenses this file to you under the Apache License, * Version 2.0 (the "License"); you may not use this file except * in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.wso2.carbon.security.ui.client; import org.apache.axiom.om.util.Base64; import org.apache.axis2.AxisFault; import org.apache.axis2.client.Options; import org.apache.axis2.client.ServiceClient; import org.apache.axis2.context.ConfigurationContext; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.wso2.carbon.identity.core.util.IdentityIOStreamUtils; import org.wso2.carbon.security.mgt.stub.keystore.AddKeyStore; import org.wso2.carbon.security.mgt.stub.keystore.DeleteStore; import org.wso2.carbon.security.mgt.stub.keystore.GetKeyStoresResponse; import org.wso2.carbon.security.mgt.stub.keystore.GetKeystoreInfo; import org.wso2.carbon.security.mgt.stub.keystore.GetKeystoreInfoResponse; import org.wso2.carbon.security.mgt.stub.keystore.GetPaginatedKeystoreInfo; import org.wso2.carbon.security.mgt.stub.keystore.GetPaginatedKeystoreInfoResponse; import org.wso2.carbon.security.mgt.stub.keystore.GetStoreEntries; import org.wso2.carbon.security.mgt.stub.keystore.GetStoreEntriesResponse; import org.wso2.carbon.security.mgt.stub.keystore.ImportCertToStore; import org.wso2.carbon.security.mgt.stub.keystore.KeyStoreAdminServiceStub; import org.wso2.carbon.security.mgt.stub.keystore.RemoveCertFromStore; import org.wso2.carbon.security.mgt.stub.keystore.xsd.KeyStoreData; import org.wso2.carbon.security.mgt.stub.keystore.xsd.PaginatedKeyStoreData; import java.io.ByteArrayInputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.security.KeyStore; import java.util.Enumeration; public class KeyStoreAdminClient { private static Log log = LogFactory.getLog(KeyStoreAdminClient.class); private String serviceEndPoint = null; private KeyStoreAdminServiceStub stub = null; public KeyStoreAdminClient(String cookie, String url, ConfigurationContext configContext) throws java.lang.Exception { try { this.serviceEndPoint = url + "KeyStoreAdminService"; this.stub = new KeyStoreAdminServiceStub(configContext, serviceEndPoint); ServiceClient client = stub._getServiceClient(); Options option = client.getOptions(); option.setManageSession(true); option.setProperty(org.apache.axis2.transport.http.HTTPConstants.COOKIE_STRING, cookie); } catch (AxisFault e) { log.error("Error in creating KeyStoreAdminClient", e); throw e; } } public KeyStoreData[] getKeyStores() throws java.lang.Exception { try { GetKeyStoresResponse response = stub.getKeyStores(); return response.get_return(); } catch (java.lang.Exception e) { log.error("Error in getting keystore data", e); throw e; } } public void addKeyStore(byte[] content, String filename, String password, String provider, String type, String pvtkspass) throws java.lang.Exception { try { String data = Base64.encode(content); AddKeyStore request = new AddKeyStore(); request.setFileData(data); request.setFilename(filename); request.setPassword(password); request.setProvider(provider); request.setType(type); request.setPvtkeyPass(pvtkspass); stub.addKeyStore(request); } catch (java.lang.Exception e) { log.error("Error in adding keystore", e); throw e; } } public void deleteStore(String keyStoreName) throws java.lang.Exception { try { DeleteStore request = new DeleteStore(); request.setKeyStoreName(keyStoreName); stub.deleteStore(request); } catch (java.lang.Exception e) { log.error("Error in deleting keystore", e); throw e; } } public void importCertToStore(String filename, byte[] content, String keyStoreName) throws java.lang.Exception { try { String data = Base64.encode(content); ImportCertToStore request = new ImportCertToStore(); request.setFileName(filename); request.setFileData(data); request.setKeyStoreName(keyStoreName); stub.importCertToStore(request); } catch (java.lang.Exception e) { log.error("Error in importing cert to store.", e); throw e; } } public String[] getStoreEntries(String keyStoreName) throws java.lang.Exception { try { GetStoreEntries request = new GetStoreEntries(); request.setKeyStoreName(keyStoreName); GetStoreEntriesResponse response = stub.getStoreEntries(request); return response.get_return(); } catch (java.lang.Exception e) { log.error("Error in getting store entries.", e); throw e; } } private byte[] getBytesFromFile(File file) throws java.lang.Exception { InputStream is = new FileInputStream(file); try { // Get the size of the file long length = file.length(); if (length > Integer.MAX_VALUE) { throw new IOException("File is too large"); } // Create the byte array to hold the data byte[] bytes = new byte[(int) length]; // Read in the bytes int offset = 0; int numRead = 0; while (offset < bytes.length && (numRead = is.read(bytes, offset, bytes.length - offset)) >= 0) { offset += numRead; } if (offset < bytes.length) { throw new IOException("Could not completely read file " + file.getName()); } return bytes; } catch (java.lang.Exception e) { log.error("Error in getting bytes from file.", e); throw e; } finally { IdentityIOStreamUtils.closeInputStream(is); } } public boolean isPrivateKeyStore(byte[] content, String password, String type) throws java.lang.Exception { try { boolean isPrivateStore = false; ByteArrayInputStream stream = new ByteArrayInputStream(content); KeyStore store = KeyStore.getInstance(type); store.load(stream, password.toCharArray()); Enumeration<String> aliases = store.aliases(); while (aliases.hasMoreElements()) { String value = aliases.nextElement(); if (store.isKeyEntry(value)) { isPrivateStore = true; break; } } return isPrivateStore; } catch (java.lang.Exception e) { log.error("Error in checking private key store.", e); throw e; } } public KeyStoreData getKeystoreInfo(String keyStoreName) throws java.lang.Exception { try { GetKeystoreInfo request = new GetKeystoreInfo(); request.setKeyStoreName(keyStoreName); GetKeystoreInfoResponse response = stub.getKeystoreInfo(request); return response.get_return(); } catch (java.lang.Exception e) { log.error("Error in getting keystore info.", e); throw e; } } public void removeCertificateFromKeyStore(String keySoreName, String CertificateAlias) throws java.lang.Exception { RemoveCertFromStore request = new RemoveCertFromStore(); request.setKeyStoreName(keySoreName); request.setAlias(CertificateAlias); try { stub.removeCertFromStore(request); } catch (java.lang.Exception e) { log.error("Error in removing certificate from keystore.", e); throw e; } } public PaginatedKeyStoreData getPaginatedKeystoreInfo(String keyStoreName, int pageNumber) throws java.lang.Exception { try { GetPaginatedKeystoreInfo request = new GetPaginatedKeystoreInfo(); request.setKeyStoreName(keyStoreName); request.setPageNumber(pageNumber); GetPaginatedKeystoreInfoResponse response = stub.getPaginatedKeystoreInfo(request); return response.get_return(); } catch (java.lang.Exception e) { log.error("Error in getting paginated keystore info.", e); throw e; } } }