1b28a5538SAdam Hornacek /* 2b28a5538SAdam Hornacek * CDDL HEADER START 3b28a5538SAdam Hornacek * 4b28a5538SAdam Hornacek * The contents of this file are subject to the terms of the 5b28a5538SAdam Hornacek * Common Development and Distribution License (the "License"). 6b28a5538SAdam Hornacek * You may not use this file except in compliance with the License. 7b28a5538SAdam Hornacek * 8b28a5538SAdam Hornacek * See LICENSE.txt included in this distribution for the specific 9b28a5538SAdam Hornacek * language governing permissions and limitations under the License. 10b28a5538SAdam Hornacek * 11b28a5538SAdam Hornacek * When distributing Covered Code, include this CDDL HEADER in each 12b28a5538SAdam Hornacek * file and include the License file at LICENSE.txt. 13b28a5538SAdam Hornacek * If applicable, add the following below this CDDL HEADER, with the 14b28a5538SAdam Hornacek * fields enclosed by brackets "[]" replaced with your own identifying 15b28a5538SAdam Hornacek * information: Portions Copyright [yyyy] [name of copyright owner] 16b28a5538SAdam Hornacek * 17b28a5538SAdam Hornacek * CDDL HEADER END 18b28a5538SAdam Hornacek */ 19b28a5538SAdam Hornacek 20b28a5538SAdam Hornacek /* 21*cf8d876bSVladimir Kotal * Copyright (c) 2017, 2022, Oracle and/or its affiliates. All rights reserved. 22b28a5538SAdam Hornacek */ 23b28a5538SAdam Hornacek package opengrok.auth.plugin.entity; 24b28a5538SAdam Hornacek 25b28a5538SAdam Hornacek import java.util.Date; 26b28a5538SAdam Hornacek import java.util.HashMap; 27b28a5538SAdam Hornacek import java.util.Map; 28b28a5538SAdam Hornacek 29b28a5538SAdam Hornacek public class User { 30b28a5538SAdam Hornacek 31b28a5538SAdam Hornacek private String id; 32b28a5538SAdam Hornacek private String username; 33b28a5538SAdam Hornacek private Date cookieTimestamp; 34b28a5538SAdam Hornacek private boolean timeouted; 35b28a5538SAdam Hornacek private final Map<String, Object> attrs = new HashMap<>(); 36b28a5538SAdam Hornacek User(String username)37b28a5538SAdam Hornacek public User(String username) { 38b28a5538SAdam Hornacek this.username = username; 39b28a5538SAdam Hornacek } 40b28a5538SAdam Hornacek 41e689929eSVladimir Kotal /** 42e689929eSVladimir Kotal * Construct User object. 43e689929eSVladimir Kotal * @param username username 44e689929eSVladimir Kotal * @param id user ID 45e689929eSVladimir Kotal */ User(String username, String id)46e689929eSVladimir Kotal public User(String username, String id) { 47e689929eSVladimir Kotal this.username = username; 48*cf8d876bSVladimir Kotal this.id = id; 49e689929eSVladimir Kotal } 50e689929eSVladimir Kotal 51e689929eSVladimir Kotal /** 52e689929eSVladimir Kotal * Construct User object. 53e689929eSVladimir Kotal * @param username username 54e689929eSVladimir Kotal * @param id user ID 55e689929eSVladimir Kotal * @param cookieTimestamp cookie time stamp 56e689929eSVladimir Kotal * @param timeouted is the user timed out 57e689929eSVladimir Kotal */ User(String username, String id, Date cookieTimestamp, boolean timeouted)58b28a5538SAdam Hornacek public User(String username, String id, Date cookieTimestamp, boolean timeouted) { 59*cf8d876bSVladimir Kotal this(username, id); 60b28a5538SAdam Hornacek this.cookieTimestamp = cookieTimestamp; 61b28a5538SAdam Hornacek this.timeouted = timeouted; 62b28a5538SAdam Hornacek } 63b28a5538SAdam Hornacek getId()64b28a5538SAdam Hornacek public String getId() { 65b28a5538SAdam Hornacek return id; 66b28a5538SAdam Hornacek } 67b28a5538SAdam Hornacek setId(String id)68b28a5538SAdam Hornacek public void setId(String id) { 69b28a5538SAdam Hornacek this.id = id; 70b28a5538SAdam Hornacek } 71b28a5538SAdam Hornacek getUsername()72b28a5538SAdam Hornacek public String getUsername() { 73b28a5538SAdam Hornacek return username; 74b28a5538SAdam Hornacek } 75b28a5538SAdam Hornacek setUsername(String username)76b28a5538SAdam Hornacek public void setUsername(String username) { 77b28a5538SAdam Hornacek this.username = username; 78b28a5538SAdam Hornacek } 79b28a5538SAdam Hornacek getCookieTimestamp()80b28a5538SAdam Hornacek public Date getCookieTimestamp() { 81b28a5538SAdam Hornacek return cookieTimestamp; 82b28a5538SAdam Hornacek } 83b28a5538SAdam Hornacek setCookieTimestamp(Date cookieTimestamp)84b28a5538SAdam Hornacek public void setCookieTimestamp(Date cookieTimestamp) { 85b28a5538SAdam Hornacek this.cookieTimestamp = cookieTimestamp; 86b28a5538SAdam Hornacek } 87b28a5538SAdam Hornacek getTimeouted()88b28a5538SAdam Hornacek public boolean getTimeouted() { 89b28a5538SAdam Hornacek return timeouted; 90b28a5538SAdam Hornacek } 91b28a5538SAdam Hornacek setTimeouted(boolean timeouted)92b28a5538SAdam Hornacek public void setTimeouted(boolean timeouted) { 93b28a5538SAdam Hornacek this.timeouted = timeouted; 94b28a5538SAdam Hornacek } 95b28a5538SAdam Hornacek isTimeouted()96b28a5538SAdam Hornacek public boolean isTimeouted() { 97b28a5538SAdam Hornacek return timeouted; 98b28a5538SAdam Hornacek } 99b28a5538SAdam Hornacek 100b28a5538SAdam Hornacek /** 101ff44f24aSAdam Hornáček * Implemented for the forced authentication as described in 102ff44f24aSAdam Hornáček * <a href="https://docs.oracle.com/cd/B28196_01/idmanage.1014/b15997/mod_osso.htm#i1006381">mod_osso documentation</a>. 103b28a5538SAdam Hornacek * 104b28a5538SAdam Hornacek * @param forcedAuthDate the date of the forced authentication trigger 105b28a5538SAdam Hornacek * @param newLoginDate the date of the new login 106b28a5538SAdam Hornacek * @return true if login date was before forced auth date or cookie timestamp 107b28a5538SAdam Hornacek */ isForcedTimeouted(Date forcedAuthDate, Date newLoginDate)108b28a5538SAdam Hornacek public boolean isForcedTimeouted(Date forcedAuthDate, Date newLoginDate) { 109b28a5538SAdam Hornacek if (cookieTimestamp == null || forcedAuthDate == null || newLoginDate == null) { 110b28a5538SAdam Hornacek return true; 111b28a5538SAdam Hornacek } 112b28a5538SAdam Hornacek 113b28a5538SAdam Hornacek return newLoginDate.before(forcedAuthDate) || newLoginDate.before(cookieTimestamp); 114b28a5538SAdam Hornacek } 115b28a5538SAdam Hornacek 116b28a5538SAdam Hornacek /** 117b28a5538SAdam Hornacek * Get custom user property. 118b28a5538SAdam Hornacek * 119b28a5538SAdam Hornacek * @param key the key 120b28a5538SAdam Hornacek * @return the the value associated with the key 121b28a5538SAdam Hornacek */ getAttribute(String key)122b28a5538SAdam Hornacek public Object getAttribute(String key) { 123b28a5538SAdam Hornacek return attrs.get(key); 124b28a5538SAdam Hornacek } 125b28a5538SAdam Hornacek 126b28a5538SAdam Hornacek /** 127b28a5538SAdam Hornacek * Set custom user property. 128b28a5538SAdam Hornacek * 129b28a5538SAdam Hornacek * @param key the key 130b28a5538SAdam Hornacek * @param value the value 131b28a5538SAdam Hornacek * @return the value previously associated with the key 132b28a5538SAdam Hornacek */ setAttribute(String key, Object value)133b28a5538SAdam Hornacek public Object setAttribute(String key, Object value) { 134b28a5538SAdam Hornacek return attrs.put(key, value); 135b28a5538SAdam Hornacek } 136b28a5538SAdam Hornacek 137b28a5538SAdam Hornacek /** 138b28a5538SAdam Hornacek * Remote custom user property. 139b28a5538SAdam Hornacek * 140b28a5538SAdam Hornacek * @param key the key 141b28a5538SAdam Hornacek * @return the value previously associated with the key 142b28a5538SAdam Hornacek */ removeAttribute(String key)143b28a5538SAdam Hornacek public Object removeAttribute(String key) { 144b28a5538SAdam Hornacek return attrs.remove(key); 145b28a5538SAdam Hornacek } 146b28a5538SAdam Hornacek 147b28a5538SAdam Hornacek @Override toString()148b28a5538SAdam Hornacek public String toString() { 149ff44f24aSAdam Hornáček return "User{" + "id=" + id + ", username=" + username + ", cookieTimestamp=" + cookieTimestamp + 150ff44f24aSAdam Hornáček ", timeouted=" + timeouted + ", attrs=" + attrs + '}'; 151b28a5538SAdam Hornacek } 152b28a5538SAdam Hornacek } 153