Explorar el Código

convert servlet declarations to annotations
refactor and enhance crypto engine
refactor resource servlet

jrivard hace 10 años
padre
commit
287eaf5d85
Se han modificado 100 ficheros con 520 adiciones y 249 borrados
  1. 6 1
      pwm/servlet/src/password/pwm/AppProperty.java
  2. 6 1
      pwm/servlet/src/password/pwm/AppProperty.properties
  3. 22 0
      pwm/servlet/src/password/pwm/BuildInformation.properties
  4. 22 0
      pwm/servlet/src/password/pwm/PwmAboutProperty.java
  5. 9 2
      pwm/servlet/src/password/pwm/PwmApplication.java
  6. 8 22
      pwm/servlet/src/password/pwm/PwmConstants.java
  7. 1 1
      pwm/servlet/src/password/pwm/PwmService.java
  8. 22 0
      pwm/servlet/src/password/pwm/RecoveryVerificationMethod.java
  9. 1 1
      pwm/servlet/src/password/pwm/bean/EmailItemBean.java
  10. 1 1
      pwm/servlet/src/password/pwm/bean/PasswordStatus.java
  11. 22 0
      pwm/servlet/src/password/pwm/bean/PublicUserInfoBean.java
  12. 22 0
      pwm/servlet/src/password/pwm/bean/RemoteVerificationRequestBean.java
  13. 22 0
      pwm/servlet/src/password/pwm/bean/RemoteVerificationResponseBean.java
  14. 1 1
      pwm/servlet/src/password/pwm/bean/ResponseInfoBean.java
  15. 1 1
      pwm/servlet/src/password/pwm/bean/SmsItemBean.java
  16. 1 1
      pwm/servlet/src/password/pwm/bean/StatsPublishBean.java
  17. 1 1
      pwm/servlet/src/password/pwm/bean/package.html
  18. 2 2
      pwm/servlet/src/password/pwm/config/ConfigurationReader.java
  19. 8 8
      pwm/servlet/src/password/pwm/config/PwmSetting.java
  20. 1 5
      pwm/servlet/src/password/pwm/config/PwmSetting.xml
  21. 1 1
      pwm/servlet/src/password/pwm/config/PwmSetting.xsd
  22. 1 1
      pwm/servlet/src/password/pwm/config/PwmSettingSyntax.java
  23. 22 0
      pwm/servlet/src/password/pwm/config/PwmSettingTemplate.java
  24. 1 1
      pwm/servlet/src/password/pwm/config/PwmSettingXml.java
  25. 1 1
      pwm/servlet/src/password/pwm/config/SettingUIFunction.java
  26. 1 1
      pwm/servlet/src/password/pwm/config/ShortcutItem.java
  27. 23 18
      pwm/servlet/src/password/pwm/config/StoredConfiguration.java
  28. BIN
      pwm/servlet/src/password/pwm/config/StoredConfiguration.xsd
  29. 4 7
      pwm/servlet/src/password/pwm/config/StoredValue.java
  30. 24 6
      pwm/servlet/src/password/pwm/config/function/AbstractUriCertImportFunction.java
  31. 2 6
      pwm/servlet/src/password/pwm/config/function/LdapCertImportFunction.java
  32. 22 0
      pwm/servlet/src/password/pwm/config/function/NAAFCertImportFunction.java
  33. 22 0
      pwm/servlet/src/password/pwm/config/function/OAuthCertImportFunction.java
  34. 2 6
      pwm/servlet/src/password/pwm/config/function/SyslogCertImportFunction.java
  35. 1 1
      pwm/servlet/src/password/pwm/config/option/ADPolicyComplexity.java
  36. 1 1
      pwm/servlet/src/password/pwm/config/option/ApplicationPage.java
  37. 1 1
      pwm/servlet/src/password/pwm/config/option/ConfigurationOption.java
  38. 1 1
      pwm/servlet/src/password/pwm/config/option/DataStorageMethod.java
  39. 1 1
      pwm/servlet/src/password/pwm/config/option/DuplicateMode.java
  40. 1 1
      pwm/servlet/src/password/pwm/config/option/ForceSetupPolicy.java
  41. 1 1
      pwm/servlet/src/password/pwm/config/option/HelpdeskClearResponseMode.java
  42. 1 1
      pwm/servlet/src/password/pwm/config/option/HelpdeskUIMode.java
  43. 1 1
      pwm/servlet/src/password/pwm/config/option/IntruderStorageMethod.java
  44. 1 1
      pwm/servlet/src/password/pwm/config/option/MessageSendMethod.java
  45. 1 1
      pwm/servlet/src/password/pwm/config/option/OTPStorageFormat.java
  46. 1 1
      pwm/servlet/src/password/pwm/config/option/PasswordSyncCheckMode.java
  47. 1 1
      pwm/servlet/src/password/pwm/config/option/RecoveryAction.java
  48. 1 1
      pwm/servlet/src/password/pwm/config/option/RequireCurrentPasswordMode.java
  49. 1 1
      pwm/servlet/src/password/pwm/config/option/SelectableContextMode.java
  50. 1 1
      pwm/servlet/src/password/pwm/config/option/SessionVerificationMode.java
  51. 1 1
      pwm/servlet/src/password/pwm/config/option/TokenStorageMethod.java
  52. 1 1
      pwm/servlet/src/password/pwm/config/option/UserEventStorageMethod.java
  53. 1 1
      pwm/servlet/src/password/pwm/config/package.html
  54. 2 2
      pwm/servlet/src/password/pwm/config/value/AbstractValue.java
  55. 2 1
      pwm/servlet/src/password/pwm/config/value/ActionValue.java
  56. 2 1
      pwm/servlet/src/password/pwm/config/value/BooleanValue.java
  57. 2 1
      pwm/servlet/src/password/pwm/config/value/ChallengeValue.java
  58. 2 1
      pwm/servlet/src/password/pwm/config/value/EmailValue.java
  59. 6 5
      pwm/servlet/src/password/pwm/config/value/FileValue.java
  60. 2 1
      pwm/servlet/src/password/pwm/config/value/FormValue.java
  61. 2 1
      pwm/servlet/src/password/pwm/config/value/LocalizedStringArrayValue.java
  62. 2 1
      pwm/servlet/src/password/pwm/config/value/LocalizedStringValue.java
  63. 2 1
      pwm/servlet/src/password/pwm/config/value/NumericValue.java
  64. 2 1
      pwm/servlet/src/password/pwm/config/value/OptionListValue.java
  65. 6 16
      pwm/servlet/src/password/pwm/config/value/PasswordValue.java
  66. 2 1
      pwm/servlet/src/password/pwm/config/value/StringArrayValue.java
  67. 2 1
      pwm/servlet/src/password/pwm/config/value/StringValue.java
  68. 2 1
      pwm/servlet/src/password/pwm/config/value/UserPermissionValue.java
  69. 3 2
      pwm/servlet/src/password/pwm/config/value/ValueFactory.java
  70. 24 1
      pwm/servlet/src/password/pwm/config/value/VerificationMethodValue.java
  71. 8 7
      pwm/servlet/src/password/pwm/config/value/X509CertificateValue.java
  72. 1 1
      pwm/servlet/src/password/pwm/cr/ChallengeSetBean.java
  73. 1 1
      pwm/servlet/src/password/pwm/cr/ResponseItemBean.java
  74. 1 1
      pwm/servlet/src/password/pwm/cr/ResponseSetBean.java
  75. 1 1
      pwm/servlet/src/password/pwm/error/ErrorInformation.java
  76. 1 1
      pwm/servlet/src/password/pwm/error/PwmDataStoreException.java
  77. 1 1
      pwm/servlet/src/password/pwm/error/PwmDataValidationException.java
  78. 1 1
      pwm/servlet/src/password/pwm/error/PwmException.java
  79. 1 1
      pwm/servlet/src/password/pwm/error/PwmOperationalException.java
  80. 1 1
      pwm/servlet/src/password/pwm/error/PwmPasswordValidationException.java
  81. 1 1
      pwm/servlet/src/password/pwm/error/PwmUnrecoverableException.java
  82. 1 1
      pwm/servlet/src/password/pwm/event/AuditVault.java
  83. 1 1
      pwm/servlet/src/password/pwm/event/SystemAuditRecord.java
  84. 1 1
      pwm/servlet/src/password/pwm/event/UserHistoryStore.java
  85. 1 1
      pwm/servlet/src/password/pwm/health/DatabaseStatusChecker.java
  86. 1 1
      pwm/servlet/src/password/pwm/health/HealthChecker.java
  87. 1 1
      pwm/servlet/src/password/pwm/health/HealthMessage.java
  88. 1 1
      pwm/servlet/src/password/pwm/health/HealthMonitor.java
  89. 1 1
      pwm/servlet/src/password/pwm/health/HealthRecord.java
  90. 1 1
      pwm/servlet/src/password/pwm/health/HealthStatus.java
  91. 1 1
      pwm/servlet/src/password/pwm/health/HealthTopic.java
  92. 1 1
      pwm/servlet/src/password/pwm/health/JavaChecker.java
  93. 1 1
      pwm/servlet/src/password/pwm/health/LocalDBHealthChecker.java
  94. 22 0
      pwm/servlet/src/password/pwm/http/HttpMethod.java
  95. 31 30
      pwm/servlet/src/password/pwm/http/PwmHttpRequestWrapper.java
  96. 3 1
      pwm/servlet/src/password/pwm/http/PwmHttpResponseWrapper.java
  97. 23 9
      pwm/servlet/src/password/pwm/http/PwmRequest.java
  98. 0 7
      pwm/servlet/src/password/pwm/http/PwmResponse.java
  99. 21 19
      pwm/servlet/src/password/pwm/http/PwmURL.java
  100. 1 1
      pwm/servlet/src/password/pwm/http/bean/ActivateUserBean.java

+ 6 - 1
pwm/servlet/src/password/pwm/AppProperty.java

@@ -62,12 +62,17 @@ public enum AppProperty {
     HTTP_RESOURCES_ENABLE_GZIP                      ("http.resources.gzip.enable"),
     HTTP_RESOURCES_ENABLE_GZIP                      ("http.resources.gzip.enable"),
     HTTP_RESOURCES_ENABLE_PATH_NONCE                ("http.resources.pathNonceEnable"),
     HTTP_RESOURCES_ENABLE_PATH_NONCE                ("http.resources.pathNonceEnable"),
     HTTP_RESOURCES_NONCE_PATH_PREFIX                ("http.resources.pathNoncePrefix"),
     HTTP_RESOURCES_NONCE_PATH_PREFIX                ("http.resources.pathNoncePrefix"),
+    HTTP_RESOURCES_ZIP_FILES                        ("http.resources.zipFiles"),
     HTTP_COOKIE_THEME_NAME                          ("http.cookie.theme.name"),
     HTTP_COOKIE_THEME_NAME                          ("http.cookie.theme.name"),
     HTTP_COOKIE_THEME_AGE                           ("http.cookie.theme.age"),
     HTTP_COOKIE_THEME_AGE                           ("http.cookie.theme.age"),
     HTTP_COOKIE_LOCALE_NAME                         ("http.cookie.locale.name"),
     HTTP_COOKIE_LOCALE_NAME                         ("http.cookie.locale.name"),
     HTTP_COOKIE_AUTHRECORD_NAME                     ("http.cookie.authRecord.name"),
     HTTP_COOKIE_AUTHRECORD_NAME                     ("http.cookie.authRecord.name"),
     HTTP_COOKIE_AUTHRECORD_AGE                      ("http.cookie.authRecord.age"),
     HTTP_COOKIE_AUTHRECORD_AGE                      ("http.cookie.authRecord.age"),
     HTTP_COOKIE_MAX_READ_LENGTH                     ("http.cookie.maxReadLength"),
     HTTP_COOKIE_MAX_READ_LENGTH                     ("http.cookie.maxReadLength"),
+    HTTP_COOKIE_CAPTCHA_SKIP_NAME                   ("http.cookie.captchaSkip.name"),
+    HTTP_COOKIE_CAPTCHA_SKIP_AGE                    ("http.cookie.captchaSkip.age"),
+    HTTP_COOKIE_INSTANCE_GUID_NAME                  ("http.cookie.instanceGUID.name"),
+    HTTP_COOKIE_INSTANCE_GUID_AGE                   ("http.cookie.instanceGUID.age"),
     HTTP_BASIC_AUTH_CHARSET                         ("http.basicAuth.charset"),
     HTTP_BASIC_AUTH_CHARSET                         ("http.basicAuth.charset"),
     HTTP_BODY_MAXREAD_LENGTH                        ("http.body.maxReadLength"),
     HTTP_BODY_MAXREAD_LENGTH                        ("http.body.maxReadLength"),
     HTTP_ENABLE_GZIP                                ("http.gzip.enable"),
     HTTP_ENABLE_GZIP                                ("http.gzip.enable"),
@@ -215,7 +220,7 @@ public enum AppProperty {
     private final String key;
     private final String key;
     private String defaultValue;
     private String defaultValue;
 
 
-    private AppProperty(String key) {
+    AppProperty(String key) {
         this.key = key;
         this.key = key;
     }
     }
 
 

+ 6 - 1
pwm/servlet/src/password/pwm/AppProperty.properties

@@ -65,6 +65,7 @@ http.resources.expirationSeconds=30240000
 http.resources.gzip.enable=true
 http.resources.gzip.enable=true
 http.resources.pathNonceEnable=true
 http.resources.pathNonceEnable=true
 http.resources.pathNoncePrefix=nonce-
 http.resources.pathNoncePrefix=nonce-
+http.resources.zipFiles=[{"url":"/public/resources/dojo","zipFile":"/public/resources/dojo.zip"},{"url":"/public/resources/flags","zipFile":"/public/resources/flags.zip"}]
 http.gzip.enable=true
 http.gzip.enable=true
 http.errors.allowHtml=true
 http.errors.allowHtml=true
 http.basicAuth.charset=UTF-8
 http.basicAuth.charset=UTF-8
@@ -82,6 +83,10 @@ http.cookie.locale.name=locale
 http.cookie.authRecord.name=authRecord
 http.cookie.authRecord.name=authRecord
 http.cookie.authRecord.age=604800
 http.cookie.authRecord.age=604800
 http.cookie.maxReadLength=10240
 http.cookie.maxReadLength=10240
+http.cookie.captchaSkip.name=captcha-key
+http.cookie.captchaSkip.age=86400
+http.cookie.instanceGUID.name=iUID
+http.cookie.instanceGUID.age=0
 http.parameter.forward=forwardURL
 http.parameter.forward=forwardURL
 http.parameter.logout=logoutURL
 http.parameter.logout=logoutURL
 http.parameter.theme=theme
 http.parameter.theme=theme
@@ -184,7 +189,7 @@ security.sharedHistory.saltLength=64
 security.certs.validateTimestamps=false
 security.certs.validateTimestamps=false
 security.ldap.resolveCanonicalDN=true
 security.ldap.resolveCanonicalDN=true
 security.ldap.canonicalCacheSeconds=30
 security.ldap.canonicalCacheSeconds=30
-security.defaultEphemeralBlockAlg=AES_HMAC
+security.defaultEphemeralBlockAlg=AES128_HMAC256
 security.defaultEphemeralHashAlg=SHA512
 security.defaultEphemeralHashAlg=SHA512
 security.config.minSecurityKeyLength=32
 security.config.minSecurityKeyLength=32
 token.removalDelayMS=86400000
 token.removalDelayMS=86400000

+ 22 - 0
pwm/servlet/src/password/pwm/BuildInformation.properties

@@ -1,3 +1,25 @@
+#
+# Password Management Servlets (PWM)
+# http://code.google.com/p/pwm/
+#
+# Copyright (c) 2006-2009 Novell, Inc.
+# Copyright (c) 2009-2015 The PWM Project
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+#
+
 #Build Number for ANT. Do not edit!
 #Build Number for ANT. Do not edit!
 #Mon Nov 25 19:53:33 EST 2013
 #Mon Nov 25 19:53:33 EST 2013
 build.version=
 build.version=

+ 22 - 0
pwm/servlet/src/password/pwm/PwmAboutProperty.java

@@ -1,3 +1,25 @@
+/*
+ * Password Management Servlets (PWM)
+ * http://code.google.com/p/pwm/
+ *
+ * Copyright (c) 2006-2009 Novell, Inc.
+ * Copyright (c) 2009-2015 The PWM Project
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
 package password.pwm;
 package password.pwm;
 
 
 public enum PwmAboutProperty {
 public enum PwmAboutProperty {

+ 9 - 2
pwm/servlet/src/password/pwm/PwmApplication.java

@@ -38,6 +38,7 @@ import password.pwm.event.AuditEvent;
 import password.pwm.event.AuditManager;
 import password.pwm.event.AuditManager;
 import password.pwm.event.SystemAuditRecord;
 import password.pwm.event.SystemAuditRecord;
 import password.pwm.health.HealthMonitor;
 import password.pwm.health.HealthMonitor;
+import password.pwm.http.servlet.resource.ResourceServletService;
 import password.pwm.ldap.LdapConnectionService;
 import password.pwm.ldap.LdapConnectionService;
 import password.pwm.token.TokenService;
 import password.pwm.token.TokenService;
 import password.pwm.util.Helper;
 import password.pwm.util.Helper;
@@ -113,6 +114,7 @@ public class PwmApplication {
 
 
 
 
     private String instanceID = DEFAULT_INSTANCE_ID;
     private String instanceID = DEFAULT_INSTANCE_ID;
+    private String instanceNonce = PwmRandom.getInstance().randomUUID().toString();
     private final Configuration configuration;
     private final Configuration configuration;
 
 
     private LocalDB localDB;
     private LocalDB localDB;
@@ -149,7 +151,8 @@ public class PwmApplication {
             ReportService.class,
             ReportService.class,
             CrService.class,
             CrService.class,
             OtpService.class,
             OtpService.class,
-            CacheService.class
+            CacheService.class,
+            ResourceServletService.class
     ));
     ));
 
 
 
 
@@ -436,6 +439,10 @@ public class PwmApplication {
         return (LdapConnectionService)pwmServices.get(LdapConnectionService.class);
         return (LdapConnectionService)pwmServices.get(LdapConnectionService.class);
     }
     }
 
 
+    public ResourceServletService getResourceServletService() {
+        return (ResourceServletService)pwmServices.get(ResourceServletService.class);
+    }
+
     public Configuration getConfig() {
     public Configuration getConfig() {
         if (configuration == null) {
         if (configuration == null) {
             return null;
             return null;
@@ -652,7 +659,7 @@ public class PwmApplication {
     }
     }
 
 
     public String getInstanceNonce() {
     public String getInstanceNonce() {
-        return Long.toString(getStartupTime().getTime(),36);
+        return instanceNonce;
     }
     }
 
 
     public String readAppAttribute(final AppAttribute appAttribute) {
     public String readAppAttribute(final AppAttribute appAttribute) {

+ 8 - 22
pwm/servlet/src/password/pwm/PwmConstants.java

@@ -125,8 +125,7 @@ public abstract class PwmConstants {
     public static final String DEFAULT_BAD_PASSWORD_ATTEMPT = readPwmConstantsBundle("defaultBadPasswordAttempt");
     public static final String DEFAULT_BAD_PASSWORD_ATTEMPT = readPwmConstantsBundle("defaultBadPasswordAttempt");
 
 
     public static final String CONTEXT_ATTR_CONTEXT_MANAGER = "ContextManager";
     public static final String CONTEXT_ATTR_CONTEXT_MANAGER = "ContextManager";
-    public static final String CONTEXT_ATTR_RESOURCE_CACHE = "ResourceFileServlet-Cache";
-    public static final String CONTEXT_ATTR_RESOURCE_HIT_AVG = "ResourceFileServlet-HitAvg";
+    public static final String CONTEXT_ATTR_RESOURCE_DATA = "ResourceFileServlet-Data";
 
 
     public static final String SESSION_ATTR_PWM_SESSION = "PwmSession";
     public static final String SESSION_ATTR_PWM_SESSION = "PwmSession";
     public static final String SESSION_ATTR_CONTEXT_GUID = "ContextInstanceGUID";
     public static final String SESSION_ATTR_CONTEXT_GUID = "ContextInstanceGUID";
@@ -134,7 +133,7 @@ public abstract class PwmConstants {
     public static final PwmBlockAlgorithm IN_MEMORY_PASSWORD_ENCRYPT_METHOD = PwmBlockAlgorithm.AES;
     public static final PwmBlockAlgorithm IN_MEMORY_PASSWORD_ENCRYPT_METHOD = PwmBlockAlgorithm.AES;
     public static final PwmHashAlgorithm SETTING_CHECKSUM_HASH_METHOD = PwmHashAlgorithm.SHA256;
     public static final PwmHashAlgorithm SETTING_CHECKSUM_HASH_METHOD = PwmHashAlgorithm.SHA256;
 
 
-    public static enum REQUEST_ATTR {
+    public enum REQUEST_ATTR {
         PwmErrorInfo,
         PwmErrorInfo,
         PwmRequest,
         PwmRequest,
         OriginalUri,
         OriginalUri,
@@ -180,7 +179,7 @@ public abstract class PwmConstants {
 
 
     public static final String LOG_REMOVED_VALUE_REPLACEMENT = readPwmConstantsBundle("log.removedValue");
     public static final String LOG_REMOVED_VALUE_REPLACEMENT = readPwmConstantsBundle("log.removedValue");
 
 
-    public static enum JSP_URL {
+    public enum JSP_URL {
 
 
         INIT("init.jsp"),
         INIT("init.jsp"),
         ERROR("error.jsp"),
         ERROR("error.jsp"),
@@ -250,7 +249,7 @@ public abstract class PwmConstants {
         private String path;
         private String path;
         private static final String JSP_ROOT_URL = "/WEB-INF/jsp/";
         private static final String JSP_ROOT_URL = "/WEB-INF/jsp/";
 
 
-        private JSP_URL(String path) {
+        JSP_URL(String path) {
             this.path = path;
             this.path = path;
         }
         }
 
 
@@ -261,23 +260,9 @@ public abstract class PwmConstants {
 
 
     public static final String URL_JSP_CONFIG_GUIDE = "WEB-INF/jsp/configguide-%1%.jsp";
     public static final String URL_JSP_CONFIG_GUIDE = "WEB-INF/jsp/configguide-%1%.jsp";
 
 
-    public static final String URL_SERVLET_LOGIN = "Login";
-    public static final String URL_SERVLET_OAUTH_CONSUMER = "oauth";
-    public static final String URL_SERVLET_LOGOUT = "Logout";
-    public static final String URL_SERVLET_CHANGE_PASSWORD = "ChangePassword";
-    public static final String URL_SERVLET_UPDATE_PROFILE = "UpdateProfile";
-    public static final String URL_SERVLET_SETUP_RESPONSES = "SetupResponses";
-    public static final String URL_SERVLET_SETUP_OTP_SECRET = "SetupOtp";
-    public static final String URL_SERVLET_RECOVER_PASSWORD = "ForgottenPassword";
-    public static final String URL_SERVLET_RECOVER_USERNAME = "ForgottenUsername";
-    public static final String URL_SERVLET_NEW_USER = "NewUser";
-    public static final String URL_SERVLET_USER_ACTIVATION = "ActivateUser";
-    public static final String URL_SERVLET_GUEST_REGISTRATION = "GuestRegistration";
-    public static final String URL_SERVLET_GUEST_UPDATE = "GuestUpdate";
-    public static final String URL_SERVLET_CAPTCHA = "Captcha";
-    public static final String URL_SERVLET_COMMAND = "CommandServlet";
-    public static final String URL_SERVLET_CONFIG_MANAGER = "ConfigManager";
-    public static final String URL_SERVLET_CONFIG_GUIDE = "ConfigGuide";
+    public static final String URL_PREFIX_PRIVATE = "/private";
+    public static final String URL_PREFIX_PUBLIC = "/public";
+
 
 
     public static final String PARAM_ACTION_REQUEST = "processAction";
     public static final String PARAM_ACTION_REQUEST = "processAction";
     public static final String PARAM_VERIFICATION_KEY = "session_verification_key";
     public static final String PARAM_VERIFICATION_KEY = "session_verification_key";
@@ -370,6 +355,7 @@ public abstract class PwmConstants {
         Content_Encoding("Content-Encoding"),
         Content_Encoding("Content-Encoding"),
         Location("Location"),
         Location("Location"),
         ContentSecurityPolicy("Content-Security-Policy"),
         ContentSecurityPolicy("Content-Security-Policy"),
+        If_None_Match("If-None-Match"),
         Server("Server"),
         Server("Server"),
         Cache_Control("Cache-Control"),
         Cache_Control("Cache-Control"),
         WWW_Authenticate("WWW-Authenticate"),
         WWW_Authenticate("WWW-Authenticate"),

+ 1 - 1
pwm/servlet/src/password/pwm/PwmService.java

@@ -3,7 +3,7 @@
  * http://code.google.com/p/pwm/
  * http://code.google.com/p/pwm/
  *
  *
  * Copyright (c) 2006-2009 Novell, Inc.
  * Copyright (c) 2006-2009 Novell, Inc.
- * Copyright (c) 2009-2012 The PWM Project
+ * Copyright (c) 2009-2015 The PWM Project
  *
  *
  * This program is free software; you can redistribute it and/or modify
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * it under the terms of the GNU General Public License as published by

+ 22 - 0
pwm/servlet/src/password/pwm/RecoveryVerificationMethod.java

@@ -1,3 +1,25 @@
+/*
+ * Password Management Servlets (PWM)
+ * http://code.google.com/p/pwm/
+ *
+ * Copyright (c) 2006-2009 Novell, Inc.
+ * Copyright (c) 2009-2015 The PWM Project
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
 package password.pwm;
 package password.pwm;
 
 
 import password.pwm.bean.SessionLabel;
 import password.pwm.bean.SessionLabel;

+ 1 - 1
pwm/servlet/src/password/pwm/bean/EmailItemBean.java

@@ -3,7 +3,7 @@
  * http://code.google.com/p/pwm/
  * http://code.google.com/p/pwm/
  *
  *
  * Copyright (c) 2006-2009 Novell, Inc.
  * Copyright (c) 2006-2009 Novell, Inc.
- * Copyright (c) 2009-2012 The PWM Project
+ * Copyright (c) 2009-2015 The PWM Project
  *
  *
  * This program is free software; you can redistribute it and/or modify
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * it under the terms of the GNU General Public License as published by

+ 1 - 1
pwm/servlet/src/password/pwm/bean/PasswordStatus.java

@@ -3,7 +3,7 @@
  * http://code.google.com/p/pwm/
  * http://code.google.com/p/pwm/
  *
  *
  * Copyright (c) 2006-2009 Novell, Inc.
  * Copyright (c) 2006-2009 Novell, Inc.
- * Copyright (c) 2009-2014 The PWM Project
+ * Copyright (c) 2009-2015 The PWM Project
  *
  *
  * This program is free software; you can redistribute it and/or modify
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * it under the terms of the GNU General Public License as published by

+ 22 - 0
pwm/servlet/src/password/pwm/bean/PublicUserInfoBean.java

@@ -1,3 +1,25 @@
+/*
+ * Password Management Servlets (PWM)
+ * http://code.google.com/p/pwm/
+ *
+ * Copyright (c) 2006-2009 Novell, Inc.
+ * Copyright (c) 2009-2015 The PWM Project
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
 package password.pwm.bean;
 package password.pwm.bean;
 
 
 import password.pwm.config.Configuration;
 import password.pwm.config.Configuration;

+ 22 - 0
pwm/servlet/src/password/pwm/bean/RemoteVerificationRequestBean.java

@@ -1,3 +1,25 @@
+/*
+ * Password Management Servlets (PWM)
+ * http://code.google.com/p/pwm/
+ *
+ * Copyright (c) 2006-2009 Novell, Inc.
+ * Copyright (c) 2009-2015 The PWM Project
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
 package password.pwm.bean;
 package password.pwm.bean;
 
 
 import java.io.Serializable;
 import java.io.Serializable;

+ 22 - 0
pwm/servlet/src/password/pwm/bean/RemoteVerificationResponseBean.java

@@ -1,3 +1,25 @@
+/*
+ * Password Management Servlets (PWM)
+ * http://code.google.com/p/pwm/
+ *
+ * Copyright (c) 2006-2009 Novell, Inc.
+ * Copyright (c) 2009-2015 The PWM Project
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
 package password.pwm.bean;
 package password.pwm.bean;
 
 
 import password.pwm.RecoveryVerificationMethod;
 import password.pwm.RecoveryVerificationMethod;

+ 1 - 1
pwm/servlet/src/password/pwm/bean/ResponseInfoBean.java

@@ -3,7 +3,7 @@
  * http://code.google.com/p/pwm/
  * http://code.google.com/p/pwm/
  *
  *
  * Copyright (c) 2006-2009 Novell, Inc.
  * Copyright (c) 2006-2009 Novell, Inc.
- * Copyright (c) 2009-2014 The PWM Project
+ * Copyright (c) 2009-2015 The PWM Project
  *
  *
  * This program is free software; you can redistribute it and/or modify
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * it under the terms of the GNU General Public License as published by

+ 1 - 1
pwm/servlet/src/password/pwm/bean/SmsItemBean.java

@@ -3,7 +3,7 @@
  * http://code.google.com/p/pwm/
  * http://code.google.com/p/pwm/
  *
  *
  * Copyright (c) 2006-2009 Novell, Inc.
  * Copyright (c) 2006-2009 Novell, Inc.
- * Copyright (c) 2009-2014 The PWM Project
+ * Copyright (c) 2009-2015 The PWM Project
  *
  *
  * This program is free software; you can redistribute it and/or modify
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * it under the terms of the GNU General Public License as published by

+ 1 - 1
pwm/servlet/src/password/pwm/bean/StatsPublishBean.java

@@ -3,7 +3,7 @@
  * http://code.google.com/p/pwm/
  * http://code.google.com/p/pwm/
  *
  *
  * Copyright (c) 2006-2009 Novell, Inc.
  * Copyright (c) 2006-2009 Novell, Inc.
- * Copyright (c) 2009-2012 The PWM Project
+ * Copyright (c) 2009-2015 The PWM Project
  *
  *
  * This program is free software; you can redistribute it and/or modify
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * it under the terms of the GNU General Public License as published by

+ 1 - 1
pwm/servlet/src/password/pwm/bean/package.html

@@ -3,7 +3,7 @@
   ~ http://code.google.com/p/pwm/
   ~ http://code.google.com/p/pwm/
   ~
   ~
   ~ Copyright (c) 2006-2009 Novell, Inc.
   ~ Copyright (c) 2006-2009 Novell, Inc.
-  ~ Copyright (c) 2009-2012 The PWM Project
+  ~ Copyright (c) 2009-2015 The PWM Project
   ~
   ~
   ~ This program is free software; you can redistribute it and/or modify
   ~ This program is free software; you can redistribute it and/or modify
   ~ it under the terms of the GNU General Public License as published by
   ~ it under the terms of the GNU General Public License as published by

+ 2 - 2
pwm/servlet/src/password/pwm/config/ConfigurationReader.java

@@ -63,7 +63,7 @@ public class ConfigurationReader {
 
 
     private volatile boolean saveInProgress;
     private volatile boolean saveInProgress;
 
 
-    public ConfigurationReader(final File configFile) {
+    public ConfigurationReader(final File configFile) throws PwmUnrecoverableException {
         this.configFile = configFile;
         this.configFile = configFile;
 
 
         this.configFileChecksum = readFileChecksum(configFile);
         this.configFileChecksum = readFileChecksum(configFile);
@@ -90,7 +90,7 @@ public class ConfigurationReader {
         return storedConfiguration;
         return storedConfiguration;
     }
     }
 
 
-    public Configuration getConfiguration() {
+    public Configuration getConfiguration() throws PwmUnrecoverableException {
         if (configuration == null) {
         if (configuration == null) {
             configuration = new Configuration(this.storedConfiguration == null ? StoredConfiguration.newStoredConfiguration() : this.storedConfiguration);
             configuration = new Configuration(this.storedConfiguration == null ? StoredConfiguration.newStoredConfiguration() : this.storedConfiguration);
             storedConfiguration.lock();
             storedConfiguration.lock();

+ 8 - 8
pwm/servlet/src/password/pwm/config/PwmSetting.java

@@ -90,8 +90,6 @@ public enum PwmSetting {
             "display.maskResponseFields", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.UI_FEATURES),
             "display.maskResponseFields", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.UI_FEATURES),
     DISPLAY_CANCEL_BUTTON(
     DISPLAY_CANCEL_BUTTON(
             "display.showCancelButton", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.UI_FEATURES),
             "display.showCancelButton", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.UI_FEATURES),
-    DISPLAY_RESET_BUTTON(
-            "display.showResetButton", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.UI_FEATURES),
     DISPLAY_SUCCESS_PAGES(
     DISPLAY_SUCCESS_PAGES(
             "display.showSuccessPage", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.UI_FEATURES),
             "display.showSuccessPage", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.UI_FEATURES),
     DISPLAY_LOGIN_PAGE_OPTIONS(
     DISPLAY_LOGIN_PAGE_OPTIONS(
@@ -1113,7 +1111,7 @@ public enum PwmSetting {
                     if (defaultElement == null) {
                     if (defaultElement == null) {
                         throw new IllegalStateException("no default value for setting " + this.getKey());
                         throw new IllegalStateException("no default value for setting " + this.getKey());
                     }
                     }
-                    returnObj.put(loopTemplate, ValueFactory.fromXmlValues(this, defaultElement, this.getKey()));
+                    returnObj.put(loopTemplate, ValueFactory.fromXmlValues(this, defaultElement, null));
                 }
                 }
 
 
             }
             }
@@ -1127,11 +1125,13 @@ public enum PwmSetting {
         final Map<PwmSettingTemplate, String> returnObj = new LinkedHashMap<>();
         final Map<PwmSettingTemplate, String> returnObj = new LinkedHashMap<>();
         final String defaultDebugStr = this.getDefaultValue(PwmSettingTemplate.DEFAULT).toDebugString(locale);
         final String defaultDebugStr = this.getDefaultValue(PwmSettingTemplate.DEFAULT).toDebugString(locale);
         returnObj.put(PwmSettingTemplate.DEFAULT, defaultDebugStr);
         returnObj.put(PwmSettingTemplate.DEFAULT, defaultDebugStr);
-        for (final PwmSettingTemplate template : PwmSettingTemplate.values()) {
-            if (template != PwmSettingTemplate.DEFAULT) {
-                final String debugStr = this.getDefaultValue(template).toDebugString(locale);
-                if (!defaultDebugStr.equals(debugStr)) {
-                    returnObj.put(template, debugStr);
+        if (defaultDebugStr != null) {
+            for (final PwmSettingTemplate template : PwmSettingTemplate.values()) {
+                if (template != PwmSettingTemplate.DEFAULT) {
+                    final String debugStr = this.getDefaultValue(template).toDebugString(locale);
+                    if (!defaultDebugStr.equals(debugStr)) {
+                        returnObj.put(template, debugStr);
+                    }
                 }
                 }
             }
             }
         }
         }

+ 1 - 5
pwm/servlet/src/password/pwm/config/PwmSetting.xml

@@ -20,6 +20,7 @@
   ~ along with this program; if not, write to the Free Software
   ~ along with this program; if not, write to the Free Software
   ~ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
   ~ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
   -->
   -->
+
 <!--
 <!--
   This file contains metadata about the PwmSetting java enum.  This file is not intended to be
   This file contains metadata about the PwmSetting java enum.  This file is not intended to be
   modified by administrators.  Any changes must match the compiled PwmSettings.java enum object.
   modified by administrators.  Any changes must match the compiled PwmSettings.java enum object.
@@ -162,11 +163,6 @@
             <value>true</value>
             <value>true</value>
         </default>
         </default>
     </setting>
     </setting>
-    <setting key="display.showResetButton" level="1" required="true" hidden="true">
-        <default>
-            <value>false</value>
-        </default>
-    </setting>
     <setting key="display.showSuccessPage" level="1" required="true">
     <setting key="display.showSuccessPage" level="1" required="true">
         <default>
         <default>
             <value>true</value>
             <value>true</value>

+ 1 - 1
pwm/servlet/src/password/pwm/config/PwmSetting.xsd

@@ -3,7 +3,7 @@
   ~ http://code.google.com/p/pwm/
   ~ http://code.google.com/p/pwm/
   ~
   ~
   ~ Copyright (c) 2006-2009 Novell, Inc.
   ~ Copyright (c) 2006-2009 Novell, Inc.
-  ~ Copyright (c) 2009-2013 The PWM Project
+  ~ Copyright (c) 2009-2015 The PWM Project
   ~
   ~
   ~ This program is free software; you can redistribute it and/or modify
   ~ This program is free software; you can redistribute it and/or modify
   ~ it under the terms of the GNU General Public License as published by
   ~ it under the terms of the GNU General Public License as published by

+ 1 - 1
pwm/servlet/src/password/pwm/config/PwmSettingSyntax.java

@@ -3,7 +3,7 @@
  * http://code.google.com/p/pwm/
  * http://code.google.com/p/pwm/
  *
  *
  * Copyright (c) 2006-2009 Novell, Inc.
  * Copyright (c) 2006-2009 Novell, Inc.
- * Copyright (c) 2009-2014 The PWM Project
+ * Copyright (c) 2009-2015 The PWM Project
  *
  *
  * This program is free software; you can redistribute it and/or modify
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * it under the terms of the GNU General Public License as published by

+ 22 - 0
pwm/servlet/src/password/pwm/config/PwmSettingTemplate.java

@@ -1,3 +1,25 @@
+/*
+ * Password Management Servlets (PWM)
+ * http://code.google.com/p/pwm/
+ *
+ * Copyright (c) 2006-2009 Novell, Inc.
+ * Copyright (c) 2009-2015 The PWM Project
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
 package password.pwm.config;
 package password.pwm.config;
 
 
 import org.jdom2.Attribute;
 import org.jdom2.Attribute;

+ 1 - 1
pwm/servlet/src/password/pwm/config/PwmSettingXml.java

@@ -3,7 +3,7 @@
  * http://code.google.com/p/pwm/
  * http://code.google.com/p/pwm/
  *
  *
  * Copyright (c) 2006-2009 Novell, Inc.
  * Copyright (c) 2006-2009 Novell, Inc.
- * Copyright (c) 2009-2014 The PWM Project
+ * Copyright (c) 2009-2015 The PWM Project
  *
  *
  * This program is free software; you can redistribute it and/or modify
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * it under the terms of the GNU General Public License as published by

+ 1 - 1
pwm/servlet/src/password/pwm/config/SettingUIFunction.java

@@ -3,7 +3,7 @@
  * http://code.google.com/p/pwm/
  * http://code.google.com/p/pwm/
  *
  *
  * Copyright (c) 2006-2009 Novell, Inc.
  * Copyright (c) 2006-2009 Novell, Inc.
- * Copyright (c) 2009-2014 The PWM Project
+ * Copyright (c) 2009-2015 The PWM Project
  *
  *
  * This program is free software; you can redistribute it and/or modify
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * it under the terms of the GNU General Public License as published by

+ 1 - 1
pwm/servlet/src/password/pwm/config/ShortcutItem.java

@@ -3,7 +3,7 @@
  * http://code.google.com/p/pwm/
  * http://code.google.com/p/pwm/
  *
  *
  * Copyright (c) 2006-2009 Novell, Inc.
  * Copyright (c) 2006-2009 Novell, Inc.
- * Copyright (c) 2009-2014 The PWM Project
+ * Copyright (c) 2009-2015 The PWM Project
  *
  *
  * This program is free software; you can redistribute it and/or modify
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * it under the terms of the GNU General Public License as published by

+ 23 - 18
pwm/servlet/src/password/pwm/config/StoredConfiguration.java

@@ -40,7 +40,8 @@ import password.pwm.i18n.PwmLocaleBundle;
 import password.pwm.util.*;
 import password.pwm.util.*;
 import password.pwm.util.logging.PwmLogger;
 import password.pwm.util.logging.PwmLogger;
 import password.pwm.util.secure.PwmRandom;
 import password.pwm.util.secure.PwmRandom;
-import password.pwm.util.secure.SecureHelper;
+import password.pwm.util.secure.PwmSecurityKey;
+import password.pwm.util.secure.SecureEngine;
 
 
 import java.io.IOException;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStream;
@@ -123,11 +124,11 @@ public class StoredConfiguration implements Serializable {
 
 
 // -------------------------- STATIC METHODS --------------------------
 // -------------------------- STATIC METHODS --------------------------
 
 
-    public static StoredConfiguration newStoredConfiguration() {
+    public static StoredConfiguration newStoredConfiguration() throws PwmUnrecoverableException {
         return new StoredConfiguration();
         return new StoredConfiguration();
     }
     }
 
 
-    public static StoredConfiguration copy(final StoredConfiguration input) {
+    public static StoredConfiguration copy(final StoredConfiguration input) throws PwmUnrecoverableException {
         final StoredConfiguration copy = new StoredConfiguration();
         final StoredConfiguration copy = new StoredConfiguration();
         copy.document = input.document.clone();
         copy.document = input.document.clone();
         return copy;
         return copy;
@@ -164,7 +165,7 @@ public class StoredConfiguration implements Serializable {
      * for that value so that the xml dom can be updated.
      * for that value so that the xml dom can be updated.
      * @param storedConfiguration stored configuration to check
      * @param storedConfiguration stored configuration to check
      */
      */
-    private static void checkIfXmlRequiresUpdate(final StoredConfiguration storedConfiguration) {
+    private static void checkIfXmlRequiresUpdate(final StoredConfiguration storedConfiguration) throws PwmUnrecoverableException {
         for (final PwmSetting setting : PwmSetting.values()) {
         for (final PwmSetting setting : PwmSetting.values()) {
             if (setting.getSyntax() != PwmSettingSyntax.PROFILE && !setting.getCategory().hasProfiles()) {
             if (setting.getSyntax() != PwmSettingSyntax.PROFILE && !setting.getCategory().hasProfiles()) {
                 final StoredValue value = storedConfiguration.readSetting(setting);
                 final StoredValue value = storedConfiguration.readSetting(setting);
@@ -204,8 +205,7 @@ public class StoredConfiguration implements Serializable {
         }
         }
     }
     }
 
 
-    public StoredConfiguration()
-    {
+    public StoredConfiguration() throws PwmUnrecoverableException {
         ConfigurationCleaner.cleanup(this);
         ConfigurationCleaner.cleanup(this);
         final String createTime = PwmConstants.DEFAULT_DATETIME_FORMAT.format(new Date());
         final String createTime = PwmConstants.DEFAULT_DATETIME_FORMAT.format(new Date());
         document.getRootElement().setAttribute(XML_ATTRIBUTE_CREATE_TIME,createTime);
         document.getRootElement().setAttribute(XML_ATTRIBUTE_CREATE_TIME,createTime);
@@ -676,7 +676,9 @@ public class StoredConfiguration implements Serializable {
 
 
     public StoredValue readSetting(final PwmSetting setting, final String profileID) {
     public StoredValue readSetting(final PwmSetting setting, final String profileID) {
         if (profileID == null && setting.getCategory().hasProfiles()) {
         if (profileID == null && setting.getCategory().hasProfiles()) {
-            throw new IllegalArgumentException("reading of setting " + setting.getKey() + " requires a non-null profileID");
+            IllegalArgumentException e = new IllegalArgumentException("reading of setting " + setting.getKey() + " requires a non-null profileID");
+            LOGGER.error("error",e);
+            throw e;
         }
         }
         if (profileID != null && !setting.getCategory().hasProfiles()) {
         if (profileID != null && !setting.getCategory().hasProfiles()) {
             throw new IllegalStateException("cannot read setting key " + setting.getKey() + " with non-null profileID");
             throw new IllegalStateException("cannot read setting key " + setting.getKey() + " with non-null profileID");
@@ -757,8 +759,7 @@ public class StoredConfiguration implements Serializable {
             final PwmSetting setting,
             final PwmSetting setting,
             final StoredValue value,
             final StoredValue value,
             final UserIdentity userIdentity
             final UserIdentity userIdentity
-    )
-    {
+    ) throws PwmUnrecoverableException {
         writeSetting(setting, null, value, userIdentity);
         writeSetting(setting, null, value, userIdentity);
     }
     }
 
 
@@ -767,7 +768,7 @@ public class StoredConfiguration implements Serializable {
             final String profileID,
             final String profileID,
             final StoredValue value,
             final StoredValue value,
             final UserIdentity userIdentity
             final UserIdentity userIdentity
-    ) {
+    ) throws PwmUnrecoverableException {
         if (profileID == null && setting.getCategory().hasProfiles()) {
         if (profileID == null && setting.getCategory().hasProfiles()) {
             throw new IllegalArgumentException("reading of setting " + setting.getKey() + " requires a non-null profileID");
             throw new IllegalArgumentException("reading of setting " + setting.getKey() + " requires a non-null profileID");
         }
         }
@@ -819,7 +820,7 @@ public class StoredConfiguration implements Serializable {
         }
         }
 
 
 
 
-        final String result = SecureHelper.hash(sb.toString(), PwmConstants.SETTING_CHECKSUM_HASH_METHOD);
+        final String result = SecureEngine.hash(sb.toString(), PwmConstants.SETTING_CHECKSUM_HASH_METHOD);
         LOGGER.trace("computed setting checksum in " + TimeDuration.fromCurrent(startTime).asCompactString());
         LOGGER.trace("computed setting checksum in " + TimeDuration.fromCurrent(startTime).asCompactString());
         return result;
         return result;
     }
     }
@@ -917,7 +918,7 @@ public class StoredConfiguration implements Serializable {
 
 
 
 
     private static class ConfigurationCleaner {
     private static class ConfigurationCleaner {
-        private static void cleanup(final StoredConfiguration configuration) {
+        private static void cleanup(final StoredConfiguration configuration) throws PwmUnrecoverableException {
             updateProperitiesWithoutType(configuration);
             updateProperitiesWithoutType(configuration);
             updateMandatoryElements(configuration.document);
             updateMandatoryElements(configuration.document);
             profilizeNonProfiledSettings(configuration);
             profilizeNonProfiledSettings(configuration);
@@ -998,7 +999,7 @@ public class StoredConfiguration implements Serializable {
         }
         }
 
 
 
 
-        private static void profilizeNonProfiledSettings(final StoredConfiguration storedConfiguration) {
+        private static void profilizeNonProfiledSettings(final StoredConfiguration storedConfiguration) throws PwmUnrecoverableException {
             final String NEW_PROFILE_NAME = "default";
             final String NEW_PROFILE_NAME = "default";
             final Document document = storedConfiguration.document;
             final Document document = storedConfiguration.document;
             for (final PwmSetting setting : PwmSetting.values()) {
             for (final PwmSetting setting : PwmSetting.values()) {
@@ -1064,7 +1065,7 @@ public class StoredConfiguration implements Serializable {
             }
             }
         }
         }
 
 
-        private static void migrateAppProperties(final StoredConfiguration storedConfiguration) {
+        private static void migrateAppProperties(final StoredConfiguration storedConfiguration) throws PwmUnrecoverableException {
             final Document document = storedConfiguration.document;
             final Document document = storedConfiguration.document;
             final XPathExpression xPathExpression = XPathBuilder.xpathForAppProperties();
             final XPathExpression xPathExpression = XPathBuilder.xpathForAppProperties();
             final List<Element> appPropertiesElements = (List<Element>)xPathExpression.evaluate(document);
             final List<Element> appPropertiesElements = (List<Element>)xPathExpression.evaluate(document);
@@ -1089,11 +1090,11 @@ public class StoredConfiguration implements Serializable {
             }
             }
         }
         }
 
 
-        private static void updateDeprecatedSettings(final StoredConfiguration storedConfiguration) {
+        private static void updateDeprecatedSettings(final StoredConfiguration storedConfiguration) throws PwmUnrecoverableException {
             final UserIdentity actor = new UserIdentity("UpgradeProcessor", null);
             final UserIdentity actor = new UserIdentity("UpgradeProcessor", null);
             for (final String profileID : storedConfiguration.profilesForSetting(PwmSetting.PASSWORD_POLICY_AD_COMPLEXITY)) {
             for (final String profileID : storedConfiguration.profilesForSetting(PwmSetting.PASSWORD_POLICY_AD_COMPLEXITY)) {
                 if (!storedConfiguration.isDefaultValue(PwmSetting.PASSWORD_POLICY_AD_COMPLEXITY, profileID)) {
                 if (!storedConfiguration.isDefaultValue(PwmSetting.PASSWORD_POLICY_AD_COMPLEXITY, profileID)) {
-                    boolean ad2003Enabled = (boolean) storedConfiguration.readSetting(PwmSetting.PASSWORD_POLICY_AD_COMPLEXITY).toNativeObject();
+                    boolean ad2003Enabled = (boolean) storedConfiguration.readSetting(PwmSetting.PASSWORD_POLICY_AD_COMPLEXITY,profileID).toNativeObject();
                     final StoredValue value;
                     final StoredValue value;
                     if (ad2003Enabled) {
                     if (ad2003Enabled) {
                         value = new StringValue(ADPolicyComplexity.AD2003.toString());
                         value = new StringValue(ADPolicyComplexity.AD2003.toString());
@@ -1209,8 +1210,12 @@ public class StoredConfiguration implements Serializable {
         return changeLog.changeLogAsDebugString(locale, asHtml);
         return changeLog.changeLogAsDebugString(locale, asHtml);
     }
     }
 
 
-    public String getKey() {
-        return createTime() + StoredConfiguration.class.getSimpleName();
+    private PwmSecurityKey cachedKey = null;
+    public PwmSecurityKey getKey() throws PwmUnrecoverableException {
+        if (cachedKey == null) {
+            cachedKey = new PwmSecurityKey(createTime() + StoredConfiguration.class.getSimpleName());
+        }
+        return cachedKey;
     }
     }
 
 
     public boolean isModified() {
     public boolean isModified() {

BIN
pwm/servlet/src/password/pwm/config/StoredConfiguration.xsd


+ 4 - 7
pwm/servlet/src/password/pwm/config/StoredValue.java

@@ -25,6 +25,7 @@ package password.pwm.config;
 import org.jdom2.Element;
 import org.jdom2.Element;
 import password.pwm.error.PwmException;
 import password.pwm.error.PwmException;
 import password.pwm.error.PwmUnrecoverableException;
 import password.pwm.error.PwmUnrecoverableException;
+import password.pwm.util.secure.PwmSecurityKey;
 
 
 import java.io.Serializable;
 import java.io.Serializable;
 import java.util.List;
 import java.util.List;
@@ -37,13 +38,9 @@ public interface StoredValue extends Serializable {
 
 
     List<String> validateValue(PwmSetting pwm);
     List<String> validateValue(PwmSetting pwm);
 
 
-    Serializable toDebugJsonObject(
-            Locale locale
-    );
+    Serializable toDebugJsonObject(Locale locale);
 
 
-    String toDebugString(
-            Locale locale
-    );
+    String toDebugString(Locale locale);
 
 
     boolean requiresStoredUpdate();
     boolean requiresStoredUpdate();
 
 
@@ -52,7 +49,7 @@ public interface StoredValue extends Serializable {
     interface StoredValueFactory {
     interface StoredValueFactory {
         StoredValue fromJson(final String input);
         StoredValue fromJson(final String input);
 
 
-        StoredValue fromXmlElement(final Element settingElement, final String key)
+        StoredValue fromXmlElement(final Element settingElement, final PwmSecurityKey key)
                 throws PwmException;
                 throws PwmException;
     }
     }
 
 

+ 24 - 6
pwm/servlet/src/password/pwm/config/function/AbstractUriCertImportFunction.java

@@ -1,3 +1,25 @@
+/*
+ * Password Management Servlets (PWM)
+ * http://code.google.com/p/pwm/
+ *
+ * Copyright (c) 2006-2009 Novell, Inc.
+ * Copyright (c) 2009-2015 The PWM Project
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
 package password.pwm.config.function;
 package password.pwm.config.function;
 
 
 import password.pwm.PwmApplication;
 import password.pwm.PwmApplication;
@@ -6,10 +28,7 @@ import password.pwm.config.PwmSetting;
 import password.pwm.config.SettingUIFunction;
 import password.pwm.config.SettingUIFunction;
 import password.pwm.config.StoredConfiguration;
 import password.pwm.config.StoredConfiguration;
 import password.pwm.config.value.X509CertificateValue;
 import password.pwm.config.value.X509CertificateValue;
-import password.pwm.error.ErrorInformation;
-import password.pwm.error.PwmError;
-import password.pwm.error.PwmException;
-import password.pwm.error.PwmOperationalException;
+import password.pwm.error.*;
 import password.pwm.http.PwmRequest;
 import password.pwm.http.PwmRequest;
 import password.pwm.http.PwmSession;
 import password.pwm.http.PwmSession;
 import password.pwm.util.X509Utils;
 import password.pwm.util.X509Utils;
@@ -29,8 +48,7 @@ abstract class AbstractUriCertImportFunction implements SettingUIFunction {
             PwmSetting setting,
             PwmSetting setting,
             String profile
             String profile
     )
     )
-            throws PwmOperationalException
-    {
+            throws PwmOperationalException, PwmUnrecoverableException {
         final PwmApplication pwmApplication = pwmRequest.getPwmApplication();
         final PwmApplication pwmApplication = pwmRequest.getPwmApplication();
         final PwmSession pwmSession = pwmRequest.getPwmSession();
         final PwmSession pwmSession = pwmRequest.getPwmSession();
         final Set<X509Certificate> resultCertificates = new LinkedHashSet<>();
         final Set<X509Certificate> resultCertificates = new LinkedHashSet<>();

+ 2 - 6
pwm/servlet/src/password/pwm/config/function/LdapCertImportFunction.java

@@ -29,10 +29,7 @@ import password.pwm.config.SettingUIFunction;
 import password.pwm.config.StoredConfiguration;
 import password.pwm.config.StoredConfiguration;
 import password.pwm.config.value.StringArrayValue;
 import password.pwm.config.value.StringArrayValue;
 import password.pwm.config.value.X509CertificateValue;
 import password.pwm.config.value.X509CertificateValue;
-import password.pwm.error.ErrorInformation;
-import password.pwm.error.PwmError;
-import password.pwm.error.PwmException;
-import password.pwm.error.PwmOperationalException;
+import password.pwm.error.*;
 import password.pwm.http.PwmRequest;
 import password.pwm.http.PwmRequest;
 import password.pwm.http.PwmSession;
 import password.pwm.http.PwmSession;
 import password.pwm.i18n.Message;
 import password.pwm.i18n.Message;
@@ -54,8 +51,7 @@ public class LdapCertImportFunction implements SettingUIFunction {
             PwmSetting setting,
             PwmSetting setting,
             String profile
             String profile
     )
     )
-            throws PwmOperationalException
-    {
+            throws PwmOperationalException, PwmUnrecoverableException {
         final PwmApplication pwmApplication = pwmRequest.getPwmApplication();
         final PwmApplication pwmApplication = pwmRequest.getPwmApplication();
         final PwmSession pwmSession = pwmRequest.getPwmSession();
         final PwmSession pwmSession = pwmRequest.getPwmSession();
 
 

+ 22 - 0
pwm/servlet/src/password/pwm/config/function/NAAFCertImportFunction.java

@@ -1,3 +1,25 @@
+/*
+ * Password Management Servlets (PWM)
+ * http://code.google.com/p/pwm/
+ *
+ * Copyright (c) 2006-2009 Novell, Inc.
+ * Copyright (c) 2009-2015 The PWM Project
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
 package password.pwm.config.function;
 package password.pwm.config.function;
 
 
 import password.pwm.config.PwmSetting;
 import password.pwm.config.PwmSetting;

+ 22 - 0
pwm/servlet/src/password/pwm/config/function/OAuthCertImportFunction.java

@@ -1,3 +1,25 @@
+/*
+ * Password Management Servlets (PWM)
+ * http://code.google.com/p/pwm/
+ *
+ * Copyright (c) 2006-2009 Novell, Inc.
+ * Copyright (c) 2009-2015 The PWM Project
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
 package password.pwm.config.function;
 package password.pwm.config.function;
 
 
 import password.pwm.config.PwmSetting;
 import password.pwm.config.PwmSetting;

+ 2 - 6
pwm/servlet/src/password/pwm/config/function/SyslogCertImportFunction.java

@@ -28,10 +28,7 @@ import password.pwm.config.PwmSetting;
 import password.pwm.config.SettingUIFunction;
 import password.pwm.config.SettingUIFunction;
 import password.pwm.config.StoredConfiguration;
 import password.pwm.config.StoredConfiguration;
 import password.pwm.config.value.X509CertificateValue;
 import password.pwm.config.value.X509CertificateValue;
-import password.pwm.error.ErrorInformation;
-import password.pwm.error.PwmError;
-import password.pwm.error.PwmException;
-import password.pwm.error.PwmOperationalException;
+import password.pwm.error.*;
 import password.pwm.event.SyslogAuditService;
 import password.pwm.event.SyslogAuditService;
 import password.pwm.http.PwmRequest;
 import password.pwm.http.PwmRequest;
 import password.pwm.http.PwmSession;
 import password.pwm.http.PwmSession;
@@ -52,8 +49,7 @@ public class SyslogCertImportFunction implements SettingUIFunction {
             PwmSetting setting,
             PwmSetting setting,
             String profile
             String profile
     )
     )
-            throws PwmOperationalException
-    {
+            throws PwmOperationalException, PwmUnrecoverableException {
         final PwmApplication pwmApplication = pwmRequest.getPwmApplication();
         final PwmApplication pwmApplication = pwmRequest.getPwmApplication();
         final PwmSession pwmSession = pwmRequest.getPwmSession();
         final PwmSession pwmSession = pwmRequest.getPwmSession();
 
 

+ 1 - 1
pwm/servlet/src/password/pwm/config/option/ADPolicyComplexity.java

@@ -3,7 +3,7 @@
  * http://code.google.com/p/pwm/
  * http://code.google.com/p/pwm/
  *
  *
  * Copyright (c) 2006-2009 Novell, Inc.
  * Copyright (c) 2006-2009 Novell, Inc.
- * Copyright (c) 2009-2014 The PWM Project
+ * Copyright (c) 2009-2015 The PWM Project
  *
  *
  * This program is free software; you can redistribute it and/or modify
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * it under the terms of the GNU General Public License as published by

+ 1 - 1
pwm/servlet/src/password/pwm/config/option/ApplicationPage.java

@@ -3,7 +3,7 @@
  * http://code.google.com/p/pwm/
  * http://code.google.com/p/pwm/
  *
  *
  * Copyright (c) 2006-2009 Novell, Inc.
  * Copyright (c) 2006-2009 Novell, Inc.
- * Copyright (c) 2009-2014 The PWM Project
+ * Copyright (c) 2009-2015 The PWM Project
  *
  *
  * This program is free software; you can redistribute it and/or modify
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * it under the terms of the GNU General Public License as published by

+ 1 - 1
pwm/servlet/src/password/pwm/config/option/ConfigurationOption.java

@@ -3,7 +3,7 @@
  * http://code.google.com/p/pwm/
  * http://code.google.com/p/pwm/
  *
  *
  * Copyright (c) 2006-2009 Novell, Inc.
  * Copyright (c) 2006-2009 Novell, Inc.
- * Copyright (c) 2009-2013 The PWM Project
+ * Copyright (c) 2009-2015 The PWM Project
  *
  *
  * This program is free software; you can redistribute it and/or modify
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * it under the terms of the GNU General Public License as published by

+ 1 - 1
pwm/servlet/src/password/pwm/config/option/DataStorageMethod.java

@@ -3,7 +3,7 @@
  * http://code.google.com/p/pwm/
  * http://code.google.com/p/pwm/
  *
  *
  * Copyright (c) 2006-2009 Novell, Inc.
  * Copyright (c) 2006-2009 Novell, Inc.
- * Copyright (c) 2009-2013 The PWM Project
+ * Copyright (c) 2009-2015 The PWM Project
  *
  *
  * This program is free software; you can redistribute it and/or modify
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * it under the terms of the GNU General Public License as published by

+ 1 - 1
pwm/servlet/src/password/pwm/config/option/DuplicateMode.java

@@ -3,7 +3,7 @@
  * http://code.google.com/p/pwm/
  * http://code.google.com/p/pwm/
  *
  *
  * Copyright (c) 2006-2009 Novell, Inc.
  * Copyright (c) 2006-2009 Novell, Inc.
- * Copyright (c) 2009-2013 The PWM Project
+ * Copyright (c) 2009-2015 The PWM Project
  *
  *
  * This program is free software; you can redistribute it and/or modify
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * it under the terms of the GNU General Public License as published by

+ 1 - 1
pwm/servlet/src/password/pwm/config/option/ForceSetupPolicy.java

@@ -3,7 +3,7 @@
  * http://code.google.com/p/pwm/
  * http://code.google.com/p/pwm/
  *
  *
  * Copyright (c) 2006-2009 Novell, Inc.
  * Copyright (c) 2006-2009 Novell, Inc.
- * Copyright (c) 2009-2014 The PWM Project
+ * Copyright (c) 2009-2015 The PWM Project
  *
  *
  * This program is free software; you can redistribute it and/or modify
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * it under the terms of the GNU General Public License as published by

+ 1 - 1
pwm/servlet/src/password/pwm/config/option/HelpdeskClearResponseMode.java

@@ -3,7 +3,7 @@
  * http://code.google.com/p/pwm/
  * http://code.google.com/p/pwm/
  *
  *
  * Copyright (c) 2006-2009 Novell, Inc.
  * Copyright (c) 2006-2009 Novell, Inc.
- * Copyright (c) 2009-2014 The PWM Project
+ * Copyright (c) 2009-2015 The PWM Project
  *
  *
  * This program is free software; you can redistribute it and/or modify
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * it under the terms of the GNU General Public License as published by

+ 1 - 1
pwm/servlet/src/password/pwm/config/option/HelpdeskUIMode.java

@@ -3,7 +3,7 @@
  * http://code.google.com/p/pwm/
  * http://code.google.com/p/pwm/
  *
  *
  * Copyright (c) 2006-2009 Novell, Inc.
  * Copyright (c) 2006-2009 Novell, Inc.
- * Copyright (c) 2009-2014 The PWM Project
+ * Copyright (c) 2009-2015 The PWM Project
  *
  *
  * This program is free software; you can redistribute it and/or modify
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * it under the terms of the GNU General Public License as published by

+ 1 - 1
pwm/servlet/src/password/pwm/config/option/IntruderStorageMethod.java

@@ -3,7 +3,7 @@
  * http://code.google.com/p/pwm/
  * http://code.google.com/p/pwm/
  *
  *
  * Copyright (c) 2006-2009 Novell, Inc.
  * Copyright (c) 2006-2009 Novell, Inc.
- * Copyright (c) 2009-2013 The PWM Project
+ * Copyright (c) 2009-2015 The PWM Project
  *
  *
  * This program is free software; you can redistribute it and/or modify
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * it under the terms of the GNU General Public License as published by

+ 1 - 1
pwm/servlet/src/password/pwm/config/option/MessageSendMethod.java

@@ -3,7 +3,7 @@
  * http://code.google.com/p/pwm/
  * http://code.google.com/p/pwm/
  *
  *
  * Copyright (c) 2006-2009 Novell, Inc.
  * Copyright (c) 2006-2009 Novell, Inc.
- * Copyright (c) 2009-2014 The PWM Project
+ * Copyright (c) 2009-2015 The PWM Project
  *
  *
  * This program is free software; you can redistribute it and/or modify
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * it under the terms of the GNU General Public License as published by

+ 1 - 1
pwm/servlet/src/password/pwm/config/option/OTPStorageFormat.java

@@ -3,7 +3,7 @@
  * http://code.google.com/p/pwm/
  * http://code.google.com/p/pwm/
  *
  *
  * Copyright (c) 2006-2009 Novell, Inc.
  * Copyright (c) 2006-2009 Novell, Inc.
- * Copyright (c) 2009-2014 The PWM Project
+ * Copyright (c) 2009-2015 The PWM Project
  *
  *
  * This program is free software; you can redistribute it and/or modify
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * it under the terms of the GNU General Public License as published by

+ 1 - 1
pwm/servlet/src/password/pwm/config/option/PasswordSyncCheckMode.java

@@ -3,7 +3,7 @@
  * http://code.google.com/p/pwm/
  * http://code.google.com/p/pwm/
  *
  *
  * Copyright (c) 2006-2009 Novell, Inc.
  * Copyright (c) 2006-2009 Novell, Inc.
- * Copyright (c) 2009-2014 The PWM Project
+ * Copyright (c) 2009-2015 The PWM Project
  *
  *
  * This program is free software; you can redistribute it and/or modify
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * it under the terms of the GNU General Public License as published by

+ 1 - 1
pwm/servlet/src/password/pwm/config/option/RecoveryAction.java

@@ -3,7 +3,7 @@
  * http://code.google.com/p/pwm/
  * http://code.google.com/p/pwm/
  *
  *
  * Copyright (c) 2006-2009 Novell, Inc.
  * Copyright (c) 2006-2009 Novell, Inc.
- * Copyright (c) 2009-2014 The PWM Project
+ * Copyright (c) 2009-2015 The PWM Project
  *
  *
  * This program is free software; you can redistribute it and/or modify
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * it under the terms of the GNU General Public License as published by

+ 1 - 1
pwm/servlet/src/password/pwm/config/option/RequireCurrentPasswordMode.java

@@ -3,7 +3,7 @@
  * http://code.google.com/p/pwm/
  * http://code.google.com/p/pwm/
  *
  *
  * Copyright (c) 2006-2009 Novell, Inc.
  * Copyright (c) 2006-2009 Novell, Inc.
- * Copyright (c) 2009-2014 The PWM Project
+ * Copyright (c) 2009-2015 The PWM Project
  *
  *
  * This program is free software; you can redistribute it and/or modify
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * it under the terms of the GNU General Public License as published by

+ 1 - 1
pwm/servlet/src/password/pwm/config/option/SelectableContextMode.java

@@ -3,7 +3,7 @@
  * http://code.google.com/p/pwm/
  * http://code.google.com/p/pwm/
  *
  *
  * Copyright (c) 2006-2009 Novell, Inc.
  * Copyright (c) 2006-2009 Novell, Inc.
- * Copyright (c) 2009-2013 The PWM Project
+ * Copyright (c) 2009-2015 The PWM Project
  *
  *
  * This program is free software; you can redistribute it and/or modify
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * it under the terms of the GNU General Public License as published by

+ 1 - 1
pwm/servlet/src/password/pwm/config/option/SessionVerificationMode.java

@@ -3,7 +3,7 @@
  * http://code.google.com/p/pwm/
  * http://code.google.com/p/pwm/
  *
  *
  * Copyright (c) 2006-2009 Novell, Inc.
  * Copyright (c) 2006-2009 Novell, Inc.
- * Copyright (c) 2009-2013 The PWM Project
+ * Copyright (c) 2009-2015 The PWM Project
  *
  *
  * This program is free software; you can redistribute it and/or modify
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * it under the terms of the GNU General Public License as published by

+ 1 - 1
pwm/servlet/src/password/pwm/config/option/TokenStorageMethod.java

@@ -3,7 +3,7 @@
  * http://code.google.com/p/pwm/
  * http://code.google.com/p/pwm/
  *
  *
  * Copyright (c) 2006-2009 Novell, Inc.
  * Copyright (c) 2006-2009 Novell, Inc.
- * Copyright (c) 2009-2013 The PWM Project
+ * Copyright (c) 2009-2015 The PWM Project
  *
  *
  * This program is free software; you can redistribute it and/or modify
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * it under the terms of the GNU General Public License as published by

+ 1 - 1
pwm/servlet/src/password/pwm/config/option/UserEventStorageMethod.java

@@ -3,7 +3,7 @@
  * http://code.google.com/p/pwm/
  * http://code.google.com/p/pwm/
  *
  *
  * Copyright (c) 2006-2009 Novell, Inc.
  * Copyright (c) 2006-2009 Novell, Inc.
- * Copyright (c) 2009-2013 The PWM Project
+ * Copyright (c) 2009-2015 The PWM Project
  *
  *
  * This program is free software; you can redistribute it and/or modify
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * it under the terms of the GNU General Public License as published by

+ 1 - 1
pwm/servlet/src/password/pwm/config/package.html

@@ -3,7 +3,7 @@
   ~ http://code.google.com/p/pwm/
   ~ http://code.google.com/p/pwm/
   ~
   ~
   ~ Copyright (c) 2006-2009 Novell, Inc.
   ~ Copyright (c) 2006-2009 Novell, Inc.
-  ~ Copyright (c) 2009-2012 The PWM Project
+  ~ Copyright (c) 2009-2015 The PWM Project
   ~
   ~
   ~ This program is free software; you can redistribute it and/or modify
   ~ This program is free software; you can redistribute it and/or modify
   ~ it under the terms of the GNU General Public License as published by
   ~ it under the terms of the GNU General Public License as published by

+ 2 - 2
pwm/servlet/src/password/pwm/config/value/AbstractValue.java

@@ -26,7 +26,7 @@ import password.pwm.PwmConstants;
 import password.pwm.config.StoredValue;
 import password.pwm.config.StoredValue;
 import password.pwm.error.PwmUnrecoverableException;
 import password.pwm.error.PwmUnrecoverableException;
 import password.pwm.util.JsonUtil;
 import password.pwm.util.JsonUtil;
-import password.pwm.util.secure.SecureHelper;
+import password.pwm.util.secure.SecureEngine;
 
 
 import java.io.Serializable;
 import java.io.Serializable;
 import java.util.Locale;
 import java.util.Locale;
@@ -59,6 +59,6 @@ public abstract class AbstractValue implements StoredValue {
 
 
     @Override
     @Override
     public String valueHash() throws PwmUnrecoverableException {
     public String valueHash() throws PwmUnrecoverableException {
-        return SecureHelper.hash(JsonUtil.serialize((Serializable)this.toNativeObject()), PwmConstants.SETTING_CHECKSUM_HASH_METHOD);
+        return SecureEngine.hash(JsonUtil.serialize((Serializable) this.toNativeObject()), PwmConstants.SETTING_CHECKSUM_HASH_METHOD);
     }
     }
 }
 }

+ 2 - 1
pwm/servlet/src/password/pwm/config/value/ActionValue.java

@@ -30,6 +30,7 @@ import password.pwm.config.PwmSettingSyntax;
 import password.pwm.config.StoredValue;
 import password.pwm.config.StoredValue;
 import password.pwm.error.PwmOperationalException;
 import password.pwm.error.PwmOperationalException;
 import password.pwm.util.JsonUtil;
 import password.pwm.util.JsonUtil;
+import password.pwm.util.secure.PwmSecurityKey;
 
 
 import java.util.*;
 import java.util.*;
 
 
@@ -64,7 +65,7 @@ public class ActionValue extends AbstractValue implements StoredValue {
 
 
             public ActionValue fromXmlElement(
             public ActionValue fromXmlElement(
                     Element settingElement,
                     Element settingElement,
-                    final String input
+                    final PwmSecurityKey input
             )
             )
                     throws PwmOperationalException
                     throws PwmOperationalException
             {
             {

+ 2 - 1
pwm/servlet/src/password/pwm/config/value/BooleanValue.java

@@ -29,6 +29,7 @@ import password.pwm.config.StoredValue;
 import password.pwm.error.PwmUnrecoverableException;
 import password.pwm.error.PwmUnrecoverableException;
 import password.pwm.i18n.Display;
 import password.pwm.i18n.Display;
 import password.pwm.util.JsonUtil;
 import password.pwm.util.JsonUtil;
+import password.pwm.util.secure.PwmSecurityKey;
 
 
 import java.io.Serializable;
 import java.io.Serializable;
 import java.util.Collections;
 import java.util.Collections;
@@ -50,7 +51,7 @@ public class BooleanValue implements StoredValue {
                 return new BooleanValue(JsonUtil.deserialize(value, Boolean.class));
                 return new BooleanValue(JsonUtil.deserialize(value, Boolean.class));
             }
             }
 
 
-            public BooleanValue fromXmlElement(final Element settingElement, final String input)
+            public BooleanValue fromXmlElement(final Element settingElement, final PwmSecurityKey input)
             {
             {
                 final Element valueElement = settingElement.getChild("value");
                 final Element valueElement = settingElement.getChild("value");
                 final String value = valueElement.getText();
                 final String value = valueElement.getText();

+ 2 - 1
pwm/servlet/src/password/pwm/config/value/ChallengeValue.java

@@ -31,6 +31,7 @@ import password.pwm.cr.ChallengeItemBean;
 import password.pwm.i18n.LocaleHelper;
 import password.pwm.i18n.LocaleHelper;
 import password.pwm.util.JsonUtil;
 import password.pwm.util.JsonUtil;
 import password.pwm.util.logging.PwmLogger;
 import password.pwm.util.logging.PwmLogger;
+import password.pwm.util.secure.PwmSecurityKey;
 
 
 import java.util.*;
 import java.util.*;
 
 
@@ -62,7 +63,7 @@ public class ChallengeValue extends AbstractValue implements StoredValue {
 
 
             public ChallengeValue fromXmlElement(
             public ChallengeValue fromXmlElement(
                     final Element settingElement,
                     final Element settingElement,
-                    final String input
+                    final PwmSecurityKey input
             )
             )
             {
             {
                 final List valueElements = settingElement.getChildren("value");
                 final List valueElements = settingElement.getChildren("value");

+ 2 - 1
pwm/servlet/src/password/pwm/config/value/EmailValue.java

@@ -30,6 +30,7 @@ import password.pwm.config.StoredValue;
 import password.pwm.error.PwmOperationalException;
 import password.pwm.error.PwmOperationalException;
 import password.pwm.i18n.LocaleHelper;
 import password.pwm.i18n.LocaleHelper;
 import password.pwm.util.JsonUtil;
 import password.pwm.util.JsonUtil;
+import password.pwm.util.secure.PwmSecurityKey;
 
 
 import java.util.*;
 import java.util.*;
 
 
@@ -60,7 +61,7 @@ public class EmailValue extends AbstractValue implements StoredValue {
 
 
             public EmailValue fromXmlElement(
             public EmailValue fromXmlElement(
                     Element settingElement,
                     Element settingElement,
-                    final String input
+                    final PwmSecurityKey input
             )
             )
                     throws PwmOperationalException
                     throws PwmOperationalException
             {
             {

+ 6 - 5
pwm/servlet/src/password/pwm/config/value/FileValue.java

@@ -32,7 +32,8 @@ import password.pwm.util.JsonUtil;
 import password.pwm.util.StringUtil;
 import password.pwm.util.StringUtil;
 import password.pwm.util.logging.PwmLogger;
 import password.pwm.util.logging.PwmLogger;
 import password.pwm.util.secure.PwmHashAlgorithm;
 import password.pwm.util.secure.PwmHashAlgorithm;
-import password.pwm.util.secure.SecureHelper;
+import password.pwm.util.secure.PwmSecurityKey;
+import password.pwm.util.secure.SecureEngine;
 
 
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.io.IOException;
@@ -97,13 +98,13 @@ public class FileValue extends AbstractValue implements StoredValue {
         public String md5sum()
         public String md5sum()
                 throws PwmUnrecoverableException
                 throws PwmUnrecoverableException
         {
         {
-            return SecureHelper.md5sum(new ByteArrayInputStream(contents));
+            return SecureEngine.md5sum(new ByteArrayInputStream(contents));
         }
         }
 
 
         public String sha1sum()
         public String sha1sum()
                 throws PwmUnrecoverableException
                 throws PwmUnrecoverableException
         {
         {
-            return SecureHelper.hash(new ByteArrayInputStream(contents), PwmHashAlgorithm.SHA1);
+            return SecureEngine.hash(new ByteArrayInputStream(contents), PwmHashAlgorithm.SHA1);
         }
         }
 
 
         public int size()
         public int size()
@@ -121,7 +122,7 @@ public class FileValue extends AbstractValue implements StoredValue {
     {
     {
         return new StoredValueFactory() {
         return new StoredValueFactory() {
 
 
-            public FileValue fromXmlElement(Element settingElement, final String input)
+            public FileValue fromXmlElement(Element settingElement, final PwmSecurityKey input)
                     throws PwmOperationalException
                     throws PwmOperationalException
             {
             {
                 final List valueElements = settingElement.getChildren("value");
                 final List valueElements = settingElement.getChildren("value");
@@ -250,6 +251,6 @@ public class FileValue extends AbstractValue implements StoredValue {
 
 
     @Override
     @Override
     public String valueHash() throws PwmUnrecoverableException {
     public String valueHash() throws PwmUnrecoverableException {
-        return SecureHelper.hash(JsonUtil.serializeCollection(toInfoMap()), PwmConstants.SETTING_CHECKSUM_HASH_METHOD);
+        return SecureEngine.hash(JsonUtil.serializeCollection(toInfoMap()), PwmConstants.SETTING_CHECKSUM_HASH_METHOD);
     }
     }
 }
 }

+ 2 - 1
pwm/servlet/src/password/pwm/config/value/FormValue.java

@@ -30,6 +30,7 @@ import password.pwm.config.PwmSettingSyntax;
 import password.pwm.config.StoredValue;
 import password.pwm.config.StoredValue;
 import password.pwm.error.PwmOperationalException;
 import password.pwm.error.PwmOperationalException;
 import password.pwm.util.JsonUtil;
 import password.pwm.util.JsonUtil;
+import password.pwm.util.secure.PwmSecurityKey;
 
 
 import java.util.*;
 import java.util.*;
 
 
@@ -60,7 +61,7 @@ public class FormValue extends AbstractValue implements StoredValue {
                 }
                 }
             }
             }
 
 
-            public FormValue fromXmlElement(Element settingElement, final String key)
+            public FormValue fromXmlElement(Element settingElement, final PwmSecurityKey key)
                     throws PwmOperationalException
                     throws PwmOperationalException
             {
             {
                 final boolean oldType = PwmSettingSyntax.LOCALIZED_STRING_ARRAY.toString().equals(
                 final boolean oldType = PwmSettingSyntax.LOCALIZED_STRING_ARRAY.toString().equals(

+ 2 - 1
pwm/servlet/src/password/pwm/config/value/LocalizedStringArrayValue.java

@@ -29,6 +29,7 @@ import password.pwm.config.PwmSetting;
 import password.pwm.config.StoredValue;
 import password.pwm.config.StoredValue;
 import password.pwm.i18n.LocaleHelper;
 import password.pwm.i18n.LocaleHelper;
 import password.pwm.util.JsonUtil;
 import password.pwm.util.JsonUtil;
+import password.pwm.util.secure.PwmSecurityKey;
 
 
 import java.util.*;
 import java.util.*;
 import java.util.regex.Matcher;
 import java.util.regex.Matcher;
@@ -55,7 +56,7 @@ public class LocalizedStringArrayValue extends AbstractValue implements StoredVa
                 }
                 }
             }
             }
 
 
-            public LocalizedStringArrayValue fromXmlElement(final Element settingElement, final String key)
+            public LocalizedStringArrayValue fromXmlElement(final Element settingElement, final PwmSecurityKey key)
             {
             {
                 final List valueElements = settingElement.getChildren("value");
                 final List valueElements = settingElement.getChildren("value");
                 final Map<String, List<String>> values = new TreeMap<>();
                 final Map<String, List<String>> values = new TreeMap<>();

+ 2 - 1
pwm/servlet/src/password/pwm/config/value/LocalizedStringValue.java

@@ -29,6 +29,7 @@ import password.pwm.config.PwmSetting;
 import password.pwm.config.StoredValue;
 import password.pwm.config.StoredValue;
 import password.pwm.i18n.LocaleHelper;
 import password.pwm.i18n.LocaleHelper;
 import password.pwm.util.JsonUtil;
 import password.pwm.util.JsonUtil;
+import password.pwm.util.secure.PwmSecurityKey;
 
 
 import java.util.*;
 import java.util.*;
 import java.util.regex.Matcher;
 import java.util.regex.Matcher;
@@ -55,7 +56,7 @@ public class LocalizedStringValue extends AbstractValue implements StoredValue {
                 }
                 }
             }
             }
 
 
-            public LocalizedStringValue fromXmlElement(Element settingElement, final String key)
+            public LocalizedStringValue fromXmlElement(Element settingElement, final PwmSecurityKey key)
             {
             {
                 final List elements = settingElement.getChildren("value");
                 final List elements = settingElement.getChildren("value");
                 final Map<String, String> values = new TreeMap<>();
                 final Map<String, String> values = new TreeMap<>();

+ 2 - 1
pwm/servlet/src/password/pwm/config/value/NumericValue.java

@@ -26,6 +26,7 @@ import org.jdom2.Element;
 import password.pwm.config.PwmSetting;
 import password.pwm.config.PwmSetting;
 import password.pwm.config.StoredValue;
 import password.pwm.config.StoredValue;
 import password.pwm.util.JsonUtil;
 import password.pwm.util.JsonUtil;
+import password.pwm.util.secure.PwmSecurityKey;
 
 
 import java.util.Collections;
 import java.util.Collections;
 import java.util.List;
 import java.util.List;
@@ -45,7 +46,7 @@ public class NumericValue extends AbstractValue implements StoredValue {
                 return new NumericValue(JsonUtil.deserialize(value, Long.class));
                 return new NumericValue(JsonUtil.deserialize(value, Long.class));
             }
             }
 
 
-            public NumericValue fromXmlElement(final Element settingElement, final String input)
+            public NumericValue fromXmlElement(final Element settingElement, final PwmSecurityKey input)
             {
             {
                 final Element valueElement = settingElement.getChild("value");
                 final Element valueElement = settingElement.getChild("value");
                 final String value = valueElement.getText();
                 final String value = valueElement.getText();

+ 2 - 1
pwm/servlet/src/password/pwm/config/value/OptionListValue.java

@@ -28,6 +28,7 @@ import password.pwm.config.PwmSetting;
 import password.pwm.config.StoredValue;
 import password.pwm.config.StoredValue;
 import password.pwm.error.PwmOperationalException;
 import password.pwm.error.PwmOperationalException;
 import password.pwm.util.JsonUtil;
 import password.pwm.util.JsonUtil;
+import password.pwm.util.secure.PwmSecurityKey;
 
 
 import java.util.*;
 import java.util.*;
 
 
@@ -55,7 +56,7 @@ public class OptionListValue extends AbstractValue  implements StoredValue {
                 }
                 }
             }
             }
 
 
-            public OptionListValue fromXmlElement(Element settingElement, final String key)
+            public OptionListValue fromXmlElement(Element settingElement, final PwmSecurityKey key)
                     throws PwmOperationalException
                     throws PwmOperationalException
             {
             {
                 final List valueElements = settingElement.getChildren("value");
                 final List valueElements = settingElement.getChildren("value");

+ 6 - 16
pwm/servlet/src/password/pwm/config/value/PasswordValue.java

@@ -34,11 +34,9 @@ import password.pwm.util.JsonUtil;
 import password.pwm.util.PasswordData;
 import password.pwm.util.PasswordData;
 import password.pwm.util.secure.PwmBlockAlgorithm;
 import password.pwm.util.secure.PwmBlockAlgorithm;
 import password.pwm.util.secure.PwmSecurityKey;
 import password.pwm.util.secure.PwmSecurityKey;
-import password.pwm.util.secure.SecureHelper;
+import password.pwm.util.secure.SecureEngine;
 
 
 import java.io.Serializable;
 import java.io.Serializable;
-import java.io.UnsupportedEncodingException;
-import java.security.NoSuchAlgorithmException;
 import java.util.Collections;
 import java.util.Collections;
 import java.util.List;
 import java.util.List;
 import java.util.Locale;
 import java.util.Locale;
@@ -74,7 +72,7 @@ public class PasswordValue implements StoredValue {
 
 
             public PasswordValue fromXmlElement(
             public PasswordValue fromXmlElement(
                     final Element settingElement,
                     final Element settingElement,
-                    final String key
+                    final PwmSecurityKey key
             )
             )
                     throws PwmOperationalException, PwmUnrecoverableException
                     throws PwmOperationalException, PwmUnrecoverableException
             {
             {
@@ -97,8 +95,7 @@ public class PasswordValue implements StoredValue {
                     newPasswordValue.requiresStoredUpdate = true;
                     newPasswordValue.requiresStoredUpdate = true;
                 } else {
                 } else {
                     try {
                     try {
-                        final PwmSecurityKey secretKey = new PwmSecurityKey(key);
-                        newPasswordValue.value = new PasswordData(SecureHelper.decryptStringValue(rawValue, secretKey, PwmBlockAlgorithm.CONFIG));
+                        newPasswordValue.value = new PasswordData(SecureEngine.decryptStringValue(rawValue, key, PwmBlockAlgorithm.CONFIG));
                         return newPasswordValue;
                         return newPasswordValue;
                     } catch (Exception e) {
                     } catch (Exception e) {
                         final String errorMsg = "unable to decode encrypted password value for setting: " + e.getMessage();
                         final String errorMsg = "unable to decode encrypted password value for setting: " + e.getMessage();
@@ -133,14 +130,14 @@ public class PasswordValue implements StoredValue {
         return 0;
         return 0;
     }
     }
 
 
-    public List<Element> toXmlValues(final String valueElementName, final String key) {
+    public List<Element> toXmlValues(final String valueElementName, final PwmSecurityKey key) {
         if (value == null) {
         if (value == null) {
             final Element valueElement = new Element(valueElementName);
             final Element valueElement = new Element(valueElementName);
             return Collections.singletonList(valueElement);
             return Collections.singletonList(valueElement);
         }
         }
         final Element valueElement = new Element(valueElementName);
         final Element valueElement = new Element(valueElementName);
         try {
         try {
-            final String encodedValue = encryptValue(key,value.getStringValue());
+            final String encodedValue = SecureEngine.encryptToString(value.getStringValue(), key, PwmBlockAlgorithm.CONFIG);
             valueElement.addContent(encodedValue);
             valueElement.addContent(encodedValue);
         } catch (Exception e) {
         } catch (Exception e) {
             valueElement.addContent("");
             valueElement.addContent("");
@@ -163,13 +160,6 @@ public class PasswordValue implements StoredValue {
         return PwmConstants.LOG_REMOVED_VALUE_REPLACEMENT;
         return PwmConstants.LOG_REMOVED_VALUE_REPLACEMENT;
     }
     }
 
 
-    private static String encryptValue(final String key, final String value)
-            throws PwmUnrecoverableException, UnsupportedEncodingException, NoSuchAlgorithmException
-    {
-        final PwmSecurityKey secretKey = new PwmSecurityKey(key);
-        return SecureHelper.encryptToString(value, secretKey, PwmBlockAlgorithm.CONFIG);
-    }
-
     public boolean requiresStoredUpdate()
     public boolean requiresStoredUpdate()
     {
     {
         return requiresStoredUpdate;
         return requiresStoredUpdate;
@@ -177,6 +167,6 @@ public class PasswordValue implements StoredValue {
 
 
     @Override
     @Override
     public String valueHash() throws PwmUnrecoverableException {
     public String valueHash() throws PwmUnrecoverableException {
-        return value == null ? "" : SecureHelper.hash(JsonUtil.serialize(value.getStringValue()), PwmConstants.SETTING_CHECKSUM_HASH_METHOD);
+        return value == null ? "" : SecureEngine.hash(JsonUtil.serialize(value.getStringValue()), PwmConstants.SETTING_CHECKSUM_HASH_METHOD);
     }
     }
 }
 }

+ 2 - 1
pwm/servlet/src/password/pwm/config/value/StringArrayValue.java

@@ -27,6 +27,7 @@ import org.jdom2.Element;
 import password.pwm.config.PwmSetting;
 import password.pwm.config.PwmSetting;
 import password.pwm.config.StoredValue;
 import password.pwm.config.StoredValue;
 import password.pwm.util.JsonUtil;
 import password.pwm.util.JsonUtil;
+import password.pwm.util.secure.PwmSecurityKey;
 
 
 import java.util.*;
 import java.util.*;
 import java.util.regex.Matcher;
 import java.util.regex.Matcher;
@@ -56,7 +57,7 @@ public class StringArrayValue extends AbstractValue implements StoredValue {
                 }
                 }
             }
             }
 
 
-            public StringArrayValue fromXmlElement(final Element settingElement, final String key)
+            public StringArrayValue fromXmlElement(final Element settingElement, final PwmSecurityKey key)
             {
             {
                 final List valueElements = settingElement.getChildren("value");
                 final List valueElements = settingElement.getChildren("value");
                 final List<String> values = new ArrayList<>();
                 final List<String> values = new ArrayList<>();

+ 2 - 1
pwm/servlet/src/password/pwm/config/value/StringValue.java

@@ -27,6 +27,7 @@ import org.jdom2.Element;
 import password.pwm.config.PwmSetting;
 import password.pwm.config.PwmSetting;
 import password.pwm.config.StoredValue;
 import password.pwm.config.StoredValue;
 import password.pwm.util.JsonUtil;
 import password.pwm.util.JsonUtil;
+import password.pwm.util.secure.PwmSecurityKey;
 
 
 import java.util.Collections;
 import java.util.Collections;
 import java.util.List;
 import java.util.List;
@@ -53,7 +54,7 @@ public class StringValue extends AbstractValue implements StoredValue {
                 return new StringValue(newValue);
                 return new StringValue(newValue);
             }
             }
 
 
-            public StringValue fromXmlElement(final Element settingElement, final String key)
+            public StringValue fromXmlElement(final Element settingElement, final PwmSecurityKey key)
             {
             {
                 final Element valueElement = settingElement.getChild("value");
                 final Element valueElement = settingElement.getChild("value");
                 return new StringValue(valueElement == null ? "" : valueElement.getText());
                 return new StringValue(valueElement == null ? "" : valueElement.getText());

+ 2 - 1
pwm/servlet/src/password/pwm/config/value/UserPermissionValue.java

@@ -32,6 +32,7 @@ import password.pwm.config.UserPermission;
 import password.pwm.error.PwmOperationalException;
 import password.pwm.error.PwmOperationalException;
 import password.pwm.i18n.Display;
 import password.pwm.i18n.Display;
 import password.pwm.util.JsonUtil;
 import password.pwm.util.JsonUtil;
+import password.pwm.util.secure.PwmSecurityKey;
 
 
 import java.util.ArrayList;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Collections;
@@ -65,7 +66,7 @@ public class UserPermissionValue extends AbstractValue implements StoredValue {
                 }
                 }
             }
             }
 
 
-            public UserPermissionValue fromXmlElement(Element settingElement, final String key)
+            public UserPermissionValue fromXmlElement(Element settingElement, final PwmSecurityKey key)
                     throws PwmOperationalException
                     throws PwmOperationalException
             {
             {
                 final boolean newType = "2".equals(
                 final boolean newType = "2".equals(

+ 3 - 2
pwm/servlet/src/password/pwm/config/value/ValueFactory.java

@@ -3,7 +3,7 @@
  * http://code.google.com/p/pwm/
  * http://code.google.com/p/pwm/
  *
  *
  * Copyright (c) 2006-2009 Novell, Inc.
  * Copyright (c) 2006-2009 Novell, Inc.
- * Copyright (c) 2009-2014 The PWM Project
+ * Copyright (c) 2009-2015 The PWM Project
  *
  *
  * This program is free software; you can redistribute it and/or modify
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * it under the terms of the GNU General Public License as published by
@@ -30,6 +30,7 @@ import password.pwm.error.PwmError;
 import password.pwm.error.PwmOperationalException;
 import password.pwm.error.PwmOperationalException;
 import password.pwm.error.PwmUnrecoverableException;
 import password.pwm.error.PwmUnrecoverableException;
 import password.pwm.util.logging.PwmLogger;
 import password.pwm.util.logging.PwmLogger;
+import password.pwm.util.secure.PwmSecurityKey;
 
 
 public class ValueFactory {
 public class ValueFactory {
 
 
@@ -52,7 +53,7 @@ public class ValueFactory {
         }
         }
     }
     }
 
 
-    public static StoredValue fromXmlValues(final PwmSetting setting, final Element settingElement, final String key)
+    public static StoredValue fromXmlValues(final PwmSetting setting, final Element settingElement, final PwmSecurityKey key)
             throws PwmUnrecoverableException, PwmOperationalException
             throws PwmUnrecoverableException, PwmOperationalException
     {
     {
         try {
         try {

+ 24 - 1
pwm/servlet/src/password/pwm/config/value/VerificationMethodValue.java

@@ -1,3 +1,25 @@
+/*
+ * Password Management Servlets (PWM)
+ * http://code.google.com/p/pwm/
+ *
+ * Copyright (c) 2006-2009 Novell, Inc.
+ * Copyright (c) 2009-2015 The PWM Project
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
 package password.pwm.config.value;
 package password.pwm.config.value;
 
 
 import org.jdom2.CDATA;
 import org.jdom2.CDATA;
@@ -8,6 +30,7 @@ import password.pwm.config.option.RecoveryVerificationMethods;
 import password.pwm.error.PwmOperationalException;
 import password.pwm.error.PwmOperationalException;
 import password.pwm.util.JsonUtil;
 import password.pwm.util.JsonUtil;
 import password.pwm.util.logging.PwmLogger;
 import password.pwm.util.logging.PwmLogger;
+import password.pwm.util.secure.PwmSecurityKey;
 
 
 import java.io.Serializable;
 import java.io.Serializable;
 import java.util.*;
 import java.util.*;
@@ -83,7 +106,7 @@ public class VerificationMethodValue extends AbstractValue implements StoredValu
                 }
                 }
             }
             }
 
 
-            public VerificationMethodValue fromXmlElement(Element settingElement, final String key)
+            public VerificationMethodValue fromXmlElement(Element settingElement, final PwmSecurityKey key)
                     throws PwmOperationalException
                     throws PwmOperationalException
             {
             {
                 final Element valueElement = settingElement.getChild("value");
                 final Element valueElement = settingElement.getChild("value");

+ 8 - 7
pwm/servlet/src/password/pwm/config/value/X509CertificateValue.java

@@ -31,7 +31,8 @@ import password.pwm.util.StringUtil;
 import password.pwm.util.X509Utils;
 import password.pwm.util.X509Utils;
 import password.pwm.util.logging.PwmLogger;
 import password.pwm.util.logging.PwmLogger;
 import password.pwm.util.secure.PwmHashAlgorithm;
 import password.pwm.util.secure.PwmHashAlgorithm;
-import password.pwm.util.secure.SecureHelper;
+import password.pwm.util.secure.PwmSecurityKey;
+import password.pwm.util.secure.SecureEngine;
 
 
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayInputStream;
 import java.io.Serializable;
 import java.io.Serializable;
@@ -46,7 +47,7 @@ public class X509CertificateValue extends AbstractValue implements StoredValue {
 
 
     public static StoredValueFactory factory() {
     public static StoredValueFactory factory() {
         return new StoredValueFactory() {
         return new StoredValueFactory() {
-            public X509CertificateValue fromXmlElement(final Element settingElement, final String key) {
+            public X509CertificateValue fromXmlElement(final Element settingElement, final PwmSecurityKey key) {
                 final List<X509Certificate> certificates = new ArrayList<>();
                 final List<X509Certificate> certificates = new ArrayList<>();
                 final List<Element> valueElements = settingElement.getChildren("value");
                 final List<Element> valueElements = settingElement.getChildren("value");
                 for (final Element loopValueElement : valueElements) {
                 for (final Element loopValueElement : valueElements) {
@@ -124,9 +125,9 @@ public class X509CertificateValue extends AbstractValue implements StoredValue {
                 sb.append(" IssueDate: ").append(PwmConstants.DEFAULT_DATETIME_FORMAT.format(cert.getNotBefore())).append("\n");
                 sb.append(" IssueDate: ").append(PwmConstants.DEFAULT_DATETIME_FORMAT.format(cert.getNotBefore())).append("\n");
                 sb.append(" ExpireDate: ").append(PwmConstants.DEFAULT_DATETIME_FORMAT.format(cert.getNotAfter())).append("\n");
                 sb.append(" ExpireDate: ").append(PwmConstants.DEFAULT_DATETIME_FORMAT.format(cert.getNotAfter())).append("\n");
                 try {
                 try {
-                    sb.append(" MD5 Hash: ").append(SecureHelper.hash(new ByteArrayInputStream(cert.getEncoded()),
+                    sb.append(" MD5 Hash: ").append(SecureEngine.hash(new ByteArrayInputStream(cert.getEncoded()),
                             PwmHashAlgorithm.MD5)).append("\n");
                             PwmHashAlgorithm.MD5)).append("\n");
-                    sb.append(" SHA1 Hash: ").append(SecureHelper.hash(new ByteArrayInputStream(cert.getEncoded()),
+                    sb.append(" SHA1 Hash: ").append(SecureEngine.hash(new ByteArrayInputStream(cert.getEncoded()),
                             PwmHashAlgorithm.SHA1)).append("\n");
                             PwmHashAlgorithm.SHA1)).append("\n");
                 } catch (PwmUnrecoverableException | CertificateEncodingException e) {
                 } catch (PwmUnrecoverableException | CertificateEncodingException e) {
                     LOGGER.warn("error generating hash for certificate: " + e.getMessage());
                     LOGGER.warn("error generating hash for certificate: " + e.getMessage());
@@ -160,11 +161,11 @@ public class X509CertificateValue extends AbstractValue implements StoredValue {
         map.put("issueDate",cert.getNotBefore());
         map.put("issueDate",cert.getNotBefore());
         map.put("expireDate",cert.getNotAfter());
         map.put("expireDate",cert.getNotAfter());
         try {
         try {
-            map.put("md5Hash", SecureHelper.hash(new ByteArrayInputStream(cert.getEncoded()),
+            map.put("md5Hash", SecureEngine.hash(new ByteArrayInputStream(cert.getEncoded()),
                     PwmHashAlgorithm.MD5));
                     PwmHashAlgorithm.MD5));
-            map.put("sha1Hash", SecureHelper.hash(new ByteArrayInputStream(cert.getEncoded()),
+            map.put("sha1Hash", SecureEngine.hash(new ByteArrayInputStream(cert.getEncoded()),
                     PwmHashAlgorithm.SHA1));
                     PwmHashAlgorithm.SHA1));
-            map.put("sha512Hash", SecureHelper.hash(new ByteArrayInputStream(cert.getEncoded()),
+            map.put("sha512Hash", SecureEngine.hash(new ByteArrayInputStream(cert.getEncoded()),
                     PwmHashAlgorithm.SHA512));
                     PwmHashAlgorithm.SHA512));
             if (includeDetail) {
             if (includeDetail) {
                 map.put("detail",X509Utils.makeDetailText(cert));
                 map.put("detail",X509Utils.makeDetailText(cert));

+ 1 - 1
pwm/servlet/src/password/pwm/cr/ChallengeSetBean.java

@@ -3,7 +3,7 @@
  * http://code.google.com/p/pwm/
  * http://code.google.com/p/pwm/
  *
  *
  * Copyright (c) 2006-2009 Novell, Inc.
  * Copyright (c) 2006-2009 Novell, Inc.
- * Copyright (c) 2009-2014 The PWM Project
+ * Copyright (c) 2009-2015 The PWM Project
  *
  *
  * This program is free software; you can redistribute it and/or modify
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * it under the terms of the GNU General Public License as published by

+ 1 - 1
pwm/servlet/src/password/pwm/cr/ResponseItemBean.java

@@ -3,7 +3,7 @@
  * http://code.google.com/p/pwm/
  * http://code.google.com/p/pwm/
  *
  *
  * Copyright (c) 2006-2009 Novell, Inc.
  * Copyright (c) 2006-2009 Novell, Inc.
- * Copyright (c) 2009-2014 The PWM Project
+ * Copyright (c) 2009-2015 The PWM Project
  *
  *
  * This program is free software; you can redistribute it and/or modify
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * it under the terms of the GNU General Public License as published by

+ 1 - 1
pwm/servlet/src/password/pwm/cr/ResponseSetBean.java

@@ -3,7 +3,7 @@
  * http://code.google.com/p/pwm/
  * http://code.google.com/p/pwm/
  *
  *
  * Copyright (c) 2006-2009 Novell, Inc.
  * Copyright (c) 2006-2009 Novell, Inc.
- * Copyright (c) 2009-2014 The PWM Project
+ * Copyright (c) 2009-2015 The PWM Project
  *
  *
  * This program is free software; you can redistribute it and/or modify
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * it under the terms of the GNU General Public License as published by

+ 1 - 1
pwm/servlet/src/password/pwm/error/ErrorInformation.java

@@ -3,7 +3,7 @@
  * http://code.google.com/p/pwm/
  * http://code.google.com/p/pwm/
  *
  *
  * Copyright (c) 2006-2009 Novell, Inc.
  * Copyright (c) 2006-2009 Novell, Inc.
- * Copyright (c) 2009-2014 The PWM Project
+ * Copyright (c) 2009-2015 The PWM Project
  *
  *
  * This program is free software; you can redistribute it and/or modify
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * it under the terms of the GNU General Public License as published by

+ 1 - 1
pwm/servlet/src/password/pwm/error/PwmDataStoreException.java

@@ -3,7 +3,7 @@
  * http://code.google.com/p/pwm/
  * http://code.google.com/p/pwm/
  *
  *
  * Copyright (c) 2006-2009 Novell, Inc.
  * Copyright (c) 2006-2009 Novell, Inc.
- * Copyright (c) 2009-2013 The PWM Project
+ * Copyright (c) 2009-2015 The PWM Project
  *
  *
  * This program is free software; you can redistribute it and/or modify
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * it under the terms of the GNU General Public License as published by

+ 1 - 1
pwm/servlet/src/password/pwm/error/PwmDataValidationException.java

@@ -3,7 +3,7 @@
  * http://code.google.com/p/pwm/
  * http://code.google.com/p/pwm/
  *
  *
  * Copyright (c) 2006-2009 Novell, Inc.
  * Copyright (c) 2006-2009 Novell, Inc.
- * Copyright (c) 2009-2012 The PWM Project
+ * Copyright (c) 2009-2015 The PWM Project
  *
  *
  * This program is free software; you can redistribute it and/or modify
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * it under the terms of the GNU General Public License as published by

+ 1 - 1
pwm/servlet/src/password/pwm/error/PwmException.java

@@ -3,7 +3,7 @@
  * http://code.google.com/p/pwm/
  * http://code.google.com/p/pwm/
  *
  *
  * Copyright (c) 2006-2009 Novell, Inc.
  * Copyright (c) 2006-2009 Novell, Inc.
- * Copyright (c) 2009-2014 The PWM Project
+ * Copyright (c) 2009-2015 The PWM Project
  *
  *
  * This program is free software; you can redistribute it and/or modify
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * it under the terms of the GNU General Public License as published by

+ 1 - 1
pwm/servlet/src/password/pwm/error/PwmOperationalException.java

@@ -3,7 +3,7 @@
  * http://code.google.com/p/pwm/
  * http://code.google.com/p/pwm/
  *
  *
  * Copyright (c) 2006-2009 Novell, Inc.
  * Copyright (c) 2006-2009 Novell, Inc.
- * Copyright (c) 2009-2014 The PWM Project
+ * Copyright (c) 2009-2015 The PWM Project
  *
  *
  * This program is free software; you can redistribute it and/or modify
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * it under the terms of the GNU General Public License as published by

+ 1 - 1
pwm/servlet/src/password/pwm/error/PwmPasswordValidationException.java

@@ -3,7 +3,7 @@
  * http://code.google.com/p/pwm/
  * http://code.google.com/p/pwm/
  *
  *
  * Copyright (c) 2006-2009 Novell, Inc.
  * Copyright (c) 2006-2009 Novell, Inc.
- * Copyright (c) 2009-2012 The PWM Project
+ * Copyright (c) 2009-2015 The PWM Project
  *
  *
  * This program is free software; you can redistribute it and/or modify
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * it under the terms of the GNU General Public License as published by

+ 1 - 1
pwm/servlet/src/password/pwm/error/PwmUnrecoverableException.java

@@ -3,7 +3,7 @@
  * http://code.google.com/p/pwm/
  * http://code.google.com/p/pwm/
  *
  *
  * Copyright (c) 2006-2009 Novell, Inc.
  * Copyright (c) 2006-2009 Novell, Inc.
- * Copyright (c) 2009-2014 The PWM Project
+ * Copyright (c) 2009-2015 The PWM Project
  *
  *
  * This program is free software; you can redistribute it and/or modify
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * it under the terms of the GNU General Public License as published by

+ 1 - 1
pwm/servlet/src/password/pwm/event/AuditVault.java

@@ -3,7 +3,7 @@
  * http://code.google.com/p/pwm/
  * http://code.google.com/p/pwm/
  *
  *
  * Copyright (c) 2006-2009 Novell, Inc.
  * Copyright (c) 2006-2009 Novell, Inc.
- * Copyright (c) 2009-2013 The PWM Project
+ * Copyright (c) 2009-2015 The PWM Project
  *
  *
  * This program is free software; you can redistribute it and/or modify
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * it under the terms of the GNU General Public License as published by

+ 1 - 1
pwm/servlet/src/password/pwm/event/SystemAuditRecord.java

@@ -3,7 +3,7 @@
  * http://code.google.com/p/pwm/
  * http://code.google.com/p/pwm/
  *
  *
  * Copyright (c) 2006-2009 Novell, Inc.
  * Copyright (c) 2006-2009 Novell, Inc.
- * Copyright (c) 2009-2014 The PWM Project
+ * Copyright (c) 2009-2015 The PWM Project
  *
  *
  * This program is free software; you can redistribute it and/or modify
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * it under the terms of the GNU General Public License as published by

+ 1 - 1
pwm/servlet/src/password/pwm/event/UserHistoryStore.java

@@ -3,7 +3,7 @@
  * http://code.google.com/p/pwm/
  * http://code.google.com/p/pwm/
  *
  *
  * Copyright (c) 2006-2009 Novell, Inc.
  * Copyright (c) 2006-2009 Novell, Inc.
- * Copyright (c) 2009-2013 The PWM Project
+ * Copyright (c) 2009-2015 The PWM Project
  *
  *
  * This program is free software; you can redistribute it and/or modify
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * it under the terms of the GNU General Public License as published by

+ 1 - 1
pwm/servlet/src/password/pwm/health/DatabaseStatusChecker.java

@@ -3,7 +3,7 @@
  * http://code.google.com/p/pwm/
  * http://code.google.com/p/pwm/
  *
  *
  * Copyright (c) 2006-2009 Novell, Inc.
  * Copyright (c) 2006-2009 Novell, Inc.
- * Copyright (c) 2009-2014 The PWM Project
+ * Copyright (c) 2009-2015 The PWM Project
  *
  *
  * This program is free software; you can redistribute it and/or modify
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * it under the terms of the GNU General Public License as published by

+ 1 - 1
pwm/servlet/src/password/pwm/health/HealthChecker.java

@@ -3,7 +3,7 @@
  * http://code.google.com/p/pwm/
  * http://code.google.com/p/pwm/
  *
  *
  * Copyright (c) 2006-2009 Novell, Inc.
  * Copyright (c) 2006-2009 Novell, Inc.
- * Copyright (c) 2009-2012 The PWM Project
+ * Copyright (c) 2009-2015 The PWM Project
  *
  *
  * This program is free software; you can redistribute it and/or modify
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * it under the terms of the GNU General Public License as published by

+ 1 - 1
pwm/servlet/src/password/pwm/health/HealthMessage.java

@@ -3,7 +3,7 @@
  * http://code.google.com/p/pwm/
  * http://code.google.com/p/pwm/
  *
  *
  * Copyright (c) 2006-2009 Novell, Inc.
  * Copyright (c) 2006-2009 Novell, Inc.
- * Copyright (c) 2009-2014 The PWM Project
+ * Copyright (c) 2009-2015 The PWM Project
  *
  *
  * This program is free software; you can redistribute it and/or modify
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * it under the terms of the GNU General Public License as published by

+ 1 - 1
pwm/servlet/src/password/pwm/health/HealthMonitor.java

@@ -3,7 +3,7 @@
  * http://code.google.com/p/pwm/
  * http://code.google.com/p/pwm/
  *
  *
  * Copyright (c) 2006-2009 Novell, Inc.
  * Copyright (c) 2006-2009 Novell, Inc.
- * Copyright (c) 2009-2014 The PWM Project
+ * Copyright (c) 2009-2015 The PWM Project
  *
  *
  * This program is free software; you can redistribute it and/or modify
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * it under the terms of the GNU General Public License as published by

+ 1 - 1
pwm/servlet/src/password/pwm/health/HealthRecord.java

@@ -3,7 +3,7 @@
  * http://code.google.com/p/pwm/
  * http://code.google.com/p/pwm/
  *
  *
  * Copyright (c) 2006-2009 Novell, Inc.
  * Copyright (c) 2006-2009 Novell, Inc.
- * Copyright (c) 2009-2014 The PWM Project
+ * Copyright (c) 2009-2015 The PWM Project
  *
  *
  * This program is free software; you can redistribute it and/or modify
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * it under the terms of the GNU General Public License as published by

+ 1 - 1
pwm/servlet/src/password/pwm/health/HealthStatus.java

@@ -3,7 +3,7 @@
  * http://code.google.com/p/pwm/
  * http://code.google.com/p/pwm/
  *
  *
  * Copyright (c) 2006-2009 Novell, Inc.
  * Copyright (c) 2006-2009 Novell, Inc.
- * Copyright (c) 2009-2012 The PWM Project
+ * Copyright (c) 2009-2015 The PWM Project
  *
  *
  * This program is free software; you can redistribute it and/or modify
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * it under the terms of the GNU General Public License as published by

+ 1 - 1
pwm/servlet/src/password/pwm/health/HealthTopic.java

@@ -3,7 +3,7 @@
  * http://code.google.com/p/pwm/
  * http://code.google.com/p/pwm/
  *
  *
  * Copyright (c) 2006-2009 Novell, Inc.
  * Copyright (c) 2006-2009 Novell, Inc.
- * Copyright (c) 2009-2014 The PWM Project
+ * Copyright (c) 2009-2015 The PWM Project
  *
  *
  * This program is free software; you can redistribute it and/or modify
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * it under the terms of the GNU General Public License as published by

+ 1 - 1
pwm/servlet/src/password/pwm/health/JavaChecker.java

@@ -3,7 +3,7 @@
  * http://code.google.com/p/pwm/
  * http://code.google.com/p/pwm/
  *
  *
  * Copyright (c) 2006-2009 Novell, Inc.
  * Copyright (c) 2006-2009 Novell, Inc.
- * Copyright (c) 2009-2014 The PWM Project
+ * Copyright (c) 2009-2015 The PWM Project
  *
  *
  * This program is free software; you can redistribute it and/or modify
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * it under the terms of the GNU General Public License as published by

+ 1 - 1
pwm/servlet/src/password/pwm/health/LocalDBHealthChecker.java

@@ -3,7 +3,7 @@
  * http://code.google.com/p/pwm/
  * http://code.google.com/p/pwm/
  *
  *
  * Copyright (c) 2006-2009 Novell, Inc.
  * Copyright (c) 2006-2009 Novell, Inc.
- * Copyright (c) 2009-2014 The PWM Project
+ * Copyright (c) 2009-2015 The PWM Project
  *
  *
  * This program is free software; you can redistribute it and/or modify
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * it under the terms of the GNU General Public License as published by

+ 22 - 0
pwm/servlet/src/password/pwm/http/HttpMethod.java

@@ -1,3 +1,25 @@
+/*
+ * Password Management Servlets (PWM)
+ * http://code.google.com/p/pwm/
+ *
+ * Copyright (c) 2006-2009 Novell, Inc.
+ * Copyright (c) 2009-2015 The PWM Project
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
 package password.pwm.http;
 package password.pwm.http;
 
 
 public enum HttpMethod {
 public enum HttpMethod {

+ 31 - 30
pwm/servlet/src/password/pwm/http/PwmHttpRequestWrapper.java

@@ -22,10 +22,13 @@
 
 
 package password.pwm.http;
 package password.pwm.http;
 
 
+import org.apache.commons.io.IOUtils;
 import password.pwm.AppProperty;
 import password.pwm.AppProperty;
 import password.pwm.PwmConstants;
 import password.pwm.PwmConstants;
 import password.pwm.Validator;
 import password.pwm.Validator;
 import password.pwm.config.Configuration;
 import password.pwm.config.Configuration;
+import password.pwm.error.ErrorInformation;
+import password.pwm.error.PwmError;
 import password.pwm.error.PwmUnrecoverableException;
 import password.pwm.error.PwmUnrecoverableException;
 import password.pwm.util.JsonUtil;
 import password.pwm.util.JsonUtil;
 import password.pwm.util.PasswordData;
 import password.pwm.util.PasswordData;
@@ -34,11 +37,7 @@ import password.pwm.util.logging.PwmLogger;
 
 
 import javax.servlet.http.Cookie;
 import javax.servlet.http.Cookie;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletRequest;
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.io.UnsupportedEncodingException;
-import java.nio.charset.Charset;
+import java.io.*;
 import java.util.*;
 import java.util.*;
 
 
 public abstract class PwmHttpRequestWrapper {
 public abstract class PwmHttpRequestWrapper {
@@ -71,36 +70,38 @@ public abstract class PwmHttpRequestWrapper {
         return readRequestBodyAsString(maxChars);
         return readRequestBodyAsString(maxChars);
     }
     }
 
 
-    public String readRequestBodyAsString(final int maxChars) 
-            throws IOException 
+    public String readRequestBodyAsString(final int maxChars)
+            throws IOException, PwmUnrecoverableException
     {
     {
-        final int BUFFER_SIZE = 1024;
-        final StringBuilder inputData = new StringBuilder();
+        final StringWriter stringWriter = new StringWriter();
+        final Reader readerStream = new InputStreamReader(
+                getHttpServletRequest().getInputStream(),
+                PwmConstants.DEFAULT_CHARSET
+        );
+
         try {
         try {
-            final BufferedReader reader = new BufferedReader(
-                    new InputStreamReader(
-                            this.getHttpServletRequest().getInputStream(), 
-                            Charset.forName("UTF8")
-                    )
-            );
-            final char[] charBuffer = new char[BUFFER_SIZE];
-            int bytesRead;
-            while ((bytesRead = reader.read(charBuffer)) > 0 && inputData.length() < maxChars) {
-                inputData.append(charBuffer, 0, bytesRead);
-            }
+            IOUtils.copy(readerStream, stringWriter);
         } catch (Exception e) {
         } catch (Exception e) {
-            LOGGER.error("error reading request body stream: " + e.getMessage());
+            final String errorMsg = "error reading request body stream: " + e.getMessage();
+            throw new PwmUnrecoverableException(new ErrorInformation(PwmError.ERROR_UNKNOWN,errorMsg));
+        } finally {
+            IOUtils.closeQuietly(readerStream);
+        }
+
+        final String stringValue = stringWriter.toString();
+        if (stringValue.length() > maxChars) {
+            throw new PwmUnrecoverableException(new ErrorInformation(PwmError.ERROR_UNKNOWN,"input request body is to big, size=" + stringValue.length() + ", max=" + maxChars));
         }
         }
-        return inputData.toString();
+        return stringValue;
     }
     }
 
 
     public Map<String, String> readBodyAsJsonStringMap()
     public Map<String, String> readBodyAsJsonStringMap()
             throws IOException, PwmUnrecoverableException {
             throws IOException, PwmUnrecoverableException {
         return readBodyAsJsonStringMap(false);
         return readBodyAsJsonStringMap(false);
     }
     }
-    
+
     public Map<String, String> readBodyAsJsonStringMap(boolean bypassInputValidation)
     public Map<String, String> readBodyAsJsonStringMap(boolean bypassInputValidation)
-            throws IOException, PwmUnrecoverableException 
+            throws IOException, PwmUnrecoverableException
     {
     {
         final String bodyString = readRequestBodyAsString();
         final String bodyString = readRequestBodyAsString();
         final Map<String, String> inputMap = JsonUtil.deserializeStringMap(bodyString);
         final Map<String, String> inputMap = JsonUtil.deserializeStringMap(bodyString);
@@ -115,12 +116,12 @@ public abstract class PwmHttpRequestWrapper {
                 if (key != null) {
                 if (key != null) {
                     final boolean passwordType = key.toLowerCase().contains("password");
                     final boolean passwordType = key.toLowerCase().contains("password");
                     String value;
                     String value;
-                    value = bypassInputValidation 
+                    value = bypassInputValidation
                             ? inputMap.get(key)
                             ? inputMap.get(key)
                             : Validator.sanitizeInputValue(configuration, inputMap.get(key), maxLength);
                             : Validator.sanitizeInputValue(configuration, inputMap.get(key), maxLength);
                     value = passwordType && passwordTrim ? value.trim() : value;
                     value = passwordType && passwordTrim ? value.trim() : value;
                     value = !passwordType && trim ? value.trim() : value;
                     value = !passwordType && trim ? value.trim() : value;
-                    
+
                     final String sanitizedName = Validator.sanitizeInputValue(configuration, key, maxLength);
                     final String sanitizedName = Validator.sanitizeInputValue(configuration, key, maxLength);
                     outputMap.put(sanitizedName, value);
                     outputMap.put(sanitizedName, value);
                 }
                 }
@@ -167,11 +168,11 @@ public abstract class PwmHttpRequestWrapper {
     }
     }
 
 
     public PasswordData readParameterAsPassword(final String name)
     public PasswordData readParameterAsPassword(final String name)
-            throws PwmUnrecoverableException 
+            throws PwmUnrecoverableException
     {
     {
         final int maxLength = Integer.parseInt(configuration.readAppProperty(AppProperty.HTTP_PARAM_MAX_READ_LENGTH));
         final int maxLength = Integer.parseInt(configuration.readAppProperty(AppProperty.HTTP_PARAM_MAX_READ_LENGTH));
         final boolean trim = Boolean.parseBoolean(configuration.readAppProperty(AppProperty.SECURITY_INPUT_PASSWORD_TRIM));
         final boolean trim = Boolean.parseBoolean(configuration.readAppProperty(AppProperty.SECURITY_INPUT_PASSWORD_TRIM));
-        
+
         final String rawValue = httpServletRequest.getParameter(name);
         final String rawValue = httpServletRequest.getParameter(name);
         if (rawValue != null && !rawValue.isEmpty()) {
         if (rawValue != null && !rawValue.isEmpty()) {
             final String decodedValue = decodeStringToDefaultCharSet(rawValue);
             final String decodedValue = decodeStringToDefaultCharSet(rawValue);
@@ -231,8 +232,8 @@ public abstract class PwmHttpRequestWrapper {
     public List<String> readParameterAsStrings(
     public List<String> readParameterAsStrings(
             final String name,
             final String name,
             final int maxLength
             final int maxLength
-    ) 
-            throws PwmUnrecoverableException 
+    )
+            throws PwmUnrecoverableException
     {
     {
         final HttpServletRequest req = this.getHttpServletRequest();
         final HttpServletRequest req = this.getHttpServletRequest();
         final boolean trim = Boolean.parseBoolean(configuration.readAppProperty(AppProperty.SECURITY_INPUT_TRIM));
         final boolean trim = Boolean.parseBoolean(configuration.readAppProperty(AppProperty.SECURITY_INPUT_TRIM));

+ 3 - 1
pwm/servlet/src/password/pwm/http/PwmHttpResponseWrapper.java

@@ -99,7 +99,9 @@ public class PwmHttpResponseWrapper {
 
 
     public void writeCookie(final String cookieName, final String cookieValue, final int seconds, final boolean httpOnly, final String path) {
     public void writeCookie(final String cookieName, final String cookieValue, final int seconds, final boolean httpOnly, final String path) {
         final Cookie theCookie = new Cookie(cookieName, StringUtil.urlEncode(cookieValue));
         final Cookie theCookie = new Cookie(cookieName, StringUtil.urlEncode(cookieValue));
-        theCookie.setMaxAge(seconds);
+        if (seconds > 0) {
+            theCookie.setMaxAge(seconds);
+        }
         theCookie.setHttpOnly(httpOnly);
         theCookie.setHttpOnly(httpOnly);
         if (path != null) {
         if (path != null) {
             theCookie.setPath(path);
             theCookie.setPath(path);

+ 23 - 9
pwm/servlet/src/password/pwm/http/PwmRequest.java

@@ -25,6 +25,7 @@ package password.pwm.http;
 import org.apache.commons.fileupload.FileItemIterator;
 import org.apache.commons.fileupload.FileItemIterator;
 import org.apache.commons.fileupload.FileItemStream;
 import org.apache.commons.fileupload.FileItemStream;
 import org.apache.commons.fileupload.servlet.ServletFileUpload;
 import org.apache.commons.fileupload.servlet.ServletFileUpload;
+import password.pwm.AppProperty;
 import password.pwm.PwmApplication;
 import password.pwm.PwmApplication;
 import password.pwm.PwmConstants;
 import password.pwm.PwmConstants;
 import password.pwm.Validator;
 import password.pwm.Validator;
@@ -38,8 +39,8 @@ import password.pwm.config.PwmSetting;
 import password.pwm.error.ErrorInformation;
 import password.pwm.error.ErrorInformation;
 import password.pwm.error.PwmError;
 import password.pwm.error.PwmError;
 import password.pwm.error.PwmUnrecoverableException;
 import password.pwm.error.PwmUnrecoverableException;
+import password.pwm.http.servlet.PwmServletDefinition;
 import password.pwm.i18n.Message;
 import password.pwm.i18n.Message;
-import password.pwm.util.Helper;
 import password.pwm.util.JsonUtil;
 import password.pwm.util.JsonUtil;
 import password.pwm.util.ServletHelper;
 import password.pwm.util.ServletHelper;
 import password.pwm.util.logging.PwmLogger;
 import password.pwm.util.logging.PwmLogger;
@@ -100,6 +101,7 @@ public class PwmRequest extends PwmHttpRequestWrapper implements Serializable {
             final PwmApplication pwmApplication = ContextManager.getPwmApplication(request);
             final PwmApplication pwmApplication = ContextManager.getPwmApplication(request);
             pwmRequest = new PwmRequest(request, response, pwmApplication, pwmSession);
             pwmRequest = new PwmRequest(request, response, pwmApplication, pwmSession);
             request.setAttribute(PwmConstants.REQUEST_ATTR.PwmRequest.toString(), pwmRequest);
             request.setAttribute(PwmConstants.REQUEST_ATTR.PwmRequest.toString(), pwmRequest);
+            checkRequestInstanceNonce(pwmRequest);
         }
         }
         return pwmRequest;
         return pwmRequest;
     }
     }
@@ -146,7 +148,6 @@ public class PwmRequest extends PwmHttpRequestWrapper implements Serializable {
         return pwmApplication.getConfig();
         return pwmApplication.getConfig();
     }
     }
 
 
-
     public void forwardToJsp(final PwmConstants.JSP_URL jspURL)
     public void forwardToJsp(final PwmConstants.JSP_URL jspURL)
             throws ServletException, IOException, PwmUnrecoverableException
             throws ServletException, IOException, PwmUnrecoverableException
     {
     {
@@ -203,13 +204,17 @@ public class PwmRequest extends PwmHttpRequestWrapper implements Serializable {
         getPwmResponse().sendRedirect(redirectURL);
         getPwmResponse().sendRedirect(redirectURL);
     }
     }
 
 
-    public void sendRedirectToContinue()
+    public void sendRedirect(final PwmServletDefinition pwmServletDefinition)
             throws PwmUnrecoverableException, IOException
             throws PwmUnrecoverableException, IOException
     {
     {
-        final String redirectURL = PwmConstants.URL_SERVLET_COMMAND + "?" + PwmConstants.PARAM_ACTION_REQUEST + "=continue&pwmFormID="
-                
-                + Helper.buildPwmFormID(pwmSession.getSessionStateBean());
+        getPwmResponse().sendRedirect(this.getContextPath() + pwmServletDefinition.servletUrl());
+    }
 
 
+    public void sendRedirectToContinue()
+            throws PwmUnrecoverableException, IOException
+    {
+        String redirectURL = this.getContextPath() + PwmServletDefinition.PeopleSearch.servletUrl();
+        redirectURL = ServletHelper.appendAndEncodeUrlParameters(redirectURL,Collections.singletonMap(PwmConstants.PARAM_ACTION_REQUEST,"continue"));
         sendRedirect(redirectURL);
         sendRedirect(redirectURL);
     }
     }
 
 
@@ -449,12 +454,12 @@ public class PwmRequest extends PwmHttpRequestWrapper implements Serializable {
                     if (strip) {
                     if (strip) {
                         sb.append(PwmConstants.LOG_REMOVED_VALUE_REPLACEMENT);
                         sb.append(PwmConstants.LOG_REMOVED_VALUE_REPLACEMENT);
                     } else {
                     } else {
-                        sb.append('\'');
+                        sb.append("'");
                         sb.append(paramValue);
                         sb.append(paramValue);
-                        sb.append('\'');
+                        sb.append("'");
                     }
                     }
 
 
-                    sb.append('\n');
+                    sb.append("\n");
                 }
                 }
             }
             }
 
 
@@ -591,4 +596,13 @@ public class PwmRequest extends PwmHttpRequestWrapper implements Serializable {
         final HttpServletRequest req = this.getHttpServletRequest();
         final HttpServletRequest req = this.getHttpServletRequest();
         return ServletHelper.appendAndEncodeUrlParameters(req.getRequestURI(), readParametersAsMap());
         return ServletHelper.appendAndEncodeUrlParameters(req.getRequestURI(), readParametersAsMap());
     }
     }
+
+    private static void checkRequestInstanceNonce(final PwmRequest pwmRequest) {
+        final String cookieName = pwmRequest.getConfig().readAppProperty(AppProperty.HTTP_COOKIE_INSTANCE_GUID_NAME);
+        final String cookieValue = pwmRequest.readCookie(cookieName);
+        if (cookieValue != null && !cookieValue.equals(pwmRequest.getPwmApplication().getInstanceNonce())) {
+            LOGGER.warn(pwmRequest, "request was generated by client communicating with a foreign server instance");
+        }
+
+    }
 }
 }

+ 0 - 7
pwm/servlet/src/password/pwm/http/PwmResponse.java

@@ -118,13 +118,6 @@ public class PwmResponse extends PwmHttpResponseWrapper {
         resp.getWriter().close();
         resp.getWriter().close();
     }
     }
 
 
-    public void forwardToLoginPage()
-            throws IOException
-    {
-        final String loginServletURL = pwmRequest.getContextPath() + "/private/" + PwmConstants.URL_SERVLET_LOGIN;
-        sendRedirect(loginServletURL);
-    }
-
 
 
     public void writeEncryptedCookie(final String cookieName, final Serializable cookieValue, final String path)
     public void writeEncryptedCookie(final String cookieName, final Serializable cookieValue, final String path)
             throws PwmUnrecoverableException
             throws PwmUnrecoverableException

+ 21 - 19
pwm/servlet/src/password/pwm/http/PwmURL.java

@@ -23,6 +23,7 @@
 package password.pwm.http;
 package password.pwm.http;
 
 
 import password.pwm.PwmConstants;
 import password.pwm.PwmConstants;
+import password.pwm.http.servlet.PwmServletDefinition;
 
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletRequest;
 import java.net.URI;
 import java.net.URI;
@@ -48,7 +49,7 @@ public class PwmURL {
     }
     }
 
 
     public boolean isLoginServlet() {
     public boolean isLoginServlet() {
-        return checkIfStartsWithURL("/private/" + PwmConstants.URL_SERVLET_LOGIN);
+        return isPwmServletURL(PwmServletDefinition.Login);
     }
     }
 
 
     public boolean isResourceURL() {
     public boolean isResourceURL() {
@@ -60,45 +61,43 @@ public class PwmURL {
     }
     }
 
 
     public boolean isLogoutURL() {
     public boolean isLogoutURL() {
-        return checkIfStartsWithURL("/private/" + PwmConstants.URL_SERVLET_LOGOUT)
-                || checkIfStartsWithURL("/public/" + PwmConstants.URL_SERVLET_LOGOUT);
+        return isPwmServletURL(PwmServletDefinition.Logout);
     }
     }
 
 
     public boolean isCaptchaURL() {
     public boolean isCaptchaURL() {
-        return checkIfStartsWithURL("/public/" + PwmConstants.URL_SERVLET_CAPTCHA);
+        return isPwmServletURL(PwmServletDefinition.Captcha);
     }
     }
 
 
     public boolean isForgottenPasswordServlet() {
     public boolean isForgottenPasswordServlet() {
-        return checkIfStartsWithURL("/public/" + PwmConstants.URL_SERVLET_RECOVER_PASSWORD);
+        return isPwmServletURL(PwmServletDefinition.ForgottenPassword);
     }
     }
 
 
     public boolean isForgottenUsernameServlet() {
     public boolean isForgottenUsernameServlet() {
-        return checkIfStartsWithURL("/public/" + PwmConstants.URL_SERVLET_RECOVER_USERNAME);
+        return isPwmServletURL(PwmServletDefinition.ForgottenUsername);
     }
     }
 
 
     public boolean isUserActivationServlet() {
     public boolean isUserActivationServlet() {
-        return checkIfStartsWithURL("/public/" + PwmConstants.URL_SERVLET_USER_ACTIVATION);
+        return isPwmServletURL(PwmServletDefinition.ActivateUser);
     }
     }
 
 
     public boolean isNewUserRegistrationServlet() {
     public boolean isNewUserRegistrationServlet() {
-        return checkIfStartsWithURL("/public/" + PwmConstants.URL_SERVLET_NEW_USER);
+        return isPwmServletURL(PwmServletDefinition.NewUser);
     }
     }
 
 
     public boolean isOauthConsumer() {
     public boolean isOauthConsumer() {
-        return checkIfStartsWithURL("/public/" + PwmConstants.URL_SERVLET_OAUTH_CONSUMER);
+        return isPwmServletURL(PwmServletDefinition.OAuthConsumer);
     }
     }
 
 
     public boolean isPrivateUrl() {
     public boolean isPrivateUrl() {
-        return checkIfStartsWithURL("/private/");
+        return checkIfStartsWithURL(PwmConstants.URL_PREFIX_PRIVATE + "/");
     }
     }
 
 
     public boolean isPublicUrl() {
     public boolean isPublicUrl() {
-        return checkIfStartsWithURL("/public/");
+        return checkIfStartsWithURL(PwmConstants.URL_PREFIX_PUBLIC + "/");
     }
     }
 
 
     public boolean isCommandServletURL() {
     public boolean isCommandServletURL() {
-        return checkIfStartsWithURL("/private/" + PwmConstants.URL_SERVLET_COMMAND)
-                || checkIfStartsWithURL("/public/" + PwmConstants.URL_SERVLET_COMMAND);
+        return isPwmServletURL(PwmServletDefinition.Command);
     }
     }
 
 
     public boolean isWebServiceURL() {
     public boolean isWebServiceURL() {
@@ -110,24 +109,27 @@ public class PwmURL {
     }
     }
 
 
     public boolean isConfigGuideURL() {
     public boolean isConfigGuideURL() {
-        return checkIfStartsWithURL("/private/config/" + PwmConstants.URL_SERVLET_CONFIG_GUIDE);
+        return isPwmServletURL(PwmServletDefinition.ConfigGuide);
+    }
+
+    public boolean isPwmServletURL(final PwmServletDefinition pwmServletDefinition) {
+        return checkIfStartsWithURL(pwmServletDefinition.urlPatterns());
     }
     }
 
 
     public boolean isChangePasswordURL() {
     public boolean isChangePasswordURL() {
-        return checkIfStartsWithURL("/private/" + PwmConstants.URL_SERVLET_CHANGE_PASSWORD,
-                "/public/" + PwmConstants.URL_SERVLET_CHANGE_PASSWORD);
+        return isPwmServletURL(PwmServletDefinition.ChangePassword);
     }
     }
 
 
     public boolean isSetupResponsesURL() {
     public boolean isSetupResponsesURL() {
-        return checkIfStartsWithURL("/private/" + PwmConstants.URL_SERVLET_SETUP_RESPONSES);
+        return isPwmServletURL(PwmServletDefinition.SetupResponses);
     }
     }
 
 
     public boolean isSetupOtpSecretURL() {
     public boolean isSetupOtpSecretURL() {
-        return checkIfStartsWithURL("/private/" + PwmConstants.URL_SERVLET_SETUP_OTP_SECRET);
+        return isPwmServletURL(PwmServletDefinition.SetupOtp);
     }
     }
 
 
     public boolean isProfileUpdateURL() {
     public boolean isProfileUpdateURL() {
-        return checkIfStartsWithURL("/private/" + PwmConstants.URL_SERVLET_UPDATE_PROFILE);
+        return isPwmServletURL(PwmServletDefinition.UpdateProfile);
     }
     }
 
 
     public String toString() {
     public String toString() {

+ 1 - 1
pwm/servlet/src/password/pwm/http/bean/ActivateUserBean.java

@@ -3,7 +3,7 @@
  * http://code.google.com/p/pwm/
  * http://code.google.com/p/pwm/
  *
  *
  * Copyright (c) 2006-2009 Novell, Inc.
  * Copyright (c) 2006-2009 Novell, Inc.
- * Copyright (c) 2009-2014 The PWM Project
+ * Copyright (c) 2009-2015 The PWM Project
  *
  *
  * This program is free software; you can redistribute it and/or modify
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * it under the terms of the GNU General Public License as published by

Algunos archivos no se mostraron porque demasiados archivos cambiaron en este cambio