Merge pull request #303 from mposolda/ldap

Fixes in AuthenticationProvider. Fixing testsuite
This commit is contained in:
Stian Thorgersen 2014-03-25 14:17:31 +00:00
commit 51b95b1b91
4 changed files with 38 additions and 24 deletions

View file

@ -234,22 +234,26 @@ public class AuthenticationManager {
AuthenticationLinkModel authLink = new AuthenticationLinkModel(authResult.getProviderName(), authUser.getId());
user = realm.getUserByAuthenticationLink(authLink);
if (user == null) {
// Create new user, which has been successfully authenticated and link him with authentication provider
user = realm.addUser(authUser.getUsername());
user.setEnabled(true);
user.setFirstName(authUser.getFirstName());
user.setLastName(authUser.getLastName());
user.setEmail(authUser.getEmail());
user = KeycloakModelUtils.findUserByNameOrEmail(realm, username);
if (user != null) {
// Case when we already have user with the same username like authenticated, but he is not yet linked to current provider.
// TODO: Revisit if it's ok to link if we allow to change username. Maybe ask user?
// TODO: Update of existing account?
realm.addAuthenticationLink(user, authLink);
logger.info("User " + authUser.getUsername() + " successfully authenticated and linked with provider " + authResult.getProviderName());
} else {
// Create new user, which has been successfully authenticated and link him with authentication provider
user = realm.addUser(authUser.getUsername());
user.setEnabled(true);
user.setFirstName(authUser.getFirstName());
user.setLastName(authUser.getLastName());
user.setEmail(authUser.getEmail());
realm.addAuthenticationLink(user, authLink);
logger.info("User " + username + " successfully authenticated and created based on provider " + authResult.getProviderName());
} else {
// Existing user has been authenticated
if (!checkEnabled(user)) {
return AuthenticationStatus.ACCOUNT_DISABLED;
realm.addAuthenticationLink(user, authLink);
logger.info("User " + username + " successfully authenticated and created based on provider " + authResult.getProviderName());
}
// TODO: Update of existing account?
} else {
// Existing and linked user has been authenticated TODO: Update of existing account?
}
// Authenticated username could be different from the "form" username. In this case, we will change it
@ -263,10 +267,12 @@ public class AuthenticationManager {
if (user == null) {
logger.warn("User '" + username + "' successfully authenticated, but he doesn't exists and don't know how to create him");
return AuthenticationStatus.INVALID_USER;
} else if (!checkEnabled(user)) {
return AuthenticationStatus.ACCOUNT_DISABLED;
}
}
if (!checkEnabled(user)) {
return AuthenticationStatus.ACCOUNT_DISABLED;
}
}
if (!user.getRequiredActions().isEmpty()) {

View file

@ -55,7 +55,6 @@ public class PicketlinkAuthenticationProvider implements AuthenticationProvider
result.setUser(authenticatedUser).setProviderName(getName());
return result;
} else {
logger.debugf("Username: %s, Credential status: %s", username, credential.getStatus());
return new AuthResult(AuthProviderStatus.IGNORE);
}
}

View file

@ -61,7 +61,7 @@ public class AuthenticationProviderManager {
try {
AuthResult currentResult = delegate.validatePassword(realm, authProviderConfig.getConfig(), username, password);
logger.debugf("Authentication provider '%s' finished with '%s' for authentication of '%s'", delegate.getName(), currentResult.toString(), username);
logger.debugf("Authentication provider '%s' finished with '%s' for authentication of '%s'", delegate.getName(), currentResult.getAuthProviderStatus().toString(), username);
if (currentResult.getAuthProviderStatus() == AuthProviderStatus.SUCCESS || currentResult.getAuthProviderStatus() == AuthProviderStatus.FAILED) {
return currentResult;
@ -90,8 +90,11 @@ public class AuthenticationProviderManager {
}
try {
delegate.updateCredential(realm, authProviderConfig.getConfig(), username, password);
logger.debugf("Updated password in authentication provider '%s' for user '%s'", delegate.getName(), username);
if (delegate.updateCredential(realm, authProviderConfig.getConfig(), username, password)) {
logger.debugf("Updated password in authentication provider '%s' for user '%s'", delegate.getName(), username);
} else {
logger.debugf("Password not updated in authentication provider '%s' for user '%s'", delegate.getName(), username);
}
} catch (AuthenticationProviderException ape) {
// Rethrow it to upper layer
logger.warn("Failed to update password", ape);

View file

@ -127,6 +127,11 @@ public class AuthProvidersIntegrationTest {
Assert.assertEquals(AppPage.RequestType.AUTH_RESPONSE, appPage.getRequestType());
Assert.assertNotNull(oauth.getCurrentQuery().get(OAuth2Constants.CODE));
profilePage.open();
Assert.assertEquals("John", profilePage.getFirstName());
Assert.assertEquals("Doe", profilePage.getLastName());
Assert.assertEquals("john@email.org", profilePage.getEmail());
}
@Test
@ -166,7 +171,7 @@ public class AuthProvidersIntegrationTest {
}
@Test
public void passwordChangeLdap() {
public void passwordChangeLdap() throws Exception {
changePasswordPage.open();
loginPage.login("john", "password");
changePasswordPage.changePassword("password", "new-password", "new-password");
@ -175,9 +180,10 @@ public class AuthProvidersIntegrationTest {
changePasswordPage.logout();
loginPage.open();
loginPage.login("john", "password");
Assert.assertEquals("Invalid username or password.", loginPage.getError());
// TODO: Disabled until https://issues.jboss.org/browse/PLINK-384 is released and updated
// loginPage.open();
// loginPage.login("john", "password");
// Assert.assertEquals("Invalid username or password.", loginPage.getError());
loginPage.open();
loginPage.login("john", "new-password");