package net.databinder.auth.data.ao; import java.security.MessageDigest; import java.util.Arrays; import net.databinder.auth.AuthApplication; import net.databinder.auth.data.DataPassword; import org.apache.wicket.Application; import org.apache.wicket.authorization.strategies.role.Roles; /** * Helper for UserBase, handles password hashing and virtual collection of roles (from roleString). * Client applications must extend this class to use it, because as an @Implementation it must have * a contructor matching the mapped entity interface. */ public class UserHelper { UserBase user; public UserHelper(UserBase user) { this.user = user; } public static byte[] getHash(String string) { MessageDigest md = ((AuthApplication)Application.get()).getDigest(); return md.digest(string.getBytes()); } public DataPassword getPassword() { return new DataPassword() { public void change(String password) { user.setPasswordHash(getHash(password)); } public boolean matches(String password) { return Arrays.equals(getHash(password), user.getPasswordHash()); } public void update(MessageDigest digest) { digest.update(user.getPasswordHash()); } }; } public void setRoleString(String roleString) { user.setRoleString(roleString); } public Roles getRoles() { String roleString = user.getRoleString(); if (roleString == null) roleString = ""; return new Roles(roleString); } public void setRoles(Roles roles) { user.setRoleString(roles.toString()); } public boolean hasRole(String role) { return getRoles().contains(role); } public void update(MessageDigest digest) { digest.update(user.getPasswordHash()); } }