package org.jboss.seam.example.seamspace;
import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Scope;
import org.jboss.seam.security.crypto.BinTools;
import org.jboss.seam.security.management.JpaIdentityStore;
import org.jboss.seam.security.management.PasswordHash;
@Scope(ScopeType.EVENT)
@Name("hashgenerator")
public class HashGenerator
{
@In JpaIdentityStore identityStore;
private String password;
private String passwordHash;
private String passwordSalt;
public String getPassword()
{
return password;
}
public void setPassword(String password)
{
this.password = password;
}
public String getPasswordHash()
{
return passwordHash;
}
public void setPasswordHash(String passwordHash)
{
this.passwordHash = passwordHash;
}
public String getPasswordSalt()
{
return passwordSalt;
}
public void setPasswordSalt(String passwordSalt)
{
this.passwordSalt = passwordSalt;
}
public void generate()
{
byte[] salt;
if (passwordSalt == null || "".equals(passwordSalt.trim()))
{
salt = PasswordHash.instance().generateRandomSalt();
passwordSalt = BinTools.bin2hex(salt);
}
else
{
salt = BinTools.hex2bin(passwordSalt);
}
passwordHash = identityStore.generatePasswordHash(password, salt);
}
public String getSql()
{
StringBuilder sb = new StringBuilder();
sb.append("INSERT INTO USER_ACCOUNT (username, password_hash, password_salt) values ('johnsmith', '");
sb.append(passwordHash);
sb.append("', '");
sb.append(passwordSalt);
sb.append("');");
return sb.toString();
}
}