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