cleanup, add checks to arguments and responses, add log statements
[java-idp.git] / src / edu / internet2 / middleware / shibboleth / serviceprovider / Session.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 /*
18  * Session.java
19  * 
20  * Session object holds Principal ID [handle] and Attributes.
21  * A random ID is used as the object key in the Cache and
22  * is returned to the Browser as a Cookie value. 
23  *
24  * Recovery Context: No exceptions expected or generated.
25  */
26 package edu.internet2.middleware.shibboleth.serviceprovider;
27
28 import java.io.Serializable;
29 import org.opensaml.SAMLAssertion;
30 import org.opensaml.SAMLAuthenticationStatement;
31 import org.opensaml.SAMLResponse;
32
33 /**
34  * Session object holds Authentication and Attribute Assertions for one
35  * remote Browser/User.<br>
36  * Each session generates its own UUID key.<br>
37  * The collection of Session objects may be checkpointed to disk using
38  * any attractive persistence framework, Object Relational mapping, 
39  * or, hell, just serialize the objects to a flat file if you like.
40  *
41  *  @author Howard Gilbert
42  */
43 public class Session implements Serializable {
44         
45         // Default values from Shibboleth documentation
46         private static final int DEFAULTTIMEOUT = 1800000;
47         public static final int DEFAULTLIFETIME = 3600000;
48         
49         Session(String key) {
50                 // Should only be created by SessionManager
51                 if (key==null)
52                         throw new IllegalArgumentException();
53             this.key=key;
54             this.timestamp = System.currentTimeMillis();
55         }
56         
57         /**
58          * For testing, create a Session that may already be timed out.
59          */
60         Session(String key, long timestamp) {
61             this.key=key;
62             this.timestamp = timestamp;
63         }
64         
65         // Properties
66         
67         private String key;
68         public String getKey() {
69                 return key;
70         }
71         
72         private String applicationId = null;
73         public String getApplicationId() {
74                 return applicationId;
75         }
76         public void setApplicationId(String applicationId) {
77                 this.applicationId = applicationId;
78         }
79         
80         private String ipaddr = null;
81         public String getIpaddr() {
82                 return ipaddr;
83         }
84         public void setIpaddr(String ipaddr) {
85                 this.ipaddr = ipaddr;
86         }
87         
88         private String entityId = null; // a.k.a providerId
89         public String getEntityId() {
90                 return entityId;
91         }
92         public void setEntityId(String entityId) {
93                 this.entityId = entityId;
94         }
95         
96         private long lifetime = DEFAULTLIFETIME;
97         public long getLifetime() {
98                 return lifetime;
99         }
100         public void setLifetime(long lifetime) {
101                 this.lifetime = lifetime;
102         }
103         
104         private long timeout=DEFAULTTIMEOUT;
105         public long getTimeout() {
106                 return timeout;
107         }
108         public void setTimeout(long timeout) {
109                 this.timeout = timeout;
110         }
111         
112     // private persisted variable
113         private long timestamp = 0;
114         
115         public boolean isExpired() {
116                 long now = System.currentTimeMillis();
117                 if (lifetime>0 && lifetime<now)
118                         return true;
119                 if (timeout>0 && timestamp+timeout<now)
120                         return true;
121                 return false;
122         }
123         
124         
125         // Stuff saved from the POST
126         private SAMLAssertion authenticationAssertion = null;
127         public SAMLAssertion getAuthenticationAssertion() {
128                 return authenticationAssertion;
129         }
130         public void setAuthenticationAssertion(SAMLAssertion authentication) {
131                 this.authenticationAssertion = authentication;
132         }
133         
134         private SAMLAuthenticationStatement authenticationStatement=null;
135         public SAMLAuthenticationStatement getAuthenticationStatement() {
136                 return authenticationStatement;
137         }
138         public void setAuthenticationStatement(
139                         SAMLAuthenticationStatement authenticationStatement) {
140                 this.authenticationStatement = authenticationStatement;
141         }
142         
143         // Stuff saved from the Attribute Query
144         private SAMLResponse attributeResponse = null;
145         public SAMLResponse getAttributeResponse() {
146                 return attributeResponse;
147         }
148         public void setAttributeResponse(SAMLResponse attributeResponse) {
149                 this.attributeResponse = attributeResponse;
150         }
151
152         
153         public void renew(){
154                 timestamp = System.currentTimeMillis();
155         }
156         
157
158 }