ServiceBase.java revision a82d04bc19fee9d5e34b41ccd7641da1f62ab634
ccf9d4a5c6453fa9f8b839baeee25147865fbb7dJames Phillpotts/*
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Copyright (c) 2008 Sun Microsystems Inc. All Rights Reserved
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * The contents of this file are subject to the terms
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * of the Common Development and Distribution License
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * (the License). You may not use this file except in
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * compliance with the License.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * You can obtain a copy of the License at
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * https://opensso.dev.java.net/public/CDDLv1.0.html or
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * opensso/legal/CDDLv1.0.txt
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * See the License for the specific language governing
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * permission and limitations under the License.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * When distributing Covered Code, include this CDDL
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Header Notice in each file and include the License file
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * at opensso/legal/CDDLv1.0.txt.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * If applicable, add the following below the CDDL Header,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * with the fields enclosed by brackets [] replaced by
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * your own identifying information:
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * "Portions Copyrighted [year] [name of copyright owner]"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * $Id: ServiceBase.java,v 1.2 2009/01/28 05:34:58 ww203982 Exp $
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
ccf9d4a5c6453fa9f8b839baeee25147865fbb7dJames Phillpotts * Portions Copyrighted 2012-2015 ForgeRock AS.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterpackage com.sun.identity.diagnostic.plugin.services.common;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
ccf9d4a5c6453fa9f8b839baeee25147865fbb7dJames Phillpottsimport static org.forgerock.opendj.ldap.LDAPConnectionFactory.*;
ccf9d4a5c6453fa9f8b839baeee25147865fbb7dJames Phillpotts
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.iplanet.am.util.SystemProperties;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.iplanet.services.util.Crypt;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.iplanet.sso.SSOToken;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.common.HttpURLConnectionManager;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.diagnostic.base.core.common.ToolConstants;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.idm.AMIdentityRepository;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.security.AdminTokenAction;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.setup.Bootstrap;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.setup.BootstrapData;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.shared.debug.Debug;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.sm.ServiceManager;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport java.io.BufferedReader;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport java.io.IOException;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport java.io.InputStreamReader;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport java.io.UnsupportedEncodingException;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport java.net.HttpURLConnection;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport java.net.InetAddress;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport java.net.MalformedURLException;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport java.net.URL;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport java.net.URLConnection;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport java.net.URLDecoder;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport java.security.AccessController;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport java.util.Enumeration;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport java.util.HashMap;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport java.util.Iterator;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport java.util.List;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport java.util.Map;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport java.util.Properties;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport java.util.ResourceBundle;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport java.util.StringTokenizer;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport java.util.concurrent.TimeUnit;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport javax.net.ssl.HttpsURLConnection;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport org.forgerock.openam.ldap.LDAPRequests;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport org.forgerock.opendj.ldap.Connection;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport org.forgerock.opendj.ldap.ConnectionFactory;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport org.forgerock.opendj.ldap.LDAPConnectionFactory;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport org.forgerock.opendj.ldap.LdapException;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport org.forgerock.opendj.ldap.SSLContextBuilder;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport org.forgerock.opendj.ldap.SearchScope;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport org.forgerock.opendj.ldif.ConnectionEntryReader;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport org.forgerock.util.Options;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport org.forgerock.util.time.Duration;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster/**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * This is the base class for Server related functionality.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Any class that needs server specific methods can use this base
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * class.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterpublic abstract class ServiceBase implements ToolConstants, ServiceConstants {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private static SSOToken adminToken = null;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Helper method to return Admin token when the configuration
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * properties is initialized.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return Admin Token.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster protected static SSOToken getAdminSSOToken() {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (adminToken == null) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster adminToken = (SSOToken)AccessController.doPrivileged(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster AdminTokenAction.getInstance());
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return adminToken;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Helper method to load the config using the boot file
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param bootPath filename location of the boot file
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return properties of the configured server.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster protected Properties loadConfigFromBootfile(String bootPath)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throws Exception {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (adminToken != null) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster try {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster doRefresh(adminToken);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster adminToken = null;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } catch (Exception sre) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Debug.getInstance(DEBUG_NAME).error(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "ServiceBase.loadConfigFromBootfile : " +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "Exception in clearing cache", sre);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Properties cProp = null;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (isServerBootable((Map)getBootServers(bootPath))) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster System.setProperty("bootstrap.dir", bootPath);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster cProp = Bootstrap.load(bootPath, false);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SystemProperties.initializeProperties(cProp);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return cProp;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Helper method to retrive the boot servers from the boot file
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param path filename location of the boot file
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return map of the boot directory servers
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster protected Map<String, Map> getBootServers(String path)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throws IOException, UnsupportedEncodingException {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return getBootfileContent(path);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Helper method to retrive the boot instance from the boot list
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param bServers Map of available boot servers
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return <code>true</code> if server is bootable
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster protected boolean isServerBootable(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Map<String, Map> bServers
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster ) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster boolean match = false;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Map <String, String> dsInstance = new HashMap<String, String>();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster for (Iterator<String> it = bServers.keySet().iterator();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster it.hasNext() && !match; ) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String dsInstanceKey = it.next();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster dsInstance = (Map)bServers.get(dsInstanceKey);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (isDSRunning(dsInstance)) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (isValidSuffix(dsInstance)) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster match = true;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return match;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private Map getBootfileContent(String path)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throws IOException, UnsupportedEncodingException {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster BootstrapData bootstrapData = new BootstrapData(path);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster List list = bootstrapData.getData();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Map<String,String> mapQuery = null;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Map<String, Map> bootList = new HashMap();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String dsprotocol = "unknown";
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster for (Iterator<String> i = list.iterator(); i.hasNext(); ) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String info = i.next();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (info.startsWith(PROTOCOL_LDAPS)) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster info = "http://" + info.substring(8);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster dsprotocol = "ldaps";
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } else
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (info.startsWith(PROTOCOL_LDAP)) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster info = "http://" + info.substring(7);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster dsprotocol = "ldap";
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster URL url = new URL(info);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster mapQuery = queryStringToMap(url.getQuery());
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String instanceName = URLDecoder.decode(url.getPath(), "UTF-8");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (instanceName.startsWith("/")) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster instanceName = instanceName.substring(1);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster mapQuery.put(SERVER_INSTANCE, instanceName);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String dsHost = url.getHost();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String dsPort = Integer.toString(url.getPort());
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster mapQuery.put(DS_HOST, dsHost);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster mapQuery.put(DS_PORT, dsPort);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster mapQuery.put(DS_PROTOCOL, dsprotocol);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String key = dsHost + ":" + dsPort;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster bootList.put(key, mapQuery);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return bootList;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private Map queryStringToMap(String str)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throws UnsupportedEncodingException {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Map map = new HashMap();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster StringTokenizer st = new StringTokenizer(str, "&");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster while (st.hasMoreTokens()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String s = st.nextToken();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster int idx = s.indexOf('=');
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster map.put(s.substring(0, idx), URLDecoder.decode(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster s.substring(idx +1), "UTF-8"));
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return map;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Method to check if the server instance is running
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param sName server instance name
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return <code>true</code> if server instance is running
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster protected static boolean isServerRunning(String sName) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster boolean isSvrRunning = false;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster try {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster URLConnection uc = HttpURLConnectionManager.getConnection(new URL(sName)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster );
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster BufferedReader in = new BufferedReader(new InputStreamReader(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster uc.getInputStream()));
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster isSvrRunning = true;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } catch (MalformedURLException mfe) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Debug.getInstance(DEBUG_NAME).error(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "ServiceBase.isServerRunning : " +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "Exception in getting server URL", mfe);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } catch (IOException ioe) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Debug.getInstance(DEBUG_NAME).error(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "ServiceBase.isServerRunning : " +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "Exception in connecting to server URL", ioe);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return isSvrRunning;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Method to check if the server instance is running
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param url server instance URL
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return <code>true</code> if server instance is running
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster protected static boolean isServerRunning(URL url) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster boolean isSvrRunning = false;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster try {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster URLConnection uc = HttpURLConnectionManager.getConnection(url);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster BufferedReader in = new BufferedReader(new InputStreamReader(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster uc.getInputStream()));
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster isSvrRunning = true;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } catch (MalformedURLException mfe) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Debug.getInstance(DEBUG_NAME).error(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "ServiceBase.isServerRunning : " +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "Exception in getting server URL", mfe);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } catch (IOException ioe) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Debug.getInstance(DEBUG_NAME).error(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "ServiceBase.isServerRunning : " +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "Exception in connecting to server URL", ioe);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return isSvrRunning;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Method to connect to server instance
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param svrName server instance name
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return <code>true</code> if server instance can be connected
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster protected boolean connectToServer(String svrName)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throws javax.net.ssl.SSLHandshakeException, Exception {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster boolean connect = false;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster try {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster URL u = new URL(svrName);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster URLConnection svrConn = HttpURLConnectionManager.getConnection(u);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (u.getProtocol().equalsIgnoreCase("http")){
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster HttpURLConnection testConnect =
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster (HttpURLConnection)svrConn;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster testConnect.connect();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } else if (u.getProtocol().equalsIgnoreCase("https")) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster HttpsURLConnection testConnect =
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster (HttpsURLConnection)svrConn;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster testConnect.connect();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster BufferedReader in = new BufferedReader(new InputStreamReader(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster svrConn.getInputStream()));
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster connect = true;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } catch (javax.net.ssl.SSLHandshakeException ssle) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Debug.getInstance(DEBUG_NAME).error(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "ServiceBase.connectToServer : ", ssle);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throw ssle;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } catch (Exception ex) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Debug.getInstance(DEBUG_NAME).error(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "ServiceBase.connectToServer : ", ex);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throw ex;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return connect;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Helper method to construct the URL from properties.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param prop properties of the server instance
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return string representing the URL of the instance
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster protected String getURLStrFromProperties(Properties prop) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String propURL = null;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String hostname = prop.getProperty(AM_SERVER_HOST);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String port = prop.getProperty(AM_SERVER_PORT);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String protocol = prop.getProperty(AM_SERVER_PROTOCOL);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String uri = prop.getProperty(AM_SERVICES_DEPLOYMENT_DESCRIPTOR);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster propURL = protocol + "://" + hostname + ":" + port + uri;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return propURL;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Helper method to construct the URL from properties.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param mProp map of server instance properties
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return string representing the URL of the instance
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public String getURLStrFromProperties(Map mProp) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String propURL = null;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String hostname = (String)mProp.get(AM_SERVER_HOST);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String port = (String)mProp.get(AM_SERVER_PORT);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String protocol = (String)mProp.get(AM_SERVER_PROTOCOL);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String uri = (String)mProp.get(AM_SERVICES_DEPLOYMENT_DESCRIPTOR);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster propURL = protocol + "://" + hostname + ":" + port + uri;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return propURL;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Read the properties file and initialize the
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Map with the properties.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param pName name of resource bundle to load the properties
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return map of properties loaded from a resource bundle
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster protected static Map loadPropertiesToMap(String pName) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Map<String, String> propMap = new HashMap<String, String>();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster propMap.clear();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster ResourceBundle rb = ResourceBundle.getBundle(pName);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster for (Enumeration e = rb.getKeys(); e.hasMoreElements(); ) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String key = (String)e.nextElement();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster propMap.put(key, (String)rb.getString(key));
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return propMap;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Read the properties file and initialize the
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Map with the properties.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param prop object containing properties
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return map of properties loaded from properties object
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster protected static Map loadPropertiesToMap(Properties prop) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Map<String, String> propMap = new HashMap<String, String>();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster for (Enumeration e = prop.propertyNames(); e.hasMoreElements(); ) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String key = (String)e.nextElement();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster propMap.put(key, (String)prop.getProperty(key));
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return propMap;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Method to check if the host name is valid
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param hName name of the host
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return <code>true</code> if host name can be resolved
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster protected boolean isValidHost(String hName) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster boolean valid = false;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster try {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster InetAddress.getByName(hName.trim());
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster valid = true;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } catch (java.net.UnknownHostException e) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Debug.getInstance(DEBUG_NAME).error(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "ServiceBase.isValidHost: " + e);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return valid;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Method to check if the port is valid
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param port Port of the host
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return <code>true</code> if host name can be resolved
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster protected boolean isValidPort(String port) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster boolean valid = false;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster try {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster int n = Integer.parseInt(port);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster valid = true;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } catch (NumberFormatException nfe) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Debug.getInstance(DEBUG_NAME).error(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "ServiceBase.isValidPort: " + nfe);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return valid;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Helper method to clear the cache
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private static boolean doRefresh(SSOToken ssoToken) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster boolean valid = true;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster try {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster AMIdentityRepository.clearCache();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster ServiceManager svcMgr = new ServiceManager(ssoToken);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster svcMgr.clearCache();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } catch (Exception sms) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Debug.getInstance(DEBUG_NAME).error(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "ServiceBase.doRefresh: " + sms);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster valid = false;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return valid;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Returns a LDAP connection to the directory host.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param dsHostName name of the sever where DS is installed
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param dsPort port at which the directory server is listening
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param dsProtocol protocol used by directory server
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param dsManager admin user name for directory server
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param dsAdminPwd admin password used by admin user name
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return LDAP connection
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster protected static Connection getLDAPConnection(String dsHostName, int dsPort, String dsProtocol, String dsManager,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String dsAdminPwd) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster try {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster // All connections will use authentication
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Options options = Options.defaultOptions()
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster .set(CONNECT_TIMEOUT, new Duration((long)3, TimeUnit.SECONDS))
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster .set(AUTHN_BIND_REQUEST, LDAPRequests.newSimpleBindRequest(dsManager, dsAdminPwd.toCharArray()));
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (dsProtocol.equalsIgnoreCase("ldaps")) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster options = options.set(SSL_CONTEXT, new SSLContextBuilder().getSSLContext());
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster ConnectionFactory factory = new LDAPConnectionFactory(dsHostName, dsPort, options);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return factory.getConnection();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } catch (Exception ignored) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return null;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Returns a LDAP connection to the directory host.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param paramMap Map containing directory specific information
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return LDAP connection
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private Connection getLDAPConnection(Map paramMap) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String dsHost = (String) paramMap.get(DS_HOST);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String dsPort = (String) paramMap.get(DS_PORT);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String dsProtocol = (String) paramMap.get(DS_PROTOCOL);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String dsMgr = (String) paramMap.get(DS_MGR);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String dsPwd = (String) paramMap.get(DS_PWD);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster dsPwd = Crypt.decode(dsPwd, Crypt.getHardcodedKeyEncryptor());
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return getLDAPConnection(dsHost, getPort(dsPort), dsProtocol, dsMgr, dsPwd);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Check if Directory Server has the suffix.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return <code>true</code> if specified suffix exists.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster protected static boolean connectDSwithDN(Connection ld, String suffix) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String filter = "cn=" + suffix;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String[] attrs = { "" };
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster try (ConnectionEntryReader reader = ld.search(LDAPRequests.newSearchRequest(suffix, SearchScope.BASE_OBJECT,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster filter, attrs))) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return reader.hasNext();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } catch (LdapException e) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return false;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Check if Directory Server is running.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return <code>true</code> if directory is running.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster protected static boolean isDSServerUp(String dsHostName, int dsPort, String dsProtocol, String dsManager,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String dsAdminPwd) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster try (Connection conn = getLDAPConnection(dsHostName, dsPort, dsProtocol, dsManager, dsAdminPwd)) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (conn != null) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return true;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return false;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Check if config Directory Server is running.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return <code>true</code> if config directory is running.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster protected boolean isDSRunning(Map instanceMap) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String dsHost = (String)instanceMap.get(DS_HOST);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String dsPort = (String)instanceMap.get(DS_PORT);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String dsMgr = (String)instanceMap.get(DS_MGR);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String dsPwd = (String)instanceMap.get(DS_PWD);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String dsProto = (String)instanceMap.get(DS_PWD);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster boolean dsRunning = false;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (!isDSServerUp(dsHost, getPort(dsPort), dsProto, dsMgr,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Crypt.decode(dsPwd, Crypt.getHardcodedKeyEncryptor()))) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Debug.getInstance(DEBUG_NAME).error(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "ServiceBase.isDSRunning : " +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "Cannot connect to Directory Server :" +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster dsHost + ":" + dsPort);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } else {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster dsRunning = true;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return dsRunning;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Check if Directory Server has the given suffix.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return <code>true</code> if suffix is valid.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster protected boolean isValidSuffix(Map instanceMap) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster boolean validSuffix = false;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster try (Connection conn = getLDAPConnection(instanceMap)) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (connectDSwithDN(conn, (String) instanceMap.get(DS_BASE_DN))) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster validSuffix = true;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } else {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Debug.getInstance(DEBUG_NAME).error(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "ServiceBase.isValidateSuffix : " +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "Cannot connect to Directory Server :" +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster instanceMap.get(DS_HOST) +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster ":" + instanceMap.get(DS_PORT) +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster " with suffix" + DS_BASE_DN);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return validSuffix;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Validates the directory server port and returns as an int value.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return port of directory server.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private int getPort(String strPort) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster int port = 0;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster try {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster port = Integer.parseInt(strPort);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } catch (NumberFormatException e) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Debug.getInstance(DEBUG_NAME).error(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "ServiceBase.getPort: " +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "Exception in getting port information", e);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return port;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster}
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster