package eu.dnetlib.enabling.ui.server.auth;

import java.util.List;

import org.springframework.beans.factory.annotation.Required;

/**
 * Chains several authentication managers together.
 *
 * @author marko
 *
 */
public class AuthenticationManagerChain implements AuthenticationManager {

	/**
	 * authentication manager list.
	 */
	private List<AuthenticationManager> authenticationManagers;

	/**
	 * {@inheritDoc}
	 * @see eu.dnetlib.enabling.ui.server.auth.AuthenticationManager#authenticate(java.lang.String, java.lang.String)
	 */
	public Principal authenticate(final String login, final String password) {
		for (final AuthenticationManager m : authenticationManagers) {
			final Principal principal = m.authenticate(login, password);
			if (principal != null)
				return principal;
		}
		return null;
	}

	/**
	 * {@inheritDoc}
	 * @see eu.dnetlib.enabling.ui.server.auth.AuthenticationManager#authorize(eu.dnetlib.enabling.ui.server.auth.Principal)
	 */
	public boolean authorize(final Principal principal) {
		for (final AuthenticationManager m : authenticationManagers) {
			if (m.authorize(principal))
				return true;
		}
		return false;
	}

	@Override
	public boolean authorize(Principal principal, String resource, String action) {
		for (final AuthenticationManager m : authenticationManagers) {
			if (m.authorize(principal, resource, action))
				return true;
		}
		return false;
	}
	
	
	
	public List<AuthenticationManager> getAuthenticationManagers() {
		return authenticationManagers;
	}

	@Required
	public void setAuthenticationManagers(final List<AuthenticationManager> authenticationManagers) {
		this.authenticationManagers = authenticationManagers;
	}

	




}
