Selaa lähdekoodia

Merge branch 'master' of https://github.com/rkeil-git/pwm

Updated the custom link popup to provide more needed information
rkeil 8 vuotta sitten
vanhempi
commit
a58e311bd9
30 muutettua tiedostoa jossa 1210 lisäystä ja 107 poistoa
  1. 40 5
      pom.xml
  2. 3 11
      src/build/assembly/ldif-schema-zip.xml
  3. 57 0
      src/build/assembly/release-bundle.xml
  4. 56 0
      src/build/assembly/source-reference.xml
  5. 2 2
      src/build/checkstyle.xml
  6. 0 0
      src/build/import-control.xml
  7. 208 0
      src/build/ldif/AD-schema.ldif
  8. 0 0
      src/build/ldif/ApacheDS-schema.ldif
  9. 116 0
      src/build/ldif/OracleDS-schema.ldif
  10. 0 0
      src/build/ldif/edirectory-schema-update.ldif
  11. 0 0
      src/build/ldif/edirectory-schema.ldif
  12. 0 0
      src/build/ldif/edirectory-schema.sch
  13. 0 0
      src/build/ldif/openDJ-schema.ldif
  14. 0 0
      src/build/ldif/openldap.ldif
  15. 0 0
      src/build/ldif/openldap.schema
  16. 1 1
      src/main/java/password/pwm/PwmConstants.java
  17. 0 2
      src/main/java/password/pwm/http/PwmRequest.java
  18. 1 2
      src/main/java/password/pwm/http/servlet/UpdateProfileServlet.java
  19. 14 0
      src/main/java/password/pwm/svc/stats/Statistic.java
  20. 1 1
      src/main/resources/password/pwm/config/PwmSetting.xml
  21. 1 0
      src/main/resources/password/pwm/i18n/Display.properties
  22. 172 0
      src/main/resources/password/pwm/i18n/Error_en_CA.properties
  23. 172 0
      src/main/resources/password/pwm/i18n/Error_fr_CA.properties
  24. 173 0
      src/main/resources/password/pwm/i18n/Message_en_CA.properties
  25. 173 0
      src/main/resources/password/pwm/i18n/Message_fr_CA.properties
  26. 6 0
      src/main/webapp/public/reference/ldap-schema.jsp
  27. 5 0
      src/main/webapp/public/reference/license.jsp
  28. 1 1
      src/main/webapp/public/resources/js/helpdesk.js
  29. 8 1
      src/main/webapp/public/resources/js/main.js
  30. 0 81
      supplemental/ldif/edirectory-rights.ldif

+ 40 - 5
pom.xml

@@ -95,13 +95,13 @@
                         <version>2.6</version>
                         <configuration>
                             <descriptors>
-                                <descriptor>src/assembly/pwm.xml</descriptor>
+                                <descriptor>src/build/assembly/release-bundle.xml</descriptor>
                             </descriptors>
                             <finalName>${project.build.finalName}-${timestamp.iso}</finalName>
                         </configuration>
                         <executions>
                             <execution>
-                                <id>make-assembly</id>
+                                <id>make-release-bundle</id>
                                 <phase>package</phase>
                                 <goals>
                                     <goal>single</goal>
@@ -116,6 +116,41 @@
 
     <build>
         <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-assembly-plugin</artifactId>
+                <version>2.6</version>
+                <executions>
+                    <execution>
+                        <id>make-ldif-schema-zip</id>
+                        <phase>prepare-package</phase>
+                        <configuration>
+                            <finalName>${project.build.finalName}/public/reference/ldif-schema</finalName>
+                            <appendAssemblyId>false</appendAssemblyId>
+                            <descriptors>
+                                <descriptor>src/build/assembly/ldif-schema-zip.xml</descriptor>
+                            </descriptors>
+                        </configuration>
+                        <goals>
+                            <goal>single</goal>
+                        </goals>
+                    </execution>
+                    <execution>
+                        <id>make-source-reference-zip</id>
+                        <phase>prepare-package</phase>
+                        <configuration>
+                            <finalName>${project.build.finalName}/public/reference/source</finalName>
+                            <appendAssemblyId>false</appendAssemblyId>
+                            <descriptors>
+                                <descriptor>src/build/assembly/source-reference.xml</descriptor>
+                            </descriptors>
+                        </configuration>
+                        <goals>
+                            <goal>single</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-compiler-plugin</artifactId>
@@ -201,7 +236,7 @@
                         <id>validate</id>
                         <phase>validate</phase>
                         <configuration>
-                            <configLocation>checkstyle.xml</configLocation>
+                            <configLocation>src/build/checkstyle.xml</configLocation>
                             <encoding>UTF-8</encoding>
                             <consoleOutput>true</consoleOutput>
                             <includeTestResources>false</includeTestResources>
@@ -565,7 +600,7 @@
     </build>
 
     <reporting>
-        <!-- 
+        <!--
         Note: to run these reports, you can execute the maven command: "mvn site",
         then you can view the results by opening the file: target/site/project-reports.html in your browser.
          -->
@@ -889,4 +924,4 @@
             </snapshots>
         </pluginRepository>
     </pluginRepositories>
-</project>
+</project>

+ 3 - 11
src/assembly/pwm.xml → src/build/assembly/ldif-schema-zip.xml

@@ -23,23 +23,15 @@
 <assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd">
 
-    <id>pwm-bundle</id>
+    <id>ldif-schema</id>
     <formats>
         <format>zip</format>
     </formats>
     <includeBaseDirectory>false</includeBaseDirectory>
-    <files>
-        <file>
-            <source>target/${project.build.finalName}.war</source>
-            <destName>pwm.war</destName>
-        </file>
-        <file>
-            <source>target/${project.build.finalName}-sources.jar</source>
-        </file>
-    </files>
     <fileSets>
         <fileSet>
-            <directory>${project.basedir}/supplemental</directory>
+            <outputDirectory>/</outputDirectory>
+            <directory>${project.basedir}/src/build/ldif</directory>
             <includes>
                 <include>*/**</include>
             </includes>

+ 57 - 0
src/build/assembly/release-bundle.xml

@@ -0,0 +1,57 @@
+<!--
+  ~ Password Management Servlets (PWM)
+  ~ http://www.pwm-project.org
+  ~
+  ~ Copyright (c) 2006-2009 Novell, Inc.
+  ~ Copyright (c) 2009-2017 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
+  -->
+
+<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+          xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd">
+
+    <id>release-bundle</id>
+    <formats>
+        <format>zip</format>
+    </formats>
+    <includeBaseDirectory>false</includeBaseDirectory>
+    <files>
+        <file>
+            <source>target/${project.build.finalName}.war</source>
+            <destName>pwm.war</destName>
+        </file>
+        <file>
+            <source>${project.basedir}/LICENSE</source>
+        </file>
+        <file>
+            <source>${project.basedir}/pom.xml</source>
+        </file>
+    </files>
+    <fileSets>
+        <fileSet>
+            <directory>${project.basedir}/src</directory>
+            <includes>
+                <include>*/**</include>
+            </includes>
+        </fileSet>
+        <fileSet>
+            <directory>${project.basedir}/supplemental</directory>
+            <includes>
+                <include>*/**</include>
+            </includes>
+        </fileSet>
+    </fileSets>
+</assembly>

+ 56 - 0
src/build/assembly/source-reference.xml

@@ -0,0 +1,56 @@
+<!--
+  ~ Password Management Servlets (PWM)
+  ~ http://www.pwm-project.org
+  ~
+  ~ Copyright (c) 2006-2009 Novell, Inc.
+  ~ Copyright (c) 2009-2017 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
+  -->
+
+<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+          xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd">
+
+    <id>source-reference</id>
+    <formats>
+        <format>zip</format>
+    </formats>
+    <includeBaseDirectory>false</includeBaseDirectory>
+    <files>
+        <file>
+            <source>${project.basedir}/pom.xml</source>
+        </file>
+        <file>
+            <source>${project.basedir}/LICENSE</source>
+        </file>
+    </files>
+    <fileSets>
+        <fileSet>
+            <outputDirectory>/src</outputDirectory>
+            <directory>${project.basedir}/src</directory>
+            <includes>
+                <include>*/**</include>
+            </includes>
+        </fileSet>
+        <fileSet>
+            <outputDirectory>/supplemental</outputDirectory>
+            <directory>${project.basedir}/supplemental</directory>
+            <includes>
+                <include>*/**</include>
+            </includes>
+        </fileSet>
+    </fileSets>
+
+</assembly>

+ 2 - 2
checkstyle.xml → src/build/checkstyle.xml

@@ -4,7 +4,7 @@
   ~ http://www.pwm-project.org
   ~
   ~ Copyright (c) 2006-2009 Novell, Inc.
-  ~ Copyright (c) 2009-2016 The PWM Project
+  ~ Copyright (c) 2009-2017 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
@@ -176,7 +176,7 @@
         <module name="RedundantImport"/>
         <module name="UnusedImports"/>
         <module name="ImportControl">
-            <property name="file" value="import-control.xml"/>
+            <property name="file" value="src/build/import-control.xml"/>
         </module>
 
 

+ 0 - 0
import-control.xml → src/build/import-control.xml


+ 208 - 0
src/build/ldif/AD-schema.ldif

@@ -0,0 +1,208 @@
+#======================================================
+#   -- Creates attributes and Auxiliary class
+#   -- Adds Auxiliary class to "User" class
+# 
+#	You can import this file using the following command
+#
+#	 ldifde -i -f AD-schema.ldif -c "DC=x" "#schemaNaming context"
+#
+#     ex: if your ad forest is "dc=org,dc=acme" then
+#	      ldifde -i -f AD-schema.ldif -c "DC=x" "dc=org,dc=acme"
+#
+#======================================================
+
+
+#------------------------------------------------------
+#-- Attribute:  	pwmEventLog
+#-- Syntax:      	OCTET STRING
+#-- Description:	User event log
+#------------------------------------------------------
+dn: CN=pwmEventLog,CN=Schema,CN=Configuration,DC=x
+changetype: ntdsschemaadd
+objectClass: attributeSchema
+cn: pwmEventLog
+attributeID: 1.3.6.1.4.1.35015.1.2.1
+attributeSyntax: 2.5.5.10
+isSingleValued: FALSE
+oMSyntax: 4
+isMemberOfPartialAttributeSet: FALSE
+lDAPDisplayName: pwmEventLog
+showInAdvancedViewOnly: TRUE
+adminDisplayName: pwmEventLog
+adminDescription: User event log
+searchFlags: 1
+
+#------------------------------------------------------
+#-- Attribute:  	pwmResponseSet
+#-- Syntax:      	OCTET STRING
+#-- Description:    Stores the user's challenge/response answers
+#------------------------------------------------------
+dn: CN=pwmResponseSet,CN=Schema,CN=Configuration,DC=x
+changetype: ntdsschemaadd
+objectClass: attributeSchema
+cn: pwmResponseSet
+attributeID: 1.3.6.1.4.1.35015.1.2.2
+attributeSyntax: 2.5.5.10
+isSingleValued: FALSE
+oMSyntax: 4
+isMemberOfPartialAttributeSet: FALSE
+lDAPDisplayName: pwmResponseSet
+showInAdvancedViewOnly: TRUE
+adminDisplayName: pwmResponseSet
+adminDescription: Stores the user's challenge/response answers
+searchFlags: 1
+
+#------------------------------------------------------
+#-- Attribute:  	pwmLastPwdUpdate
+#-- Syntax:      	TIME
+#-- Description:	Marks the last time the password was changed by user.
+#------------------------------------------------------
+dn: CN=pwmLastPwdUpdate,CN=Schema,CN=Configuration,DC=x
+changetype: ntdsschemaadd
+objectClass: attributeSchema
+cn: pwmLastPwdUpdate
+attributeID: 1.3.6.1.4.1.35015.1.2.3
+attributeSyntax: 2.5.5.11
+isSingleValued: FALSE
+oMSyntax: 24
+isMemberOfPartialAttributeSet: FALSE
+lDAPDisplayName: pwmLastPwdUpdate
+showInAdvancedViewOnly: TRUE
+adminDisplayName: pwmLastPwdUpdate
+adminDescription: Marks the last time the password was changed by user
+searchFlags: 1
+
+#------------------------------------------------------
+#-- Attribute:  	pwmGUID
+#-- Syntax:      	STRING
+#-- Description:	Marks the last time the password was changed by user.
+#------------------------------------------------------
+dn: CN=pwmGUID,CN=Schema,CN=Configuration,DC=x
+changetype: ntdsschemaadd
+objectClass: attributeSchema
+cn: pwmGUID
+attributeID: 1.3.6.1.4.1.35015.1.2.4
+attributeSyntax: 2.5.5.12
+isSingleValued: FALSE
+oMSyntax: 64
+isMemberOfPartialAttributeSet: FALSE
+lDAPDisplayName: pwmGUID
+showInAdvancedViewOnly: TRUE
+adminDisplayName: pwmGUID
+adminDescription: pwmGUID
+searchFlags: 1
+
+#------------------------------------------------------
+#-- Attribute:  	pwmToken
+#-- Syntax:      	STRING
+#-- Description:	Storage of validation token.
+#------------------------------------------------------
+dn: CN=pwmToken,CN=Schema,CN=Configuration,DC=x
+changetype: ntdsschemaadd
+objectClass: attributeSchema
+cn: pwmToken
+attributeID: 1.3.6.1.4.1.35015.1.2.5
+attributeSyntax: 2.5.5.12
+isSingleValued: FALSE
+oMSyntax: 64
+isMemberOfPartialAttributeSet: FALSE
+lDAPDisplayName: pwmToken
+showInAdvancedViewOnly: TRUE
+adminDisplayName: pwmToken
+adminDescription: pwmToken
+searchFlags: 1
+
+
+#------------------------------------------------------
+#-- Attribute:  	pwmOtpSecret
+#-- Syntax:      	OCTET STRING
+#-- Description:	Stores the user's challenge/response answers
+#------------------------------------------------------
+dn: CN=pwmOtpSecret,CN=Schema,CN=Configuration,DC=x
+changetype: ntdsschemaadd
+objectClass: attributeSchema
+cn: pwmOtpSecret
+attributeID: 1.3.6.1.4.1.35015.1.2.6
+attributeSyntax: 2.5.5.10
+isSingleValued: FALSE
+oMSyntax: 4
+isMemberOfPartialAttributeSet: FALSE
+lDAPDisplayName: pwmOtpSecret
+showInAdvancedViewOnly: TRUE
+adminDisplayName: pwmOtpSecret
+adminDescription: Stores the user's challenge/response answers
+searchFlags: 1
+
+
+#------------------------------------------------------
+#--  Update the schema now
+#------------------------------------------------------
+dn: 
+changetype: modify
+add: schemaUpdateNow
+schemaUpdateNow: 1
+-
+
+#------------------------------------------------------
+#-- Class:        pwmUser
+#-- Description:  Aux class
+#-- Req:          none
+#--
+#-- pwmUser aux class
+#--
+#------------------------------------------------------
+dn: CN=pwmuser,CN=Schema,CN=Configuration,DC=x
+changetype: ntdsschemaadd
+objectClass: classSchema
+subClassOf: top
+cn: pwmuser
+governsID: 1.3.6.1.4.1.35015.1.1.1
+mayContain: pwmLastPwdUpdate
+mayContain: pwmResponseSet
+mayContain: pwmEventLog
+mayContain: pwmGUID
+mayContain: pwmToken
+mayContain: pwmOtpSecret
+objectClassCategory: 3
+rDNAttID: cn
+showInAdvancedViewOnly: TRUE
+adminDisplayName: pwmuser
+adminDescription: pwmUser Auxiliary class
+
+#------------------------------------------------------
+#--  Update the schema now
+#------------------------------------------------------
+dn: 
+changetype: modify
+add: schemaUpdateNow
+schemaUpdateNow: 1
+-
+
+#------------------------------------------------------
+#--  Add Auxililary class pwmuser to User 
+#------------------------------------------------------
+dn: CN=User,CN=Schema,CN=Configuration,DC=x
+changetype: ntdsSchemaModify
+add: auxiliaryClass
+auxiliaryClass: pwmuser
+-
+
+#------------------------------------------------------
+#--  Modify the pwmuser Auxililary class (if it existed prior to this, we want to add the newer attributes)
+#------------------------------------------------------
+dn: CN=pwmuser,CN=Schema,CN=Configuration,DC=x
+changetype: ntdsSchemaModify
+add: mayContain
+mayContain: pwmGUID
+mayContain: pwmToken
+mayContain: pwmOtpSecret
+-
+
+#------------------------------------------------------
+#--  Update the schema now
+#------------------------------------------------------
+dn: 
+changetype: modify
+add: schemaUpdateNow
+schemaUpdateNow: 1
+-

+ 0 - 0
supplemental/ldif/ApacheDS-schema.ldif → src/build/ldif/ApacheDS-schema.ldif


+ 116 - 0
src/build/ldif/OracleDS-schema.ldif

@@ -0,0 +1,116 @@
+#------------------------------------------------------
+#-- Attribute:          pwmEventLog
+#-- Syntax:             OCTET STRING
+#-- Description:        User event log
+#------------------------------------------------------
+dn: cn=schema
+changetype: modify
+add: attributeTypes
+attributeTypes: (
+  1.3.6.1.4.1.35015.1.2.1
+  NAME 'pwmEventLog'
+  DESC 'SSPR defined attribute type'
+  SYNTAX 1.3.6.1.4.1.1466.115.121.1.40
+  X-ORIGIN 'iPlanet Directory Server'
+ )
+
+#------------------------------------------------------
+#-- Attribute:          pwmResponseSet
+#-- Syntax:             OCTET STRING
+#-- Description:    Stores the user's challenge/response answers
+#----------------------------------
+dn: cn=schema
+changetype: modify
+add: attributeTypes
+attributeTypes: (
+  1.3.6.1.4.1.35015.1.2.2
+  NAME 'pwmResponseSet'
+  DESC 'SSPR defined attribute type'
+  SYNTAX 1.3.6.1.4.1.1466.115.121.1.40
+  X-ORIGIN 'iPlanet Directory Server'
+ )
+
+#------------------------------------------------------
+#-- Attribute:          pwmLastPwdUpdate
+#-- Syntax:             TIME
+#-- Description:        Marks the last time the password was changed by user.
+#------------------------------------------------------
+dn: cn=schema
+changetype: modify
+add: attributeTypes
+attributeTypes: (
+  1.3.6.1.4.1.35015.1.2.3
+  NAME 'pwmLastPwdUpdate'
+  DESC 'SSPR defined attribute type'
+  SYNTAX 1.3.6.1.4.1.1466.115.121.1.24
+  X-ORIGIN 'iPlanet Directory Server'
+ )
+
+#------------------------------------------------------
+#-- Attribute:          pwmGUID
+#-- Syntax:             String
+#-- Description:        GUID used to identify user
+#------------------------------------------------------
+dn: cn=schema
+changetype: modify
+add: attributeTypes
+attributeTypes: (
+  1.3.6.1.4.1.35015.1.2.4
+  NAME 'pwmGUID'
+  DESC 'SSPR defined attribute type'
+  SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
+  X-ORIGIN 'iPlanet Directory Server'
+ )
+
+#------------------------------------------------------
+#-- Attribute:          pwmToken
+#-- Syntax:             String
+#-- Description:        GUID used to identify user
+#------------------------------------------------------
+dn: cn=schema
+changetype: modify
+add: attributeTypes
+attributeTypes: (
+  1.3.6.1.4.1.35015.1.2.5
+  NAME 'pwmToken'
+  DESC 'SSPR defined attribute type'
+  SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
+  X-ORIGIN 'iPlanet Directory Server'
+ )
+
+#------------------------------------------------------
+#-- Attribute:  	pwmOtpSecret
+#-- Syntax:      	OCTET STRING
+#-- Description:    Stores the user's challenge/response answers
+#------------------------------------------------------
+dn: cn=schema
+changetype: modify
+add: attributeTypes
+attributeTypes: (
+  1.3.6.1.4.1.35015.1.2.6
+  NAME 'pwmOtpSecret'
+  DESC 'SSPR defined attribute type'
+  SYNTAX 1.3.6.1.4.1.1466.115.121.1.40
+  X-ORIGIN 'iPlanet Directory Server'
+ )
+
+
+#------------------------------------------------------
+#-- Class:        pwmUser
+#-- Description:  Aux class
+#-- Req:          none
+#--
+#-- pwmUser aux class
+#--
+#------------------------------------------------------
+dn: cn=schema
+changetype: modify
+add: objectClasses
+objectClasses: (
+  1.3.6.1.4.1.35015.1.1.1
+  NAME 'pwmUser'
+  DESC 'SSPR defined aux class'
+  AUXILIARY
+  MAY ( pwmEventLog $ pwmResponseSet $ pwmLastPwdUpdate $ pwmGUID $ pwmToken $ pwmOtpSecret)
+  X-ORIGIN 'SSPR Administrator'
+ )

+ 0 - 0
supplemental/ldif/edirectory-schema-update.ldif → src/build/ldif/edirectory-schema-update.ldif


+ 0 - 0
supplemental/ldif/edirectory-schema.ldif → src/build/ldif/edirectory-schema.ldif


+ 0 - 0
supplemental/ldif/edirectory-schema.sch → src/build/ldif/edirectory-schema.sch


+ 0 - 0
supplemental/ldif/openDJ-schema.ldif → src/build/ldif/openDJ-schema.ldif


+ 0 - 0
supplemental/ldif/openldap.ldif → src/build/ldif/openldap.ldif


+ 0 - 0
supplemental/ldif/openldap.schema → src/build/ldif/openldap.schema


+ 1 - 1
src/main/java/password/pwm/PwmConstants.java

@@ -219,7 +219,7 @@ public abstract class PwmConstants {
             "passwords are like underwear, changing underwear regularly is a good thing.", //menno
             "daisy, daisy, give me your password do...",
             "it's a wholesome can of software goodness", // thx krowten
-
+            "this password is an memorial of the richard d. kiel memorial abend",
     };
 
 

+ 0 - 2
src/main/java/password/pwm/http/PwmRequest.java

@@ -533,8 +533,6 @@ public class PwmRequest extends PwmHttpRequestWrapper implements Serializable {
         this.setAttribute(PwmRequestAttribute.FormData, formDataMapValue);
         this.setAttribute(PwmRequestAttribute.FormReadOnly, readOnly);
         this.setAttribute(PwmRequestAttribute.FormShowPasswordFields, showPasswordFields);
-        //this.setAttribute(PwmRequestAttribute.FormMobileDevices, formDataMapValue);
-        //this.setAttribute(PwmRequestAttribute.FormCustomLinks, new ArrayList<>(formConfiguration));
     }
 
     public void addFormInfoToRequestAttr(

+ 1 - 2
src/main/java/password/pwm/http/servlet/UpdateProfileServlet.java

@@ -590,7 +590,7 @@ public class UpdateProfileServlet extends ControlledPwmServlet {
         final Map<FormConfiguration,String> formValueMap = formMapFromBean(updateAttributesProfile, updateProfileBean);
         pwmRequest.addFormInfoToRequestAttr(form, formValueMap, false, false);
         final List<FormConfiguration> links = updateAttributesProfile.readSettingAsForm(PwmSetting.UPDATE_PROFILE_CUSTOMLINKS);
-        pwmRequest.addFormInfoToRequestAttr(links);
+        pwmRequest.setAttribute(PwmRequestAttribute.FormCustomLinks,new ArrayList<>(links));
         pwmRequest.forwardToJsp(JspUrl.UPDATE_ATTRIBUTES);
     }
 
@@ -601,7 +601,6 @@ public class UpdateProfileServlet extends ControlledPwmServlet {
         final Map<FormConfiguration,String> formValueMap = formMapFromBean(updateAttributesProfile, updateProfileBean);
         pwmRequest.addFormInfoToRequestAttr(form, formValueMap, true, false);
         final List<FormConfiguration> links = updateAttributesProfile.readSettingAsForm(PwmSetting.UPDATE_PROFILE_CUSTOMLINKS);
-        pwmRequest.addFormInfoToRequestAttr(links);
         pwmRequest.forwardToJsp(JspUrl.UPDATE_ATTRIBUTES_CONFIRM);
     }
 

+ 14 - 0
src/main/java/password/pwm/svc/stats/Statistic.java

@@ -238,4 +238,18 @@ public enum Statistic {
             return pwmApplication.getConfig().readSettingAsBoolean(pwmSetting);
         }
     }
+
+    public static Statistic forKey(final String key) {
+        if (key == null) {
+            return null;
+        }
+
+        for (final Statistic stat : values()) {
+            if (stat.getKey().equals(key)) {
+                return stat;
+            }
+        }
+
+        return null;
+    }
 }

+ 1 - 1
src/main/resources/password/pwm/config/PwmSetting.xml

@@ -2421,7 +2421,7 @@
     </setting>
     <setting hidden="false" key="response.hashMethod" level="2" required="true">
         <default>
-            <value>PBKDF2</value>
+            <value>PBKDF2_SHA512</value>
         </default>
         <options>
             <option value="TEXT">None (Plaintext)</option>

+ 1 - 0
src/main/resources/password/pwm/i18n/Display.properties

@@ -77,6 +77,7 @@ Display_ChangePasswordForm=Please enter the following data.  This is required to
 Display_CheckingData=Checking Data....
 Display_CheckingPassword=Checking Password....
 Display_CheckingResponses=Checking Answers....
+Display_ClientDisconnect=Unable to communicate with server.
 Display_CommunicationError=Unable to communicate with server.  Continue when ready.
 Display_ConfirmResponses=Be sure your answers and questions are correct.  Check the spelling and punctuation.  In you are unable to remember your password, you will be able to access your account by supplying the answers to these security questions.
 Display_Day=day

+ 172 - 0
src/main/resources/password/pwm/i18n/Error_en_CA.properties

@@ -0,0 +1,172 @@
+#
+# Password Management Servlets (PWM)
+# http://www.pwm-project.org
+#
+# Copyright (c) 2006-2009 Novell, Inc.
+# Copyright (c) 2009-2017 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
+#
+
+Password_MissingConfirm=Password meets requirements. Please type confirmation password.
+Password_DoesNotMatch=Passwords do not match
+Password_Missing=Password missing
+Password_PreviouslyUsed=New password has been used previously
+Password_BadPassword=New password does not meet rule requirements
+Password_TooLong=New password is too long
+Password_TooShort=New password is too short
+Password_NotEnoughNum=New password does not have enough numbers
+Password_NotEnoughAlpha=New password does not have enough letters
+Password_NotEnoughUpper=New password does not have enough upper-case letters
+Password_NotEnoughLower=New password does not have enough lower-case letters
+Password_NotEnoughSpecial=New password does not have enough symbol (non-alpha-numeric) characters
+Password_NotEnoughUnique=New password does not have enough unique characters
+Password_TooManyRepeat=New password has too many repeating characters
+Password_TooManySpecial=New password has too many special (non-letter or non-number) characters
+Password_TooManyAlpha=New password has too many letters
+Password_TooManyNumeric=New password has too many numbers
+Password_TooManyLower=New password has too many lower-case letters
+Password_TooManyUpper=New password has too many upper-case letters
+Password_TooManyOldChars=New password contains too many characters from your old password
+Password_TooManyNonAlphaSpecial=New password has too many symbol (non-alpha-numeric) characters
+Password_InvalidChar=New password has an invalid character
+Password_RequiredMissing=New password is missing a required character
+Password_InWordlist=New password is too common
+Password_SameAsOld=New password is the same as the current password
+Password_SameAsAttr=New password is too obvious
+Password_FirstIsNumeric=The first character must not be numeric
+Password_LastIsNumeric=The last character must not be numeric
+Password_FirstIsSpecial=The first character must not be a symbol (non-alpha-numeric) character
+Password_LastIsSpecial=The last character must not be a symbol (non-alpha-numeric) character
+Password_HistoryFull=New password history is full
+Password_MeetsRules=New password accepted. Please click Change password.
+Password_TooSoon=Not enough time has passed since last password change
+Password_UsingDisallowedValue=New password is using a value that is not allowed
+Password_TooWeak=Password is too weak. Try adding more numbers, symbols or mixed-case letters.
+Password_TooManyNonAlpha=New password has too many non-letter characters
+Password_NotEnoughNonAlpha=New password does not have enough non-letter characters
+Password_UnknownValidation=New password does not meet requirements. Please try using a different password.
+Password_NewPasswordRequired=A new password is required before you may continue.
+Password_Expired=The password has expired.
+Password_CustomError=New password does not meet rule requirements
+Password_BadOldPassword=The old password is not correct
+Password_NotEnoughGroups=New password does not contain enough different character types
+Password_TooManyConsecutive=New password has too many consecutive characters (such as 123456... or abcdef...)
+
+Error_WrongResponse=One or more responses are not correct. Please try again.
+Error_WrongPassword=The username or password is not valid. Please try again.
+Error_Response_NoResponse=The username is not valid or is not eligible to use this feature
+Error_Response_TooShort=The response for question "%1%" is too short
+Error_Response_Wordlist=The response for question "%1%" is too commonly used
+Error_Response_TooLong=The response for question "%1%" is too long
+Error_Response_Duplicate=The response for question "%1%" cannot be the same as another response
+Error_Challenge_Duplicate=Each question must be unique.
+Error_Missing_Challenge_Text=Missing text for a user-supplied question
+Error_UserAuthenticated=You are already authenticated.
+Error_MissingParameter=A required parameter is missing.
+Error_DirectoryUnavailable=Directory unavailable. If this error occurs repeatedly, please contact your Help Desk.
+Error_Unknown=An error has occurred. If this error occurs repeatedly, please contact your Help Desk.
+Error_ActivationValidationFailed=One or more values are not correct.
+Error_CantMatchUser=Unable to find username. Please try again.
+Error_ServiceNotAvailable=Service is not enabled.
+Error_UserMisMatch=Authentication error. Please close your browser.
+Error_ActivateUserNoQueryMatch=Your user account is not eligible for activation.
+Error_AuthenticationRequired=Authentication required.
+Error_NoChallenges=No challenges have been configured.
+Error_UserIntruder=Maximum login attempts for your user ID have been exceeded. Try again later.
+Error_AddressIntruder=Maximum login attempts have been exceeded. Try again later.
+Error_SessionIntruder=Maximum login attempts for this session have been exceeded. Try again later.
+Error_BadSessionPassword=Unable to establish session password.
+Error_Unauthorized=You do not have permission to perform the requested action.
+Error_BadSession=Unable to establish a session with your browser. Please close your browser and try again.
+Error_MissingRequiredResponse=Please type all of the required responses.
+Error_MissingRandomResponse=Please add an additional random response.
+Error_BadCaptchaResponse=Incorrect verification code. Please try again.
+Error_CaptchaAPIError=An error occurred while validating CAPTCHA response. Please close your browser and try again. If this error occurs repeatedly, contact your Help Desk.
+Error_InvalidConfig=The configuration is invalid or corrupt. Please correct the error or remove the configuration file.
+Error_InvalidFormID=The browser session is invalid or has expired. Please try again.
+Error_TokenMissingContact=There is no contact information available for your account. Please contact your administrator.
+Error_TokenIncorrect=Incorrect code. Please try again.
+Error_BadCurrentPassword=Current password is incorrect. Please try again.
+Error_Closing=The operation cannot be completed because the application is shutting down.
+Error_Missing_GUID=Unable to locate a GUID for user. Please contact your administrator.
+Error_TokenExpired=The token you have entered has expired and is no longer valid. Please try again.
+Error_SecureRequestRequired=Non-secure (HTTP) connections are not permitted to this system. Please try again using a secure (HTTPS) connection.
+Error_Writing_Responses=An error occurred while saving your response questions. Please contact your administrator.
+Error_Writing_Otp_Secret=An error occurred while saving your OTP secret. Please contact your administrator.
+Error_Unlock_Failure=An error occurred while unlocking your account. Please contact your administrator.
+Error_Update_Attrs_Failure=An error occurred while saving your profile information. Please contact your administrator.
+Error_Activation_Failure=An error occurred while activating your account. Please contact your administrator.
+Error_NewUser_Failure=An error occurred while creating your new user account. Please contact your administrator.
+Error_Activation=Unable to activate your account using the information you have provided. Please try again.
+Error_DB_Unavailable=Database unavailable. If this error occurs repeatedly, please contact your Help Desk.
+Error_LocalDB_Unavailable=LocalDB Unavailable. Please contact your administrator.
+Error_App_Unavailable=The application is unavailable or is restarting. If this error occurs repeatedly, please contact your Help Desk.
+Error_IncorrectRequestSequence=An out-of-order page request has been received. Please do not use the browser Back button. Please try again.
+Error_UnreachableCloudService=A remote service was unreachable.
+Error_InvalidSecurityKey=Security Key is missing or invalid.
+Error_Clearing_Responses=An error occurred during the clearing of the response questions. Please contact your administrator.
+Error_ServiceUnreachable=A required service is unavailable. Please try again later.
+Error_ChallengeInResponse=The response for question "%1%" cannot contain part of the question text.
+Error_Multi_Username=Multiple users match the given username "%1%". Please refine your search.
+Error_CertificateError=A certificate error has been encountered: %1%.
+Error_SyslogWriteError=A problem writing to the syslog server has been encountered, error: %1%
+Error_TooManyThreads=Maximum thread count limit exceeded. Please try again later.
+Error_SecurityViolation=A security violation has occurred. Please try again later.
+Error_NoOtpConfiguration=No one-time password has been configured.
+Error_TrialViolation=Trial limits have been exceeded.
+Error_AccountDisabled=Account is disabled.
+Error_AccountExpired=Account has expired.
+Error_WrongOtpToken=Incorrect one-time password.
+Error_AttrIntruder=Maximum search attempts have been exceeded. Try again later.
+Error_AuditWrite=Unable to write audit record.
+Error_LdapIntruder=Maximum login attempts for your user ID have been exceeded. Try again later.
+Error_NoLdapConnection=A connection to the required directory is not available.
+Error_OAuthError=An error using the OAuth authentication protocol has occurred. Please try again later.
+Error_FieldRequired=%1% is required
+Error_FieldNotANumber=%1% must be a number
+Error_FieldInvalidEmail=%1% is not a valid email address
+Error_FieldTooShort=%1% is too short
+Error_FieldTooLong=%1% is too long
+Error_FieldDuplicate=%1% is already being used. Please use a different value.
+Error_FieldBadConfirm=%1% fields do not match
+Error_FieldRegexNoMatch=%1% is not the correct format
+Error_Orig_Admin_Only=Only the original administrator can perform this property
+Error_PasswordRequired=A password is required to perform this operation
+Error_ReportingError=An error during report generation occurred
+Error_TokenDestIntruder=Maximum attempts have been exceeded. Try again later.
+Error_OtpRecoveryUsed=The recovery code has been previously used and cannot be used again.
+Error_RedirectIllegal=The requested redirect URL is not permitted.
+Error_CryptError=An unexpected cryptography error has occurred.
+Error_SmsSendError=Unable to send SMS message: %1%
+Error_LdapDataError=An LDAP data error has occurred.
+Error_MacroParseError=Macro parse error: %1%
+Error_NoProfileAssigned=No profile is assigned for this operation.
+Error_StartupError=An error occurred while starting the application. Check the log files for information.
+Error_EnvironmentError=An error with the application environment has prevented the application from starting.
+Error_ApplicationNotRunning=This functionality is not available until the application configuration is restricted.
+Error_EmailSendFailure=Error sending email item %1%, error: %2%
+Error_PasswordOnlyBad=Password incorrect. Please try again.
+
+Error_RemoteErrorValue=Remote Error: %1%
+
+Error_ConfigUploadSuccess=File uploaded successfully
+Error_ConfigUploadFailure=File failed to upload.
+Error_ConfigSaveSuccess=Configuration saved successfully. Application restart has been requested. The application may be unavailable while restarting. If the restart request fails, you may need to restart the application server manually.
+Error_ConfigFormatError=Configuration format error:  %1%
+Error_ConfigLdapFailure=Unable to connect to LDAP directory server.
+Error_ConfigLdapSuccess=Successfully connected to LDAP directory server
+
+Error_HTTP_404=The page you requested could not be found.

+ 172 - 0
src/main/resources/password/pwm/i18n/Error_fr_CA.properties

@@ -0,0 +1,172 @@
+#
+# Password Management Servlets (PWM)
+# http://www.pwm-project.org
+#
+# Copyright (c) 2006-2009 Novell, Inc.
+# Copyright (c) 2009-2017 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
+#
+
+Password_MissingConfirm=Le mot de passe r\u00e9pond aux exigences. Entrez le mot de passe de confirmation.
+Password_DoesNotMatch=Les mots de passe ne correspondent pas
+Password_Missing=Mot de passe manquant
+Password_PreviouslyUsed=Le nouveau mot de passe a d\u00e9j\u00e0 \u00e9t\u00e9 utilis\u00e9 par le pass\u00e9
+Password_BadPassword=Le nouveau mot de passe ne r\u00e9pond pas aux exigences de la r\u00e8gle
+Password_TooLong=Le nouveau mot de passe est trop long
+Password_TooShort=Le nouveau mot de passe est trop court
+Password_NotEnoughNum=Le nouveau mot de passe ne comporte pas suffisamment de chiffres
+Password_NotEnoughAlpha=Le nouveau mot de passe ne comporte pas suffisamment de lettres.
+Password_NotEnoughUpper=Le nouveau mot de passe ne comporte pas suffisamment de lettres majuscules
+Password_NotEnoughLower=Le nouveau mot de passe ne comporte pas suffisamment de lettres minuscules
+Password_NotEnoughSpecial=Le nouveau mot de passe ne comporte pas suffisamment de symboles (non alphanum\u00e9riques)
+Password_NotEnoughUnique=Le nouveau mot de passe ne comporte pas suffisamment de caract\u00e8res uniques
+Password_TooManyRepeat=Le nouveau mot de passe comporte trop de caract\u00e8res r\u00e9p\u00e9t\u00e9s
+Password_TooManySpecial=Le nouveau mot de passe comporte trop de caract\u00e8res sp\u00e9ciaux (non alphanum\u00e9riques).
+Password_TooManyAlpha=Le nouveau mot de passe comporte trop de lettres
+Password_TooManyNumeric=Le nouveau mot de passe comporte trop de chiffres
+Password_TooManyLower=Le nouveau mot de passe comporte trop de lettres minuscules
+Password_TooManyUpper=Le nouveau mot de passe comporte trop de lettres majuscules
+Password_TooManyOldChars=Le nouveau mot de passe comporte trop de caract\u00e8res de votre ancien mot de passe
+Password_TooManyNonAlphaSpecial=Le nouveau mot de passe comporte trop de symboles (non alphanum\u00e9riques)
+Password_InvalidChar=Le nouveau mot de passe comporte un caract\u00e8re non valide
+Password_RequiredMissing=Un caract\u00e8re obligatoire est manquant dans le nouveau mot de passe
+Password_InWordlist=Le nouveau mot de passe est trop courant
+Password_SameAsOld=Le nouveau mot de passe est identique au mot de passe actuel
+Password_SameAsAttr=Le nouveau mot de passe est trop \u00e9vident
+Password_FirstIsNumeric=Le premier caract\u00e8re ne doit pas \u00eatre num\u00e9rique
+Password_LastIsNumeric=Le dernier caract\u00e8re ne doit pas \u00eatre num\u00e9rique
+Password_FirstIsSpecial=Le premier caract\u00e8re ne doit pas \u00eatre un symbole (non alphanum\u00e9rique).
+Password_LastIsSpecial=Le dernier caract\u00e8re ne doit pas \u00eatre un symbole (non alphanum\u00e9rique)
+Password_HistoryFull=L'historique des nouveaux mots de passe a atteint la limite maximum
+Password_MeetsRules=Le nouveau mot de passe est accept\u00e9. Cliquez sur \u00c9diter le mot de passe.
+Password_TooSoon=Le temps \u00e9coul\u00e9 depuis le dernier changement de mot de passe est insuffisant
+Password_UsingDisallowedValue=Le nouveau mot de passe utilise une valeur non autoris\u00e9e
+Password_TooWeak=Le mot de passe est trop faible. Essayez d'ajouter d'autres chiffres ou symboles, ou encore une combinaison de minuscules et majuscules.
+Password_TooManyNonAlpha=Le nouveau mot de passe comporte trop de caract\u00e8res non alphab\u00e9tiques
+Password_NotEnoughNonAlpha=Le nouveau mot de passe ne comporte pas suffisamment de caract\u00e8res non alphab\u00e9tiques
+Password_UnknownValidation=Le mot de passe ne r\u00e9pond pas aux exigences. Essayez d'utiliser un autre mot de passe.
+Password_NewPasswordRequired=Vous devez indiquer un nouveau mot de passe pour pouvoir continuer.
+Password_Expired=Le mot de passe est arriv\u00e9 \u00e0 expiration.
+Password_CustomError=Le nouveau mot de passe ne r\u00e9pond pas aux exigences de la r\u00e8gle
+Password_BadOldPassword=L'ancien mot de passe n'est pas correct
+Password_NotEnoughGroups=Le nouveau mot de passe ne comporte pas suffisamment de types de caract\u00e8res diff\u00e9rents
+Password_TooManyConsecutive=Le nouveau mot de passe comporte trop de caract\u00e8res cons\u00e9cutifs (tels que 123456... ou abcdef...)
+
+Error_WrongResponse=Une ou plusieurs r\u00e9ponses sont incorrectes. Veuillez r\u00e9essayer.
+Error_WrongPassword=Le nom d'utilisateur ou le mot de passe n'est pas valide. Veuillez r\u00e9essayer.
+Error_Response_NoResponse=Le nom d'utilisateur n'est pas valide ou ne peut pas utiliser cette fonctionnalit\u00e9.
+Error_Response_TooShort=La r\u00e9ponse \u00e0 la question "%1%" est trop courte
+Error_Response_Wordlist=La r\u00e9ponse \u00e0 la question "%1%" est trop courante
+Error_Response_TooLong=La r\u00e9ponse \u00e0 la question "%1%" est trop longue
+Error_Response_Duplicate=La r\u00e9ponse \u00e0 la question "%1%" doit \u00eatre diff\u00e9rente des autres r\u00e9ponses
+Error_Challenge_Duplicate=Chaque question doit \u00eatre unique.
+Error_Missing_Challenge_Text=Texte manquant pour la question fournie par l'utilisateur
+Error_UserAuthenticated=Vous \u00eates d\u00e9j\u00e0 authentifi\u00e9.
+Error_MissingParameter=Un param\u00e8tre obligatoire est manquant.
+Error_DirectoryUnavailable=Annuaire indisponible. Si cette erreur se reproduit, contactez votre service d'assistance.
+Error_Unknown=Une erreur s'est produite. Si elle se reproduit, contactez votre service d'assistance.
+Error_ActivationValidationFailed=Une ou plusieurs valeurs sont incorrectes.
+Error_CantMatchUser=Le nom d'utilisateur est introuvable. Veuillez r\u00e9essayer.
+Error_ServiceNotAvailable=Le service n'est pas activ\u00e9.
+Error_UserMisMatch=Erreur d'authentification; fermez votre navigateur.
+Error_ActivateUserNoQueryMatch=Votre compte utilisateur ne peut pas \u00eatre activ\u00e9.
+Error_AuthenticationRequired=Authentification requise.
+Error_NoChallenges=Aucune question de v\u00e9rification d'identit\u00e9 n'a \u00e9t\u00e9 configur\u00e9e.
+Error_UserIntruder=Le nombre maximal de tentatives de connexion pour votre identifiant utilisateur a \u00e9t\u00e9 d\u00e9pass\u00e9. Veuillez r\u00e9essayer ult\u00e9rieurement.
+Error_AddressIntruder=Le nombre maximal de tentatives de connexion a \u00e9t\u00e9 d\u00e9pass\u00e9. Veuillez r\u00e9essayer ult\u00e9rieurement.
+Error_SessionIntruder=Le nombre maximal de tentatives de connexion pour cette session a \u00e9t\u00e9 d\u00e9pass\u00e9. Veuillez r\u00e9essayer ult\u00e9rieurement.
+Error_BadSessionPassword=Impossible d'\u00e9tablir un mot de passe de session.
+Error_Unauthorized=Vous n'\u00eates pas autoris\u00e9 \u00e0 effectuer l'op\u00e9ration demand\u00e9e.
+Error_BadSession=Impossible d'\u00e9tablir une session avec votre navigateur. Fermez votre navigateur, puis r\u00e9essayez.
+Error_MissingRequiredResponse=Entrez toutes les r\u00e9ponses n\u00e9cessaires.
+Error_MissingRandomResponse=Ajoutez une r\u00e9ponse al\u00e9atoire suppl\u00e9mentaire.
+Error_BadCaptchaResponse=Code de v\u00e9rification incorrect; veuillez r\u00e9essayer.
+Error_CaptchaAPIError=Une erreur s'est produite lors de la validation de la r\u00e9ponse CAPTCHA. Fermez votre navigateur et r\u00e9essayez. Si elle se reproduit, contactez votre service d'assistance.
+Error_InvalidConfig=La configuration est incorrecte ou alt\u00e9r\u00e9e. Corrigez l'erreur ou supprimez le fichier de configuration.
+Error_InvalidFormID=La session de votre navigateur n'est pas valide ou a expir\u00e9. Veuillez r\u00e9essayer.
+Error_TokenMissingContact=Aucune information de contact n'est disponible pour votre compte. Contactez votre administrateur.
+Error_TokenIncorrect=Code incorrect; veuillez r\u00e9essayer.
+Error_BadCurrentPassword=Le mot de passe actuel est incorrect; veuillez r\u00e9essayer.
+Error_Closing=L'op\u00e9ration ne peut pas \u00eatre effectu\u00e9e, car l'application est en cours de fermeture.
+Error_Missing_GUID=Impossible de localiser de GUID pour l'utilisateur. Contactez votre administrateur.
+Error_TokenExpired=Le jeton entr\u00e9 est arriv\u00e9 \u00e0 expiration et n'est plus valide. Veuillez r\u00e9essayer.
+Error_SecureRequestRequired=Les connexions non s\u00e9curis\u00e9es (HTTP) ne sont pas autoris\u00e9es sur ce syst\u00e8me. R\u00e9essayez en utilisant une connexion s\u00e9curis\u00e9e (HTTPS).
+Error_Writing_Responses=Une erreur s'est produite lors de l'enregistrement de vos r\u00e9ponses de v\u00e9rification d'identit\u00e9. Contactez votre administrateur.
+Error_Writing_Otp_Secret=Une erreur s'est produite lors de l'enregistrement de votre code secret pour le mot de passe \u00e0 usage unique. Contactez votre administrateur.
+Error_Unlock_Failure=Une erreur s'est produite lors du d\u00e9verrouillage de votre compte. Contactez votre administrateur.
+Error_Update_Attrs_Failure=Une erreur s'est produite lors de l'enregistrement de vos renseignements de profil. Contactez votre administrateur.
+Error_Activation_Failure=Une erreur s'est produite lors de l'activation de votre compte. Contactez votre administrateur.
+Error_NewUser_Failure=Une erreur s'est produite lors de la cr\u00e9ation de votre nouveau compte utilisateur. Contactez votre administrateur.
+Error_Activation=Impossible d'activer votre compte \u00e0 l'aide des renseignements que vous avez fournis. R\u00e9essayez.
+Error_DB_Unavailable=Base de donn\u00e9es indisponible. Si cette erreur se reproduit, contactez votre service d'assistance.
+Error_LocalDB_Unavailable=LocalDB est indisponible. Contactez votre administrateur.
+Error_App_Unavailable=L'application est indisponible ou est en cours de red\u00e9marrage. Si cette erreur se reproduit, contactez votre service d'assistance.
+Error_IncorrectRequestSequence=Une requ\u00eate de page inaccessible a \u00e9t\u00e9 re\u00e7ue. N'utilisez pas le bouton Retour de votre navigateur. Veuillez r\u00e9essayer.
+Error_UnreachableCloudService=Un service distant \u00e9tait inaccessible.
+Error_InvalidSecurityKey=La cl\u00e9 de s\u00e9curit\u00e9 est manquante ou non valide.
+Error_Clearing_Responses=Une erreur s'est produite lors de l'effacement des questions de v\u00e9rification d'identit\u00e9. Contactez votre administrateur.
+Error_ServiceUnreachable=Un service obligatoire est indisponible. R\u00e9essayez ult\u00e9rieurement.
+Error_ChallengeInResponse=La r\u00e9ponse \u00e0 la question "%1%" ne peut pas contenir une partie du texte de la question.
+Error_Multi_Username=Plusieurs utilisateurs correspondent au nom d'utilisateur "%1%" indiqu\u00e9. Pr\u00e9cisez votre recherche.
+Error_CertificateError=Une erreur de certificat s'est produite : %1%.
+Error_SyslogWriteError=Un probl\u00e8me d'\u00e9criture sur le serveur Syslog s'est produit. Erreur : %1%
+Error_TooManyThreads=Le nombre maximal de fils a \u00e9t\u00e9 d\u00e9pass\u00e9. Veuillez r\u00e9essayer ult\u00e9rieurement
+Error_SecurityViolation=Une violation de s\u00e9curit\u00e9 s'est produite. Veuillez r\u00e9essayer ult\u00e9rieurement.
+Error_NoOtpConfiguration=Aucun mot de passe \u00e0 usage unique n'est configur\u00e9.
+Error_TrialViolation=Le nombre maximal d'essais a \u00e9t\u00e9 d\u00e9pass\u00e9.
+Error_AccountDisabled=Le compte est d\u00e9sactiv\u00e9.
+Error_AccountExpired=Le compte est arriv\u00e9 \u00e0 expiration.
+Error_WrongOtpToken=Le mot de passe \u00e0 usage unique est incorrect.
+Error_AttrIntruder=Le nombre maximal de tentatives de recherche a \u00e9t\u00e9 d\u00e9pass\u00e9. Veuillez r\u00e9essayer ult\u00e9rieurement.
+Error_AuditWrite=Impossible d'\u00e9crire l'enregistrement d'audit.
+Error_LdapIntruder=Le nombre maximal de tentatives de connexion pour votre identifiant utilisateur a \u00e9t\u00e9 d\u00e9pass\u00e9. Veuillez r\u00e9essayer ult\u00e9rieurement.
+Error_NoLdapConnection=Aucune connexion \u00e0 l'annuaire requis n'est disponible.
+Error_OAuthError=Une erreur s'est produite lors de l'utilisation du protocole d'authentification OAuth. Veuillez r\u00e9essayer ult\u00e9rieurement.
+Error_FieldRequired=%1% est obligatoire
+Error_FieldNotANumber=%1% doit \u00eatre un chiffre
+Error_FieldInvalidEmail=%1% n'est pas une adresse \u00e9lectronique valide
+Error_FieldTooShort=%1% est trop court
+Error_FieldTooLong=%1% est trop long
+Error_FieldDuplicate=%1% est d\u00e9j\u00e0 utilis\u00e9. Utilisez une autre valeur.
+Error_FieldBadConfirm=%1% champs ne correspondent pas
+Error_FieldRegexNoMatch=%1% n'est pas le format correct
+Error_Orig_Admin_Only=Seul l'administrateur d'origine peut utiliser cette op\u00e9ration
+Error_PasswordRequired=Vous devez indiquer un mot de passe pour effectuer cette op\u00e9ration
+Error_ReportingError=Une erreur s'est produite lors de la cr\u00e9ation du rapport
+Error_TokenDestIntruder=Le nombre maximal de tentatives a \u00e9t\u00e9 d\u00e9pass\u00e9. Veuillez r\u00e9essayer ult\u00e9rieurement.
+Error_OtpRecoveryUsed=La r\u00e9cup\u00e9ration a peut-\u00eatre d\u00e9j\u00e0 \u00e9t\u00e9 utilis\u00e9e et ne peut pas \u00eatre r\u00e9utilis\u00e9e.
+Error_RedirectIllegal=L'URL de redirection demand\u00e9e n'est pas autoris\u00e9e.
+Error_CryptError=Une erreur de cryptographie inattendue s'est produite.
+Error_SmsSendError=Le message SMS n'a pas pu \u00eatre envoy\u00e9 : %1%
+Error_LdapDataError=Une erreur de donn\u00e9es LDAP s'est produite.
+Error_MacroParseError=Erreur d'analyse macro : %1%
+Error_NoProfileAssigned=Aucun profil n'est assign\u00e9 \u00e0 cette op\u00e9ration.
+Error_StartupError=Une erreur s'est produite au d\u00e9marrage de l'application. Consultez les fichiers journaux pour plus d'informations.
+Error_EnvironmentError=Une erreur li\u00e9e \u00e0 l'environnement de l'application a emp\u00each\u00e9 le d\u00e9marrage de cette derni\u00e8re.
+Error_ApplicationNotRunning=Cette fonctionnalit\u00e9 n'est pas disponible tant que la configuration de l'application est restreinte.
+Error_EmailSendFailure=Une erreur s'est produite lors de l'envoi du courriel %1%. Erreur : %2%
+Error_PasswordOnlyBad=Le mot de passe est incorrect. Veuillez r\u00e9essayer.
+
+Error_RemoteErrorValue=Erreur distante : %1%
+
+Error_ConfigUploadSuccess=Le fichier a \u00e9t\u00e9 t\u00e9l\u00e9vers\u00e9
+Error_ConfigUploadFailure=Le fichier n'a pas pu \u00eatre t\u00e9l\u00e9vers\u00e9.
+Error_ConfigSaveSuccess=Configuration enregistr\u00e9e. Le red\u00e9marrage de l'application est demand\u00e9. L'application risque d'\u00eatre indisponible pendant le red\u00e9marrage. Si la requ\u00eate de red\u00e9marrage \u00e9choue, vous devrez peut-\u00eatre red\u00e9marrer le serveur d'applications manuellement.
+Error_ConfigFormatError=Erreur du format de configuration :  %1%
+Error_ConfigLdapFailure=La connexion au serveur d'annuaires LDAP n'a pas pu \u00eatre \u00e9tablie.
+Error_ConfigLdapSuccess=La connexion au serveur d'annuaires LDAP a \u00e9t\u00e9 \u00e9tablie.
+
+Error_HTTP_404=La page demand\u00e9e est introuvable.

+ 173 - 0
src/main/resources/password/pwm/i18n/Message_en_CA.properties

@@ -0,0 +1,173 @@
+#
+# Password Management Servlets (PWM)
+# http://www.pwm-project.org
+#
+# Copyright (c) 2006-2009 Novell, Inc.
+# Copyright (c) 2009-2017 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
+#
+
+EventLog_Startup=Application Startup
+EventLog_Shutdown=Application Shutdown
+EventLog_FatalEvent=Fatal Event
+EventLog_ModifyConfiguration=Configuration Modified
+EventLog_IntruderAttempt=Intruder Attempt
+EventLog_IntruderLockout=Intruder Lockout
+EventLog_ActivateUser=Activate Account
+EventLog_Authenticate=Authentication
+EventLog_AgreementPassed=Agreement Passed
+EventLog_ChangePassword=Change Password
+EventLog_UnlockPassword=Unlock Password
+EventLog_CreateUser=Create Account
+EventLog_HelpdeskAction=Help Desk Action
+EventLog_HelpdeskClearResponses=Help Desk Clear Responses
+EventLog_HelpdeskClearOtpSecret=Help Desk Clear OTP Secret
+EventLog_HelpdeskSetPassword=Help Desk Set Password
+EventLog_HelpdeskUnlockPassword=Help Desk Unlock Password
+EventLog_HelpdeskDeleteUser=Help Desk Delete User
+EventLog_HelpdeskViewDetail=Help Desk View Detail
+EventLog_HelpdeskVerifyOtp=Help Desk Verify OTP
+EventLog_HelpdeskVerifyOtpIncorrect=Help Desk Incorrect OTP Verify
+EventLog_HelpdeskVerifyToken=Help Desk Verify Token
+EventLog_HelpdeskVerifyTokenIncorrect=Help Desk Incorrect Token Verify
+EventLog_HelpdeskVerifyAttributes=Help Desk Verify Attributes
+EventLog_HelpdeskVerifyAttributesIncorrect=Help Desk Incorrect Attributes Verify
+EventLog_IntruderUserAttempt=Intruder User Attempt
+EventLog_IntruderUserLock=Intruder User Lockout
+EventLog_TokenIssued=Token Issued
+EventLog_TokenClaimed=Token Claimed
+EventLog_ClearResponses=Clear Responses
+EventLog_RecoverPassword=Recover Forgotten Password
+EventLog_SetupResponses=Set Up Password Responses
+Eventlog_SetupOtpSecret=Set Up OTP Secret
+EventLog_UpdateProfile=Update Attributes
+EventLog_DeleteAccount=Delete Account
+Requirement_ADComplexity=Must have at least three types of the following characters: <ul><li>Upper case (A-Z)</li><li>Lower case (a-z)</li><li>Number (0-9)</li><li>Symbol (!, #, $, etc.)</li></ul>
+Requirement_ADComplexity2008=Must have at least %1% types of the following characters: <ul><li>Upper case (A-Z)</li><li>Lower case (a-z)</li><li>Number (0-9)</li><li>Symbol (!, #, $, etc.)</li><li>Other language characters not listed above</li></ul>
+Requirement_AllowNumeric=Must not include any numeric characters.
+Requirement_AllowSpecial=Must not include any symbol (non-letter or non-number) characters.
+Requirement_CaseSensitive=Password is case sensitive.
+Requirement_DisAllowedAttributes=Must not include part of your name or username.
+Requirement_DisAllowedValues=Must not include any of the following values: %1%
+Requirement_FirstNumeric=The first character cannot be numeric.
+Requirement_FirstSpecial=The first character cannot be a symbol (non-letter or non-number).
+Requirement_LastNumeric=The last character cannot be numeric.
+Requirement_LastSpecial=The last character cannot be a symbol (non-letter or non-number).
+Requirement_MaxAlpha=Cannot include more than %1% letter.
+Requirement_MaxAlphaPlural=Cannot include more than %1% letters.
+Requirement_MaxLength=Must be no more than %1% character long.
+Requirement_MaxLengthPlural=Must be no more than %1% characters long.
+Requirement_MaxLower=Cannot include more than %1% lower-case letter.
+Requirement_MaxLowerPlural=Cannot include more than %1% lower-case letters.
+Requirement_MaxNumeric=Cannot include more than %1% number.
+Requirement_MaxNumericPlural=Cannot include more than %1% numbers.
+Requirement_MaxRepeat=Must not repeat any character more than %1% time.
+Requirement_MaxRepeatPlural=Must not repeat any character more than %1% times.
+Requirement_MaxSeqRepeat=Must not repeat any character sequentially more than %1% time.
+Requirement_MaxSeqRepeatPlural=Must not repeat any character sequentially more than %1% times.
+Requirement_MaxSpecial=Cannot include more than %1% symbol (non-letter or non-number) character.
+Requirement_MaxSpecialPlural=Cannot include more than %1% symbol (non-letter or non-number) characters.
+Requirement_MaxUpper=Cannot include more than %1% upper-case letter.
+Requirement_MaxUpperPlural=Cannot include more than %1% upper-case letters.
+Requirement_MinAlpha=Must include at least %1% letter.
+Requirement_MinAlphaPlural=Must include at least %1% letters.
+Requirement_MinimumFrequency=Can be changed no more often than once every %1%.
+Requirement_MinLength=Must be at least %1% character long.
+Requirement_MinLengthPlural=Must be at least %1% characters long.
+Requirement_MinLower=Must have at least %1% lower-case letter.
+Requirement_MinLowerPlural=Must have at least %1% lower-case letters.
+Requirement_MinNumeric=Must include at least %1% number.
+Requirement_MinNumericPlural=Must include at least %1% numbers.
+Requirement_MinSpecial=Must have at least %1% symbol (non-letter or non-number) character.
+Requirement_MinSpecialPlural=Must have at least %1% symbol (non-letter or non-number) characters.
+Requirement_MinUnique=Must have at least %1% unique character.
+Requirement_MinUniquePlural=Must have at least %1% unique characters.
+Requirement_MinUpper=Must have at least %1% upper-case letter.
+Requirement_MinUpperPlural=Must have at least %1% upper-case letters.
+Requirement_NotCaseSensitive=Password is not case sensitive.
+Requirement_OldChar=Cannot have more than %1% character from your current password.
+Requirement_OldCharPlural=Cannot have more than %1% characters from your current password.
+Requirement_RequiredChars=Must include at least one each of the following characters:
+Requirement_UniqueRequired=New password must not have been used previously.
+Requirement_WordList=Must not include a common word or commonly used sequence of characters.
+Rule_PolicyEnabled=Policy Enabled
+Rule_MinimumLength=Minimum Length
+Rule_MaximumLength=Maximum Length
+Rule_MinimumUpperCase=Minimum Upper Case
+Rule_MaximumUpperCase=Maximum Upper Case
+Rule_MinimumLowerCase=Minimum Lower Case
+Rule_MaximumLowerCase=Maximum Lower Case
+Rule_AllowNumeric=Allow Numeric
+Rule_MinimumNumeric=Minimum Numeric
+Rule_MaximumNumeric=Maximum Numeric
+Rule_MinimumUnique=Minimum Unique
+Rule_MaximumUnique=Maximum Unique
+Rule_AllowFirstCharNumeric=Allow First Character Numeric
+Rule_AllowLastCharNumeric=Allow Last Character Numeric
+Rule_AllowSpecial=Allow Special
+Rule_MinimumSpecial=Minimum Special
+Rule_MaximumSpecial=Maximum Special
+Rule_AllowFirstCharSpecial=Allow First Character Special
+Rule_AllowLastCharSpecial=Allow Last Character Special
+Rule_MaximumRepeat=Maximum Repeat
+Rule_MaximumSequentialRepeat=Maximum Sequential Repeat
+Rule_ChangeMessage=Change Message
+Rule_ExpirationInterval=Expiry Interval
+Rule_MinimumLifetime=Minimum Lifetime
+Rule_CaseSensitive=Case Sensitive
+Rule_EnforceAtLogin=Enforce At Login
+Rule_ChallengeResponseEnabled=Challenge Response Enabled
+Rule_UniqueRequired=Unique Required
+Rule_DisallowedValues=Disallowed Values
+Rule_DisallowedAttributes=Disallowed Attributes
+Rule_ADComplexity=AD Complexity
+Rule_DisallowCurrent=Disallow Current
+Rule_MaximumOldChars=Maximum Old Characters
+Rule_RegExMatch=Regular Expression Match
+Rule_RegExNoMatch=Regular Expression No Match
+Rule_MinimumAlpha=Minimum Alpha
+Rule_MaximumAlpha=Maximum Alpha
+Rule_MinimumNonAlpha=Minimum Non-Alpha
+Rule_MaximumNonAlpha=Maximum Non-Alpha
+Rule_EnableWordlist=Enable Word List
+Rule_MinimumStrength=Minimum Strength
+Rule_MaximumConsecutive=Maximum Consecutive
+Rule_CharGroupsValues=Character Group Values
+Rule_CharGroupsMinMatch=Character Groups Minimum Required
+Rule_AllowUserChange=Permit Admin Change Password
+Rule_AllowAdminChange=Permit User Change Password
+Rule_ADComplexityLevel=AD Complexity Level
+Rule_ADComplexityMaxViolations=Maximum AD Complexity Violations
+Success_ActivateUser=Your user account has been successfully activated. Be sure to complete the process or you will not be able to access your account.
+Success_ConfigFileUpload=The configuration file has been successfully uploaded.
+Success_ClearResponse=Your secret questions and answers have been successfully removed.
+Success_CreateGuest=The new guest account has been successfully created. The guest user will receive a notification if the email address has been entered. The guest account may still need activation.
+Success_CreateUser=Your new user account has been successfully created.
+Success_NewUserForm=Your account is ready to be created. Continue when ready.
+Success_PasswordChange=The password has been changed successfully.
+Success_ChangedHelpdeskPassword=The password has been changed successfully for user 
+Success_PasswordReset=Password for %1% has been set successfully.
+Success_PasswordSend=Your new password has been sent to %1%. Please close this window and then log in using your new password.
+Success_ResponsesMeetRules=Your answers meet the requirements. Click Save Answers when ready.
+Success_SetupResponse=Thank you. Your secret questions and answers have been successfully saved. If you ever forget your password, you can use the answers to these questions to reset your password.
+Success_Unknown=The operation has been successfully completed.
+Success_UnlockAccount=Your account has been unlocked.
+Success_UpdateGuest=The guest account has been updated successfully. The guest user will receive a notification if the email address has been entered.
+Success_UpdateProfile=Your user information has been successfully updated.
+Success_UpdateForm=Your profile is ready to be updated. Continue when ready.
+Success_Action=The action %1% has completed successfully.
+Success_OtpSetup=Your device enrolment has been successfully completed.
+Success_TokenResend=A new security code has been sent to you.

+ 173 - 0
src/main/resources/password/pwm/i18n/Message_fr_CA.properties

@@ -0,0 +1,173 @@
+#
+# Password Management Servlets (PWM)
+# http://www.pwm-project.org
+#
+# Copyright (c) 2006-2009 Novell, Inc.
+# Copyright (c) 2009-2017 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
+#
+
+EventLog_Startup=D\u00e9marrage de l'application
+EventLog_Shutdown=Arr\u00eat de l'application
+EventLog_FatalEvent=\u00c9v\u00e9nement fatal
+EventLog_ModifyConfiguration=Configuration modifi\u00e9e
+EventLog_IntruderAttempt=Tentative d'intrusion
+EventLog_IntruderLockout=Verrouillage en cas d'intrusion
+EventLog_ActivateUser=Activer le compte
+EventLog_Authenticate=Authentification
+EventLog_AgreementPassed=Accord pass\u00e9
+EventLog_ChangePassword=\u00c9diter le mot de passe
+EventLog_UnlockPassword=Mot de passe de d\u00e9verrouillage
+EventLog_CreateUser=Cr\u00e9er un compte
+EventLog_HelpdeskAction=Op\u00e9ration du service d'assistance
+EventLog_HelpdeskClearResponses=Service d'assistance - Effacer les r\u00e9ponses
+EventLog_HelpdeskClearOtpSecret=Service d'assistance - Effacer le code secret du mot de passe \u00e0 usage unique
+EventLog_HelpdeskSetPassword=Service d'assistance - D\u00e9finir le mot de passe
+EventLog_HelpdeskUnlockPassword=Service d'assistance - D\u00e9verrouiller le mot de passe
+EventLog_HelpdeskDeleteUser=Service d'assistance - Supprimer l'utilisateur
+EventLog_HelpdeskViewDetail=Service d'assistance - Afficher les d\u00e9tails
+EventLog_HelpdeskVerifyOtp=Service d'assistance - V\u00e9rifier le mot de passe \u00e0 usage unique
+EventLog_HelpdeskVerifyOtpIncorrect=Service d'assistance - V\u00e9rifier le mot de passe \u00e0 usage unique incorrect
+EventLog_HelpdeskVerifyToken=Service d'assistance - V\u00e9rifier le jeton
+EventLog_HelpdeskVerifyTokenIncorrect=Service d'assistance - V\u00e9rifier le jeton incorrect
+EventLog_HelpdeskVerifyAttributes=Service d'assistance - V\u00e9rifier les attributs
+EventLog_HelpdeskVerifyAttributesIncorrect=Service d'assistance - V\u00e9rifier les attributs incorrects
+EventLog_IntruderUserAttempt=Tentative d'intrusion par un utilisateur
+EventLog_IntruderUserLock=Verrouillage de l'utilisateur intrusif
+EventLog_TokenIssued=Jeton \u00e9mis
+EventLog_TokenClaimed=Jeton r\u00e9clam\u00e9
+EventLog_ClearResponses=Effacer les r\u00e9ponses
+EventLog_RecoverPassword=R\u00e9cup\u00e9rer un mot de passe oubli\u00e9
+EventLog_SetupResponses=Configurer les r\u00e9ponses concernant le mot de passe
+Eventlog_SetupOtpSecret=Configurer le code secret du mot de passe \u00e0 usage unique
+EventLog_UpdateProfile=Mettre \u00e0 jour les attributs
+EventLog_DeleteAccount=Supprimer le compte
+Requirement_ADComplexity=Doit comporter au moins trois types des caract\u00e8res suivants : <ul><li>Majuscule (A-Z)</li><li>Minuscule (a-z)</li><li>Chiffre (0-9)</li><li>Symbole (!, #, $, etc.)</li></ul>
+Requirement_ADComplexity2008=Doit comporter au moins %1% types des caract\u00e8res suivants : <ul><li>Majuscule (A-Z)</li><li>Minuscule (a-z)</li><li>Chiffre (0-9)</li><li>Symbole (!, #, $, etc.)</li><li>Autres caract\u00e8res linguistiques non r\u00e9pertori\u00e9s ci-dessus</li></ul>
+Requirement_AllowNumeric=Ne doit comporter aucun caract\u00e8re num\u00e9rique.
+Requirement_AllowSpecial=Ne doit comporter aucun symbole (ni alphab\u00e9tique ni num\u00e9rique).
+Requirement_CaseSensitive=Le mot de passe est sensible \u00e0 la casse.
+Requirement_DisAllowedAttributes=Ne doit contenir aucune partie de votre nom ou de votre nom d'utilisateur.
+Requirement_DisAllowedValues=Ne doit comporter aucune des valeurs suivantes : %1%
+Requirement_FirstNumeric=Le premier caract\u00e8re ne peut pas \u00eatre num\u00e9rique.
+Requirement_FirstSpecial=Le premier caract\u00e8re ne peut pas \u00eatre un symbole (ni alphab\u00e9tique ni num\u00e9rique).
+Requirement_LastNumeric=Le dernier caract\u00e8re ne peut pas \u00eatre num\u00e9rique.
+Requirement_LastSpecial=Le dernier caract\u00e8re ne peut pas \u00eatre un symbole (ni alphab\u00e9tique ni num\u00e9rique).
+Requirement_MaxAlpha=Ne peut pas contenir plus de %1% lettre.
+Requirement_MaxAlphaPlural=Ne peut pas contenir plus de %1% lettres.
+Requirement_MaxLength=Ne doit pas comporter plus de %1% caract\u00e8re.
+Requirement_MaxLengthPlural=Ne doit pas comporter plus de %1% caract\u00e8res.
+Requirement_MaxLower=Ne peut pas contenir plus de %1% lettre minuscule.
+Requirement_MaxLowerPlural=Ne peut pas contenir plus de %1% lettres minuscules.
+Requirement_MaxNumeric=Ne peut pas contenir plus de %1% chiffre.
+Requirement_MaxNumericPlural=Ne peut pas contenir plus de %1% chiffres.
+Requirement_MaxRepeat=Ne doit pas r\u00e9p\u00e9ter le m\u00eame caract\u00e8re plus de %1% fois.
+Requirement_MaxRepeatPlural=Ne doit pas r\u00e9p\u00e9ter le m\u00eame caract\u00e8re plus de %1% fois.
+Requirement_MaxSeqRepeat=Ne doit pas r\u00e9p\u00e9ter le m\u00eame caract\u00e8re successivement plus de %1% fois.
+Requirement_MaxSeqRepeatPlural=Ne doit pas r\u00e9p\u00e9ter le m\u00eame caract\u00e8re successivement plus de %1% fois.
+Requirement_MaxSpecial=Ne peut pas comporter plus de %1% symbole (ni alphab\u00e9tique ni num\u00e9rique).
+Requirement_MaxSpecialPlural=Ne peut pas comporter plus de %1% symboles (ni alphab\u00e9tiques ni num\u00e9riques).
+Requirement_MaxUpper=Ne peut pas contenir plus de %1% lettre majuscule.
+Requirement_MaxUpperPlural=Ne peut pas contenir plus de %1% lettres majuscules.
+Requirement_MinAlpha=Doit comporter au moins %1% lettre.
+Requirement_MinAlphaPlural=Doit comporter au moins %1% lettres.
+Requirement_MinimumFrequency=Ne peut pas \u00eatre \u00e9dit\u00e9 \u00e0 une fr\u00e9quence sup\u00e9rieure \u00e0 une fois chaque/tou(te)s les %1%.
+Requirement_MinLength=Doit comporter au moins %1% caract\u00e8re.
+Requirement_MinLengthPlural=Doit comporter au moins %1% caract\u00e8res.
+Requirement_MinLower=Doit comporter au moins %1% lettre minuscule.
+Requirement_MinLowerPlural=Doit comporter au moins %1% lettres minuscules.
+Requirement_MinNumeric=Doit comporter au moins %1% chiffre.
+Requirement_MinNumericPlural=Doit comporter au moins %1% chiffres.
+Requirement_MinSpecial=Doit comporter au moins %1% symbole (ni alphab\u00e9tique ni num\u00e9rique).
+Requirement_MinSpecialPlural=Doit comporter au moins %1% symboles (ni alphab\u00e9tiques ni num\u00e9riques).
+Requirement_MinUnique=Doit comporter au moins %1% caract\u00e8re unique.
+Requirement_MinUniquePlural=Doit comporter au moins %1% caract\u00e8res uniques.
+Requirement_MinUpper=Doit comporter au moins %1% lettre majuscule.
+Requirement_MinUpperPlural=Doit comporter au moins %1% lettres majuscules.
+Requirement_NotCaseSensitive=Le mot de passe n'est pas sensible \u00e0 la casse.
+Requirement_OldChar=Ne peut pas comporter plus de %1% caract\u00e8re de votre mot de passe actuel.
+Requirement_OldCharPlural=Ne peut pas comporter plus de %1% caract\u00e8res de votre mot de passe actuel.
+Requirement_RequiredChars=Doit comporter au moins un caract\u00e8re de chacune des cat\u00e9gories suivantes :
+Requirement_UniqueRequired=Le nouveau mot de passe ne doit pas avoir \u00e9t\u00e9 utilis\u00e9 par le pass\u00e9.
+Requirement_WordList=Ne doit pas comporter de mot courant ou de s\u00e9quence de caract\u00e8res couramment utilis\u00e9e.
+Rule_PolicyEnabled=Strat\u00e9gie activ\u00e9e
+Rule_MinimumLength=Longueur minimale
+Rule_MaximumLength=Longueur maximale
+Rule_MinimumUpperCase=Nombre minimal de majuscules
+Rule_MaximumUpperCase=Nombre maximal de majuscules
+Rule_MinimumLowerCase=Nombre minimal de minuscules
+Rule_MaximumLowerCase=Nombre maximal de minuscules
+Rule_AllowNumeric=Autoriser les caract\u00e8res num\u00e9riques
+Rule_MinimumNumeric=Nombre minimal de caract\u00e8res num\u00e9riques
+Rule_MaximumNumeric=Nombre maximal de caract\u00e8res num\u00e9riques
+Rule_MinimumUnique=Nombre minimal de caract\u00e8res uniques
+Rule_MaximumUnique=Nombre maximal de caract\u00e8res uniques
+Rule_AllowFirstCharNumeric=Autoriser un caract\u00e8re num\u00e9rique en premi\u00e8re position
+Rule_AllowLastCharNumeric=Autoriser un caract\u00e8re num\u00e9rique en derni\u00e8re position
+Rule_AllowSpecial=Autoriser les caract\u00e8res sp\u00e9ciaux
+Rule_MinimumSpecial=Nombre minimal de caract\u00e8res sp\u00e9ciaux
+Rule_MaximumSpecial=Nombre maximal de caract\u00e8res sp\u00e9ciaux
+Rule_AllowFirstCharSpecial=Autoriser un caract\u00e8re sp\u00e9cial en premi\u00e8re position
+Rule_AllowLastCharSpecial=Autoriser un caract\u00e8re sp\u00e9cial en derni\u00e8re position
+Rule_MaximumRepeat=Nombre maximal de r\u00e9p\u00e9titions
+Rule_MaximumSequentialRepeat=Nombre maximal de r\u00e9p\u00e9titions successives
+Rule_ChangeMessage=Message de modification
+Rule_ExpirationInterval=Intervalle d'expiration
+Rule_MinimumLifetime=Dur\u00e9e de vie minimale
+Rule_CaseSensitive=Sensible \u00e0 la casse
+Rule_EnforceAtLogin=Appliquer lors de la connexion
+Rule_ChallengeResponseEnabled=R\u00e9ponse de v\u00e9rification d'identit\u00e9 activ\u00e9e
+Rule_UniqueRequired=Caract\u00e8res uniques requis
+Rule_DisallowedValues=Valeurs interdites
+Rule_DisallowedAttributes=Attributs interdits
+Rule_ADComplexity=Complexit\u00e9 AD
+Rule_DisallowCurrent=Interdire le mot de passe actuel
+Rule_MaximumOldChars=Nombre maximal d'anciens caract\u00e8res
+Rule_RegExMatch=L'expression r\u00e9guli\u00e8re correspond
+Rule_RegExNoMatch=L'expression r\u00e9guli\u00e8re ne correspond pas
+Rule_MinimumAlpha=Nombre minimal de caract\u00e8res alphanum\u00e9riques
+Rule_MaximumAlpha=Nombre maximal de caract\u00e8res alphanum\u00e9riques
+Rule_MinimumNonAlpha=Nombre minimal de caract\u00e8res non alphanum\u00e9riques
+Rule_MaximumNonAlpha=Nombre maximal de caract\u00e8res non alphanum\u00e9riques
+Rule_EnableWordlist=Activer la liste de mots
+Rule_MinimumStrength=Force minimale
+Rule_MaximumConsecutive=Nombre maximal de caract\u00e8res cons\u00e9cutifs
+Rule_CharGroupsValues=Valeurs du groupe de caract\u00e8res
+Rule_CharGroupsMinMatch=Groupes minimaux de caract\u00e8res requis
+Rule_AllowUserChange=Autoriser l'\u00e9dition du mot de passe par l'administrateur
+Rule_AllowAdminChange=Autoriser l'\u00e9dition du mot de passe par l'utilisateur
+Rule_ADComplexityLevel=Niveau de complexit\u00e9 AD
+Rule_ADComplexityMaxViolations=Nombre maximal de violations de la complexit\u00e9 AD
+Success_ActivateUser=Votre compte utilisateur a \u00e9t\u00e9 activ\u00e9. Prenez soin de finaliser le processus afin de pouvoir acc\u00e9der \u00e0 votre compte.
+Success_ConfigFileUpload=Le fichier de configuration a \u00e9t\u00e9 t\u00e9l\u00e9vers\u00e9.
+Success_ClearResponse=Vos questions et r\u00e9ponses secr\u00e8tes ont \u00e9t\u00e9 effac\u00e9es.
+Success_CreateGuest=Le nouveau compte invit\u00e9 a \u00e9t\u00e9 cr\u00e9\u00e9. L'utilisateur invit\u00e9 va recevoir une notification si l'adresse \u00e9lectronique a \u00e9t\u00e9 entr\u00e9e. Il se peut que le compte invit\u00e9 doive \u00eatre activ\u00e9.
+Success_CreateUser=Votre nouveau compte utilisateur a \u00e9t\u00e9 cr\u00e9\u00e9.
+Success_NewUserForm=Votre compte est pr\u00eat \u00e0 \u00eatre cr\u00e9\u00e9. Continuez lorsque vous \u00eates pr\u00eat.
+Success_PasswordChange=Le mot de passe a \u00e9t\u00e9 modifi\u00e9.
+Success_ChangedHelpdeskPassword=Le mot de passe de l'utilisateur a \u00e9t\u00e9 modifi\u00e9 
+Success_PasswordReset=Le mot de passe pour %1% a \u00e9t\u00e9 d\u00e9fini.
+Success_PasswordSend=Votre nouveau mot de passe a \u00e9t\u00e9 envoy\u00e9 \u00e0 %1%. Fermez cette fen\u00eatre et connectez-vous \u00e0 l'aide de votre nouveau mot de passe.
+Success_ResponsesMeetRules=Vos r\u00e9ponses r\u00e9pondent aux exigences. Cliquez sur Enregistrer les r\u00e9ponses lorsque vous \u00eates pr\u00eat.
+Success_SetupResponse=Merci. Vos questions et r\u00e9ponses secr\u00e8tes ont \u00e9t\u00e9 enregistr\u00e9es. Si vous oubliez votre mot de passe, vous pourrez utiliser ces r\u00e9ponses pour le r\u00e9initialiser.
+Success_Unknown=L'op\u00e9ration a \u00e9t\u00e9 effectu\u00e9e.
+Success_UnlockAccount=Votre compte a \u00e9t\u00e9 d\u00e9verrouill\u00e9.
+Success_UpdateGuest=Le compte invit\u00e9 a \u00e9t\u00e9 mis \u00e0 jour. L'utilisateur invit\u00e9 va recevoir une notification si l'adresse \u00e9lectronique a \u00e9t\u00e9 saisie.
+Success_UpdateProfile=Vos renseignements utilisateur ont \u00e9t\u00e9 mis \u00e0 jour.
+Success_UpdateForm=Votre profil est pr\u00eat \u00e0 \u00eatre mis \u00e0 jour. Continuez lorsque vous \u00eates pr\u00eat.
+Success_Action=L'op\u00e9ration %1% a \u00e9t\u00e9 effectu\u00e9e.
+Success_OtpSetup=L'inscription de votre p\u00e9riph\u00e9rique a \u00e9t\u00e9 effectu\u00e9e.
+Success_TokenResend=Un nouveau code de s\u00e9curit\u00e9 vient de vous \u00eatre envoy\u00e9.

+ 6 - 0
src/main/webapp/public/reference/ldap-schema.jsp

@@ -43,6 +43,12 @@
     <div id="centerbody">
         <%@ include file="reference-nav.jsp"%>
         <p>Below is the default LDAP schema definition.</p>
+
+        <p>
+        <form action="ldif-schema.zip" method="get">
+            <button class="btn" type="submit">Download Schema LDIFs</button>
+        </form>
+        </p>
         <%final List<SchemaDefinition> schemaDefinitions = SchemaDefinition.getPwmSchemaDefinitions();%>
         <div class="border">
             <code>

+ 5 - 0
src/main/webapp/public/reference/license.jsp

@@ -83,6 +83,11 @@
                 Error: attribution file not found: attribution.xml
             </div>
         <% } %>
+        <p>
+        <form action="source.zip" method="get">
+            <button class="btn" type="submit">Download Source</button>
+        </form>
+        </p>
         <span class="footnote">nanos gigantum humeris insidentes</span>
     </div>
     <div class="push"></div>

+ 1 - 1
src/main/webapp/public/resources/js/helpdesk.js

@@ -539,7 +539,7 @@ PWM_HELPDESK.sendVerificationToken = function(userKey, methods) {
             dialogText += '<br/><button class="btn" type="button" name="emailChoiceButton" id="emailChoiceButton">'
                 + '<span class="btn-icon pwm-icon pwm-icon-envelope-o"></span>' + PWM_MAIN.showString('Button_Email') + '</button>';
         }
-        if (tokenChoiceFlag || sendMethodSetting == 'EMAILONLY') {
+        if (tokenChoiceFlag || sendMethodSetting == 'SMSONLY') {
             dialogText += '<br/><br/><button class="btn" type="button" name="smsChoiceButton" id="smsChoiceButton">'
                 + '<span class="btn-icon pwm-icon pwm-icon-phone"></span>' + PWM_MAIN.showString('Button_SMS') + '</button>';
         }

+ 8 - 1
src/main/webapp/public/resources/js/main.js

@@ -1809,7 +1809,14 @@ PWM_MAIN.ajaxRequest = function(url,loadFunction,options) {
     var content = 'content' in options ? options['content'] : null;
     var method = 'method' in options ? options['method'] : 'POST';
     var errorFunction = 'errorFunction' in options ? options['errorFunction'] : function(error){
-        PWM_MAIN.showErrorDialog(error);
+        var status = error['response']['status'];
+        if (status === 0 || status < 200 || status >= 300) {
+            var msg = PWM_MAIN.showString("Display_ClientDisconnect") + "  (" + status + ")";
+            console.log(msg);
+            PWM_MAIN.showErrorDialog(msg);
+        } else {
+            PWM_MAIN.showErrorDialog(error);
+        }
     };
     var preventCache = 'preventCache' in options ? options['preventCache'] : true;
     var addPwmFormID = 'addPwmFormID' in options ? options['addPwmFormID'] : true;

+ 0 - 81
supplemental/ldif/edirectory-rights.ldif

@@ -1,81 +0,0 @@
-#
-# Sample LDIF for creating rights for PWM in eDirectory.  
-#
-# In this sample:
-#  - the proxy user is created is "cn=PwmProxy,ou=OU,o=O"
-#  - users exist in "ou=USERS,o=O"
-#
-# Search and replace the values as appropriate for your environment.
-#
-# This file is not intended as a direct script to configure rights in your environment, it
-# is just useful as a template or sample to get you started.  It is up to the directory owner
-# to determine the entries and ACLs needed to run this software optimally.
-
-# Grant users rights for users to configure responses
-dn: ou=USERS,o=O
-changetype: modify
-add: ACL
-ACL: 7#subtree#[This]#pwmResponseSet
-
-# Grant users rights for users to configure an OTP secret
-dn: ou=USERS,o=O
-changetype: modify
-add: ACL
-ACL: 7#subtree#[This]#pwmOtpSecret
-
-#Create the PWM proxy user.
-dn: cn=PwmProxy,ou=OU,o=O
-changetype: add
-givenName: PwmProxy
-sn: PwmProxy
-objectClass: inetOrgPerson
-objectClass: organizationalPerson
-objectClass: top
-
-# Grant rights to the users container for the proxy user
-dn: ou=USERS,o=O
-changetype: modify
-add: ACL
-ACL: 1#subtree#cn=PwmProxy,ou=OU,o=O#[Entry Rights]
-
-# Grant rights to the users container for the proxy user
-dn: ou=USERS,o=O
-changetype: modify
-add: ACL
-ACL: 3#subtree#cn=PwmProxy,ou=OU,o=O#cn
-
-# Grant rights to the users container for the proxy user
-dn: ou=USERS,o=O
-changetype: modify
-add: ACL
-ACL: 3#subtree#cn=PwmProxy,ou=OU,o=O#pwmResponseSet
-
-# Grant rights to the users container for the proxy user
-dn: ou=USERS,o=O
-changetype: modify
-add: ACL
-ACL: 7#subtree#cn=PwmProxy,ou=OU,o=O#pwmLastPwdUpdate
-
-# Grant rights to the users container for the proxy user
-dn: ou=USERS,o=O
-changetype: modify
-add: ACL
-ACL: 3#subtree#cn=PwmProxy,ou=OU,o=O#pwmOtpSecret
-
-# Grant rights to the users container for the proxy user
-dn: ou=USERS,o=O
-changetype: modify
-add: ACL
-ACL: 7#subtree#cn=PwmProxy,ou=OU,o=O#objectClass
-
-# Grant rights to the users container for the proxy user
-dn: ou=USERS,o=O
-changetype: modify
-add: ACL
-ACL: 7#subtree#cn=PwmProxy,ou=OU,o=O#pwmEventLog
-
-# Grant rights to the users container for the proxy user
-dn: ou=USERS,o=O
-changetype: modify
-add: ACL
-ACL: 7#subtree#cn=PwmProxy,ou=OU,o=O#passwordManagement