package org.kalipo.domain;
import com.fasterxml.jackson.annotation.JsonIgnore;
import org.hibernate.validator.constraints.Email;
import org.joda.time.DateTime;
import org.kalipo.config.Constants;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.Field;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;
/**
* A user.
*/
@Document(collection = "T_USER")
public class User extends AbstractAuditingEntity implements Serializable {
// todo login for admin only from localhost
@NotNull
@Size(min = 0, max = Constants.LIM_MAX_LEN_USERID)
@Id
private String login;
@JsonIgnore
@Size(min = 0, max = 100)
private String password;
@Size(min = 0, max = 50)
@Field("first_name")
private String firstName;
@Size(min = 0, max = 50)
@Field("last_name")
private String lastName;
@Email
@Size(min = 0, max = 50)
private String email;
private boolean activated = false;
@Size(min = 2, max = 5)
@Field("lang_key")
private String langKey;
@Size(min = 0, max = 20)
@Field("activation_key")
private String activationKey;
// todo rename to karma
@Field("reputation")
private int reputation;
private double trustworthiness;
// todo this is a global ban
@JsonIgnore
private boolean banned;
// todo history of bans
// private Set<Ban> bans = new HashSet<Ban>();
private Set<String> ignoredUsers = new HashSet<String>();
private DateTime bannedUntilDate;
@NotNull(message = "{constraint.notnull.registrationDate}")
@Field("registration_date")
private DateTime registrationDate;
// Count violations
private int strikes;
@JsonIgnore
private DateTime lastStrikeDate;
private boolean superMod;
@Size(max = Constants.LIM_MAX_LEN_DISPLAYNAME, message = "{constraint.length.displayname}")
private String displayName;
// prevent brute force login attacks
private int loginTries;
private DateTime lastLoginTry;
private DateTime lockoutEndDate;
@JsonIgnore
private Set<Authority> authorities = new HashSet<Authority>();
private Set<PersistentToken> persistentTokens = new HashSet<PersistentToken>();
public DateTime getLockoutEndDate() {
return lockoutEndDate;
}
public void setLockoutEndDate(DateTime lockoutEndDate) {
this.lockoutEndDate = lockoutEndDate;
}
public String getLogin() {
return login;
}
public void setLogin(String login) {
this.login = login;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public boolean getActivated() {
return activated;
}
public void setActivated(boolean activated) {
this.activated = activated;
}
public String getActivationKey() {
return activationKey;
}
public void setActivationKey(String activationKey) {
this.activationKey = activationKey;
}
public String getLangKey() {
return langKey;
}
public void setLangKey(String langKey) {
this.langKey = langKey;
}
public Set<Authority> getAuthorities() {
return authorities;
}
public void setAuthorities(Set<Authority> authorities) {
this.authorities = authorities;
}
public int getReputation() {
return reputation;
}
public void setReputation(int reputation) {
this.reputation = reputation;
}
public boolean isBanned() {
return banned;
}
public void setBanned(boolean banned) {
this.banned = banned;
}
public boolean isSuperMod() {
return superMod;
}
public void setSuperMod(boolean superMod) {
this.superMod = superMod;
}
public int getStrikes() {
return strikes;
}
public void setStrikes(int strikes) {
this.strikes = strikes;
}
public DateTime getBannedUntilDate() {
return bannedUntilDate;
}
public void setBannedUntilDate(DateTime bannedUntilDate) {
this.bannedUntilDate = bannedUntilDate;
}
public DateTime getLastStrikeDate() {
return lastStrikeDate;
}
public void setLastStrikeDate(DateTime lastStrikeDate) {
this.lastStrikeDate = lastStrikeDate;
}
public int getLoginTries() {
return loginTries;
}
public void setLoginTries(int loginTries) {
this.loginTries = loginTries;
}
public DateTime getLastLoginTry() {
return lastLoginTry;
}
public void setLastLoginTry(DateTime lastLoginTry) {
this.lastLoginTry = lastLoginTry;
}
public DateTime getRegistrationDate() {
return registrationDate;
}
public void setRegistrationDate(DateTime registrationDate) {
this.registrationDate = registrationDate;
}
public String getDisplayName() {
return displayName;
}
public void setDisplayName(String displayName) {
this.displayName = displayName;
}
public double getTrustworthiness() {
return trustworthiness;
}
public void setTrustworthiness(double trustworthiness) {
this.trustworthiness = trustworthiness;
}
public Set<String> getIgnoredUsers() {
return ignoredUsers;
}
public void setIgnoredUsers(Set<String> ignoredUsers) {
this.ignoredUsers = ignoredUsers;
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
User user = (User) o;
return login.equals(user.login);
}
@Override
public int hashCode() {
return login.hashCode();
}
@Override
public String toString() {
return "User{" +
"login='" + login + '\'' +
", password='" + password + '\'' +
", firstName='" + firstName + '\'' +
", lastName='" + lastName + '\'' +
", email='" + email + '\'' +
", activated='" + activated + '\'' +
", langKey='" + langKey + '\'' +
", activationKey='" + activationKey + '\'' +
"}";
}
}