//package org.hadatac.console.providers;
//
//import org.mindrot.jbcrypt.BCrypt;
//
//import org.hadatac.console.providers.AuthUser;
//import org.hadatac.console.providers.EmailIdentity;
//
//public abstract class UsernamePasswordAuthUser extends AuthUser implements EmailIdentity {
//
//    /**
//     *
//     */
//    private static final long serialVersionUID = 1L;
//
//    private final transient String password;
//    private final String email;
//
//    public UsernamePasswordAuthUser(final String clearPassword, final String email) {
//        this.password = clearPassword;
//        this.email = email;
//    }
//
//    /**
//     * Should return null if the clearString given is null.
//     *
//     * @return
//     */
//    //protected abstract String createPassword(final String clearString);
//
//    /**
//     * Should return false if either the candidate or stored password is null.
//     *
//     * @param candidate
//     * @return
//     */
//    //public abstract boolean checkPassword(final String candidate);
//
//    @Override
//    public String getId() {
//        return getHashedPassword();
//    }
//
//    @Override
//    public String getProvider() {
//        return UsernamePasswordAuthProvider.PROVIDER_KEY;
//    }
//
//    @Override
//    public String getEmail() {
//        return email;
//    }
//
//    public String getHashedPassword() {
//        return createPassword(this.password);
//    }
//
//    /**
//     * You *SHOULD* provide your own implementation of this which implements your own security.
//     */
//    protected String createPassword(final String clearString) {
//        return BCrypt.hashpw(clearString, BCrypt.gensalt());
//    }
//
//    /**
//     * You *SHOULD* provide your own implementation of this which implements your own security.
//     */
//    public boolean checkPassword(final String hashed, final String candidate) {
//        if(hashed == null || candidate == null) {
//            return false;
//        }
//        return BCrypt.checkpw(candidate, hashed);
//    }
//
//    public String getPassword() {
//        return this.password;
//    }
//}