From f22a4ea0f98580e8d137329a3c5e53e91828964e Mon Sep 17 00:00:00 2001
From: Rick Herrick <jrherrick@wustl.edu>
Date: Mon, 7 Mar 2016 13:40:27 -0600
Subject: [PATCH] Moved SwaggerConfig operations into WebConfig and fixed paths
 on Swagger resource handlers. Moved UsersApi and related classes into users
 subpackage. Fixed timeout cookie. Moved InstanceSettings.xml to
 InstanceSettings.xml.sample and put InstanceSettings.xml into the .gitignore
 file. Updated some dependency versions.

---
 .gitignore                                    |   1 +
 build.gradle                                  |  22 ++--
 .../nrg/xapi/configuration/SwaggerConfig.java |  35 ------
 .../org/nrg/xapi/configuration/WebConfig.java |  62 ++++++-----
 src/main/java/org/nrg/xapi/model/Error.java   | 105 +++++++++---------
 .../org/nrg/xapi/model/{ => users}/User.java  |  89 ++++++++-------
 .../nrg/xapi/model/{ => users}/UserAuth.java  |   2 +-
 .../nrg/xapi/rest/{ => users}/UsersApi.java   |  15 +--
 .../postArchive/ClearStudyRoutingAction.java  |   2 -
 .../initialization/XnatWebAppInitializer.java |   2 +-
 .../restlet/util/UpdateExpirationCookie.java  |  50 +++++----
 ...ttings.xml => InstanceSettings.xml.sample} |   0
 12 files changed, 186 insertions(+), 199 deletions(-)
 delete mode 100644 src/main/java/org/nrg/xapi/configuration/SwaggerConfig.java
 rename src/main/java/org/nrg/xapi/model/{ => users}/User.java (73%)
 rename src/main/java/org/nrg/xapi/model/{ => users}/UserAuth.java (99%)
 rename src/main/java/org/nrg/xapi/rest/{ => users}/UsersApi.java (96%)
 rename src/main/webapp/WEB-INF/conf/{InstanceSettings.xml => InstanceSettings.xml.sample} (100%)

diff --git a/.gitignore b/.gitignore
index d7e9d329..ce0aaf01 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,3 +6,4 @@ src/generated
 gradle.properties
 /out
 /build
+InstanceSettings.xml
\ No newline at end of file
diff --git a/build.gradle b/build.gradle
index 9e8ad7bf..078a4fed 100644
--- a/build.gradle
+++ b/build.gradle
@@ -8,13 +8,13 @@ def vEhcache = '2.6.11'
 def vJackson = '2.6.5'
 def vPostgreSQL = '9.4.1207'
 def vServletApi = '3.1.0'
-def vTomcat = '7.0.67'
+def vTomcat = '7.0.68'
 def vCargo = '1.4.18'
 def vSlf4j = '1.7.15'
 def vLog4j = '1.2.17'
 def vJunit = '4.12'
 def vSaxon = '9.1.0.8'
-def vGroovy = '2.4.5'
+def vGroovy = '2.4.6'
 def vJython = '2.7.0'
 
 group 'org.nrg.xnat'
@@ -24,11 +24,11 @@ buildscript {
     repositories {
         mavenLocal()
         maven {
-            url 'http://nrgxnat.artifactoryonline.com/nrgxnat/libs-release'
+            url 'https://nrgxnat.artifactoryonline.com/nrgxnat/libs-release'
             name 'XNAT Release Repository'
         }
         maven {
-            url 'http://nrgxnat.artifactoryonline.com/nrgxnat/libs-snapshot'
+            url 'https://nrgxnat.artifactoryonline.com/nrgxnat/libs-snapshot'
             name 'XNAT Snapshot Repository'
         }
         jcenter()
@@ -43,15 +43,15 @@ buildscript {
 repositories {
     mavenLocal()
     maven {
-        url 'http://nrgxnat.artifactoryonline.com/nrgxnat/libs-release'
+        url 'https://nrgxnat.artifactoryonline.com/nrgxnat/libs-release'
         name 'XNAT Release Repository'
     }
     maven {
-        url 'http://nrgxnat.artifactoryonline.com/nrgxnat/libs-snapshot'
+        url 'https://nrgxnat.artifactoryonline.com/nrgxnat/libs-snapshot'
         name 'XNAT Snapshot Repository'
     }
     maven {
-        url 'http://nrgxnat.artifactoryonline.com/nrgxnat/ext-release'
+        url 'https://nrgxnat.artifactoryonline.com/nrgxnat/ext-release'
         name 'XNAT External Release Repository'
     }
     maven {
@@ -347,9 +347,9 @@ publishing {
                 password propertyWithDefault('repoPassword', 'password')
             }
             if (project.version.endsWith('-SNAPSHOT')) {
-                url "http://nrgxnat.artifactoryonline.com/nrgxnat/libs-snapshot-local"
+                url "https://nrgxnat.artifactoryonline.com/nrgxnat/libs-snapshot-local"
             } else {
-                url "http://nrgxnat.artifactoryonline.com/nrgxnat/libs-release-local"
+                url "https://nrgxnat.artifactoryonline.com/nrgxnat/libs-release-local"
             }
         }
         ivy {
@@ -360,9 +360,9 @@ publishing {
                 password propertyWithDefault('repoPassword', 'password')
             }
             if (project.version.endsWith('-SNAPSHOT')) {
-                url "http://nrgxnat.artifactoryonline.com/nrgxnat/libs-snapshot-local"
+                url "https://nrgxnat.artifactoryonline.com/nrgxnat/libs-snapshot-local"
             } else {
-                url "http://nrgxnat.artifactoryonline.com/nrgxnat/libs-release-local"
+                url "https://nrgxnat.artifactoryonline.com/nrgxnat/libs-release-local"
             }
         }
     }
diff --git a/src/main/java/org/nrg/xapi/configuration/SwaggerConfig.java b/src/main/java/org/nrg/xapi/configuration/SwaggerConfig.java
deleted file mode 100644
index ff7ae3b9..00000000
--- a/src/main/java/org/nrg/xapi/configuration/SwaggerConfig.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package org.nrg.xapi.configuration;
-
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import springfox.documentation.builders.PathSelectors;
-import springfox.documentation.builders.RequestHandlerSelectors;
-import springfox.documentation.service.ApiInfo;
-import springfox.documentation.spi.DocumentationType;
-import springfox.documentation.spring.web.plugins.Docket;
-import springfox.documentation.swagger2.annotations.EnableSwagger2;
-
-@Configuration
-@EnableSwagger2
-public class SwaggerConfig {
-    @Bean
-    public Docket api() {
-        return new Docket(DocumentationType.SWAGGER_2)
-                .select()
-                .apis(RequestHandlerSelectors.basePackage("org.nrg.xapi.rest"))
-                .paths(PathSelectors.any())
-                .build()
-                .apiInfo(apiInfo());
-    }
-
-    private ApiInfo apiInfo() {
-        return new ApiInfo(
-                "XNAT POC API",
-                "This is the API for doing stuff with the XNAT POC application.",
-                "Don't be a bad person",
-                "http://www.xnat.org",
-                "info@xnat.org",
-                "Simplified 2-Clause BSD",
-                "API license URL");
-    }
-}
\ No newline at end of file
diff --git a/src/main/java/org/nrg/xapi/configuration/WebConfig.java b/src/main/java/org/nrg/xapi/configuration/WebConfig.java
index 47e3cd4b..9090c6e5 100644
--- a/src/main/java/org/nrg/xapi/configuration/WebConfig.java
+++ b/src/main/java/org/nrg/xapi/configuration/WebConfig.java
@@ -2,10 +2,6 @@ package org.nrg.xapi.configuration;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.springframework.beans.BeansException;
-import org.springframework.beans.factory.InitializingBean;
-import org.springframework.context.ApplicationContext;
-import org.springframework.context.ApplicationContextAware;
 import org.springframework.context.MessageSource;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.ComponentScan;
@@ -17,11 +13,26 @@ import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry
 import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
 import org.springframework.web.servlet.view.InternalResourceViewResolver;
 import org.springframework.web.servlet.view.JstlView;
+import springfox.documentation.builders.PathSelectors;
+import springfox.documentation.builders.RequestHandlerSelectors;
+import springfox.documentation.service.ApiInfo;
+import springfox.documentation.spi.DocumentationType;
+import springfox.documentation.spring.web.plugins.Docket;
+import springfox.documentation.swagger2.annotations.EnableSwagger2;
 
 @Configuration
 @EnableWebMvc
+@EnableSwagger2
 @ComponentScan("org.nrg.xapi.rest")
-public class WebConfig extends WebMvcConfigurerAdapter implements ApplicationContextAware, InitializingBean {
+public class WebConfig extends WebMvcConfigurerAdapter {
+    @Override
+    public void addResourceHandlers(ResourceHandlerRegistry registry) {
+        registry.addResourceHandler("**/swagger-ui.html")
+                .addResourceLocations("classpath:/META-INF/resources/");
+        registry.addResourceHandler("/webjars/**")
+                .addResourceLocations("classpath:/META-INF/resources/webjars/");
+    }
+
     @Bean
     public ViewResolver viewResolver() {
         return new InternalResourceViewResolver() {{
@@ -33,31 +44,32 @@ public class WebConfig extends WebMvcConfigurerAdapter implements ApplicationCon
 
     @Bean
     public MessageSource messageSource() {
-        ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
-        messageSource.setBasename("messages");
-        return messageSource;
-    }
-
-    // Added to support Swagger requirements.
-    @Override
-    public void addResourceHandlers(ResourceHandlerRegistry registry) {
-        registry.addResourceHandler("swagger-ui.html")
-                .addResourceLocations("classpath:/META-INF/resources/");
-
-        registry.addResourceHandler("/webjars/**")
-                .addResourceLocations("classpath:/META-INF/resources/webjars/");
+        return new ResourceBundleMessageSource() {{
+            setBasename("messages");
+        }};
     }
 
-    @Override
-    public void setApplicationContext(final ApplicationContext context) throws BeansException {
-        _context = context;
+    @Bean
+    public Docket api() {
+        _log.debug("Initializing the Swagger Docket object");
+        return new Docket(DocumentationType.SWAGGER_2)
+                .select()
+                .apis(RequestHandlerSelectors.basePackage("org.nrg.xapi.rest"))
+                .paths(PathSelectors.any())
+                .build()
+                .apiInfo(apiInfo());
     }
 
-    @Override
-    public void afterPropertiesSet() throws Exception {
-        _log.debug(_context.getApplicationName());
+    private ApiInfo apiInfo() {
+        return new ApiInfo(
+                "XNAT REST API",
+                "The XNAT REST API (XAPI) functions provide remote programmatic access to XNAT internal functions.",
+                "1.7.0",
+                "http://www.xnat.org",
+                "info@xnat.org",
+                "Simplified 2-Clause BSD",
+                "API license URL");
     }
 
     private static final Logger _log = LoggerFactory.getLogger(WebConfig.class);
-    private ApplicationContext _context;
 }
\ No newline at end of file
diff --git a/src/main/java/org/nrg/xapi/model/Error.java b/src/main/java/org/nrg/xapi/model/Error.java
index 71213839..e00b8710 100644
--- a/src/main/java/org/nrg/xapi/model/Error.java
+++ b/src/main/java/org/nrg/xapi/model/Error.java
@@ -3,55 +3,58 @@ package org.nrg.xapi.model;
 import io.swagger.annotations.*;
 import com.fasterxml.jackson.annotation.JsonProperty;
 
-@ApiModel(description = "")
-public class Error  {
-  
-  private Integer code = null;
-  private String message = null;
-  private String fields = null;
-
-  /**
-   **/
-  @ApiModelProperty(value = "")
-  @JsonProperty("code")
-  public Integer getCode() {
-    return code;
-  }
-  public void setCode(Integer code) {
-    this.code = code;
-  }
-
-  /**
-   **/
-  @ApiModelProperty(value = "")
-  @JsonProperty("message")
-  public String getMessage() {
-    return message;
-  }
-  public void setMessage(String message) {
-    this.message = message;
-  }
-
-  /**
-   **/
-  @ApiModelProperty(value = "")
-  @JsonProperty("fields")
-  public String getFields() {
-    return fields;
-  }
-  public void setFields(String fields) {
-    this.fields = fields;
-  }
-
-  @Override
-  public String toString()  {
-    StringBuilder sb = new StringBuilder();
-    sb.append("class Error {\n");
-    
-    sb.append("  code: ").append(code).append("\n");
-    sb.append("  message: ").append(message).append("\n");
-    sb.append("  fields: ").append(fields).append("\n");
-    sb.append("}\n");
-    return sb.toString();
-  }
+@ApiModel(value = "XAPI Error", description = "Provides the description of an error that occurred within the XAPI functions.")
+public class Error {
+    private Integer code    = null;
+    private String  message = null;
+    private String  fields  = null;
+
+    /**
+     * The code for the error. The meaning of the code is dependent on the context.
+     * @return The error code.
+     */
+    @ApiModelProperty(name = "Error Code", value = "The code for the error.", dataType = "java.lang.Integer", notes = "The meaning of this error code is dependent on the function where the error occurred.")
+    @JsonProperty("code")
+    public Integer getCode() {
+        return code;
+    }
+
+    public void setCode(Integer code) {
+        this.code = code;
+    }
+
+    /**
+     * A message associated with the error.
+     */
+    @ApiModelProperty(name = "Error Message", value = "A message indicating what the error was.", dataType = "java.lang.String")
+    @JsonProperty("message")
+    public String getMessage() {
+        return message;
+    }
+
+    public void setMessage(String message) {
+        this.message = message;
+    }
+
+    /**
+     * Indicates the fields of the data object that caused the error.
+     */
+    @ApiModelProperty(name = "Error Fields", value = "Indicates the fields of the data object that caused the error.", dataType = "java.lang.String")
+    @JsonProperty("fields")
+    public String getFields() {
+        return fields;
+    }
+
+    public void setFields(String fields) {
+        this.fields = fields;
+    }
+
+    @Override
+    public String toString() {
+        return "class Error {\n" +
+               "  code: " + code + "\n" +
+               "  message: " + message + "\n" +
+               "  fields: " + fields + "\n" +
+               "}\n";
+    }
 }
diff --git a/src/main/java/org/nrg/xapi/model/User.java b/src/main/java/org/nrg/xapi/model/users/User.java
similarity index 73%
rename from src/main/java/org/nrg/xapi/model/User.java
rename to src/main/java/org/nrg/xapi/model/users/User.java
index 6872c931..ae714c01 100644
--- a/src/main/java/org/nrg/xapi/model/User.java
+++ b/src/main/java/org/nrg/xapi/model/users/User.java
@@ -1,4 +1,4 @@
-package org.nrg.xapi.model;
+package org.nrg.xapi.model.users;
 
 import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.fasterxml.jackson.annotation.JsonProperty;
@@ -24,10 +24,10 @@ public class User {
     public User(final UserI user) {
         _id = user.getID();
         _username = user.getUsername();
-        _firstname = user.getFirstname();
-        _lastname = user.getLastname();
+        _firstName = user.getFirstname();
+        _lastName = user.getLastname();
         _email = user.getEmail();
-        _isAdmin = (user instanceof XDATUser ? ((XDATUser) user).isSiteAdmin() : false);
+        _isAdmin = (user instanceof XDATUser && ((XDATUser) user).isSiteAdmin());
         _dbName = "";
         _password = "";
         _salt = "";
@@ -69,26 +69,28 @@ public class User {
      * The user's first name.
      **/
     @ApiModelProperty(value = "The user's first name.")
-    @JsonProperty("firstname")
-    public String getFirstname() {
-        return _firstname;
+    @JsonProperty("firstName")
+    public String getFirstName() {
+        return _firstName;
     }
 
-    public void setFirstname(String firstname) {
-        _firstname = firstname;
+    @SuppressWarnings("unused")
+    public void setFirstName(String firstName) {
+        _firstName = firstName;
     }
 
     /**
      * The user's last name.
      **/
     @ApiModelProperty(value = "The user's last name.")
-    @JsonProperty("lastname")
-    public String getLastname() {
-        return _lastname;
+    @JsonProperty("lastName")
+    public String getLastName() {
+        return _lastName;
     }
 
-    public void setLastname(String lastname) {
-        _lastname = lastname;
+    @SuppressWarnings("unused")
+    public void setLastName(String lastName) {
+        _lastName = lastName;
     }
 
     /**
@@ -126,6 +128,7 @@ public class User {
         return _dbName;
     }
 
+    @SuppressWarnings("unused")
     public void setDbName(String dbName) {
         _dbName = dbName;
     }
@@ -152,6 +155,7 @@ public class User {
         return _salt;
     }
 
+    @SuppressWarnings("unused")
     public void setSalt(String salt) {
         _salt = salt;
     }
@@ -178,22 +182,23 @@ public class User {
         return _authorization;
     }
 
+    @SuppressWarnings("unused")
     public void setAuthorization(UserAuth authorization) {
         _authorization = authorization;
     }
 
     @JsonIgnore
-    public String getFullname() {
-        return String.format("%s %s", getFirstname(), getLastname());
+    public String getFullName() {
+        return String.format("%s %s", getFirstName(), getLastName());
     }
 
     @JsonIgnore
-    public XdatUser getXDATUser(final UserI requestor) {
+    public XdatUser getXDATUser(final UserI requester) {
         final XdatUser user;
         if (StringUtils.isNotBlank(_username)) {
-            user = XDATUser.getXdatUsersByLogin(_username, requestor, true);
+            user = XDATUser.getXdatUsersByLogin(_username, requester, true);
         } else if (_id != null) {
-            user = AutoXdatUser.getXdatUsersByXdatUserId(_id, requestor, true);
+            user = AutoXdatUser.getXdatUsersByXdatUserId(_id, requester, true);
         } else {
             user = null;
         }
@@ -202,8 +207,8 @@ public class User {
         }
         final XDATUser newUser = new XDATUser();
         newUser.setLogin(_username);
-        newUser.setFirstname(_firstname);
-        newUser.setLastname(_lastname);
+        newUser.setFirstname(_firstName);
+        newUser.setLastname(_lastName);
         newUser.setEmail(_email);
         newUser.setPrimaryPassword(_password);
         newUser.setSalt(_salt);
@@ -212,28 +217,26 @@ public class User {
 
     @Override
     public String toString() {
-        StringBuilder sb = new StringBuilder();
-        sb.append("class User {\n");
-
-        sb.append("  id: ").append(_id).append("\n");
-        sb.append("  username: ").append(_username).append("\n");
-        sb.append("  firstname: ").append(_firstname).append("\n");
-        sb.append("  lastname: ").append(_lastname).append("\n");
-        sb.append("  email: ").append(_email).append("\n");
-        sb.append("  dbName: ").append(_dbName).append("\n");
-        sb.append("  password: ").append(_password).append("\n");
-        sb.append("  salt: ").append(_salt).append("\n");
-        sb.append("  lastModified: ").append(_lastModified).append("\n");
-        sb.append("  authorization: ").append(_authorization).append("\n");
-        sb.append("}\n");
-        return sb.toString();
-    }
-
-    private Integer _id = null;
-    private String _username = null;
-    private String _firstname = null;
-    private String _lastname = null;
-    private String _email = null;
+
+        return "class User {\n" +
+               "  id: " + _id + "\n" +
+               "  username: " + _username + "\n" +
+               "  firstName: " + _firstName + "\n" +
+               "  lastName: " + _lastName + "\n" +
+               "  email: " + _email + "\n" +
+               "  dbName: " + _dbName + "\n" +
+               "  password: " + _password + "\n" +
+               "  salt: " + _salt + "\n" +
+               "  lastModified: " + _lastModified + "\n" +
+               "  authorization: " + _authorization + "\n" +
+               "}\n";
+    }
+
+    private Integer _id        = null;
+    private String  _username  = null;
+    private String  _firstName = null;
+    private String  _lastName  = null;
+    private String  _email     = null;
     private boolean _isAdmin;
     private String _dbName = null;
     private String _password = null;
diff --git a/src/main/java/org/nrg/xapi/model/UserAuth.java b/src/main/java/org/nrg/xapi/model/users/UserAuth.java
similarity index 99%
rename from src/main/java/org/nrg/xapi/model/UserAuth.java
rename to src/main/java/org/nrg/xapi/model/users/UserAuth.java
index f4fe8100..0ad739cc 100644
--- a/src/main/java/org/nrg/xapi/model/UserAuth.java
+++ b/src/main/java/org/nrg/xapi/model/users/UserAuth.java
@@ -1,4 +1,4 @@
-package org.nrg.xapi.model;
+package org.nrg.xapi.model.users;
 
 import java.util.Date;
 import java.util.*;
diff --git a/src/main/java/org/nrg/xapi/rest/UsersApi.java b/src/main/java/org/nrg/xapi/rest/users/UsersApi.java
similarity index 96%
rename from src/main/java/org/nrg/xapi/rest/UsersApi.java
rename to src/main/java/org/nrg/xapi/rest/users/UsersApi.java
index 95c0604f..feb7cd73 100644
--- a/src/main/java/org/nrg/xapi/rest/UsersApi.java
+++ b/src/main/java/org/nrg/xapi/rest/users/UsersApi.java
@@ -1,8 +1,9 @@
-package org.nrg.xapi.rest;
+package org.nrg.xapi.rest.users;
 
 import io.swagger.annotations.*;
 import org.apache.commons.lang3.StringUtils;
-import org.nrg.xapi.model.User;
+import org.nrg.xapi.model.users.User;
+import org.nrg.xapi.rest.NotFoundException;
 import org.nrg.xdat.security.XDATUser;
 import org.nrg.xdat.security.helpers.Users;
 import org.nrg.xdat.security.user.exceptions.UserInitException;
@@ -22,7 +23,7 @@ import java.util.List;
 
 @Api(description = "The XNAT POC User Management API")
 @RestController
-@RequestMapping(value = "/api/users")
+@RequestMapping(value = "/users")
 public class UsersApi {
     private static final Logger _log = LoggerFactory.getLogger(UsersApi.class);
 
@@ -74,11 +75,11 @@ public class UsersApi {
         if (user == null) {
             return new ResponseEntity<>(HttpStatus.NOT_FOUND);
         }
-        if ((StringUtils.isNotBlank(model.getFirstname())) && (StringUtils.equals(model.getFirstname(), user.getFirstname()))) {
-            user.setFirstname(model.getFirstname());
+        if ((StringUtils.isNotBlank(model.getFirstName())) && (StringUtils.equals(model.getFirstName(), user.getFirstname()))) {
+            user.setFirstname(model.getFirstName());
         }
-        if ((StringUtils.isNotBlank(model.getLastname())) && (StringUtils.equals(model.getLastname(), user.getLastname()))) {
-            user.setLastname(model.getLastname());
+        if ((StringUtils.isNotBlank(model.getLastName())) && (StringUtils.equals(model.getLastName(), user.getLastname()))) {
+            user.setLastname(model.getLastName());
         }
         if ((StringUtils.isNotBlank(model.getEmail())) && (StringUtils.equals(model.getEmail(), user.getEmail()))) {
             user.setEmail(model.getEmail());
diff --git a/src/main/java/org/nrg/xnat/actions/postArchive/ClearStudyRoutingAction.java b/src/main/java/org/nrg/xnat/actions/postArchive/ClearStudyRoutingAction.java
index 4507b657..b48a1921 100644
--- a/src/main/java/org/nrg/xnat/actions/postArchive/ClearStudyRoutingAction.java
+++ b/src/main/java/org/nrg/xnat/actions/postArchive/ClearStudyRoutingAction.java
@@ -11,8 +11,6 @@ import org.nrg.xnat.archive.PrearcSessionArchiver;
 
 /**
  * ClearStudyRoutingAction class.
- *
- * @author Rick Herrick <rick.herrick@wustl.edu> on 10/28/2014.
  */
 @SuppressWarnings("unused")
 public class ClearStudyRoutingAction implements PrearcSessionArchiver.PostArchiveAction {
diff --git a/src/main/java/org/nrg/xnat/initialization/XnatWebAppInitializer.java b/src/main/java/org/nrg/xnat/initialization/XnatWebAppInitializer.java
index b0d1ce4f..3e65a29e 100644
--- a/src/main/java/org/nrg/xnat/initialization/XnatWebAppInitializer.java
+++ b/src/main/java/org/nrg/xnat/initialization/XnatWebAppInitializer.java
@@ -39,7 +39,7 @@ public class XnatWebAppInitializer extends AbstractAnnotationConfigDispatcherSer
 
         // Now initialize everything else.
         context.addFilter("springSecurityFilterChain", DelegatingFilterProxy.class).addMappingForUrlPatterns(null, false, "/*");
-        context.addFilter("updateExpirationCookie", UpdateExpirationCookie.class);
+        context.addFilter("updateExpirationCookie", UpdateExpirationCookie.class).addMappingForUrlPatterns(null, false, "/*");
 
         context.addListener(XnatSessionEventPublisher.class);
         context.addListener(AxisHTTPSessionListener.class);
diff --git a/src/main/java/org/nrg/xnat/restlet/util/UpdateExpirationCookie.java b/src/main/java/org/nrg/xnat/restlet/util/UpdateExpirationCookie.java
index 691e8f06..092ad2b5 100644
--- a/src/main/java/org/nrg/xnat/restlet/util/UpdateExpirationCookie.java
+++ b/src/main/java/org/nrg/xnat/restlet/util/UpdateExpirationCookie.java
@@ -10,6 +10,10 @@
  */
 package org.nrg.xnat.restlet.util;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.web.filter.GenericFilterBean;
+
 import javax.servlet.*;
 import javax.servlet.http.Cookie;
 import javax.servlet.http.HttpServletRequest;
@@ -17,27 +21,27 @@ import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 import java.util.Date;
 
-public class UpdateExpirationCookie implements Filter {
-	public static String name = "SESSION_EXPIRATION_TIME";
-	
-
-	@Override
-	public void destroy() {}
-	@Override
-	public void doFilter(ServletRequest req, 
-						   ServletResponse resp,
-						   FilterChain chain) throws IOException, ServletException {
-		HttpServletRequest hq = (HttpServletRequest) req;
-		HttpServletResponse hr = (HttpServletResponse) resp;
-		int sessionIdleTime = hq.getSession().getMaxInactiveInterval();
-
-		Cookie c=new Cookie(name, ""+(new Date()).getTime()+","+((sessionIdleTime *1000))); 
-		c.setPath("/");
-		hr.addCookie(c);
-		
-		chain.doFilter(req,resp);
-	}
-	
-	@Override
-	public void init(FilterConfig fg) throws ServletException {}
+public class UpdateExpirationCookie extends GenericFilterBean {
+
+    public static String name = "SESSION_EXPIRATION_TIME";
+
+    @Override
+    public void doFilter(final ServletRequest req, final ServletResponse resp, final FilterChain chain) throws IOException, ServletException {
+        final HttpServletRequest  hq              = (HttpServletRequest) req;
+        final HttpServletResponse hr              = (HttpServletResponse) resp;
+        final int                 sessionIdleTime = hq.getSession().getMaxInactiveInterval();
+
+        final Cookie c = new Cookie(name, "" + (new Date()).getTime() + "," + ((sessionIdleTime * 1000)));
+        c.setPath("/");
+        hr.addCookie(c);
+
+        chain.doFilter(req, resp);
+    }
+
+    @Override
+    protected void initFilterBean() throws ServletException {
+        _log.debug("Initializing the UpdateExpirationCookie filter bean.");
+    }
+
+    private static final Logger _log = LoggerFactory.getLogger(UpdateExpirationCookie.class);
 }
diff --git a/src/main/webapp/WEB-INF/conf/InstanceSettings.xml b/src/main/webapp/WEB-INF/conf/InstanceSettings.xml.sample
similarity index 100%
rename from src/main/webapp/WEB-INF/conf/InstanceSettings.xml
rename to src/main/webapp/WEB-INF/conf/InstanceSettings.xml.sample
-- 
GitLab