package ch.alv.components.iam.model;
import ch.alv.components.data.model.BaseModelItem;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
import javax.persistence.*;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.List;
/**
* The User entity (works with table 'module_iam_user')
*
* @since 1.0.0
*/
@Entity
@Table(name = "iam_user")
@Document(indexName = "iam", type = "users", shards = 1, replicas = 0)
public class User extends BaseModelItem implements UserDetails {
private static final long serialVersionUID = -2143829548175561682L;
@Column(nullable = false)
private String username;
@Column(nullable = true)
private String firstName;
@Column(nullable = true)
private String lastName;
@Column(nullable = true)
private String password;
@Column(nullable = true)
private String email;
@Temporal(TemporalType.TIMESTAMP)
@Column(nullable = true)
private Date lastLogin;
@Column(nullable = true)
private int numberOfFailedLogins;
@JoinColumn(name = "create_user_id", nullable = true)
@ManyToOne
private User createUser;
@Temporal(TemporalType.TIMESTAMP)
@Column(nullable = true)
private Date createDate;
@JoinColumn(name = "update_user_id", nullable = true)
@ManyToOne
private User updateUser;
@Temporal(TemporalType.TIMESTAMP)
@Column(nullable = true)
private Date updateDate;
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(
name = "module_iam_role_to_user",
joinColumns = {@JoinColumn(name = "user_id", referencedColumnName = "id")},
inverseJoinColumns = {@JoinColumn(name = "role_id", referencedColumnName = "id")})
private List<Role> roles;
@Override
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
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 void setPassword(String password) {
this.password = password;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public Date getLastLogin() {
return lastLogin;
}
public void setLastLogin(Date lastLogin) {
this.lastLogin = lastLogin;
}
public int getNumberOfFailedLogins() {
return numberOfFailedLogins;
}
public void setNumberOfFailedLogins(int numberOfFailedLogins) {
this.numberOfFailedLogins = numberOfFailedLogins;
}
public User getCreateUser() {
return createUser;
}
public void setCreateUser(User createUser) {
this.createUser = createUser;
}
public Date getCreateDate() {
return createDate;
}
public void setCreateDate(Date createDate) {
this.createDate = createDate;
}
public User getUpdateUser() {
return updateUser;
}
public void setUpdateUser(User updateUser) {
this.updateUser = updateUser;
}
public Date getUpdateDate() {
return updateDate;
}
public void setUpdateDate(Date updateDate) {
this.updateDate = updateDate;
}
public List<Role> getRoles() {
return roles;
}
public void setRoles(List<Role> roles) {
this.roles = roles;
}
public String getPassword() {
return password;
}
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
List<GrantedAuthority> auths = new ArrayList<>();
for (Role role : roles) {
GrantedAuthority auth = new SimpleGrantedAuthority(role.getName());
auths.add(auth);
}
return auths;
}
@Override
public boolean isAccountNonExpired() {
return true;
}
@Override
public boolean isAccountNonLocked() {
return true;
}
@Override
public boolean isCredentialsNonExpired() {
return true;
}
@Override
public boolean isEnabled() {
return true;
}
}