a4544a5a0e622ef69e38641f87ab1b5685e05911Phill Cunnington/*
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster *
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * Copyright (c) 2009 Sun Microsystems Inc. All Rights Reserved
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster *
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * The contents of this file are subject to the terms
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * of the Common Development and Distribution License
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * (the License). You may not use this file except in
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * compliance with the License.
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster *
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * You can obtain a copy of the License at
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * https://opensso.dev.java.net/public/CDDLv1.0.html or
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * opensso/legal/CDDLv1.0.txt
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * See the License for the specific language governing
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * permission and limitations under the License.
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster *
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * When distributing Covered Code, include this CDDL
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * Header Notice in each file and include the License file
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * at opensso/legal/CDDLv1.0.txt.
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * If applicable, add the following below the CDDL Header,
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * with the fields enclosed by brackets [] replaced by
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * your own identifying information:
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * "Portions Copyrighted [year] [name of copyright owner]"
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster *
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * $Id: SwapClientConfig.java,v 1.2 2009/12/03 18:57:50 mrudul_uchil Exp $
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster *
a4544a5a0e622ef69e38641f87ab1b5685e05911Phill Cunnington * Portions Copyrighted 2015 ForgeRock AS.
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster */
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Fosterpackage com.sun.identity.setup;
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Fosterimport java.io.BufferedReader;
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Fosterimport java.io.FileInputStream;
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Fosterimport java.io.FileNotFoundException;
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Fosterimport java.io.FileOutputStream;
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Fosterimport java.io.InputStreamReader;
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Fosterimport java.io.IOException;
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Fosterimport com.iplanet.services.util.Crypt;
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster/**
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * Tag swap client properties for server protocol, host, port and deploy uri.
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster */
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Fosterpublic class SwapClientConfig {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster private SwapClientConfig() {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster public static void main(String[] args) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster try {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster String serverURL = args[0];
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster String baseDir = args[1];
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster String appUser = args[2];
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster String appPassword = args[3];
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster String wscProviderName = args[4];
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster StringBuffer templateFile = getInputStringBuffer(args[5], false);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster createAMConfigProperties(args[6],templateFile,serverURL,baseDir,
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster appUser,appPassword,wscProviderName);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster } catch (Exception ex) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster ex.printStackTrace();
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster /**
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * Creates AMConfig.properties file
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * @param configFile Absolute path to the AMConfig.properties to be created.
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * @param templateFile Template file for AMConfig.properties
8d3140b524c0e28c0a49dc7c7d481123ef3cfe11Chris Lee * @param serverURL OpenAM server URL to be swapped in the template file
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * @param baseDir Base directory for Debug and Keystore files, to be swapped in the template file
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * @param appUser Application user name to be swapped in the template file
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * @param appPassword Application user password to be swapped in the template file
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * @param wscProviderName Unique agent profile name to be used for WSC
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster */
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster private static void createAMConfigProperties(String configFile,
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster StringBuffer templateFile, String serverURL, String baseDir,
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster String appUser, String appPassword, String wscProviderName)
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster throws IOException {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster String content = templateFile.toString();
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster String server_protocol = null;
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster String server_host = null;
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster String server_port = null;
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster String deploy_uri = null;
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster int indexProtocol = serverURL.indexOf("://");
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster if (indexProtocol != -1) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster server_protocol = serverURL.substring(0,indexProtocol);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster String tempServerURL = serverURL.substring(indexProtocol+3);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster int indexHost = tempServerURL.indexOf(":");
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster if (indexHost != -1) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster server_host = tempServerURL.substring(0,indexHost);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster tempServerURL = tempServerURL.substring(indexHost+1);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster int indexPort = tempServerURL.indexOf("/");
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster if (indexPort != -1) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster server_port = tempServerURL.substring(0,indexPort);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster deploy_uri = tempServerURL.substring(indexPort);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster } else {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster System.out.println("Error : Incorrect Server URL Syntax");
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster } else {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster System.out.println("Error : Incorrect Server URL Syntax");
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster } else {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster System.out.println("Error : Incorrect Server URL Syntax");
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster // Due with extra / before deployment URI
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster if ((deploy_uri != null) && (deploy_uri.length() > 0)) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster if (deploy_uri.charAt(0) != '/') {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster deploy_uri = "/" + deploy_uri;
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster content = content.replaceAll("/@DEPLOY_URI@", deploy_uri);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster content = content.replaceAll("@SERVER_PROTOCOL@", server_protocol);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster content = content.replaceAll("@SERVER_HOST@", server_host);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster content = content.replaceAll("@SERVER_PORT@", server_port);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster String newBaseDir = baseDir.trim().replace("\\", "/");
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster content = content.replaceAll("@DEBUG_DIR@", newBaseDir + "/debug");
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster content = content.replaceAll("@KEYSTORE_LOCATION@", newBaseDir + "/resources");
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster content = content.replaceAll("@APPLICATION_USER@", appUser);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster content = content.replaceAll("@ENCODED_APPLICATION_PASSWORD@",
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster Crypt.encrypt(appPassword));
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster if((wscProviderName != null) && (wscProviderName.trim().length() != 0)
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster && (!wscProviderName.equals("<@wsc.providername@>"))) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster content = content.replaceAll("com.sun.identity.wss.wsc.providername=",
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster "com.sun.identity.wss.wsc.providername=" + wscProviderName);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster writeToFile(content, configFile);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster /**
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * Returns input file as StringBuffer.
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * @param filename Name of the file.
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * @param skipCopyright if false, keep copyright notice in the beginning
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * of the input file. if true, remove the copyright notice.
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * @return StringBuffer
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster */
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster private static StringBuffer getInputStringBuffer(String filename,
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster boolean skipCopyright)
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster throws Exception {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster StringBuffer buff = new StringBuffer(20480);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster BufferedReader br = null;
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster try {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster br = new BufferedReader(new InputStreamReader(
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster new FileInputStream(filename)));
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster while (true) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster String line = br.readLine();
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster if (line == null) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster break;
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster if (skipCopyright && line.startsWith("#")) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster continue;
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster // done skipping the copyright in the beginning of the file
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster skipCopyright = false;
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster buff.append(line).append("\n");
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster } finally {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster if (br != null) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster try {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster br.close();
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster } catch (IOException ex) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster ex.printStackTrace();
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster return buff;
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster private static void writeToFile(String file1, String filename)
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster throws FileNotFoundException, IOException {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster FileOutputStream fout = null;
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster try {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster fout = new FileOutputStream(filename);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster fout.write(file1.getBytes());
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster } finally {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster if (fout != null) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster try {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster fout.close();
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster } catch (IOException ex) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster ex.printStackTrace();
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster}
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster