From 78d822d145a6bfd6450e4f837a79e363c9d83bd0 Mon Sep 17 00:00:00 2001 From: Martin Stockhammer Date: Sun, 16 Oct 2016 16:49:38 +0200 Subject: [PATCH] Fixing validation error in unit tests --- .../DefaultAuthenticationManager.java | 136 ++++++++---------- .../users/UserManagerAuthenticator.java | 6 + .../keystore/KeyStoreAuthenticator.java | 6 + 3 files changed, 71 insertions(+), 77 deletions(-) diff --git a/redback-authentication/redback-authentication-api/src/main/java/org/apache/archiva/redback/authentication/DefaultAuthenticationManager.java b/redback-authentication/redback-authentication-api/src/main/java/org/apache/archiva/redback/authentication/DefaultAuthenticationManager.java index bda32762..1bc47707 100644 --- a/redback-authentication/redback-authentication-api/src/main/java/org/apache/archiva/redback/authentication/DefaultAuthenticationManager.java +++ b/redback-authentication/redback-authentication-api/src/main/java/org/apache/archiva/redback/authentication/DefaultAuthenticationManager.java @@ -41,7 +41,7 @@ import java.util.Map; /** * DefaultAuthenticationManager: the goal of the authentication manager is to act as a conduit for * authentication requests into different authentication schemes - * + *

* For example, the default implementation can be configured with any number of authenticators and will * sequentially try them for an authenticated result. This allows you to have the standard user/pass * auth procedure followed by authentication based on a known key for 'remember me' type functionality. @@ -50,10 +50,9 @@ import java.util.Map; */ @Service("authenticationManager") public class DefaultAuthenticationManager - implements AuthenticationManager -{ + implements AuthenticationManager { - private Logger log = LoggerFactory.getLogger( getClass() ); + private Logger log = LoggerFactory.getLogger(getClass()); private List authenticators; @@ -61,113 +60,96 @@ public class DefaultAuthenticationManager private ApplicationContext applicationContext; @Inject - @Named( value = "userManager#default" ) + @Named(value = "userManager#default") private UserManager userManager; - @SuppressWarnings( "unchecked" ) + @SuppressWarnings("unchecked") @PostConstruct - public void initialize() - { + public void initialize() { this.authenticators = - new ArrayList( applicationContext.getBeansOfType( Authenticator.class ).values() ); + new ArrayList(applicationContext.getBeansOfType(Authenticator.class).values()); } - public String getId() - { + public String getId() { return "Default Authentication Manager - " + this.getClass().getName() + " : managed authenticators - " + - knownAuthenticators(); + knownAuthenticators(); } - public AuthenticationResult authenticate( AuthenticationDataSource source ) - throws AccountLockedException, AuthenticationException, MustChangePasswordException - { - if ( authenticators == null || authenticators.size() == 0 ) - { - return ( new AuthenticationResult( false, null, new AuthenticationException( - "no valid authenticators, can't authenticate" ) ) ); + public AuthenticationResult authenticate(AuthenticationDataSource source) + throws AccountLockedException, AuthenticationException, MustChangePasswordException { + if (authenticators == null || authenticators.size() == 0) { + return (new AuthenticationResult(false, null, new AuthenticationException( + "no valid authenticators, can't authenticate"))); } // put AuthenticationResult exceptions in a map List authnResultErrors = new ArrayList(); - for ( Authenticator authenticator : authenticators ) - { - if ( authenticator.isValid() && authenticator.supportsDataSource( source ) ) - { - AuthenticationResult authResult = authenticator.authenticate( source ); - List authenticationFailureCauses = - authResult.getAuthenticationFailureCauses(); + for (Authenticator authenticator : authenticators) { + if (authenticator.isValid()) { + if (authenticator.supportsDataSource(source)) { + AuthenticationResult authResult = authenticator.authenticate(source); + List authenticationFailureCauses = + authResult.getAuthenticationFailureCauses(); - if ( authResult.isAuthenticated() ) - { - //olamy: as we can chain various user managers with Archiva - // user manager authenticator can lock accounts in the following case : - // 2 user managers: ldap and jdo. - // ldap correctly find the user but cannot compare hashed password - // jdo reject password so increase loginAttemptCount - // now ldap bind authenticator work but loginAttemptCount has been increased. - // so we restore here loginAttemptCount to 0 if in authenticationFailureCauses + if (authResult.isAuthenticated()) { + //olamy: as we can chain various user managers with Archiva + // user manager authenticator can lock accounts in the following case : + // 2 user managers: ldap and jdo. + // ldap correctly find the user but cannot compare hashed password + // jdo reject password so increase loginAttemptCount + // now ldap bind authenticator work but loginAttemptCount has been increased. + // so we restore here loginAttemptCount to 0 if in authenticationFailureCauses - for ( AuthenticationFailureCause authenticationFailureCause : authenticationFailureCauses ) - { - User user = authenticationFailureCause.getUser(); - if ( user != null ) - { - if ( user.getCountFailedLoginAttempts() > 0 ) - { - user.setCountFailedLoginAttempts( 0 ); - if ( !userManager.isReadOnly() ) - { - try - { - userManager.updateUser( user ); - } - catch ( UserManagerException e ) - { - log.debug( e.getMessage(), e ); - log.warn( "skip error updating user: {}", e.getMessage() ); + for (AuthenticationFailureCause authenticationFailureCause : authenticationFailureCauses) { + User user = authenticationFailureCause.getUser(); + if (user != null) { + if (user.getCountFailedLoginAttempts() > 0) { + user.setCountFailedLoginAttempts(0); + if (!userManager.isReadOnly()) { + try { + userManager.updateUser(user); + } catch (UserManagerException e) { + log.debug(e.getMessage(), e); + log.warn("skip error updating user: {}", e.getMessage()); + } } } } } + return authResult; } - return authResult; - } - if ( authenticationFailureCauses != null ) - { - authnResultErrors.addAll( authenticationFailureCauses ); - } - else - { - if ( authResult.getException() != null ) - { - authnResultErrors.add( - new AuthenticationFailureCause( AuthenticationConstants.AUTHN_RUNTIME_EXCEPTION, - authResult.getException().getMessage() ) ); + if (authenticationFailureCauses != null) { + authnResultErrors.addAll(authenticationFailureCauses); + } else { + if (authResult.getException() != null) { + authnResultErrors.add( + new AuthenticationFailureCause(AuthenticationConstants.AUTHN_RUNTIME_EXCEPTION, + authResult.getException().getMessage())); + } } + + } - - + } else { + log.warn("Invalid authenticator found: " + authenticator.getId()); } } - return ( new AuthenticationResult( false, null, new AuthenticationException( - "authentication failed on authenticators: " + knownAuthenticators() ), authnResultErrors ) ); + return (new AuthenticationResult(false, null, new AuthenticationException( + "authentication failed on authenticators: " + knownAuthenticators()), authnResultErrors)); } - public List getAuthenticators() - { + public List getAuthenticators() { return authenticators; } - private String knownAuthenticators() - { + private String knownAuthenticators() { StringBuilder strbuf = new StringBuilder(); - for ( Authenticator authenticator : authenticators ) - { - strbuf.append( '(' ).append( authenticator.getId() ).append( ") " ); + for (Authenticator authenticator : authenticators) { + strbuf.append('(').append(authenticator.getId()).append(") "); } return strbuf.toString(); diff --git a/redback-authentication/redback-authentication-providers/redback-authentication-users/src/main/java/org/apache/archiva/redback/authentication/users/UserManagerAuthenticator.java b/redback-authentication/redback-authentication-providers/redback-authentication-users/src/main/java/org/apache/archiva/redback/authentication/users/UserManagerAuthenticator.java index 567b7b3f..ed9e33ae 100644 --- a/redback-authentication/redback-authentication-providers/redback-authentication-users/src/main/java/org/apache/archiva/redback/authentication/users/UserManagerAuthenticator.java +++ b/redback-authentication/redback-authentication-providers/redback-authentication-users/src/main/java/org/apache/archiva/redback/authentication/users/UserManagerAuthenticator.java @@ -40,6 +40,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; +import javax.annotation.PostConstruct; import javax.inject.Inject; import javax.inject.Named; import java.util.ArrayList; @@ -69,6 +70,11 @@ public class UserManagerAuthenticator return "UserManagerAuthenticator"; } + @PostConstruct + private void init() { + super.valid = true; + } + /** * @throws org.apache.archiva.redback.policy.AccountLockedException diff --git a/redback-keys/redback-authentication-keys/src/main/java/org/apache/archiva/redback/authentication/keystore/KeyStoreAuthenticator.java b/redback-keys/redback-authentication-keys/src/main/java/org/apache/archiva/redback/authentication/keystore/KeyStoreAuthenticator.java index 51a9d31f..931c6100 100644 --- a/redback-keys/redback-authentication-keys/src/main/java/org/apache/archiva/redback/authentication/keystore/KeyStoreAuthenticator.java +++ b/redback-keys/redback-authentication-keys/src/main/java/org/apache/archiva/redback/authentication/keystore/KeyStoreAuthenticator.java @@ -39,6 +39,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; +import javax.annotation.PostConstruct; import javax.annotation.Resource; /** @@ -59,6 +60,11 @@ public class KeyStoreAuthenticator @Resource(name = "userManager#default") private UserManager userManager; + @PostConstruct + private void init() { + super.valid=true; + } + public String getId() { return getClass().getName();