summaryrefslogtreecommitdiffstats
path: root/pki/base/console/src/com/netscape/admin/certsrv/task/CMSMigrateCreate.java
diff options
context:
space:
mode:
Diffstat (limited to 'pki/base/console/src/com/netscape/admin/certsrv/task/CMSMigrateCreate.java')
-rw-r--r--pki/base/console/src/com/netscape/admin/certsrv/task/CMSMigrateCreate.java340
1 files changed, 340 insertions, 0 deletions
diff --git a/pki/base/console/src/com/netscape/admin/certsrv/task/CMSMigrateCreate.java b/pki/base/console/src/com/netscape/admin/certsrv/task/CMSMigrateCreate.java
new file mode 100644
index 000000000..c7ff02c36
--- /dev/null
+++ b/pki/base/console/src/com/netscape/admin/certsrv/task/CMSMigrateCreate.java
@@ -0,0 +1,340 @@
+// --- BEGIN COPYRIGHT BLOCK ---
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; version 2 of the License.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this program; if not, write to the Free Software Foundation, Inc.,
+// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+//
+// (C) 2007 Red Hat, Inc.
+// All rights reserved.
+// --- END COPYRIGHT BLOCK ---
+package com.netscape.admin.certsrv.task;
+
+import java.util.*;
+import javax.swing.*;
+import com.netscape.management.client.*;
+import com.netscape.admin.certsrv.*;
+import com.netscape.certsrv.common.*;
+import com.netscape.management.client.util.*;
+import java.awt.*;
+import java.awt.event.*;
+import javax.swing.*;
+import javax.swing.event.*;
+import com.netscape.management.client.console.*;
+import com.netscape.management.client.topology.*;
+import com.netscape.management.client.comm.*;
+import java.net.*;
+import java.io.*;
+import netscape.ldap.*;
+import netscape.ldap.util.*;
+
+/**
+ * Create or Migrate the Certificate Server
+ *
+ * @author Jack Pan-Chen
+ * @version $Revision$, $Date$
+ */
+public class CMSMigrateCreate extends CGITask
+ implements IProductObject
+{
+
+ /*==========================================================
+ * variables
+ *==========================================================*/
+ private static final String PREFIX = "CMSMIGRATECREATE";
+
+ private static final String CREATE_CGI_NAME = "Tasks/Operation/Create";
+
+ //private boolean mSuccess = false; // status of last executed CGI
+ private Hashtable mCgiResponse = null; // holds parsed contents of CGI return
+ private String mCgiTask = null; // CGI task to call
+
+ /*==========================================================
+ * constructors
+ *==========================================================*/
+ public CMSMigrateCreate() {
+ super();
+ }
+
+ /*==========================================================
+ * public methods
+ *==========================================================*/
+ public void initialize(ConsoleInfo info) {
+ Debug.println("CMSMigrateCreate: initialize()");
+ _consoleInfo = info;
+ }
+
+ public boolean migrate(String serverRoot,
+ String server,
+ String targetDN,
+ boolean flag) {
+
+ Debug.println("CMSMigrateCreate: migrate()");
+
+ return false;
+ }
+
+ /**
+ * Starts the server specific creation code, providing the DN for the
+ * target admin group. The method returns true or false depending
+ * on whether it was successful.
+ *
+ * @param targetDN - the admin group DN where the new instance is to be
+ * created.
+ * @return boolean value indicating whether the process succeeded (true)
+ * or failed (false).
+ */
+ public boolean createNewInstance(String targetDN) {
+ //Debug.println("CMSMigrateCreate: createNewInstance()- "+targetDN);
+ //targetDN: cn=Server Group, cn=cynthiar.mcom.com, ou=mcom.com, o=NetscapeRoot
+
+ JFrame mActiveFrame = UtilConsoleGlobals.getActivatedFrame();
+ boolean status = false; // return value
+ //show dialog
+ CreateInstanceDialog dialog = new CreateInstanceDialog(mActiveFrame);
+ // UtilConsoleGlobals.getActivatedFrame());
+ dialog.show();
+ if (dialog.isCancel()) {
+ return status;
+ }
+
+ //construct the rest of the configuration parameters
+ //serverName=cynthiar.mcom.com
+ //sieURL=ldap://laiking.mcom.com:389/o=netscapeRoot
+ //adminUID=admin
+ //adminPWD=admin
+ //instanceID=cert-data
+ //serverRoot=/u/thomask/s4
+ //adminDomain=mcom.com
+
+ Hashtable configParams = new Hashtable();
+
+ configParams.put("instanceID",dialog.getInstanceName());
+
+ String[] entries = LDAPDN.explodeDN(targetDN, false);
+ String DN = entries[entries.length-3] + ", " +
+ entries[entries.length-2] + ", " +
+ entries[entries.length-1];
+
+ //DN: cn=cynthiar.mcom.com, ou=mcom.com, o=NetscapeRoot
+
+ configParams.put("machineName", getValue(DN, "serverHostName",
+ LDAPConnection.SCOPE_BASE, null));
+ configParams.put("serverRoot", getValue(targetDN, "nsconfigroot",
+ LDAPConnection.SCOPE_BASE, null));
+ LDAPConnection ldc = _consoleInfo.getLDAPConnection();
+ String ssdn = ldc.getAuthenticationDN();
+ String[] avas = LDAPDN.explodeDN(ssdn, false);
+ String uid = avas[0];
+ if (!uid.startsWith("uid")) {
+ CMSAdminUtil.showMessageDialog(mActiveFrame,
+ mResource, PREFIX, "RESTARTADMINERROR",
+ CMSAdminUtil.ERROR_MESSAGE);
+ return false;
+ }
+ configParams.put("adminUID", uid.substring(4,uid.length()));
+
+ configParams.put("adminPWD",ldc.getAuthenticationPassword());
+ String ldapUrl = "ldap://" + ldc.getHost() + ":" +
+ Integer.toString(ldc.getPort()) + "/" +
+ (String)_consoleInfo.get("BaseDN");
+ configParams.put("sieURL", ldapUrl);
+
+ String searchDN = entries[entries.length-2];
+ configParams.put("adminDomain", searchDN.substring(3,searchDN.length()));
+
+ Debug.println("CMSMigrateCreate: createNewInstance()- "+configParams.toString());
+
+ // set the arguments for the CGI call
+ _consoleInfo.put("arguments", configParams);
+ _consoleInfo.put(CREATE_CGI_NAME, "cert");
+ if (_consoleInfo.get("AdminUsername") == null)
+ _consoleInfo.put("AdminUsername", _consoleInfo.getAuthenticationDN());
+ Debug.println("AdminUsername = " + _consoleInfo.get("AdminUsername"));
+
+ if (_consoleInfo.get("AdminUserPassword") == null)
+ _consoleInfo.put("AdminUserPassword",
+ _consoleInfo.getAuthenticationPassword());
+ Debug.println("AdminUserPassword = " + _consoleInfo.get("AdminUserPassword"));
+
+ // call the CGI program
+ Debug.println("CMSMigrateCreate: createNewInstance() before run task="+CREATE_CGI_NAME);
+ mCgiTask = CREATE_CGI_NAME;
+
+ Cursor cursor = mActiveFrame.getCursor();
+ int type = cursor.getType();
+ cursor = new Cursor(Cursor.WAIT_CURSOR);
+ mActiveFrame.setCursor(cursor);
+
+ try {
+ status = super.run(null, CREATE_CGI_NAME);
+ } catch (Exception e) {
+ Debug.println("Unexpected Error"+e.toString());
+ status = false;
+ }
+
+ Debug.println("CMSMigrateCreate: createNewInstance() after run status=" +
+ status + " mSuccess=" + mSuccess);
+
+ if (!mSuccess) {
+ Debug.println("Show error dialog");
+ String errorMsg = getErrorMessage();
+ if (errorMsg == null || errorMsg.equals(""))
+ CMSAdminUtil.showMessageDialog(mActiveFrame, mResource, PREFIX,
+ "SYSTEMERROR", CMSAdminUtil.ERROR_MESSAGE);
+ else
+ JOptionPane.showMessageDialog(mActiveFrame, errorMsg,
+ "Error", CMSAdminUtil.ERROR_MESSAGE,
+ CMSAdminUtil.getImage(CMSAdminResources.IMAGE_ERROR_ICON));
+ }
+
+ cursor = new Cursor(type);
+ mActiveFrame.setCursor(cursor);
+
+ return mSuccess;
+ }
+
+ /**
+ * the operation is finished after we receive the http stream
+ */
+ public void replyHandler(InputStream response, CommRecord cr) {
+ mSuccess = false;
+ if (mCgiResponse != null)
+ mCgiResponse.clear();
+
+ try {
+ BufferedReader rspStream =
+ new BufferedReader(new InputStreamReader(response, "UTF8"));
+ String rspStr;
+
+ Debug.println("CMSMigrateCreate: replyHandler() - start");
+ while ((rspStr = rspStream.readLine()) != null)
+ {
+ Debug.println("CMSMigrateCreate: replyHandler() - read [" + rspStr + "]");
+ // NMC_ messages are parsed, but not shown to the user
+ /*
+ if (_statusText != null && !rspStr.startsWith("NMC_")) {
+ _statusText.append(rspStr + "\n");
+ Thread.yield(); // allow graphics repaints
+ }
+ */
+ parse(rspStr);
+ }
+ } catch (Exception e) {
+ Debug.println("MigrateCreate.replyHandler: " + e.toString());
+ }
+
+ Debug.println("MigrateCreate.replyHandler: finished, mSuccess=" +
+ mSuccess);
+
+ finish();
+ }
+
+ /**
+ * return the value for the given keyword in the reply
+ */
+ private void parse(String s) {
+ String sName;
+ String sValue;
+ int iIndex;
+
+ Debug.println("Parse input: " + s);
+
+ if ((iIndex=s.indexOf(":")) != (-1))
+ {
+ sName = s.substring(0, iIndex).trim();
+ sValue = s.substring(iIndex+1).trim();
+ Debug.println("Parse input: name=" + sName + " value=" + sValue);
+ if (mCgiResponse == null)
+ mCgiResponse = new Hashtable();
+ mCgiResponse.put(sName, sValue);
+ if (sName.equalsIgnoreCase("NMC_Status")) {
+ int code = Integer.parseInt(sValue);
+ mSuccess = (code == 0);
+ Debug.println("Parse input: code=" + code + " mSuccess=" + mSuccess);
+ } else if (sName.equalsIgnoreCase("NMC_ERRINFO")) {
+ mErrorMsg = sValue;
+ }
+ }
+
+ Debug.println("Parse finished");
+ }
+
+ /**
+ * Get one value for one specified attribute from the given DN.
+ * If there is more than 1 entry which matches the given criteria, the
+ * first one will be used.
+ *
+ * @param DN DN of the entry with the specified attributes
+ * @param attr Attribute to get the value of
+ * @param scope LDAPConnection SCOPE_BASE SCOPE_ONE SCOPE_SUB
+ * @param filter LDAP search filter; if null, default is objectclass=*
+ * @return The string value of the attribute; multi-valued
+ * attributes are returned as 1 value, space delimited
+ * (flattened)
+ **/
+ protected String getValue(String DN, String attr, int scope,
+ String filter) {
+ String[] attrs = { attr };
+ String[] values = getValues(DN, attrs, scope, filter);
+ if (values != null)
+ return values[0];
+
+ return null;
+ }
+
+ /**
+ * Get the values for several specified attributes from the given DN.
+ * If there is more than 1 entry which matches the given criteria, the
+ * first one will be used.
+ *
+ * @param DN DN of the entry with the specified attributes
+ * @param attrs Array of attributes to get the values of
+ * @param scope LDAPConnection SCOPE_BASE SCOPE_ONE SCOPE_SUB
+ * @param filter LDAP search filter; if null, default is objectclass=*
+ * @return An array of string values for each attribute; multi-valued
+ * attributes are returned as 1 value, space delimited
+ * (flattened)
+ **/
+ protected String[] getValues(String DN, String[] attrs, int scope,
+ String filter) {
+ String[] values = null;
+ LDAPSearchResults results = null;
+ if (filter == null)
+ filter = "(objectclass=*)";
+
+ try {
+ LDAPConnection ldc = _consoleInfo.getLDAPConnection();
+ if (ldc != null)
+ {
+ results = ldc.search(DN, scope, filter, attrs, false);
+ }
+ } catch (LDAPException e) {
+ Debug.println("error MigrateCreate.getValues: LDAP read failed " +
+ "for DN=" + DN + " attributes " + attrs);
+ Debug.println("error MigrateCreate.getValues: LDAP Exception:" +
+ e);
+ }
+
+ if (results != null && results.hasMoreElements()) {
+ values = new String[attrs.length];
+ LDAPEntry entry = (LDAPEntry)results.nextElement();
+ for (int ii = 0; entry != null && ii < attrs.length; ++ii) {
+ values[ii] = LDAPUtil.flatting(entry.getAttribute(attrs[ii]));
+ }
+ } else {
+ Debug.println("error MigrateCreate.getValues: LDAP read failed " +
+ "for DN=" + DN + " attributes=" + attrs);
+ }
+
+ return values;
+ }
+
+}