cleanup, add checks to arguments and responses, add log statements
[java-idp.git] / src / edu / internet2 / middleware / shibboleth / serviceprovider / Session.java
index 4eed3d0..28ee7e6 100644 (file)
@@ -1,4 +1,20 @@
 /*
+ * Copyright [2005] [University Corporation for Advanced Internet Development, Inc.]
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*
  * Session.java
  * 
  * Session object holds Principal ID [handle] and Attributes.
@@ -6,15 +22,6 @@
  * is returned to the Browser as a Cookie value. 
  *
  * Recovery Context: No exceptions expected or generated.
- * 
- * --------------------
- * Copyright 2002, 2004 
- * University Corporation for Advanced Internet Development, Inc. 
- * All rights reserved
- * [Thats all we have to say to protect ourselves]
- * Your permission to use this code is governed by "The Shibboleth License".
- * A copy may be found at http://shibboleth.internet2.edu/license.html
- * [Nothing in copyright law requires license text in every file.]
  */
 package edu.internet2.middleware.shibboleth.serviceprovider;
 
@@ -35,9 +42,24 @@ import org.opensaml.SAMLResponse;
  */
 public class Session implements Serializable {
        
+       // Default values from Shibboleth documentation
+       private static final int DEFAULTTIMEOUT = 1800000;
+       public static final int DEFAULTLIFETIME = 3600000;
+       
        Session(String key) {
                // Should only be created by SessionManager
+               if (key==null)
+                       throw new IllegalArgumentException();
            this.key=key;
+           this.timestamp = System.currentTimeMillis();
+       }
+       
+       /**
+        * For testing, create a Session that may already be timed out.
+        */
+       Session(String key, long timestamp) {
+           this.key=key;
+           this.timestamp = timestamp;
        }
        
        // Properties
@@ -64,14 +86,14 @@ public class Session implements Serializable {
        }
        
        private String entityId = null; // a.k.a providerId
-       
        public String getEntityId() {
                return entityId;
        }
        public void setEntityId(String entityId) {
                this.entityId = entityId;
        }
-       private long lifetime;
+       
+       private long lifetime = DEFAULTLIFETIME;
        public long getLifetime() {
                return lifetime;
        }
@@ -79,7 +101,7 @@ public class Session implements Serializable {
                this.lifetime = lifetime;
        }
        
-       private long timeout;
+       private long timeout=DEFAULTTIMEOUT;
        public long getTimeout() {
                return timeout;
        }
@@ -88,7 +110,16 @@ public class Session implements Serializable {
        }
        
     // private persisted variable
-       private long timestamp = System.currentTimeMillis();
+       private long timestamp = 0;
+       
+       public boolean isExpired() {
+               long now = System.currentTimeMillis();
+               if (lifetime>0 && lifetime<now)
+                       return true;
+               if (timeout>0 && timestamp+timeout<now)
+                       return true;
+               return false;
+       }
        
        
        // Stuff saved from the POST