Removed Factory property.
[java-idp.git] / src / edu / internet2 / middleware / shibboleth / common / provider / AQHNameIdentifierMapping.java
1 /*
2  * The Shibboleth License, Version 1. Copyright (c) 2002 University Corporation for Advanced Internet Development, Inc.
3  * All rights reserved Redistribution and use in source and binary forms, with or without modification, are permitted
4  * provided that the following conditions are met: Redistributions of source code must retain the above copyright
5  * notice, this list of conditions and the following disclaimer. Redistributions in binary form must reproduce the above
6  * copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials
7  * provided with the distribution, if any, must include the following acknowledgment: "This product includes software
8  * developed by the University Corporation for Advanced Internet Development <http://www.ucaid.edu> Internet2 Project.
9  * Alternately, this acknowledegement may appear in the software itself, if and wherever such third-party
10  * acknowledgments normally appear. Neither the name of Shibboleth nor the names of its contributors, nor Internet2, nor
11  * the University Corporation for Advanced Internet Development, Inc., nor UCAID may be used to endorse or promote
12  * products derived from this software without specific prior written permission. For written permission, please contact
13  * shibboleth@shibboleth.org Products derived from this software may not be called Shibboleth, Internet2, UCAID, or the
14  * University Corporation for Advanced Internet Development, nor may Shibboleth appear in their name, without prior
15  * written permission of the University Corporation for Advanced Internet Development. THIS SOFTWARE IS PROVIDED BY THE
16  * COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND WITH ALL FAULTS. ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
17  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT ARE
18  * DISCLAIMED AND THE ENTIRE RISK OF SATISFACTORY QUALITY, PERFORMANCE, ACCURACY, AND EFFORT IS WITH LICENSEE. IN NO
19  * EVENT SHALL THE COPYRIGHT OWNER, CONTRIBUTORS OR THE UNIVERSITY CORPORATION FOR ADVANCED INTERNET DEVELOPMENT, INC.
20  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
21  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
23  * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26 package edu.internet2.middleware.shibboleth.common.provider;
27
28 import java.io.Serializable;
29
30 import org.apache.log4j.Logger;
31 import javax.xml.namespace.QName;
32 import org.opensaml.SAMLException;
33 import org.w3c.dom.Element;
34
35 import edu.internet2.middleware.shibboleth.common.AuthNPrincipal;
36 import edu.internet2.middleware.shibboleth.common.NameIdentifierMappingException;
37
38 /**
39  * Base class for {@link NameIdentifierMapping}implementations that support Shibboleth Attribute Query Handles.
40  * 
41  * @author Walter Hoehn
42  */
43 public abstract class AQHNameIdentifierMapping extends BaseNameIdentifierMapping {
44
45         private static Logger log = Logger.getLogger(AQHNameIdentifierMapping.class.getName());
46         /** Time in seconds for which handles are valid */
47         protected long handleTTL = 1800;
48         protected static QName[] errorCodes = {SAMLException.REQUESTER,
49                         new QName(edu.internet2.middleware.shibboleth.common.XML.SHIB_NS, "InvalidHandle")};
50
51         public AQHNameIdentifierMapping(Element config) throws NameIdentifierMappingException {
52
53                 super(config);
54
55                 String rawTTL = ((Element) config).getAttribute("handleTTL");
56                 try {
57                         if (rawTTL != null && !rawTTL.equals("")) {
58                                 handleTTL = Long.parseLong(rawTTL);
59                                 if (handleTTL < 30) {
60                                         log.warn("You have set the Attribute Query Handle \"Time To Live\' to a very low "
61                                                         + "value.  It is recommended that you increase it.");
62                                 }
63                         }
64                         log.debug("Attribute Query Handle TTL set to (" + handleTTL + ") seconds.");
65
66                 } catch (NumberFormatException nfe) {
67                         log.error("Value for attribute \"handleTTL\" mus be a long integer.");
68                         throw new NameIdentifierMappingException("Could not load Name Identifier Mapping with configured data.");
69                 }
70         }
71
72         protected HandleEntry createHandleEntry(AuthNPrincipal principal) {
73
74                 return new HandleEntry(principal, handleTTL);
75         }
76 }
77
78 class HandleEntry implements Serializable {
79
80         static final long serialVersionUID = 1L;
81         protected AuthNPrincipal principal;
82         protected long expirationTime;
83
84         /**
85          * Creates a HandleEntry
86          * 
87          * @param principal
88          *            the principal represented by this entry.
89          * @param TTL
90          *            the time, in seconds, for which the handle should be valid.
91          */
92         protected HandleEntry(AuthNPrincipal principal, long TTL) {
93
94                 this.principal = principal;
95                 expirationTime = System.currentTimeMillis() + (TTL * 1000);
96         }
97
98         protected boolean isExpired() {
99
100                 return (System.currentTimeMillis() >= expirationTime);
101         }
102 }