package org.atricore.idbus.examples.accountlinkemitter;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.atricore.idbus.capabilities.sso.support.core.NameIDFormat;
import org.atricore.idbus.kernel.main.federation.*;
import javax.security.auth.Subject;
import java.util.Set;
/**
* Created by sgonzalez on 3/16/15.
*/
public class CustomAccountLinkEmitter implements AccountLinkEmitter {
private static final Log logger = LogFactory.getLog(CustomAccountLinkEmitter.class);
/**
* Emit an AccountLink for the remote Subject
* @param subject received from the IdP
*
* @return the new AccountLink instance
*/
@Override
public AccountLink emit(Subject subject) {
Set<SubjectNameID> subjectNameIDs = subject.getPrincipals( SubjectNameID.class );
if ( logger.isDebugEnabled() )
logger.debug( "Principals found: " + subjectNameIDs.size() );
for ( SubjectNameID subjectNameID : subjectNameIDs ) {
if ( logger.isDebugEnabled()) {
logger.debug( "Principal Name: " + subjectNameID.getName() );
logger.debug( "Principal Format: " + subjectNameID.getFormat() );
}
if ( subjectNameID.getFormat() != null ) {
NameIDFormat fmt = NameIDFormat.asEnum( subjectNameID.getFormat() );
switch ( fmt ) {
case UNSPECIFIED:
return new DynamicAccountLinkImpl( subject, subjectNameID.getName(), NameIDFormat.UNSPECIFIED.getValue());
case EMAIL:
return new DynamicAccountLinkImpl( subject, subjectNameID.getName(), NameIDFormat.EMAIL.getValue());
case TRANSIENT:
return new DynamicAccountLinkImpl( subject, subjectNameID.getName(), NameIDFormat.TRANSIENT.getValue() );
case PERSISTENT:
return new DynamicAccountLinkImpl( subject, subjectNameID.getName(), NameIDFormat.PERSISTENT.getValue() );
default:
logger.warn("Unrecognized Name ID Format : " + fmt);
return new DynamicAccountLinkImpl( subject, subjectNameID.getName(), NameIDFormat.UNSPECIFIED.getValue());
}
} else {
// If no format is specified, take the subject id as is, and force UNSPECIFIED
return new DynamicAccountLinkImpl( subject, subjectNameID.getName(), NameIDFormat.UNSPECIFIED.getValue());
}
}
logger.error( "Cannot create account link for subject : " + subject );
return null;
}
}