SecuritySession.java
/*
** Module : SecuritySession.java
** Abstract : Maintains per connection data.
**
** Copyright (c) 2004-2024, Golden Code Development Corporation.
**
** -#- -I- --Date-- --JPRM-- ---------------------------------Description-----------------------------------
** 001 NVS 20050307 @20214 Created. The Session class maintains per connection data.
** 002 NVS 20050505 @21111 Added getCache() method that returns the instance of the security cache this
** session is bound to. This helps in fixing the security cache refresh bug.
** 003 GES 20090610 @42763 Added timestamp of when the session was created which is essentially the same
** thing as when the account logon occurred.
** 004 GES 20090622 @42785 Removed unnecessary set and accessor.
** 005 GES 20210921 Added flags to remember the userid and if the session is interactive.
** 006 GBB 20231117 Added fields sessionUuid, relatedSessionUuid, pid, osUser, driverType,
** httpPort, description, browserWebSocket.
** 007 GBB 20231130 driverClass replaced by driverName.
** 008 GBB 20240313 Class made public, while setters package-private.
** Renamed to SecuritySession to resolve ambigious imports.
*/
/*
** This program is free software: you can redistribute it and/or modify
** it under the terms of the GNU Affero General Public License as
** published by the Free Software Foundation, either version 3 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 Affero General Public License for more details.
**
** You may find a copy of the GNU Affero GPL version 3 at the following
** location: https://www.gnu.org/licenses/agpl-3.0.en.html
**
** Additional terms under GNU Affero GPL version 3 section 7:
**
** Under Section 7 of the GNU Affero GPL version 3, the following additional
** terms apply to the works covered under the License. These additional terms
** are non-permissive additional terms allowed under Section 7 of the GNU
** Affero GPL version 3 and may not be removed by you.
**
** 0. Attribution Requirement.
**
** You must preserve all legal notices or author attributions in the covered
** work or Appropriate Legal Notices displayed by works containing the covered
** work. You may not remove from the covered work any author or developer
** credit already included within the covered work.
**
** 1. No License To Use Trademarks.
**
** This license does not grant any license or rights to use the trademarks
** Golden Code, FWD, any Golden Code or FWD logo, or any other trademarks
** of Golden Code Development Corporation. You are not authorized to use the
** name Golden Code, FWD, or the names of any author or contributor, for
** publicity purposes without written authorization.
**
** 2. No Misrepresentation of Affiliation.
**
** You may not represent yourself as Golden Code Development Corporation or FWD.
**
** You may not represent yourself for publicity purposes as associated with
** Golden Code Development Corporation, FWD, or any author or contributor to
** the covered work, without written authorization.
**
** 3. No Misrepresentation of Source or Origin.
**
** You may not represent the covered work as solely your work. All modified
** versions of the covered work must be marked in a reasonable way to make it
** clear that the modified work is not originating from Golden Code Development
** Corporation or FWD. All modified versions must contain the notices of
** attribution required in this license.
*/
package com.goldencode.p2j.security;
/**
* Package private class that maintains all per connection data. Particularly,
* the reference to the generation of the <code>SecurityCache</code> that is
* in effect when the session is created, is kept here. This allows for a safe
* fading out of all older generations of <code>SecurityCache</code> as soon
* as the last session referring to the old <code>SecurityCache</code> goes
* away.
*/
public class SecuritySession
{
/** An object that serves as an ID of this connection */
private Object id = null;
/** security context created for this session */
private SecurityContext context = null;
/** security cache in effect by the time of session creation */
private SecurityCache cache = null;
/** Timestamp of when this session was created. */
private long timestamp = System.currentTimeMillis();
/** Account name. */
private String userid = null;
/** Flag to mark a session as an interactive user. */
private boolean interactive = false;
/** The session UUID. */
private String sessionUuid;
/** The related session UUID. */
private String relatedSessionUuid;
/** The client driver name. */
private String driverName;
/** The related session UUID. */
private long pid;
/** The related session UUID. */
private String osUserName;
/** The web client HTTP port. */
private int httpPort;
/** Session description from SsoAuthenticator. */
private String description;
/** The browser WebSocket address. */
private String browserWebSocket;
/**
* Package private constructor for client side Session.
*
* @param id
* session ID, normally the socket that maps the connection
* @param cache
* reference to a <code>SecurityCache</code>
*/
SecuritySession(Object id, SecurityCache cache)
{
this.id = id;
this.cache = cache;
}
/**
* Package private constructor for server side Session.
*
* @param id
* session ID, normally the socket that maps the connection
* @param cache
* reference to a <code>SecurityCache</code>
* @param context
* security context to be associated with the session
*/
SecuritySession(Object id, SecurityCache cache, SecurityContext context)
{
this(id, cache);
this.context = context;
}
/**
* Sets the ui driver class.
*
* @param driverName
* The ui driver class.
*/
void setDriverName(String driverName)
{
this.driverName = driverName;
}
/**
* Returns the client ui driver class.
*
* @return See above.
*/
public String getDriverName()
{
return driverName;
}
/**
* Sets the client pid.
*
* @param pid
* The client pid.
*/
void setPid(long pid)
{
this.pid = pid;
}
/**
* Returns the client pid.
*
* @return See above.
*/
public long getPid()
{
return pid;
}
/**
* Sets the OS user name.
*
* @param osUserName
* The OS user name.
*/
void setOsUserName(String osUserName)
{
this.osUserName = osUserName;
}
/**
* Returns the OS user name.
*
* @return See above.
*/
public String getOsUserName()
{
return osUserName;
}
/**
* Returns the session description from SsoAuthenticator.
*
* @return See above.
*/
public String getDescription()
{
return description;
}
/**
* Sets the session description from SsoAuthenticator.
*
* @param description
* The session description from SsoAuthenticator.
*/
void setDescription(String description)
{
this.description = description;
}
/**
* Returns the web client HTTP port.
*
* @return See above.
*/
public int getHttpPort()
{
return httpPort;
}
/**
* Sets the web client HTTP port.
*
* @param httpPort
* The web client HTTP port.
*/
void setHttpPort(int httpPort)
{
this.httpPort = httpPort;
}
/**
* Gets the browser WebSocket address.
*
* @return The browser WebSocket address.
*/
public String getBrowserWebSocket()
{
return browserWebSocket;
}
/**
* Sets the browser WebSocket address.
*
* @param browserWebSocket
* The browser WebSocket address.
*/
void setBrowserWebSocket(String browserWebSocket)
{
this.browserWebSocket = browserWebSocket;
}
/**
* Checks whether this session was created with the specified security
* context.
*
* @param context
* security context to check
* @return <code>true</code> if security context matches
*/
boolean hasContext(SecurityContext context)
{
return this.context == context;
}
/**
* Gets the session ID object.
*
* @return session ID object
*/
Object getSessionId()
{
return id;
}
/**
* Gets session UUID.
*
* @return session UUID.
*/
public String getUid()
{
return sessionUuid;
}
/**
* Gets related session UUID.
*
* @return related session UUID.
*/
public String getRelatedSessionUuid()
{
return relatedSessionUuid;
}
/**
* Sets the session UUID.
*
* @param uuid
* The session UUID.
*/
void setUuid(String uuid)
{
this.sessionUuid = uuid;
}
/**
* Sets the uuid of the original session (different from uuid when forked).
*
* @param relatedUuid
* The uuid of the related session.
*/
void setRelatedSessionUuid(String relatedUuid)
{
this.relatedSessionUuid = relatedUuid;
}
/**
* Gets the session's account name.
*
* @return The userid.
*/
String getUserid()
{
return userid;
}
/**
* Set the session's account name.
*
* @param userid
* The account name.
*/
void setUserid(String userid)
{
this.userid = userid;
}
/**
* Mark the session as interactive.
*/
void setInteractive()
{
interactive = true;
}
/**
* Reports if the session is interactive.
*
* @return {@code true} if the session is interactive.
*/
boolean isInteractive()
{
return interactive;
}
/**
* Gets the session security context.
*
* @return session <code>SecurityContext</code>
*/
SecurityContext getSecurityContext()
{
return context;
}
/**
* Gets the security cache this session is bound to.
*
* @return session <code>SecurityCache</code>
*/
SecurityCache getCache()
{
return cache;
}
/**
* Obtain the timestamp of when this session was created.
*
* @return Milliseconds since the January 1, 1970.
*/
public long getTimeStamp()
{
return timestamp;
}
}