package org.dcache.gplazma.monitor; import java.security.Principal; import java.util.HashSet; import java.util.Set; import org.dcache.gplazma.configuration.ConfigurationItemControl; import org.dcache.gplazma.monitor.LoginResult.AccountPhaseResult; import org.dcache.gplazma.monitor.LoginResult.AccountPluginResult; import org.dcache.gplazma.monitor.LoginResult.AuthPhaseResult; import org.dcache.gplazma.monitor.LoginResult.AuthPluginResult; import org.dcache.gplazma.monitor.LoginResult.MapPhaseResult; import org.dcache.gplazma.monitor.LoginResult.MapPluginResult; import org.dcache.gplazma.monitor.LoginResult.SessionPhaseResult; import org.dcache.gplazma.monitor.LoginResult.SessionPluginResult; /** * This class records the result of a gPlazma login run by implementing the * LoginMonitor interface. */ public class RecordingLoginMonitor implements LoginMonitor { LoginResult _result = new LoginResult(); /* * The following sets only have significance while processing a phase * or plug */ private Set<Principal> _atPhaseStartPrincipals; private Set<Principal> _principals; private Set<Object> _publicCredentials; private Set<Object> _privateCredentials; @Override public void authBegins(Set<Object> publicCredentials, Set<Object> privateCredentials, Set<Principal> principals) { _atPhaseStartPrincipals = new HashSet<>(principals); AuthPhaseResult auth = _result.getAuthPhase(); auth.setPublicCredentials(publicCredentials); auth.setPrivateCredentials(privateCredentials); } @Override public void authPluginBegins(String name, ConfigurationItemControl control, Set<Object> publicCredentials, Set<Object> privateCredentials, Set<Principal> principals) { AuthPhaseResult auth = _result.getAuthPhase(); auth.addPluginResult(new AuthPluginResult(name, control)); _principals = new HashSet<>(principals); _publicCredentials = new HashSet<>(publicCredentials); _privateCredentials = new HashSet<>(privateCredentials); } @Override public void authPluginEnds(String name, ConfigurationItemControl control, Result result, String error, Set<Object> publicCredentials, Set<Object> privateCredentials, Set<Principal> principals) { AuthPhaseResult auth = _result.getAuthPhase(); AuthPluginResult plugin = auth.getLastPlugin(); plugin.setIdentified(_principals, principals); plugin.setPublicCredentials(_publicCredentials, publicCredentials); plugin.setPrivateCredentials(_privateCredentials, privateCredentials); plugin.setResult(result); if(result == Result.FAIL) { plugin.setError(error); } } @Override public void authEnds(Set<Principal> principals, Result result) { AuthPhaseResult auth = _result.getAuthPhase(); auth.setPrincipals(_atPhaseStartPrincipals, principals); auth.setResult(result); } @Override public void mapBegins(Set<Principal> principals) { _atPhaseStartPrincipals = new HashSet<>(principals); } @Override public void mapPluginBegins(String name, ConfigurationItemControl control, Set<Principal> principals) { MapPhaseResult map = _result.getMapPhase(); map.addPluginResult(new MapPluginResult(name, control)); _principals = new HashSet<>(principals); } @Override public void mapPluginEnds(String name, ConfigurationItemControl control, Result result, String error, Set<Principal> principals) { MapPhaseResult map = _result.getMapPhase(); MapPluginResult plugin = map.getLastPlugin(); plugin.setResult(result); plugin.setPrincipals(_principals, principals); if(result == Result.FAIL) { plugin.setError(error); } } @Override public void mapEnds(Set<Principal> principals, Result result) { MapPhaseResult map = _result.getMapPhase(); map.setPrincipals(_atPhaseStartPrincipals, principals); map.setResult(result); } @Override public void accountBegins(Set<Principal> principals) { _atPhaseStartPrincipals = new HashSet<>(principals); } @Override public void accountPluginBegins(String name, ConfigurationItemControl control, Set<Principal> principals) { AccountPhaseResult account = _result.getAccountPhase(); account.addPluginResult(new AccountPluginResult(name, control)); _principals = new HashSet<>(principals); } @Override public void accountPluginEnds(String name, ConfigurationItemControl control, Result result, String error, Set<Principal> principals) { AccountPhaseResult account = _result.getAccountPhase(); AccountPluginResult plugin = account.getLastPlugin(); plugin.setAuthorized(_principals, principals); plugin.setResult(result); if(result == Result.FAIL) { plugin.setError(error); } } @Override public void accountEnds(Set<Principal> principals, Result result) { AccountPhaseResult account = _result.getAccountPhase(); account.setPrincipals(_atPhaseStartPrincipals, principals); account.setResult(result); } @Override public void sessionBegins(Set<Principal> principals) { _atPhaseStartPrincipals = new HashSet<>(principals); } @Override public void sessionPluginBegins(String name, ConfigurationItemControl control, Set<Principal> principals, Set<Object> attributes) { SessionPhaseResult session = _result.getSessionPhase(); session.addPluginResult(new SessionPluginResult(name, control)); _principals = new HashSet<>(principals); } @Override public void sessionPluginEnds(String name, ConfigurationItemControl control, Result result, String error, Set<Principal> principals, Set<Object> attributes) { SessionPhaseResult session = _result.getSessionPhase(); SessionPluginResult plugin = session.getLastPlugin(); plugin.setAuthorized(_principals, principals); plugin.setAttributes(attributes); plugin.setResult(result); if(result == Result.FAIL) { plugin.setError(error); } } @Override public void sessionEnds(Set<Principal> principals, Set<Object> attributes, Result result) { SessionPhaseResult session = _result.getSessionPhase(); session.setPrincipals(_atPhaseStartPrincipals, principals); session.setResult(result); session.setAttributes(attributes); } @Override public void validationResult(Result result, String error) { _result.setValidationResult(result); if(result == Result.FAIL) { _result.setValidationError(error); } } public LoginResult getResult() { return _result; } }