001/* 002 Licensed to the Apache Software Foundation (ASF) under one 003 or more contributor license agreements. See the NOTICE file 004 distributed with this work for additional information 005 regarding copyright ownership. The ASF licenses this file 006 to you under the Apache License, Version 2.0 (the 007 "License"); you may not use this file except in compliance 008 with the License. You may obtain a copy of the License at 009 010 http://www.apache.org/licenses/LICENSE-2.0 011 012 Unless required by applicable law or agreed to in writing, 013 software distributed under the License is distributed on an 014 "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 015 KIND, either express or implied. See the License for the 016 specific language governing permissions and limitations 017 under the License. 018 */ 019package org.apache.wiki.auth.user; 020 021import java.io.Serializable; 022import java.util.ArrayList; 023import java.util.Date; 024import java.util.List; 025import java.util.Map; 026 027/** 028 * Class for representing wiki user information, such as the login name, full 029 * name, wiki name, and e-mail address. Note that since 2.6 the wiki name is 030 * required to be automatically computed from the full name. 031 * As of 2.8, user profiles can store custom key/value String/Serializable attributes, and store 032 * a unique ID. Locks are checked by {@link org.apache.wiki.auth.AuthenticationManager}; 033 * if a profile is locked, the user cannot log with that profile. 034 * @since 2.3 035 */ 036public interface UserProfile extends Serializable 037{ 038 /** 039 * IP 040 */ 041 String ATTR_PREVIOUS_LOGIN_IP = "PREVIOUS_LOGIN_IP"; 042 /** 043 * LONG time in ms since epoch 044 */ 045 String ATTR_PREVIOUS_LOGIN_TIMESTAMP = "PREVIOUS_LOGIN_TIMESTAMP"; 046 /** 047 * IP 048 */ 049 String ATTR_CURRENT_LOGIN_IP = "CURRENT_LOGIN_IP"; 050 /** 051 * LONG time in ms since epoch 052 */ 053 String ATTR_CURRENT_LOGIN_TIMESTAMP = "CURRENT_LOGIN_TIMESTAMP"; 054 055 /** 056 * Returns the attributes associated with this profile as a Map of key/value pairs. 057 * The Map should generally be a "live" Map; changes to the keys or values will be reflected 058 * in the UserProfile. 059 * @return the attributes 060 */ 061 Map<String,Serializable> getAttributes(); 062 063 /** 064 * Returns the creation date. 065 * @return the creation date 066 */ 067 Date getCreated(); 068 069 /** 070 * Returns the user's e-mail address. 071 * @return the e-mail address 072 */ 073 String getEmail(); 074 075 /** 076 * Returns the user's full name. 077 * @return the full name 078 */ 079 String getFullname(); 080 081 /** 082 * Returns the last-modified date. 083 * @return the date and time of last modification 084 */ 085 Date getLastModified(); 086 087 /** 088 * Returns the date/time of expiration of the profile's lock, if it has been 089 * previously locked via {@link #setLockExpiry(Date)} and the lock is 090 * still active. If the profile is unlocked, this method returns <code>null</code>. 091 * Note that calling this method after the expiration date, <em>even if had previously 092 * been set explicitly by {@link #setLockExpiry(Date)}</em>, will always return 093 * <code>null</null>. 094 * 095 * @return the lock expiration date 096 */ 097 Date getLockExpiry(); 098 099 /** 100 * Returns the user's login name. 101 * @return the login name 102 */ 103 String getLoginName(); 104 105 /** 106 * Returns the user password for use with custom authentication. Note that 107 * the password field is not meaningful for container authentication; the 108 * user's private credentials are generally stored elsewhere. While it 109 * depends on the {@link UserDatabase}implementation, in most cases the 110 * value returned by this method will be a password hash, not the password 111 * itself. 112 * @return the password 113 */ 114 String getPassword(); 115 116 /** 117 * Returns the unique identifier for the user profile. If not previously 118 * set, the value will be <code>null</code>. 119 * @return the unique ID. 120 */ 121 String getUid(); 122 123 /** 124 * Returns the user's wiki name, based on the full name with all 125 * whitespace removed. 126 * @return the wiki name. 127 */ 128 String getWikiName(); 129 130 /** 131 * Returns 132 * <code>true</code> if the profile is currently locked (disabled); <code>false</code> otherwise. 133 * By default, profiles are created unlocked. Strictly speaking, calling this method is equivalent to calling {@link #getLockExpiry()} 134 * and, if it returns a non-<code>null</code> value, checking if the date returned is later than the current time. 135 * @return the result 136 */ 137 boolean isLocked(); 138 139 /** 140 * Returns <code>true</code> if the profile has never been 141 * saved before. Implementing classes might check the 142 * last modified date, for example, to determine this. 143 * @return whether the profile is new 144 */ 145 boolean isNew(); 146 147 /** 148 * Sets the created date. 149 * @param date the creation date 150 */ 151 void setCreated( Date date ); 152 153 /** 154 * Sets the user's e-mail address. 155 * @param email the e-mail address 156 */ 157 void setEmail( String email ); 158 159 /** 160 * Sets the user's full name. For example, "Janne Jalkanen." 161 * @param arg the full name 162 */ 163 void setFullname( String arg ); 164 165 /** 166 * Sets the last-modified date 167 * @param date the last-modified date 168 */ 169 void setLastModified( Date date ); 170 171 /** 172 * Locks the profile until a specified lock expiration date. 173 * 174 * @param expiry the date the lock expires; setting this value to <code>null</code> 175 * will cause the lock to be cleared. 176 */ 177 void setLockExpiry( Date expiry ); 178 179 /** 180 * Sets the name by which the user logs in. The login name is used as the 181 * username for custom authentication (see 182 * {@link org.apache.wiki.auth.AuthenticationManager#login(org.apache.wiki.api.core.Session, jakarta.servlet.http.HttpServletRequest, String, String)}, 183 * {@link org.apache.wiki.auth.login.UserDatabaseLoginModule}). The login 184 * name is typically a short name ("jannej"). In contrast, the wiki name is 185 * typically of type FirstnameLastName ("JanneJalkanen"). 186 * @param name the login name 187 */ 188 void setLoginName( String name ); 189 190 /** 191 * Sets the user's password for use with custom authentication. It is 192 * <em>not</em> the responsibility of implementing classes to hash the 193 * password; that responsibility is borne by the UserDatabase implementation 194 * during save operations (see {@link UserDatabase#save(UserProfile)}). 195 * Note that the password field is not meaningful for container 196 * authentication; the user's private credentials are generally stored 197 * elsewhere. 198 * @param arg the password 199 */ 200 void setPassword( String arg ); 201 202 /** 203 * Sets the unique identifier for the user profile. Note that UserDatabase implementations 204 * are required <em>not</em> to change the unique identifier after the initial save. 205 * @param uid the unique identifier to set 206 */ 207 void setUid( String uid ); 208 209 /** 210 * Returns a string representation of this user profile. 211 * @return the string 212 */ 213 @Override 214 String toString(); 215 216 /** 217 * List of recently used passwords in hashed format. may be empty 218 * @since 3.0.0 219 * @return non null list 220 */ 221 default List<String> getPreviousHashedCredentials() { 222 return new ArrayList<>(); 223 } 224}