📄 configurator.java
字号:
/*
* Copyright (c) 2001 Sun Microsystems, Inc. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution,
* if any, must include the following acknowledgment:
* "This product includes software developed by the
* Sun Microsystems, Inc. for Project JXTA."
* Alternately, this acknowledgment may appear in the software itself,
* if and wherever such third-party acknowledgments normally appear.
*
* 4. The names "Sun", "Sun Microsystems, Inc.", "JXTA" and "Project JXTA" must
* not be used to endorse or promote products derived from this
* software without prior written permission. For written
* permission, please contact Project JXTA at http://www.jxta.org.
*
* 5. Products derived from this software may not be called "JXTA",
* nor may "JXTA" appear in their name, without prior written
* permission of Sun.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL SUN MICROSYSTEMS OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of Project JXTA. For more
* information on Project JXTA, please see
* <http://www.jxta.org/>.
*
* This license is based on the BSD license adopted by the Apache Foundation.
*
* $Id: Configurator.java,v 1.2 2002/03/04 21:42:59 echtcherbina Exp $
*/
package net.jxta.impl.peergroup;
import java.net.*;
import java.util.*;
import java.io.*;
import java.awt.TextField;
import java.awt.event.*;
//added
import java.awt.Button;
import java.awt.Dialog;
import java.awt.Frame;
import java.awt.BorderLayout;
import java.awt.Label;
import java.awt.Panel;
import java.awt.Rectangle;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Dimension;
import java.awt.Point;
import net.jxta.protocol.PeerAdvertisement;
import net.jxta.protocol.TransportAdvertisement;
import net.jxta.impl.protocol.HTTPAdv;
import net.jxta.impl.protocol.TCPAdv;
import net.jxta.impl.endpoint.tls.TlsConfig;
import net.jxta.impl.endpoint.tls.JTlsUtil;
import net.jxta.peer.*;
import net.jxta.peergroup.*;
import net.jxta.resolver.*;
import net.jxta.id.*;
import net.jxta.exception.*;
import net.jxta.credential.*;
import net.jxta.document.*;
import org.apache.log4j.Category;
import org.apache.log4j.Priority;
/**
*Description of the Class
*/
public class Configurator {
static String configName = "PlatformConfig";
private final static Category LOG =
Category.getInstance(Configurator.class.getName());
PeerAdvertisement advertisement = null;
/**
* Constructor for the Configurator object
*
* @since 1.0
*/
public Configurator() {
// start with error as the default
//LOG.setPriority(Priority.toPriority("debug"));
load();
// Make sure it does not need a reconf
if (fixAdvertisement() == false) {
adjustLog4JPriority();
// if there's a password set, or a pass
// pop a dialog to get the password
checkPassword();
// Set Tls password, and check for
// changed password.
configureTls();
routerRdvMatch();
return;
}
try {
ConfigDialog ignore = new ConfigDialog(advertisement);
ignore.untilDone();
} catch (Throwable t) {
if (t instanceof JxtaError) {
throw (JxtaError) t;
}
if (LOG.isEnabledFor(Priority.ERROR))
LOG.error( "Could not initialize graphical config dialog", t );
BufferedReader in
= new BufferedReader(new InputStreamReader(System.in));
try {
while (in.ready()) {
in.readLine();
}
} catch (Exception e) {
}
System.out.println("The window-based configurator does not seem"
+ " to be usable.");
System.out.print("Do you want to stop and edit the current "
+ "configuration ? [no]: ");
String answer = "no";
try {
answer = in.readLine();
} catch (Exception e) {
}
// this will cover all the cases of the answer yes, while
// allowing non-gui/batch type scripts to load the platform
// see platform issue #45
if ("yes".equalsIgnoreCase(answer)) {
save();
System.out.println("Exiting; edit the file \"" + configName
+ "\", remove the file \"reconf\", and then"
+ ", launch JXTA again.");
throw new JxtaError("Manual Configuration Requested");
} else {
// Save that config.
save();
// save is done before RouterRdvMatch so that no original
// data is removed from the saved config.
routerRdvMatch();
System.out.println("Using the current configuration.");
}
}
// Set the global debug level.
adjustLog4JPriority();
// If password exists and is NOT
// the default password, then
// pop a dialog to get the password
// Otherwise, we will pass the default
// password as the password.
checkPassword();
// Configure fully TLS
// Set the password as a system property
configureTls();
// Add root certificate to the config adv
addRootCert();
// Save that config.
save();
// save is done before RouterRdvMatch so that no original data is
// removed from the saved config.
routerRdvMatch();
}
private void checkPassword() {
// If the passwd exists, then validate it.
//
// We are called for three cases:
// 1) Initial configuration of everything
// passwd file does not exist
// 2) REconfiguration: passwd file exists
// 3) REstarting the platfrom: passwd file exists
String password = System.getProperty("net.jxta.tls.password");
String principal = System.getProperty("net.jxta.tls.principal");
if (password != null && principal != null)
return;
if (JTlsUtil.passwdExists()) {
try {
new PasswordDialog();
} catch (Throwable t) {
System.out.println("The window-based authenticator does not "
+ "seem to be usable.");
System.out.println("You must authenticate through the "
+ "command-line.");
throw new JxtaError("Could not authenticate.");
}
}
}
private void configureTls() {
// We configure TLS after the configurator is done.
// Still waiting for the password GUI
String peerName = advertisement.getName();
String password = System.getProperty("net.jxta.tls.password");
String principal = System.getProperty("net.jxta.tls.principal");
// we done with it, rid of it
//PDA requirements 19.02.2002
//java.lang.System.setProperty(String key, String value) was not presented in jdk 1.1.8
//System.setProperty("net.jxta.tls.password", "");
Properties properties = System.getProperties();
properties.put("net.jxta.tls.password", "");
System.setProperties(properties);
//PDA requirements 19.02.2002
// Both the principal and the password are always
// set either by the configuration panel or
// security login.
TlsConfig.init(principal, password);
}
// add root certificate to the config Advertisement
public void addRootCert() {
StructuredTextDocument paramDoc =
(StructuredTextDocument)StructuredDocumentFactory.newStructuredDocument(
new MimeMediaType("text", "xml"),
"Parm");
String rootCert = null;
try {
rootCert = TlsConfig.getRootCert();
} catch (IOException e) {
// This should never happen unless the file system is trashed.
if (LOG.isEnabledFor(Priority.ERROR)) LOG.error("Cannot get root cert, Exception = ", e);
return;
}
Element e = paramDoc.createElement("RootCert", rootCert);
paramDoc.appendChild(e);
advertisement.putServiceParam(PeerGroup.peerGroupClassID, paramDoc);
}
//PDA requirements 19.02.2002
//javax.swing.JFrame -> java.awt.Frame
//class PasswordDialog extends javax.swing.JFrame implements ActionListener {
class PasswordDialog extends Frame implements ActionListener {
//PDA requirements 19.02.2002
TextField principalField = new TextField("", 20);
TextField passwordField = new TextField(20);
private boolean principalDone = false;
private boolean passwordDone = false;
/**
* Dialog to prompt for a password
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -