/***************************************************
*
* cismet GmbH, Saarbruecken, Germany
*
* ... and it just works.
*
****************************************************/
package de.cismet.cids.client.tools;
import Sirius.navigator.connection.Connection;
import Sirius.navigator.connection.ConnectionFactory;
import Sirius.navigator.connection.ConnectionInfo;
import Sirius.navigator.connection.ConnectionSession;
import Sirius.navigator.connection.SessionManager;
import Sirius.navigator.connection.proxy.ConnectionProxy;
import org.apache.log4j.Logger;
import org.jdesktop.swingx.auth.LoginService;
import de.cismet.cids.navigator.utils.ClassCacheMultiple;
/**
* DOCUMENT ME!
*
* @author jruiz
* @version $Revision$, $Date$
*/
public class CidsAuthentification extends LoginService {
//~ Static fields/initializers ---------------------------------------------
private static final Logger LOG = Logger.getLogger(CidsAuthentification.class);
public static final String CONNECTION_PROXY_CLASS =
"Sirius.navigator.connection.proxy.DefaultConnectionProxyHandler";
public static final String CONNECTION_CLASS = "Sirius.navigator.connection.RESTfulConnection";
//~ Instance fields --------------------------------------------------------
private final String connectionClass;
private final String callServerURL;
private final String domain;
//~ Constructors -----------------------------------------------------------
/**
* Creates a new CidsAuthentification object.
*
* @param callServerURL DOCUMENT ME!
* @param domain DOCUMENT ME!
*/
public CidsAuthentification(final String callServerURL, final String domain) {
this.connectionClass = CONNECTION_CLASS;
this.callServerURL = callServerURL;
this.domain = domain;
}
/**
* Creates a new CidsAuthentification object.
*
* @param connectionClass DOCUMENT ME!
* @param callServerURL DOCUMENT ME!
* @param domain DOCUMENT ME!
*/
public CidsAuthentification(final String connectionClass, final String callServerURL, final String domain) {
this.connectionClass = connectionClass;
this.callServerURL = callServerURL;
this.domain = domain;
}
//~ Methods ----------------------------------------------------------------
/**
* DOCUMENT ME!
*
* @param name DOCUMENT ME!
* @param password DOCUMENT ME!
* @param server DOCUMENT ME!
*
* @return DOCUMENT ME!
*
* @throws Exception DOCUMENT ME!
*/
@Override
public boolean authenticate(final String name, final char[] password, final String server) throws Exception {
System.setProperty("sun.rmi.transport.connectionTimeout", "15");
final String[] split = name.split("@");
final String user = (split.length > 1) ? split[0] : name;
final String group = (split.length > 1) ? split[1] : null;
try {
final Connection connection = ConnectionFactory.getFactory()
.createConnection(connectionClass, callServerURL);
final ConnectionInfo connectionInfo = new ConnectionInfo();
connectionInfo.setCallserverURL(callServerURL);
connectionInfo.setPassword(new String(password));
connectionInfo.setUserDomain(domain);
connectionInfo.setUsergroup(group);
connectionInfo.setUsergroupDomain(domain);
connectionInfo.setUsername(user);
final ConnectionSession session = ConnectionFactory.getFactory()
.createSession(connection, connectionInfo, true);
final ConnectionProxy proxy = ConnectionFactory.getFactory().createProxy(CONNECTION_PROXY_CLASS, session);
SessionManager.init(proxy);
ClassCacheMultiple.setInstance(domain);
return true;
} catch (Throwable t) {
LOG.error("Fehler beim Anmelden", t);
return false;
}
}
}