package org.atricore.idbus.capabilities.sso.support.core.util;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.atricore.idbus.common.sso._1_0.protocol.*;
import org.atricore.idbus.kernel.main.federation.SubjectAttribute;
import org.atricore.idbus.kernel.main.federation.SubjectNameID;
import org.atricore.idbus.kernel.main.federation.SubjectRole;
import javax.security.auth.Subject;
import java.security.Principal;
import java.util.HashSet;
import java.util.Set;
/**
* @author <a href="mailto:sgonzalez@atricore.org">Sebastian Gonzalez Oyuela</a>
* @version $Id$
*/
public class ProtocolUtils {
private static final Log logger = LogFactory.getLog(ProtocolUtils.class);
public static SubjectType toSubjectType(Subject s) {
SubjectType st = new SubjectType();
for (SubjectNameID p : s.getPrincipals(SubjectNameID.class )) {
SubjectNameIDType a = new SubjectNameIDType ();
a.setName(p.getName());
a.setFormat(p.getFormat());
a.setLocalName(p.getLocalName());
a.setNameQualifier(p.getNameQualifier());
a.setLocalNameQualifier(p.getLocalNameQualifier());
st.getAbstractPrincipal().add(a);
}
for (SubjectAttribute p : s.getPrincipals(SubjectAttribute.class )) {
SubjectAttributeType a = new SubjectAttributeType();
a.setName(p.getName());
a.setValue(p.getValue());
st.getAbstractPrincipal().add(a);
}
for (SubjectRole p : s.getPrincipals(SubjectRole.class )) {
SubjectRoleType a = new SubjectRoleType();
a.setName(p.getName());
st.getAbstractPrincipal().add(a);
}
return st;
}
public static Subject toSubject(SubjectType s) {
Set<Principal> principals = new HashSet<Principal>();
for (int i = 0; i < s.getAbstractPrincipal().size(); i++) {
AbstractPrincipalType pt = s.getAbstractPrincipal().get(i);
if (pt instanceof SubjectNameIDType) {
SubjectNameIDType st = (SubjectNameIDType) pt;
SubjectNameID p = new SubjectNameID (st.getName(),
st.getFormat(),
st.getNameQualifier(),
st.getLocalNameQualifier());
p.setLocalName(st.getLocalName());
principals.add(p);
} else if (pt instanceof SubjectAttributeType) {
SubjectAttributeType st = (SubjectAttributeType) pt;
SubjectAttribute p = new SubjectAttribute(st.getName(), st.getValue());
principals.add(p);
} else if (pt instanceof SubjectRoleType) {
SubjectRoleType st = (SubjectRoleType) pt;
SubjectRole p = new SubjectRole(st.getName());
principals.add(p);
} else {
logger.warn("Unknown principal type " + pt.getClass().getSimpleName());
}
}
return new Subject(true, principals, new HashSet(), new HashSet());
}
}