/*
* Copyright (C) 2006-2008 Alfresco Software Limited.
*
* 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; either version 2
* of the License, or (at your option) any later version.
* 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.
* As a special exception to the terms and conditions of version 2.0 of
* the GPL, you may redistribute this Program in connection with Free/Libre
* and Open Source Software ("FLOSS") applications as described in Alfresco's
* FLOSS exception. You should have recieved a copy of the text describing
* the FLOSS exception, and it is also available here:
* http://www.alfresco.com/legal/licensing"
*/
package org.alfresco.jlan.server.auth.ntlm;
import java.io.Serializable;
import java.util.Date;
/**
* NTLM Logon Details Class
*
* <p>Contains the details from the NTLM authentication session that was used to authenticate a user.
*
* @author gkspencer
*/
public class NTLMLogonDetails implements Serializable
{
// User name, workstation name and domain
private String m_user;
private String m_workstation;
private String m_domain;
// Authentication server name/address
private String m_authSrvAddr;
// Date/time the user was authenticated
private long m_authTime;
// User logged on via guest access
private boolean m_guestAccess;
// Cached type 2 NTLM message and copy of the NTLM hash used to successfully logon
private Type2NTLMMessage m_type2Msg;
private byte[] m_ntlmHash;
// Authentication token object
private Object m_authToken;
/**
* Default constructor
*/
public NTLMLogonDetails() {
}
/**
* Class constructor
*
* @param user String
* @param wks String
* @param domain String
* @param guest boolean
* @param authSrv String
*/
public NTLMLogonDetails(String user, String wks, String domain, boolean guest, String authSrv) {
setDetails(user, wks, domain, guest, authSrv);
}
/**
* Return the user name
*
* @return String
*/
public final String getUserName() {
return m_user;
}
/**
* Return the workstation name
*
* @return String
*/
public final String getWorkstation() {
return m_workstation;
}
/**
* Return the domain name
*
* @return String
*/
public final String getDomain() {
return m_domain;
}
/**
* Return the authentication server name/address
*
* @return String
*/
public final String getAuthenticationServer() {
return m_authSrvAddr;
}
/**
* Return the date/time the user was authenticated
*
* @return long
*/
public final long authenticatedAt() {
return m_authTime;
}
/**
* Determine if the type 2 NTLM message has been cached
*
* @return boolean
*/
public final boolean hasType2Message() {
return m_type2Msg != null ? true : false;
}
/**
* Return the cached type 2 NTLM message
*
* @return Type2NTLMMessage
*/
public final Type2NTLMMessage getType2Message() {
return m_type2Msg;
}
/**
* Determine if there is a cached NTLM hashed password
*
* @return boolean
*/
public final boolean hasNTLMHashedPassword() {
return m_ntlmHash != null ? true : false;
}
/**
* Return the cached NTLM hashed password
*
* @return byte[]
*/
public final byte[] getNTLMHashedPassword() {
return m_ntlmHash;
}
/**
* Return the challenge key from the type2 message
*
* @return byte[]
*/
public final byte[] getChallengeKey() {
if ( m_type2Msg != null)
return m_type2Msg.getChallenge();
return null;
}
/**
* Determine if there is a valid authentication token
*
* @return boolean
*/
public final boolean hasAuthenticationToken() {
return m_authToken != null ? true : false;
}
/**
* Return the authentication token
*
* @return Object
*/
public final Object getAuthenticationToken() {
return m_authToken;
}
/**
* Set the authentication token
*
* @param token Object
*/
public final void setAuthenticationToken(Object token) {
m_authToken = token;
}
/**
* Set the authentication date/time
*
* @param authTime long
*/
public final void setAuthenticatedAt(long authTime) {
m_authTime = authTime;
}
/**
* Set the client details
*
* @param user String
* @param wks String
* @param domain String
* @param guest boolean
* @param authSrv String
*/
public final void setDetails(String user, String wks, String domain, boolean guest, String authSrv) {
m_user = user;
m_workstation = wks;
m_domain = domain;
m_authSrvAddr = authSrv;
m_guestAccess = guest;
m_authTime = System.currentTimeMillis();
}
/**
* Set the type 2 NTLM message
*
* @param type2 Type2NTLMMessage
*/
public final void setType2Message(Type2NTLMMessage type2) {
m_type2Msg = type2;
}
/**
* Set the cached NTLM hashed password
*
* @param ntlmHash byte[]
*/
public final void setNTLMHashedPassword(byte[] ntlmHash) {
m_ntlmHash = ntlmHash;
}
/**
* Return the NTLM logon details as a string
*
* @return String
*/
public String toString() {
StringBuffer str = new StringBuffer();
str.append("[");
str.append(getUserName());
str.append(",Wks:");
str.append(getWorkstation());
str.append(",Dom:");
str.append(getDomain());
str.append(",AuthSrv:");
str.append(getAuthenticationServer());
str.append(",");
str.append(new Date(authenticatedAt()));
str.append("]");
return str.toString();
}
}