package org.picketlink.authentication.levels.internal; import org.picketlink.Identity; import org.picketlink.annotations.PicketLink; import org.picketlink.authentication.Authenticator; import org.picketlink.authentication.levels.Level; import org.picketlink.authentication.levels.SecurityLevelResolver; import org.picketlink.authentication.levels.annotations.SecurityLevel; import org.picketlink.common.exceptions.PicketLinkException; import org.picketlink.producer.LevelFactoryResolver; import javax.enterprise.inject.Any; import javax.enterprise.inject.Instance; import javax.inject.Inject; /** * Resolves security level from Authenticator * @author Michal Trnka */ @PicketLink public class AuthenticatorLevelResolver implements SecurityLevelResolver{ @Inject @PicketLink private Instance<Authenticator> authenticatorInstance; @Inject @Any private Identity identity; @Inject private LevelFactoryResolver levelFactoryResolver; protected String resolveLevel(){ if(!identity.isLoggedIn()){ throw new PicketLinkException(); } if(authenticatorInstance.isUnsatisfied()){ throw new PicketLinkException(); } SecurityLevel a = authenticatorInstance.get().getClass().getAnnotation(SecurityLevel.class); if (a == null) { throw new PicketLinkException(); } return a.value(); } @Override public Level resolve() { try{ String level = resolveLevel(); return levelFactoryResolver.resolve().createLevel(level); }catch(PicketLinkException e){ return null; } } }