All Downloads are FREE. Search and download functionalities are using the official Maven repository.

pl.edu.icm.unity.engine.authn.AuthenticatorImpl Maven / Gradle / Ivy

/*
 * Copyright (c) 2013 ICM Uniwersytet Warszawski All rights reserved.
 * See LICENCE.txt file for licensing information.
 */
package pl.edu.icm.unity.engine.authn;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import pl.edu.icm.unity.base.authn.AuthenticationOptionsSelector;
import pl.edu.icm.unity.engine.api.authn.AuthenticatorInstance;
import pl.edu.icm.unity.engine.api.authn.AuthenticatorInstanceMetadata;
import pl.edu.icm.unity.engine.api.authn.CredentialRetrieval;
import pl.edu.icm.unity.engine.api.authn.CredentialVerificator;
import pl.edu.icm.unity.engine.api.authn.IdPInfo;
import pl.edu.icm.unity.engine.api.authn.CredentialVerificator.VerificatorType;
import pl.edu.icm.unity.engine.api.authn.local.LocalCredentialVerificator;
import pl.edu.icm.unity.engine.api.authn.remote.AbstractRemoteVerificator;

/**
 * Runtime instance of authenticator, with a selected retrieval. Stateful and mutable.
 * @author P.Piernik
 */
class AuthenticatorImpl implements AuthenticatorInstance
{
	private CredentialRetrieval retrieval;
	private CredentialVerificator verificator;
	private AuthenticatorInstanceMetadata instanceDescription;
	
	AuthenticatorImpl(CredentialRetrieval retrieval, CredentialVerificator verificator,
			AuthenticatorInstanceMetadata instanceDescription)
	{
		this.retrieval = retrieval;
		this.verificator = verificator;
		this.instanceDescription = instanceDescription;
	}

	/**
	 * Updates the current configuration of the authenticator. 
	 * For local verificators the verificator configuration is only set for the underlying verificator, it is not
	 * exposed in the instanceDescription. 
	 */
	@Override
	public void updateConfiguration(String verificatorConfiguration, String retrievalConfiguration, String localCredential)
	{
		retrieval.setSerializedConfiguration(retrievalConfiguration);
		verificator.setSerializedConfiguration(verificatorConfiguration);
		if (!(verificator.getType().equals(VerificatorType.Local)))
		{
			instanceDescription.setConfiguration(verificatorConfiguration);
		} else 
		{
			instanceDescription.setConfiguration(null);
			((LocalCredentialVerificator)verificator).setCredentialName(localCredential);
			instanceDescription.setLocalCredentialName(localCredential);
		}
	}
	
	@Override
	public void setRevision(long revision)
	{
		instanceDescription.setRevision(revision);
	}
	
	@Override
	public long getRevision()
	{
		return instanceDescription.getRevision();
	}
		
	@Override
	public AuthenticatorInstanceMetadata getMetadata()
	{
		return instanceDescription;
	}

	@Override
	public CredentialRetrieval getRetrieval()
	{
		return retrieval;
	}
	
	@Override
	public CredentialVerificator getCredentialVerificator()
	{
		return verificator;
	}
	
	@Override
	public List getAuthnOptionSelectors()
	{
		List options = new ArrayList<>();
		if (verificator instanceof AbstractRemoteVerificator)
		{
			AbstractRemoteVerificator remoteVerificator = (AbstractRemoteVerificator) verificator;
			for (IdPInfo idp : remoteVerificator.getIdPs())
			{
				if (!idp.configId.isEmpty())
				{
					options.add(new AuthenticationOptionsSelector(instanceDescription.getId(), idp.configId.get(),
							idp.displayedName));
				}
			}
		}

		options.add(AuthenticationOptionsSelector.allForAuthenticator(instanceDescription.getId()));
		return options;
	}
	
	@Override
	public List extractIdPs()
	{
		if (verificator instanceof AbstractRemoteVerificator)
		{
			AbstractRemoteVerificator remoteVerificator = (AbstractRemoteVerificator) verificator;
			return remoteVerificator.getIdPs();
		} else
		{
			return Collections.emptyList();
		}
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy