package org.jboss.seam.security; import java.io.Serializable; import javax.enterprise.context.SessionScoped; import javax.enterprise.event.Observes; import javax.enterprise.inject.spi.BeanManager; import javax.inject.Inject; import javax.inject.Named; import org.jboss.seam.security.events.CredentialsInitializedEvent; import org.jboss.seam.security.events.CredentialsUpdatedEvent; import org.jboss.seam.security.events.LoginFailedEvent; import org.picketlink.idm.api.Credential; import org.picketlink.idm.impl.api.PasswordCredential; /** * The default Credentials implementation. This implementation allows for a * username and plain text password to be set, and uses the PasswordCredential * implementation of the Credential interface for authentication. * * @author Shane Bryzak */ public @Named("credentials") @SessionScoped class CredentialsImpl implements Credentials, Serializable { private static final long serialVersionUID = -2271248957776488426L; @Inject BeanManager manager; private String username; private Credential credential; private boolean invalid; private boolean initialized; public CredentialsImpl() { } public boolean isInitialized() { return initialized; } public void setInitialized(boolean initialized) { this.initialized = initialized; } public String getUsername() { if (!isInitialized()) { setInitialized(true); manager.fireEvent(new CredentialsInitializedEvent(this)); } return username; } public Credential getCredential() { return credential; } public void setCredential(Credential credential) { this.credential = credential; } public void setUsername(String username) { if (this.username != username && (this.username == null || !this.username.equals(username))) { this.username = username; invalid = false; manager.fireEvent(new CredentialsUpdatedEvent()); } } public String getPassword() { return credential != null && credential instanceof PasswordCredential ? ((PasswordCredential) credential).getValue() : null; } public void setPassword(String password) { if (this.credential == null) { this.credential = new PasswordCredential(password); } else if (this.credential != null && this.credential instanceof PasswordCredential && ((PasswordCredential) this.credential).getValue() != password && ((PasswordCredential) this.credential).getValue() == null || !((PasswordCredential) this.credential).getValue().equals(password)) { this.credential = new PasswordCredential(password); invalid = false; manager.fireEvent(new CredentialsUpdatedEvent()); } } public boolean isSet() { return getUsername() != null && this.credential != null && ((PasswordCredential) this.credential).getValue() != null; } public boolean isInvalid() { return invalid; } public void invalidate() { invalid = true; } public void clear() { username = null; this.credential = null; initialized = false; } public void loginFailed(@Observes LoginFailedEvent event) { invalidate(); } @Override public String toString() { return "Credentials[" + username + "]"; } }