1 | package eu.clarin.cmdi.virtualcollectionregistry.service.impl; |
---|
2 | |
---|
3 | import de.mpg.aai.shhaa.model.AuthAttribute; |
---|
4 | import de.mpg.aai.shhaa.model.AuthPrincipal; |
---|
5 | import eu.clarin.cmdi.virtualcollectionregistry.model.Creator; |
---|
6 | import eu.clarin.cmdi.virtualcollectionregistry.service.CreatorProvider; |
---|
7 | import java.security.Principal; |
---|
8 | import org.slf4j.Logger; |
---|
9 | import org.slf4j.LoggerFactory; |
---|
10 | |
---|
11 | /** |
---|
12 | * |
---|
13 | * @author twagoo |
---|
14 | */ |
---|
15 | public class SAMLCreatorProvider implements CreatorProvider { |
---|
16 | |
---|
17 | private final static Logger logger = LoggerFactory.getLogger(SAMLCreatorProvider.class); |
---|
18 | public static final String[] DISPLAY_NAME_ATTRIBUTE = new String[]{"cn", "commonName", "displayName"}; |
---|
19 | public static final String[] ORGANISATION_ATTRIBUTE = new String[]{"o", "organizationName", "schacHomeOrganization"}; |
---|
20 | public static final String[] MAIL_ATTRIBUTE = new String[]{"mail"}; |
---|
21 | |
---|
22 | @Override |
---|
23 | public Creator getCreator(Principal userPrincipal) { |
---|
24 | final Creator creator = new Creator(); |
---|
25 | if (userPrincipal instanceof AuthPrincipal) { |
---|
26 | final AuthPrincipal principal = (AuthPrincipal) userPrincipal; |
---|
27 | creator.setPerson(getAttribute(principal, DISPLAY_NAME_ATTRIBUTE)); |
---|
28 | creator.setOrganisation(getAttribute(principal, ORGANISATION_ATTRIBUTE)); |
---|
29 | creator.setEMail(getAttribute(principal, MAIL_ATTRIBUTE)); |
---|
30 | } |
---|
31 | |
---|
32 | if (creator.getPerson() == null) { |
---|
33 | creator.setPerson(userPrincipal.getName()); |
---|
34 | } |
---|
35 | |
---|
36 | return creator; |
---|
37 | } |
---|
38 | |
---|
39 | private static String getAttribute(final AuthPrincipal principal, String[] attrs) { |
---|
40 | for (String attr : attrs) { |
---|
41 | final String value = getAttributeValue(principal, attr); |
---|
42 | if (value != null) { |
---|
43 | return value; |
---|
44 | } |
---|
45 | } |
---|
46 | return null; |
---|
47 | } |
---|
48 | |
---|
49 | private static String getAttributeValue(final AuthPrincipal principal, String attr) { |
---|
50 | logger.trace("Looking for attribute {}", attr); |
---|
51 | final AuthAttribute<?> attribute = principal.getAttribues().get(attr); |
---|
52 | if (attribute != null) { |
---|
53 | final Object value = attribute.getValue(); |
---|
54 | if (value != null) { |
---|
55 | logger.trace("Found attribute value: {} = {}", attr, value); |
---|
56 | return value.toString(); |
---|
57 | } |
---|
58 | } |
---|
59 | return null; |
---|
60 | } |
---|
61 | |
---|
62 | } |
---|