package jeffaschenk.commons.container.security.object;
import jeffaschenk.commons.container.session.PagableSearchCriteria;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
import java.math.BigInteger;
import java.util.*;
/**
* Security Session Object
* Provides Authenticated User or Process Session Information.
*
* @author jeffaschenk@gmail.com
* @version $Id: $
*/
public class SecuritySessionUserObject implements UserDetails, java.io.Serializable {
private static final long serialVersionUID = 1109L;
public static final String SECURITY_SESSION_USER_OBJECT_NAME = "securitySessionUserObject";
/**
* Session SId
*/
private String sessionSid;
/**
* Session Id
*/
private String sessionId;
/**
* Security Session authenticated Principal
* <p/>
* This contains the emailAddress or ScreeName for a User.
*/
private String principal;
private String password;
/**
* Security Session authenticated Principal's
* Login Time.
*/
private long loginTime;
/**
* Security Session authenticated Principal's
* Current Calculated Login Duration.
*/
private long currentDuration;
/**
* Registered User's Row Identifier
*/
private BigInteger registeredUserId;
/**
* Registered User's Optional Profile Row Identifier
*/
private BigInteger registeredUserProfileId;
/**
* Registered User's SID
*/
private String registeredUserSid;
/**
* Registered User's Screen Name
*/
private String screenName;
/**
* Registered User's Email Address
*/
private String emailAddress;
/**
* User Status
*/
private String userStatus;
/**
* Sign-on Attempts
*/
private int signOnAttempts;
/**
* Failed Sign-on Attempts
*/
private int failedSignOnAttempts;
/**
* User Profile
*/
private SecuritySessionProfileObject securitySessionProfileObject;
/**
* User Roles
*/
private List<SecuritySessionRoleObject> securitySessionRoles = new ArrayList<SecuritySessionRoleObject>();
/**
* User Permissions
*/
private List<SecuritySessionPermissionObject> securitySessionPermissions = new ArrayList<SecuritySessionPermissionObject>();
/**
* Saved Search Criteria for this Users Session.
*/
private Map<String, PagableSearchCriteria> savedSearchCriteria
= new HashMap<>();
/**
* Granted Authorities for this User Session
*/
private Collection<GrantedAuthority> authorities = new ArrayList<>();
/**
* Default Constructor
*/
public SecuritySessionUserObject() {
this.loginTime = System.currentTimeMillis();
this.currentDuration = 0;
}
/**
* Constructor with specified Principal
*
* @param principal a {@link java.lang.String} object.
*/
public SecuritySessionUserObject(String principal) {
this.principal = principal;
this.loginTime = System.currentTimeMillis();
this.currentDuration = 0;
}
/**
* SessionId
*
* @return {@link java.lang.String} object.
*/
public String getSessionSid() {
return sessionSid;
}
/**
* Session ID
*
* @return String of Represented Session ID if set.
*/
public String getSessionId() {
return sessionId;
}
public void setSessionId(String sessionId) {
this.sessionId = sessionId;
}
/**
* Obtain the Principal
*
* @return {@link java.lang.String} object.
*/
public String getPrincipal() {
return principal;
}
/**
* <p>Setter for the field <code>principal</code>.</p>
*
* @param principal a {@link java.lang.String} object.
*/
public void setPrincipal(String principal) {
this.principal = principal;
}
/**
* Obtain the loginTime
*
* @return long
*/
public long getLoginTime() {
return loginTime;
}
/**
* <p>Setter for the field <code>loginTime</code>.</p>
*
* @param loginTime a long.
*/
public void setLoginTime(long loginTime) {
this.loginTime = loginTime;
}
/**
* Obtain the currentDuration
*
* @return long
*/
public long getCurrentDuration() {
return currentDuration;
}
/**
* <p>Setter for the field <code>currentDuration</code>.</p>
*
* @param currentDuration a long.
*/
public void setCurrentDuration(long currentDuration) {
this.currentDuration = currentDuration;
}
public String getRegisteredUserSid() {
return registeredUserSid;
}
public void setRegisteredUserSid(String registeredUserSid) {
this.registeredUserSid = registeredUserSid;
}
public BigInteger getRegisteredUserId() {
return registeredUserId;
}
public void setRegisteredUserId(BigInteger registeredUserId) {
this.registeredUserId = registeredUserId;
}
public BigInteger getRegisteredUserProfileId() {
return registeredUserProfileId;
}
public void setRegisteredUserProfileId(BigInteger registeredUserProfileId) {
this.registeredUserProfileId = registeredUserProfileId;
}
public String getFirstName() {
return (securitySessionProfileObject == null) ? null : securitySessionProfileObject.getFirstName();
}
public String getLastName() {
return (securitySessionProfileObject == null) ? null : securitySessionProfileObject.getLastName();
}
public String getEmailAddress() {
return emailAddress;
}
public void setEmailAddress(String emailAddress) {
this.emailAddress = emailAddress;
}
public String getScreenName() {
return screenName;
}
public void setScreenName(String screenName) {
this.screenName = screenName;
}
public String getUserStatus() {
return userStatus;
}
public void setUserStatus(String userStatus) {
this.userStatus = userStatus;
}
public SecuritySessionProfileObject getSecuritySessionProfileObject() {
return securitySessionProfileObject;
}
public void setSecuritySessionProfileObject(SecuritySessionProfileObject securitySessionProfileObject) {
this.securitySessionProfileObject = securitySessionProfileObject;
}
public List<SecuritySessionRoleObject> getSecuritySessionRoles() {
return securitySessionRoles;
}
public void setSecuritySessionRoles(List<SecuritySessionRoleObject> securitySessionRoles) {
this.securitySessionRoles = securitySessionRoles;
}
public List<SecuritySessionPermissionObject> getSecuritySessionPermissions() {
return securitySessionPermissions;
}
public void setSecuritySessionPermissions(List<SecuritySessionPermissionObject> securitySessionPermissions) {
this.securitySessionPermissions = securitySessionPermissions;
}
/**
* Saved Search Criteria
*
* @return {@link java.util.Map} object.
*/
public Map<String, PagableSearchCriteria> getSavedSearchCriteria() {
return savedSearchCriteria;
}
/**
* <p>Setter for the field <code>savedSearchCriteria</code>.</p>
*
* @param savedSearchCriteria the savedSearchCriteria to set
*/
public void setSavedSearchCriteria(
Map<String, PagableSearchCriteria> savedSearchCriteria) {
this.savedSearchCriteria = savedSearchCriteria;
}
/**
* <p>Setter for the field <code>savedSearchCriteria</code>.</p>
*
* @param pagableSearchCriteria a {@link jeffaschenk.commons.container.session.PagableSearchCriteria} object.
*/
public void setSavedSearchCriteria(PagableSearchCriteria pagableSearchCriteria) {
if ((pagableSearchCriteria != null) && (pagableSearchCriteria.getName() != null) &&
(pagableSearchCriteria.getName().trim().length() > 0)) {
this.savedSearchCriteria.put(pagableSearchCriteria.getName(), pagableSearchCriteria);
}
}
/**
* <p>Getter for the field <code>savedSearchCriteria</code>.</p>
*
* @param name a {@link java.lang.String} object.
* @return {@link jeffaschenk.commons.container.session.PagableSearchCriteria} object.
*/
public PagableSearchCriteria getSavedSearchCriteria(String name) {
if ((name != null) &&
(name.trim().length() > 0) &&
(this.savedSearchCriteria.get(name) != null)) {
return this.savedSearchCriteria.get(name);
} else {
return new PagableSearchCriteria(name);
}
}
@Override
public Collection<GrantedAuthority> getAuthorities() {
return this.authorities;
}
@Override
public String getPassword() {
return this.password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String getUsername() {
return this.getScreenName();
}
@Override
public boolean isAccountNonExpired() {
return true;
}
@Override
public boolean isAccountNonLocked() {
return true;
}
@Override
public boolean isCredentialsNonExpired() {
return true;
}
@Override
public boolean isEnabled() {
return true;
}
/**
* {@inheritDoc}
* <p/>
* Override for hasCode based upon Principal.
*/
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result
+ ((principal == null) ? 0 : principal.hashCode());
return result;
}
/**
* {@inheritDoc}
* <p/>
* Override for equals based upon Principal.
*/
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
SecuritySessionUserObject other = (SecuritySessionUserObject) obj;
if (principal == null) {
if (other.principal != null)
return false;
} else if (!principal.equals(other.principal))
return false;
return true;
}
/**
* {@inheritDoc}
* <p/>
* Override for toString Method.
*/
@Override
public String toString() {
return "Principal:[" + this.getPrincipal() + "], Session Sid:[" + this.getSessionSid() + "], Login Time:[" + this.getLoginTime() + "]";
}
}