diff options
Diffstat (limited to 'base/console/src/com/netscape/admin/certsrv/task/CMSMigrateCreate.java')
-rw-r--r-- | base/console/src/com/netscape/admin/certsrv/task/CMSMigrateCreate.java | 340 |
1 files changed, 340 insertions, 0 deletions
diff --git a/base/console/src/com/netscape/admin/certsrv/task/CMSMigrateCreate.java b/base/console/src/com/netscape/admin/certsrv/task/CMSMigrateCreate.java new file mode 100644 index 000000000..c7ff02c36 --- /dev/null +++ b/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; + } + +} |