/**********************************************************************
* $Source: /cvsroot/jameica/jameica.webadmin/src/de/willuhn/jameica/webadmin/Settings.java,v $
* $Revision: 1.4 $
* $Date: 2010/11/02 00:56:31 $
* $Author: willuhn $
* $Locker: $
* $State: Exp $
*
* Copyright (c) by willuhn.webdesign
* All rights reserved
*
**********************************************************************/
package de.willuhn.jameica.webadmin;
import java.io.IOException;
import java.net.BindException;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.UnknownHostException;
import de.willuhn.jameica.security.Wallet;
import de.willuhn.jameica.system.Application;
import de.willuhn.logging.Logger;
import de.willuhn.util.ApplicationException;
/**
* Container fuer die Einstellungen.
*/
public class Settings
{
/**
* Die Einstellungen des Plugins.
*/
public final static de.willuhn.jameica.system.Settings SETTINGS = Application.getPluginLoader().getPlugin(Plugin.class).getResources().getSettings();
private static Wallet wallet = null;
/**
* Liefert den TCP-Port fuer den Server.
* @return der TCP-Port.
*/
public static int getPort()
{
return SETTINGS.getInt("listener.http.port",8080);
}
/**
* Speichert den zu verwendenden TCP-Port.
* @param port der Port.
* @throws ApplicationException
*/
public static void setPort(int port) throws ApplicationException
{
if (port == getPort())
{
// hat sich nicht geaendert
return;
}
if (port < 1 || port > 65535)
throw new ApplicationException(Application.getI18n().tr("TCP-Portnummer f�r Webadmin ausserhalb des g�ltigen Bereichs von {0} bis {1}", new String[]{""+1,""+65535}));
ServerSocket s = null;
try
{
// Wir machen einen Test auf dem Port wenn es nicht der aktuelle ist
Logger.info("testing TCP port " + port);
s = new ServerSocket(port);
}
catch (BindException e)
{
throw new ApplicationException(Application.getI18n().tr("Die angegebene TCP-Portnummer f�r Webadmin {0} ist bereits belegt",""+port));
}
catch (IOException ioe)
{
Logger.error("error while opening socket on port " + port);
throw new ApplicationException(Application.getI18n().tr("Fehler beim Testen der TCP-Portnummer f�r Webadmin {0}. Ist der Port bereits belegt?",""+port));
}
finally
{
if (s != null)
{
try
{
s.close();
}
catch (Exception e)
{
// ignore
}
}
}
SETTINGS.setAttribute("listener.http.port",port);
}
/**
* Liefert die Adresse, an die der Server gebunden werden soll.
* @return die Adresse, an die der Server gebunden werden soll oder <code>null</code> fuer alle.
*/
public static InetAddress getAddress()
{
String s = SETTINGS.getString("listener.http.address",null);
if (s == null)
return null;
try
{
return InetAddress.getByName(s);
}
catch (UnknownHostException e)
{
Logger.error("unable to resolve address " + s,e);
}
return null;
}
/**
* Speichert die Adresse, an die der Server gebunden werden soll.
* @param address die Adresse, an die der Server gebunden werden soll oder <code>null</code> fuer alle.
*/
public static void setAddress(InetAddress address)
{
SETTINGS.setAttribute("listener.http.address",address == null ? null : address.getHostAddress());
}
/**
* Liefert true, wenn die Kommunikation SSL-verschluesselt werden soll.
* @return true, wenn SSL verwendet wird.
*/
public static boolean getUseSSL()
{
return SETTINGS.getBoolean("listener.http.ssl",true);
}
/**
* Legt fest, ob SSL verwendet werden soll.
* @param ssl true, wenn SSL verwendet werden soll.
*/
public static void setUseSSL(boolean ssl)
{
SETTINGS.setAttribute("listener.http.ssl",ssl);
}
/**
* Liefert true, wenn das Jameica-Masterpasswort als HTTP-Authorisierung abgefragt werden soll.
* @return true, wenn das Passwort abgefragt werden soll.
*/
public static boolean getUseAuth()
{
return SETTINGS.getBoolean("listener.http.auth",true);
}
/**
* Legt fest, ob das Jameica-Masterpasswort als HTTP-Authorisierung abgefragt werden soll.
* @param auth true, wenn das Passwort abgefragt werden soll.
*/
public static void setUseAuth(boolean auth)
{
SETTINGS.setAttribute("listener.http.auth",auth);
}
/**
* Liefert das zu verwendende Passwort fuer die Jameica-Instanz.
* @param jameicaUrl URL der Jameica-Instanz.
* @return Passwort.
* @throws Exception
*/
public static String getServerPassword(String jameicaUrl) throws Exception
{
return (String) getWallet().get(jameicaUrl + ".password");
}
/**
* Speichert das zu verwendende Passwort fuer die Jameica-Instanz.
* @param jameicaUrl URL der Jameica-Instanz.
* @param password das Passwort.
* @throws Exception
*/
public static void setServerPassword(String jameicaUrl, String password) throws Exception
{
getWallet().set(jameicaUrl + ".password",password);
}
/**
* Liefert ein Wallet zum verschluesselten Speichern der Passwoerter.
* @return Wallet.
* @throws Exception
*/
private static synchronized Wallet getWallet() throws Exception
{
if (wallet == null)
wallet = new Wallet(Settings.class);
return wallet;
}
}
/*********************************************************************
* $Log: Settings.java,v $
* Revision 1.4 2010/11/02 00:56:31 willuhn
* @N Umstellung des Webfrontends auf Velocity/Webtools
*
* Revision 1.3 2009/01/06 01:44:14 willuhn
* @N Code zum Hinzufuegen von Servern erweitert
*
* Revision 1.2 2008/07/02 17:43:00 willuhn
* @N Remote-Administrierbarkeit
*
* Revision 1.1 2007/04/12 13:35:17 willuhn
* @N SSL-Support
* @N Authentifizierung
* @N Korrektes Logging
*
**********************************************************************/