/**
* Perform the authentication of username and password.
*
* @return boolean TRUE when login has been successfull, else FALSE
* @throws \AppserverIo\Psr\Security\Auth\Login\LoginException Is thrown if an error during login occured
*/
public function login()
{
if (parent::login()) {
// Setup our view of the user
$name = new String($this->sharedState->get(SharedStateKeys::LOGIN_NAME));
if ($name instanceof Principal) {
$this->identity = name;
} else {
$name = $name->__toString();
try {
$this->identity = $this->createIdentity($name);
} catch (\Exception $e) {
// log.debug("Failed to create principal", e);
throw new LoginException(sprintf('Failed to create principal: %s', $e->getMessage()));
}
}
$password = new String($this->sharedState->get(SharedStateKeys::LOGIN_PASSWORD));
/* if ($password instanceof char[] ) {
credential = (char[]) password;
} elseif (password != null) {
String tmp = password.toString();
credential = tmp.toCharArray();
} */
return true;
}
$this->loginOk = false;
// array containing the username and password from the user's input
list($name, $password) = $this->getUsernameAndPassword();
if ($name == null && $password == null) {
$this->identity = $this->unauthenticatedIdentity;
// super.log.trace("Authenticating as unauthenticatedIdentity="+identity);
}
if ($this->identity == null) {
try {
$this->identity = $this->createIdentity($name);
} catch (\Exception $e) {
// log.debug("Failed to create principal", e);
throw new LoginException(sprintf('Failed to create principal: %s', $e->getMessage()));
}
// hash the user entered password if password hashing is in use
if ($this->hashAlgorithm != null) {
$password = $this->createPasswordHash($name, $password);
// validate the password supplied by the subclass
$expectedPassword = $this->getUsersPassword();
}
// validate the password
if ($this->validatePassword($password, $expectedPassword) === false) {
// super.log.debug("Bad password for username="******"User '" + identity + "' authenticated, loginOk="+loginOk);
return true;
}