/* * Copyright 2014-2015 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.rockagen.gnext.po; import com.rockagen.gnext.enums.UserReferer; import com.rockagen.gnext.enums.UserType; import org.hibernate.annotations.*; import javax.persistence.*; import javax.persistence.CascadeType; import javax.persistence.Entity; import javax.persistence.Table; import java.util.Date; import java.util.HashSet; import java.util.LinkedHashSet; import java.util.Set; /** * Authorized users,provide for spring security. * * @author RA * @since JPA2.0 */ @Entity @Table(name = "AUTH_USERS") public class AuthUser { //~ Instance fields ================================================== @Id @Column(name = "ID") @GeneratedValue private Long id; @Column(name = "UID", nullable = false, unique = true) private String uid; @Column(name = "PASSWORD", nullable = false) private String password; @Column(name = "SALT", nullable = false) private String salt; @Column(name = "NAME", nullable = false) private String name; @Column(name = "EMAIL") private String email; @Column(name = "AVATAR") private String avatar; @Column(name="LARGE_AVATAR") private String largeAvatar; @Column(name = "PHONE") private String phone; @Column(name = "ADDRESS") private String address; @Column(name = "RESET_PASSWORD_TOKEN") private String resetPasswordToken; @Column(name = "RESET_PASSWORD_SENT_AT") private Date resetPasswordSentAt; @Column(name = "ENABLED", nullable = false) private Integer enabled; @Column(name = "ENABLED_AT") private Date enabledAt; @Column(name = "LOCKED_AT") private Date lockedAt; @Column(name = "EXPIRED_AT") private Date expiredAt; @Column(name = "FAILED_ATTEMPTS") private Integer failedAttempts; @Column(name = "SIGN_IN_COUNT") private Integer signInCount; @Column(name = "CURRENT_SIGN_IN_AT") private Date currentSignInAt; @Column(name = "LAST_SIGN_IN_AT") private Date lastSignInAt; @Column(name = "CREATED_AT") private Date createdAt; @Column(name = "UPDATED_AT") private Date updatedAt; @Column(name = "CURRENT_SIGN_IN_IP") private String currentSignInIp; @Column(name = "LAST_SIGN_IN_IP") private String lastSignInIp; @Column(name = "AUTHENTICATION_TOKEN") private String authenticationToken; @Column(name = "CREATE_USER_REFERER") @Enumerated(EnumType.STRING) private UserReferer createUserReferer; @Column(name = "LAST_USER_REFERER") @Enumerated(EnumType.STRING) private UserReferer lastUserReferer; @Column(name = "TYPE") private UserType type; @ManyToMany(cascade = CascadeType.MERGE,fetch = FetchType.EAGER) @JoinTable(name = "AUTH_GROUP_USERS", joinColumns = @JoinColumn(name = "GROUP_ID"), inverseJoinColumns = @JoinColumn(name = "USER_ID")) @org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE) private Set<AuthGroup> groups = new LinkedHashSet<>(); @Version private Long version; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getUid() { return uid; } public void setUid(String uid) { this.uid = uid; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getSalt() { return salt; } public void setSalt(String salt) { this.salt = salt; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getAvatar() { return avatar; } public void setAvatar(String avatar) { this.avatar = avatar; } public String getLargeAvatar() { return largeAvatar; } public void setLargeAvatar(String largeAvatar) { this.largeAvatar = largeAvatar; } public UserType getType() { return type; } public void setType(UserType type) { this.type = type; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public String getResetPasswordToken() { return resetPasswordToken; } public void setResetPasswordToken(String resetPasswordToken) { this.resetPasswordToken = resetPasswordToken; } public Date getResetPasswordSentAt() { return resetPasswordSentAt; } public void setResetPasswordSentAt(Date resetPasswordSentAt) { this.resetPasswordSentAt = resetPasswordSentAt; } public Integer getEnabled() { return enabled; } public void setEnabled(Integer enabled) { this.enabled = enabled; } public Date getEnabledAt() { return enabledAt; } public void setEnabledAt(Date enabledAt) { this.enabledAt = enabledAt; } public Date getLockedAt() { return lockedAt; } public void setLockedAt(Date lockedAt) { this.lockedAt = lockedAt; } public Date getExpiredAt() { return expiredAt; } public void setExpiredAt(Date expiredAt) { this.expiredAt = expiredAt; } public Integer getFailedAttempts() { return failedAttempts; } public void setFailedAttempts(Integer failedAttempts) { this.failedAttempts = failedAttempts; } public Integer getSignInCount() { return signInCount; } public void setSignInCount(Integer signInCount) { this.signInCount = signInCount; } public Date getCurrentSignInAt() { return currentSignInAt; } public void setCurrentSignInAt(Date currentSignInAt) { this.currentSignInAt = currentSignInAt; } public Date getLastSignInAt() { return lastSignInAt; } public void setLastSignInAt(Date lastSignInAt) { this.lastSignInAt = lastSignInAt; } public Date getCreatedAt() { return createdAt; } public void setCreatedAt(Date createdAt) { this.createdAt = createdAt; } public Date getUpdatedAt() { return updatedAt; } public void setUpdatedAt(Date updatedAt) { this.updatedAt = updatedAt; } public String getCurrentSignInIp() { return currentSignInIp; } public void setCurrentSignInIp(String currentSignInIp) { this.currentSignInIp = currentSignInIp; } public String getLastSignInIp() { return lastSignInIp; } public void setLastSignInIp(String lastSignInIp) { this.lastSignInIp = lastSignInIp; } public String getAuthenticationToken() { return authenticationToken; } public void setAuthenticationToken(String authenticationToken) { this.authenticationToken = authenticationToken; } public UserReferer getCreateUserReferer() { return createUserReferer; } public void setCreateUserReferer(UserReferer createUserReferer) { this.createUserReferer = createUserReferer; } public UserReferer getLastUserReferer() { return lastUserReferer; } public void setLastUserReferer(UserReferer lastUserReferer) { this.lastUserReferer = lastUserReferer; } public Set<AuthGroup> getGroups() { return groups; } public void setGroups(Set<AuthGroup> groups) { this.groups = groups; } public boolean enabled(){ return (this.enabled !=null && this.enabled >0); } /** * Add group * @param group {@link AuthGroup} */ public void addGroup(AuthGroup group){ if(group!=null){ checkGroups(); groups.add(group); } } /** * Add group form user * @param user {@link AuthUser} */ public void addGroupFromUser(AuthUser user) { if(user!=null){ checkGroups(); groups.addAll(user.getGroups()); } } private void checkGroups(){ if(groups==null){ groups=new HashSet<>(); } } }