Fixing validation error in unit tests
This commit is contained in:
parent
2aa6cdf6c6
commit
78d822d145
|
@ -41,7 +41,7 @@ import java.util.Map;
|
||||||
/**
|
/**
|
||||||
* DefaultAuthenticationManager: the goal of the authentication manager is to act as a conduit for
|
* DefaultAuthenticationManager: the goal of the authentication manager is to act as a conduit for
|
||||||
* authentication requests into different authentication schemes
|
* authentication requests into different authentication schemes
|
||||||
*
|
* <p>
|
||||||
* For example, the default implementation can be configured with any number of authenticators and will
|
* 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
|
* 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.
|
* 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")
|
@Service("authenticationManager")
|
||||||
public class DefaultAuthenticationManager
|
public class DefaultAuthenticationManager
|
||||||
implements AuthenticationManager
|
implements AuthenticationManager {
|
||||||
{
|
|
||||||
|
|
||||||
private Logger log = LoggerFactory.getLogger( getClass() );
|
private Logger log = LoggerFactory.getLogger(getClass());
|
||||||
|
|
||||||
private List<Authenticator> authenticators;
|
private List<Authenticator> authenticators;
|
||||||
|
|
||||||
|
@ -61,113 +60,96 @@ public class DefaultAuthenticationManager
|
||||||
private ApplicationContext applicationContext;
|
private ApplicationContext applicationContext;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
@Named( value = "userManager#default" )
|
@Named(value = "userManager#default")
|
||||||
private UserManager userManager;
|
private UserManager userManager;
|
||||||
|
|
||||||
@SuppressWarnings( "unchecked" )
|
@SuppressWarnings("unchecked")
|
||||||
@PostConstruct
|
@PostConstruct
|
||||||
public void initialize()
|
public void initialize() {
|
||||||
{
|
|
||||||
this.authenticators =
|
this.authenticators =
|
||||||
new ArrayList<Authenticator>( applicationContext.getBeansOfType( Authenticator.class ).values() );
|
new ArrayList<Authenticator>(applicationContext.getBeansOfType(Authenticator.class).values());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public String getId()
|
public String getId() {
|
||||||
{
|
|
||||||
return "Default Authentication Manager - " + this.getClass().getName() + " : managed authenticators - " +
|
return "Default Authentication Manager - " + this.getClass().getName() + " : managed authenticators - " +
|
||||||
knownAuthenticators();
|
knownAuthenticators();
|
||||||
}
|
}
|
||||||
|
|
||||||
public AuthenticationResult authenticate( AuthenticationDataSource source )
|
public AuthenticationResult authenticate(AuthenticationDataSource source)
|
||||||
throws AccountLockedException, AuthenticationException, MustChangePasswordException
|
throws AccountLockedException, AuthenticationException, MustChangePasswordException {
|
||||||
{
|
if (authenticators == null || authenticators.size() == 0) {
|
||||||
if ( authenticators == null || authenticators.size() == 0 )
|
return (new AuthenticationResult(false, null, new AuthenticationException(
|
||||||
{
|
"no valid authenticators, can't authenticate")));
|
||||||
return ( new AuthenticationResult( false, null, new AuthenticationException(
|
|
||||||
"no valid authenticators, can't authenticate" ) ) );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// put AuthenticationResult exceptions in a map
|
// put AuthenticationResult exceptions in a map
|
||||||
List<AuthenticationFailureCause> authnResultErrors = new ArrayList<AuthenticationFailureCause>();
|
List<AuthenticationFailureCause> authnResultErrors = new ArrayList<AuthenticationFailureCause>();
|
||||||
for ( Authenticator authenticator : authenticators )
|
for (Authenticator authenticator : authenticators) {
|
||||||
{
|
if (authenticator.isValid()) {
|
||||||
if ( authenticator.isValid() && authenticator.supportsDataSource( source ) )
|
if (authenticator.supportsDataSource(source)) {
|
||||||
{
|
AuthenticationResult authResult = authenticator.authenticate(source);
|
||||||
AuthenticationResult authResult = authenticator.authenticate( source );
|
List<AuthenticationFailureCause> authenticationFailureCauses =
|
||||||
List<AuthenticationFailureCause> authenticationFailureCauses =
|
authResult.getAuthenticationFailureCauses();
|
||||||
authResult.getAuthenticationFailureCauses();
|
|
||||||
|
|
||||||
if ( authResult.isAuthenticated() )
|
if (authResult.isAuthenticated()) {
|
||||||
{
|
//olamy: as we can chain various user managers with Archiva
|
||||||
//olamy: as we can chain various user managers with Archiva
|
// user manager authenticator can lock accounts in the following case :
|
||||||
// user manager authenticator can lock accounts in the following case :
|
// 2 user managers: ldap and jdo.
|
||||||
// 2 user managers: ldap and jdo.
|
// ldap correctly find the user but cannot compare hashed password
|
||||||
// ldap correctly find the user but cannot compare hashed password
|
// jdo reject password so increase loginAttemptCount
|
||||||
// jdo reject password so increase loginAttemptCount
|
// now ldap bind authenticator work but loginAttemptCount has been increased.
|
||||||
// now ldap bind authenticator work but loginAttemptCount has been increased.
|
// so we restore here loginAttemptCount to 0 if in authenticationFailureCauses
|
||||||
// so we restore here loginAttemptCount to 0 if in authenticationFailureCauses
|
|
||||||
|
|
||||||
for ( AuthenticationFailureCause authenticationFailureCause : authenticationFailureCauses )
|
for (AuthenticationFailureCause authenticationFailureCause : authenticationFailureCauses) {
|
||||||
{
|
User user = authenticationFailureCause.getUser();
|
||||||
User user = authenticationFailureCause.getUser();
|
if (user != null) {
|
||||||
if ( user != null )
|
if (user.getCountFailedLoginAttempts() > 0) {
|
||||||
{
|
user.setCountFailedLoginAttempts(0);
|
||||||
if ( user.getCountFailedLoginAttempts() > 0 )
|
if (!userManager.isReadOnly()) {
|
||||||
{
|
try {
|
||||||
user.setCountFailedLoginAttempts( 0 );
|
userManager.updateUser(user);
|
||||||
if ( !userManager.isReadOnly() )
|
} catch (UserManagerException e) {
|
||||||
{
|
log.debug(e.getMessage(), e);
|
||||||
try
|
log.warn("skip error updating user: {}", e.getMessage());
|
||||||
{
|
}
|
||||||
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 )
|
if (authenticationFailureCauses != null) {
|
||||||
{
|
authnResultErrors.addAll(authenticationFailureCauses);
|
||||||
authnResultErrors.addAll( authenticationFailureCauses );
|
} else {
|
||||||
}
|
if (authResult.getException() != null) {
|
||||||
else
|
authnResultErrors.add(
|
||||||
{
|
new AuthenticationFailureCause(AuthenticationConstants.AUTHN_RUNTIME_EXCEPTION,
|
||||||
if ( authResult.getException() != null )
|
authResult.getException().getMessage()));
|
||||||
{
|
}
|
||||||
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(
|
return (new AuthenticationResult(false, null, new AuthenticationException(
|
||||||
"authentication failed on authenticators: " + knownAuthenticators() ), authnResultErrors ) );
|
"authentication failed on authenticators: " + knownAuthenticators()), authnResultErrors));
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<Authenticator> getAuthenticators()
|
public List<Authenticator> getAuthenticators() {
|
||||||
{
|
|
||||||
return authenticators;
|
return authenticators;
|
||||||
}
|
}
|
||||||
|
|
||||||
private String knownAuthenticators()
|
private String knownAuthenticators() {
|
||||||
{
|
|
||||||
StringBuilder strbuf = new StringBuilder();
|
StringBuilder strbuf = new StringBuilder();
|
||||||
|
|
||||||
for ( Authenticator authenticator : authenticators )
|
for (Authenticator authenticator : authenticators) {
|
||||||
{
|
strbuf.append('(').append(authenticator.getId()).append(") ");
|
||||||
strbuf.append( '(' ).append( authenticator.getId() ).append( ") " );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return strbuf.toString();
|
return strbuf.toString();
|
||||||
|
|
|
@ -40,6 +40,7 @@ import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import javax.annotation.PostConstruct;
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
import javax.inject.Named;
|
import javax.inject.Named;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
@ -69,6 +70,11 @@ public class UserManagerAuthenticator
|
||||||
return "UserManagerAuthenticator";
|
return "UserManagerAuthenticator";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@PostConstruct
|
||||||
|
private void init() {
|
||||||
|
super.valid = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @throws org.apache.archiva.redback.policy.AccountLockedException
|
* @throws org.apache.archiva.redback.policy.AccountLockedException
|
||||||
|
|
|
@ -39,6 +39,7 @@ import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import javax.annotation.PostConstruct;
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -59,6 +60,11 @@ public class KeyStoreAuthenticator
|
||||||
@Resource(name = "userManager#default")
|
@Resource(name = "userManager#default")
|
||||||
private UserManager userManager;
|
private UserManager userManager;
|
||||||
|
|
||||||
|
@PostConstruct
|
||||||
|
private void init() {
|
||||||
|
super.valid=true;
|
||||||
|
}
|
||||||
|
|
||||||
public String getId()
|
public String getId()
|
||||||
{
|
{
|
||||||
return getClass().getName();
|
return getClass().getName();
|
||||||
|
|
Loading…
Reference in New Issue