package de.persosim.simulator.seccondition; import java.util.Collection; import java.util.HashSet; import de.persosim.simulator.protocols.ta.Authorization; import de.persosim.simulator.protocols.ta.RelativeAuthorization; import de.persosim.simulator.protocols.ta.TerminalAuthenticationMechanism; import de.persosim.simulator.protocols.ta.TerminalType; import de.persosim.simulator.secstatus.EffectiveAuthorizationMechanism; import de.persosim.simulator.secstatus.SecMechanism; import de.persosim.simulator.utils.BitField; /** * This condition can be used to check for past executions of TA. * <p/> * If the {@link TerminalType} is set and differs from <code>null</code>, it * will be matched against the {@link TerminalType} stored in the * {@link TerminalAuthenticationMechanism}. * <p/> * If the {@link RelativeAuthorization} is set and differs from * <code>null</code>, it will be matched against the * {@link RelativeAuthorization} stored in the * {@link TerminalAuthenticationMechanism}. * * @author mboonk * */ public class TaSecurityCondition implements SecCondition { TerminalType terminalType; Authorization authorization; public TaSecurityCondition(){ } public TaSecurityCondition(TerminalType terminalType, Authorization authorization) { super(); this.terminalType = terminalType; this.authorization = authorization; } @Override public boolean check(Collection<SecMechanism> mechanisms) { TerminalAuthenticationMechanism terminalAuthenticationMechanism = null; EffectiveAuthorizationMechanism authorizationMechanism = null; for (SecMechanism mechanism : mechanisms) { if (mechanism instanceof TerminalAuthenticationMechanism) { terminalAuthenticationMechanism = (TerminalAuthenticationMechanism) mechanism; } if (mechanism instanceof EffectiveAuthorizationMechanism) { authorizationMechanism = (EffectiveAuthorizationMechanism) mechanism; } } if(terminalAuthenticationMechanism != null) { if (terminalType == null || terminalAuthenticationMechanism.getTerminalType().equals(terminalType)) { if (authorization == null) { return true; } else { if(authorizationMechanism != null) { Authorization auth = authorizationMechanism.getAuthorization(terminalType.getAsOid()); BitField tempField = authorization.getAuthorization().or(auth.getAuthorization()); if (tempField.equals(auth.getAuthorization())) { return true; } } } } } return false; } @Override public Collection<Class<? extends SecMechanism>> getNeededMechanisms() { HashSet<Class<? extends SecMechanism>> result = new HashSet<>(); result.add(TerminalAuthenticationMechanism.class); result.add(EffectiveAuthorizationMechanism.class); return result; } @Override public String toString() { return getClass().getSimpleName() + "[" + terminalType + ", " + authorization + "]"; } }