package org.dcache.gplazma.monitor;
import java.security.Principal;
import java.util.Set;
import org.dcache.gplazma.configuration.ConfigurationItemControl;
/**
* A class that implements LoginMonitor will be provided with the progress of
* a login request.
*
* For each of the four phases, a {@literal <phase>Begin} and
* {@literal <phase>End} call provides summary information of the state of the
* login at the beginning and end of the phase, respectively.
*
* During a phase (i.e., after the {@literal <phase>Begin} call of a phase
* and before the corresponding {@literal <phase>End} call), zero or more
* plugins are called. These are reported by {@literal <phase>PluginBegin} and
* {@literal <phase>PluginEnds} calls, where each {@literal <phase>PluginBegin}
* is always followed by {@literal <phase>PluginEnd} call. Each such call
* provides the current situation, including any modifications made by the
* plugin. Also reported is whether the plugin succeeded or not.
*/
public interface LoginMonitor
{
enum Result {
SUCCESS, FAIL
}
/*
* Feedback about the AUTH Phase
*/
void authBegins(Set<Object> publicCredentials,
Set<Object> privateCredentials, Set<Principal> principals);
void authPluginBegins(String name, ConfigurationItemControl control,
Set<Object> publicCredentials, Set<Object> privateCredentials,
Set<Principal> principals);
void authPluginEnds(String name, ConfigurationItemControl control,
Result result, String error, Set<Object> publicCredentials,
Set<Object> privateCredentials, Set<Principal> principals);
void authEnds(Set<Principal> principals, Result result);
/*
* Feedback about the MAP phase
*/
void mapBegins(Set<Principal> principals);
void mapPluginBegins(String name, ConfigurationItemControl control,
Set<Principal> principals);
void mapPluginEnds(String name, ConfigurationItemControl control,
Result result, String error, Set<Principal> principals);
void mapEnds(Set<Principal> principals, Result result);
/*
* Feedback about the ACCOUNT phase
*/
void accountBegins(Set<Principal> principals);
void accountPluginBegins(String name,
ConfigurationItemControl control, Set<Principal> principals);
void accountPluginEnds(String name,
ConfigurationItemControl control, Result result, String error,
Set<Principal> principals);
void accountEnds(Set<Principal> principals, Result result);
/*
* Feedback about the SESSION phase
*/
void sessionBegins(Set<Principal> principals);
void sessionPluginBegins(String name,
ConfigurationItemControl control, Set<Principal> principals,
Set<Object> attributes);
void sessionPluginEnds(String name, ConfigurationItemControl control,
Result result, String error, Set<Principal> principals,
Set<Object> attributes);
void sessionEnds(Set<Principal> principals, Set<Object> attributes,
Result result);
/*
* Feedback about final validation step
*/
void validationResult(Result result, String error);
}