use the new session manager interface
[java-idp.git] / src / edu / internet2 / middleware / shibboleth / common / provider / PrincipalNameIdentifier.java
1 /*
2  * Copyright [2005] [University Corporation for Advanced Internet Development, Inc.]
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 package edu.internet2.middleware.shibboleth.common.provider;
18
19 import java.security.Principal;
20
21 import org.apache.log4j.Logger;
22 import org.opensaml.SAMLException;
23 import org.opensaml.SAMLNameIdentifier;
24 import org.w3c.dom.Element;
25
26 import edu.internet2.middleware.shibboleth.common.IdentityProvider;
27 import edu.internet2.middleware.shibboleth.common.InvalidNameIdentifierException;
28 import edu.internet2.middleware.shibboleth.common.LocalPrincipal;
29 import edu.internet2.middleware.shibboleth.common.NameIdentifierMapping;
30 import edu.internet2.middleware.shibboleth.common.NameIdentifierMappingException;
31 import edu.internet2.middleware.shibboleth.common.ServiceProvider;
32
33 /**
34  * {@link NameIdentifierMapping}implementation to use when the SAML name identifier format matches the Shibboleth
35  * internal representation of the principal.
36  * 
37  * @author Walter Hoehn
38  */
39 public class PrincipalNameIdentifier extends BaseNameIdentifierMapping {
40
41         private static Logger log = Logger.getLogger(PrincipalNameIdentifier.class.getName());
42
43         public PrincipalNameIdentifier(Element config) throws NameIdentifierMappingException {
44
45                 super(config);
46         }
47
48         public Principal getPrincipal(SAMLNameIdentifier nameId, ServiceProvider sProv, IdentityProvider idProv)
49                         throws NameIdentifierMappingException, InvalidNameIdentifierException {
50
51                 verifyQualifier(nameId, idProv);
52                 return new LocalPrincipal(nameId.getName());
53         }
54
55         public SAMLNameIdentifier getNameIdentifier(LocalPrincipal principal, ServiceProvider sProv, IdentityProvider idProv)
56                         throws NameIdentifierMappingException {
57
58                 if (principal == null) {
59                         log.error("A principal must be supplied for Name Identifier creation.");
60                         throw new IllegalArgumentException("A principal must be supplied for Name Identifier creation.");
61                 }
62
63                 try {
64                         SAMLNameIdentifier nameid = SAMLNameIdentifier.getInstance(getNameIdentifierFormat().toString());
65                         nameid.setName(principal.getName());
66                         nameid.setNameQualifier(idProv.getProviderId());
67                         return nameid;
68                 } catch (SAMLException e) {
69                         throw new NameIdentifierMappingException("Unable to generate Name Identifier: " + e);
70                 }
71         }
72 }