summaryrefslogtreecommitdiffstats
path: root/pki/base/console/src/com/netscape/admin/certsrv/config/install/WISingleSignonPage.java
diff options
context:
space:
mode:
Diffstat (limited to 'pki/base/console/src/com/netscape/admin/certsrv/config/install/WISingleSignonPage.java')
-rw-r--r--pki/base/console/src/com/netscape/admin/certsrv/config/install/WISingleSignonPage.java532
1 files changed, 532 insertions, 0 deletions
diff --git a/pki/base/console/src/com/netscape/admin/certsrv/config/install/WISingleSignonPage.java b/pki/base/console/src/com/netscape/admin/certsrv/config/install/WISingleSignonPage.java
new file mode 100644
index 000000000..49e06ac1e
--- /dev/null
+++ b/pki/base/console/src/com/netscape/admin/certsrv/config/install/WISingleSignonPage.java
@@ -0,0 +1,532 @@
+// --- 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.config.install;
+
+import java.io.*;
+import java.net.*;
+import java.awt.*;
+import java.awt.event.*;
+import java.util.*;
+import javax.swing.*;
+import javax.swing.border.*;
+import javax.swing.event.*;
+import javax.swing.text.*;
+import com.netscape.admin.certsrv.*;
+import com.netscape.admin.certsrv.connection.*;
+import com.netscape.admin.certsrv.wizard.*;
+import com.netscape.certsrv.common.*;
+import com.netscape.admin.certsrv.config.*;
+import com.netscape.admin.certsrv.task.*;
+import com.netscape.management.client.console.*;
+import com.netscape.management.client.comm.*;
+import com.netscape.management.client.util.*;
+
+/**
+ * Setup Single Signon for the installation wizard.
+ *
+ * @author Christine Ho
+ * @version $Revision$, $Date$
+ * @see com.netscape.admin.certsrv.config.install
+ */
+class WISingleSignonPage extends WizardBasePanel implements IWizardPanel, CommClient {
+
+ public static final String PW_TAG_INTERNAL_LDAP_DB = "Internal LDAP Database";
+ public static final String PW_TAG_INTERNAL_STORAGE_TOKEN = "internal";
+
+ private Color mActiveColor;
+ // private JPasswordField mSingleSignonPassword, mSingleSignonPasswordAgain;
+ private JCheckBox mPasswordConf;
+ private static final String HELPINDEX = "install-single-signon-wizard-help";
+ private static final String PANELNAME = "INSTALLSINGLESIGNON";
+ private boolean ca;
+ private boolean ra;
+ private boolean kra;
+ private String mDBPasswd;
+ private String capassword, rapassword, krapassword, sslpassword;
+ private JComboBox mTokenBox;
+ private static final String START_TASK_CGI = "Tasks/Operation/start";
+ private static final String PREFIX = "CGITASK";
+ private boolean mFinished = false;
+ protected String mCmd = null;
+ private String mAdminURL = null;
+ protected boolean mSuccess = false;
+ private String mReply = null;
+ protected String mSection = "";
+ protected String mErrorMsg = "";
+ private ConsoleInfo _consoleInfo = null;
+
+ WISingleSignonPage(JDialog parent) {
+ super(PANELNAME);
+ mParent = parent;
+ init();
+ }
+
+ WISingleSignonPage(JDialog parent, JFrame adminFrame) {
+ super(PANELNAME);
+ mParent = parent;
+ mAdminFrame = adminFrame;
+ init();
+ }
+
+ public boolean isLastPage() {
+ return false;
+ }
+
+ public boolean initializePanel(WizardInfo info) {
+ InstallWizardInfo wizardInfo = (InstallWizardInfo)info;
+
+ String tokenList = wizardInfo.getTokensList();
+ StringTokenizer st1 = new StringTokenizer(tokenList, ":");
+
+ mTokenBox.removeAllItems();
+ while (st1.hasMoreElements()) {
+ String t1 = (String)st1.nextElement();
+ mTokenBox.addItem(t1);
+ }
+
+ mDBPasswd = wizardInfo.getInternalDBPasswd();
+
+ String tokenname = "";
+ String password = "";
+ if (wizardInfo.isCAInstalled()) {
+ tokenname = wizardInfo.getCATokenName();
+ password = (String)wizardInfo.get("TOKEN:"+tokenname);
+ if (password == null || password.equals("")) {
+ capassword = "";
+ } else {
+ capassword = password;
+ }
+ ca = true;
+ } else {
+ capassword = "";
+ ca = false;
+ }
+
+ if (wizardInfo.isRAInstalled()) {
+ tokenname = wizardInfo.getRATokenName();
+ password = (String)wizardInfo.get("TOKEN:"+tokenname);
+ if (password == null || password.equals("")) {
+ rapassword = "";
+ } else {
+ rapassword = password;
+ }
+ ra = true;
+ } else {
+ rapassword = "";
+ ra = false;
+ }
+
+ if (wizardInfo.isKRAInstalled()) {
+ tokenname = wizardInfo.getKRATokenName();
+ password = (String)wizardInfo.get("TOKEN:"+tokenname);
+ if (password == null || password.equals("")) {
+ krapassword = "";
+ } else {
+ krapassword = password;
+ }
+ kra = true;
+ } else {
+ krapassword = "";
+ kra = false;
+ }
+
+ tokenname = wizardInfo.getSSLTokenName();
+ password = (String)wizardInfo.get("TOKEN:"+tokenname);
+ if (password == null || password.equals("")) {
+ sslpassword = "";
+ } else {
+ sslpassword = password;
+ }
+ setBorder(makeTitledBorder(PANELNAME));
+ return true;
+ }
+
+ public boolean validatePanel() {
+ return true;
+ }
+
+
+ /**
+ * Copy from CGITask.java
+ */
+ public boolean run(String cmd) {
+ // get the admin URL location first
+ String mAdminURL = _consoleInfo.getAdminURL();
+ if ( mAdminURL == null ) {
+ return false;
+ }
+
+ // Allow specifying e.g. "slapd-install" for instance
+ String instance = (String)_consoleInfo.get( cmd );
+ if (instance == null)
+ instance = (String)_consoleInfo.get( "ServerInstance" );
+ String fullCmd = mAdminURL + instance + "/" + cmd;
+
+ HttpManager h = new HttpManager();
+ // tell the http manager to use UTF8 encoding
+ h.setSendUTF8(true);
+
+ try {
+ mSuccess = false;
+ mFinished = false;
+
+ // _consoleInfo.get("arguments") is a hashtable of key/value pairs
+ // to use as the arguments to the CGI
+ Hashtable args = (Hashtable)_consoleInfo.get("arguments");
+ ByteArrayInputStream data = null;
+ if (args != null && !args.isEmpty())
+ data = com.netscape.admin.certsrv.task.CGITask.encode(args);
+ Debug.println( "Posting " + fullCmd );
+ // tell the http manager to notify us immediately of replies
+ // if we're using async mode
+ int flags = 0;
+ if (data == null)
+ h.post(new URL(fullCmd), this, null, null, 0, flags);
+ else
+ h.post(new URL(fullCmd), this, null, data, data.available(),
+ flags);
+ awaitSuccess();
+ Debug.println( "Command executed: " + fullCmd );
+ } catch (Exception e) {
+ if (e instanceof java.net.ConnectException) {
+ CMSAdminUtil.showMessageDialog(mResource,
+ PREFIX, "SERVERDOWN", CMSAdminUtil.ERROR_MESSAGE);
+ }
+ Debug.println( "Command " + fullCmd + " failed: " + e );
+ }
+ return mSuccess;
+ }
+
+ /**
+ * waiting for the http transaction to be finished.
+ */
+ public synchronized void awaitSuccess() {
+ while (!mFinished) {
+ try {
+ wait();
+ } catch (Exception e) { }
+ }
+ }
+
+ /**
+ * http transaction finished, notify the process
+ */
+ public synchronized void finish() {
+ mFinished = true;
+ notifyAll();
+ }
+
+ /**
+ * the operation is finished after we receive the http stream
+ */
+ public void replyHandler(InputStream response, CommRecord cr) {
+ try {
+ int nBytes = response.available();
+ if ( nBytes > 0 ) {
+ // the response from the DS CGIs will typically be in
+ // UTF8 encoding
+ byte[] data = new byte[nBytes];
+ nBytes = response.read( data );
+ mReply = new String( data, 0, nBytes, "UTF8" );
+ Debug.println( "CGITask.replyHandler: Response (" + nBytes +
+ " bytes) = " + mReply );
+ int index = 0;
+ if ((mReply.indexOf("NMC_") != -1) &&
+ ((index = mReply.indexOf(":")) != -1)) {
+ String sName = mReply.substring(0, index).trim();
+ String sValue = mReply.substring(index+1).trim();
+ if (sName.equalsIgnoreCase("NMC_Status")) {
+ int code = Integer.parseInt(sValue);
+ mSuccess = (code == 0);
+ } else if (sName.equalsIgnoreCase("NMC_ERRINFO")) {
+ mErrorMsg = sValue; }
+ }
+ }
+ } catch ( Exception e ) {
+ Debug.println( "CGITask.replyHandler: " + e.toString() );
+ }
+ finish();
+ }
+
+ /**
+ * this function will be called if error occurs
+ */
+ public void errorHandler(Exception error, CommRecord cr) {
+ Debug.println("CGITask.errorHandler: " + error );
+
+ // this is a hack. now we dont know how to set the timeout period longer.
+ // We always assume everything is fine so that we can proceed to the next
+ // config-cert panel.
+ mSuccess = true;
+ finish();
+ }
+
+ /**
+ * pass the username to the admin server
+ */
+ public String username(Object authObject, CommRecord cr) {
+ Debug.println( "username = " +
+ (String)_consoleInfo.getAuthenticationDN());
+ return _consoleInfo.getAuthenticationDN();
+ }
+
+ /**
+ * pass the user password to the admin server
+ */
+ public String password(Object authObject, CommRecord cr) {
+ Debug.println( "password = " +
+ (String)_consoleInfo.get( "AdminUserPassword" ) );
+ return (String)_consoleInfo.get( "AdminUserPassword" );
+ }
+ /**
+ * Starts CMS server.
+ */
+ public boolean startServer(InstallWizardInfo info) {
+ _consoleInfo = info.getAdminConsoleInfo();
+
+ Hashtable configParams = new Hashtable();
+ configParams.put("serverRoot",_consoleInfo.get("serverRoot"));
+ String servid = (String)_consoleInfo.get("servid");
+ int index = servid.indexOf("-");
+ if (index != -1) {
+ servid = servid.substring(index+1);
+ }
+ configParams.put("instanceID", servid);
+ // configParams.put("password", info.getSingleSignOnPassword());
+ _consoleInfo.put( "ServerInstance", "cert-" + servid);
+ _consoleInfo.put("arguments", configParams);
+ // Debug.println("password "+dialog.getPassword());
+
+ 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("CMSStart: start() before run task="+START_TASK_CGI);
+ boolean status;
+ try {
+ status = run(START_TASK_CGI);
+ } catch (Exception e) {
+ Debug.println("Unexpected Error"+e.toString());
+ status = false;
+ }
+ Debug.println("CMSStart: start() after run status="+status);
+
+ return true;
+ }
+
+ public boolean concludePanel(WizardInfo info) {
+ // Comment out the single signon codes for now.
+ InstallWizardInfo wizardInfo = (InstallWizardInfo)info;
+ String rawData = ConfigConstants.TASKID+"="+TaskId.TASK_SINGLE_SIGNON;
+ rawData = rawData+"&"+ConfigConstants.OPTYPE+"="+OpDef.OP_MODIFY;
+ String tags = PW_TAG_INTERNAL_LDAP_DB;
+ rawData = rawData+"&"+PW_TAG_INTERNAL_LDAP_DB+"="+mDBPasswd;
+ rawData = rawData+"&pwcTokenname="+(String)(mTokenBox.getSelectedItem());
+
+ String tokenname = "";
+ if (!capassword.equals("")) {
+ tokenname = wizardInfo.getCATokenName();
+ rawData = rawData+"&"+tokenname+"="+capassword;
+ tags = tags+":"+tokenname;
+ }
+
+ if (!rapassword.equals("")) {
+ tokenname = wizardInfo.getRATokenName();
+ rawData = rawData+"&"+tokenname+"="+rapassword;
+ tags = tags+":"+tokenname;
+ }
+
+ if (!krapassword.equals("")) {
+ tokenname = wizardInfo.getKRATokenName();
+ rawData = rawData+"&"+tokenname+"="+krapassword;
+ tags = tags+":"+tokenname;
+ }
+
+ if (!sslpassword.equals("")) {
+ tokenname = wizardInfo.getSSLTokenName();
+ rawData = rawData+"&"+tokenname+"="+sslpassword;
+ tags = tags+":"+tokenname;
+ }
+
+ if (mPasswordConf.isSelected()) {
+ rawData = rawData+"&"+ConfigConstants.PR_DELETE_PASSWD_CONF+"="+
+ ConfigConstants.TRUE;
+ } else {
+ rawData = rawData+"&"+ConfigConstants.PR_DELETE_PASSWD_CONF+"="+
+ ConfigConstants.FALSE;
+ }
+ rawData = rawData+"&"+ConfigConstants.PR_SINGLE_SIGNON_PW_TAGS+"="+tags;
+ //data.put(ConfigConstants.PR_SINGLE_SIGNON, ConfigConstants.FALSE);
+
+ startProgressStatus();
+ //CMSMessageBox dlg = new CMSMessageBox(mAdminFrame, "CGITASK", "CREATESSON");
+
+ // boolean ready = send(rawData, wizardInfo);
+
+ boolean ready = true;
+ if (ready) {
+ rawData = ConfigConstants.TASKID+"="+TaskId.TASK_MISCELLANEOUS;
+/*
+ data.put(ConfigConstants.PR_ADMIN_PASSWD,
+ (String)consoleInfo.get(ConfigConstants.PR_ADMIN_PASSWD));
+*/
+ ready = send(rawData, wizardInfo);
+ } else {
+ String str = getErrorMessage();
+ if (str.equals("")) {
+ String errorMsg = mResource.getString(
+ PANELNAME+"_ERRORMSG");
+ setErrorMessage(errorMsg);
+ } else
+ setErrorMessage(str);
+ //dlg.setVisible(false);
+
+ endProgressStatus();
+ return false;
+ }
+
+ //startServer(wizardInfo);
+
+ //dlg.setVisible(false);
+
+ endProgressStatus();
+
+ if (!ready) {
+ String str = getErrorMessage(wizardInfo);
+ if (str.equals("")) {
+ String errorMsg = mResource.getString(
+ PANELNAME+"_ERRORMSG");
+ setErrorMessage(errorMsg);
+ } else
+ setErrorMessage(str);
+ }
+
+ return ready;
+ }
+
+ public void callHelp() {
+ CMSAdminUtil.help(HELPINDEX);
+ }
+
+ protected void init() {
+ GridBagLayout gb = new GridBagLayout();
+ GridBagConstraints gbc = new GridBagConstraints();
+ setLayout(gb);
+
+ JTextArea desc = createTextArea(mResource.getString(
+ PANELNAME+"_TEXT_HEADING_LABEL"));
+ CMSAdminUtil.resetGBC(gbc);
+ gbc.anchor = gbc.NORTHWEST;
+ gbc.weightx = 1.0;
+ gbc.weighty = 0.0;
+ gbc.insets = new Insets(COMPONENT_SPACE,COMPONENT_SPACE, 0,
+ COMPONENT_SPACE);
+ gbc.gridwidth = gbc.REMAINDER;
+ add(desc, gbc);
+
+/*
+ JPanel panel1 = new JPanel();
+ GridBagLayout gb1 = new GridBagLayout();
+ panel1.setLayout(gb1);
+ //panel1.setBorder(new EtchedBorder());
+
+ CMSAdminUtil.resetGBC(gbc);
+ gbc.anchor = gbc.NORTHWEST;
+ gbc.gridwidth = gbc.REMAINDER;
+ gbc.weightx = 1.0;
+ gbc.insets = new Insets(COMPONENT_SPACE, COMPONENT_SPACE,
+ COMPONENT_SPACE, COMPONENT_SPACE);
+ add(panel1, gbc);
+*/
+
+ JTextArea heading = createTextArea(mResource.getString(
+ PANELNAME+"_TEXT_HEADING1_LABEL"));
+ CMSAdminUtil.resetGBC(gbc);
+ gbc.anchor = gbc.NORTHWEST;
+ //gbc.fill = gbc.NONE;
+ gbc.weightx = 1.0;
+ gbc.gridwidth = gbc.REMAINDER;
+ gbc.insets = new Insets(2*COMPONENT_SPACE, COMPONENT_SPACE, COMPONENT_SPACE, 0);
+ add(heading, gbc);
+
+ JLabel tokenLbl = makeJLabel("TOKEN");
+ CMSAdminUtil.resetGBC(gbc);
+ gbc.anchor = gbc.NORTHEAST;
+ gbc.fill = gbc.NONE;
+ //gbc.gridwidth = gbc.REMAINDER;
+ gbc.insets = new Insets(COMPONENT_SPACE, 4*COMPONENT_SPACE, 0, COMPONENT_SPACE);
+ add(tokenLbl, gbc);
+
+ mTokenBox = new JComboBox();
+ CMSAdminUtil.resetGBC(gbc);
+ gbc.anchor = gbc.NORTHWEST;
+ //gbc.gridwidth = gbc.REMAINDER;
+ gbc.insets = new Insets(COMPONENT_SPACE, COMPONENT_SPACE, 0, 0);
+ add(mTokenBox, gbc);
+
+ JLabel dum = new JLabel(" ");
+ CMSAdminUtil.resetGBC(gbc);
+ gbc.anchor = gbc.NORTHWEST;
+ gbc.gridwidth = gbc.REMAINDER;
+ gbc.fill = gbc.BOTH;
+ gbc.weightx = 1.0;
+ gbc.insets = new Insets(COMPONENT_SPACE, COMPONENT_SPACE, 0, 0);
+ add(dum, gbc);
+
+ JTextArea passwordConfText = createTextArea(mResource.getString(
+ PANELNAME+"_TEXT_PASSWDCONF_LABEL"));
+ CMSAdminUtil.resetGBC(gbc);
+ gbc.anchor = gbc.NORTHWEST;
+ gbc.weightx = 1.0;
+ gbc.weighty = 0.0;
+ gbc.insets = new Insets(4*COMPONENT_SPACE,COMPONENT_SPACE, 0,
+ COMPONENT_SPACE);
+ gbc.gridwidth = gbc.REMAINDER;
+ add(passwordConfText, gbc);
+
+ mPasswordConf = makeJCheckBox("PASSWDCONF");
+ CMSAdminUtil.resetGBC(gbc);
+ gbc.anchor = gbc.NORTHWEST;
+ gbc.weightx = 1.0;
+ gbc.weighty = 0.0;
+ gbc.insets = new Insets(COMPONENT_SPACE,2*COMPONENT_SPACE, 0,
+ COMPONENT_SPACE);
+ gbc.gridwidth = gbc.REMAINDER;
+ add(mPasswordConf, gbc);
+
+ JLabel dummy = new JLabel(" ");
+ CMSAdminUtil.resetGBC(gbc);
+ gbc.anchor = gbc.NORTHWEST;
+ gbc.gridwidth = gbc.REMAINDER;
+ gbc.gridheight = gbc.REMAINDER;
+ gbc.fill = gbc.BOTH;
+ gbc.weightx = 1.0;
+ gbc.weighty = 1.0;
+ add(dummy, gbc);
+ }
+
+ public void getUpdateInfo(WizardInfo info) {
+ }
+}