source: VirtualCollectionRegistry/trunk/VirtualCollectionRegistry/src/main/java/eu/clarin/cmdi/virtualcollectionregistry/service/impl/SAMLCreatorProvider.java @ 5523

Last change on this file since 5523 was 5523, checked in by Twan Goosen, 10 years ago

Added reading of shibboleth attributes for display name, organisation and e-mail. Also added these properties to the shhaa filter.
Principal is now dynamically retrieved from the http request.
Refs #595

File size: 2.3 KB
Line 
1package eu.clarin.cmdi.virtualcollectionregistry.service.impl;
2
3import de.mpg.aai.shhaa.model.AuthAttribute;
4import de.mpg.aai.shhaa.model.AuthPrincipal;
5import eu.clarin.cmdi.virtualcollectionregistry.model.Creator;
6import eu.clarin.cmdi.virtualcollectionregistry.service.CreatorProvider;
7import java.security.Principal;
8import org.slf4j.Logger;
9import org.slf4j.LoggerFactory;
10
11/**
12 *
13 * @author twagoo
14 */
15public 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}
Note: See TracBrowser for help on using the repository browser.