package com.porterhead.user; import com.porterhead.persistence.BaseEntity; import com.porterhead.user.api.ApiUser; import com.mongodb.DBObject; import org.springframework.data.mongodb.core.mapping.Document; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.core.userdetails.UserDetails; import java.util.*; /** * @version 1.0 * @author: Iain Porter * @since 24/04/2013 */ @Document(collection = "app_user") public class User extends BaseEntity implements UserDetails { private String emailAddress; private String firstName; private String lastName; private Integer age; private String hashedPassword; private Boolean verified = false; private List<Role> roles = new ArrayList<Role>(); public User() { super(); } public User(String id) { super(id); } public User(final ApiUser apiUser, final String hashedPassword, Role role) { this(); this.emailAddress = apiUser.getEmailAddress().toLowerCase(); this.hashedPassword = hashedPassword; this.firstName = apiUser.getFirstName(); this.lastName = apiUser.getLastName(); this.age = apiUser.getAge(); this.roles.add(role); } public User(DBObject dbObject) { this((String)dbObject.get("_id")); this.emailAddress = (String)dbObject.get("emailAddress"); this.firstName = (String)dbObject.get("firstName"); this.lastName = (String)dbObject.get("lastName"); this.hashedPassword = (String)dbObject.get("hashedPassword"); this.verified = (Boolean)dbObject.get("verified"); List<String> roles = (List<String>)dbObject.get("roles"); deSerializeRoles(roles); } private void deSerializeRoles(List<String> roles) { for(String role : roles) { this.addRole(Role.valueOf(role)); } } @Override public Collection<? extends GrantedAuthority> getAuthorities() { Set<GrantedAuthority> authorities = new HashSet<GrantedAuthority>(); for( Role role : this.getRoles() ){ GrantedAuthority authority = new SimpleGrantedAuthority(role.name()); authorities.add(authority); } return authorities; } @Override public String getPassword() { return hashedPassword; } @Override public String getUsername() { return getId(); } @Override public boolean isAccountNonExpired() { return true; } @Override public boolean isAccountNonLocked() { return true; } @Override public boolean isCredentialsNonExpired() { return true; } @Override public boolean isEnabled() { return true; } public String getEmailAddress() { return emailAddress; } public String getFirstName() { return firstName; } public String getLastName() { return lastName; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public void setEmailAddress(String emailAddress) { this.emailAddress = emailAddress; } public void setFirstName(String firstName) { this.firstName = firstName; } public void setLastName(String lastName) { this.lastName = lastName; } public Boolean isVerified() { return verified; } public void setVerified(Boolean verified) { this.verified = verified; } public String getHashedPassword() { return hashedPassword; } public void setHashedPassword(String hashedPassword) { this.hashedPassword = hashedPassword; } public List<Role> getRoles() { return Collections.unmodifiableList(this.roles); } public void addRole(Role role) { this.roles.add(role); } public boolean hasRole(Role role) { return (this.roles.contains(role)); } }