use the new session manager interface
[java-idp.git] / src / edu / internet2 / middleware / shibboleth / common / provider / BaseNameIdentifierMapping.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.net.URI;
20 import java.net.URISyntaxException;
21
22 import org.apache.log4j.Logger;
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.NameIdentifierMapping;
28 import edu.internet2.middleware.shibboleth.common.NameIdentifierMappingException;
29
30 /**
31  * Base class for processing name identifier mapping configuration.
32  * 
33  * @author Walter Hoehn
34  */
35 public abstract class BaseNameIdentifierMapping implements NameIdentifierMapping {
36
37         private static Logger log = Logger.getLogger(BaseNameIdentifierMapping.class.getName());
38         private URI format;
39         private String id;
40
41         public BaseNameIdentifierMapping(Element config) throws NameIdentifierMappingException {
42
43                 if (!config.getLocalName().equals("NameMapping")) { throw new IllegalArgumentException(); }
44
45                 String rawFormat = ((Element) config).getAttribute("format");
46                 if (rawFormat == null || rawFormat.equals("")) {
47                         log.error("Name Mapping requires a \"format\" attribute.");
48                         throw new NameIdentifierMappingException("Invalid mapping information specified.");
49                 }
50
51                 try {
52                         format = new URI(rawFormat);
53                 } catch (URISyntaxException e) {
54                         log.error("Name Mapping attribute \"format\" is not a valid URI: " + e);
55                         throw new NameIdentifierMappingException("Invalid mapping information specified.");
56                 }
57
58                 String id = ((Element) config).getAttribute("id");
59                 if (id != null && !id.equals("")) {
60                         this.id = id;
61                 }
62
63         }
64
65         public URI getNameIdentifierFormat() {
66
67                 return format;
68         }
69
70         public String getId() {
71
72                 return id;
73         }
74
75         public void destroy() {
76
77         // nothing to do
78         }
79
80         protected void verifyQualifier(SAMLNameIdentifier nameId, IdentityProvider idProv)
81                         throws NameIdentifierMappingException {
82
83                 if (idProv.getProviderId() == null || !idProv.getProviderId().equals(nameId.getNameQualifier())) {
84                         log.error("The name qualifier (" + nameId.getNameQualifier()
85                                         + ") for the referenced subject is not valid for this identity provider.");
86                         throw new NameIdentifierMappingException("The name qualifier (" + nameId.getNameQualifier()
87                                         + ") for the referenced subject is not valid for this identity provider.");
88                 }
89         }
90 }