From a4a8bb297d85cfe3f8d7b2d8cc4533a8ab6d5af4 Mon Sep 17 00:00:00 2001 From: Marc Smith Date: Wed, 15 Mar 2017 15:12:23 -0700 Subject: [PATCH 1/9] Allow S3Overrides as dictionary --- Dockerfile | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/Dockerfile b/Dockerfile index bf30a303d1..96245589c1 100644 --- a/Dockerfile +++ b/Dockerfile @@ -13,6 +13,17 @@ WORKDIR /parse-server RUN npm install && \ npm run build +#Temporyary work around: Remove once +# A. optionsFromArguments gets pulled into the repo + +WORKDIR /parse-server/node_modules/parse-server-s3-adapter/lib/ + +RUN rm optionsFromArguments.js && \ + wget https://raw.githubusercontent.com/mrmarcsmith/parse-server-s3-adapter/master/lib/optionsFromArguments.js + +#return to where we were +WORKDIR /parse-server +#end Temp work araound ENV PORT=1337 From 63c4041f392504bcb8ac487f39e3f3ceedb13daa Mon Sep 17 00:00:00 2001 From: Marc Smith Date: Wed, 15 Mar 2017 15:13:45 -0700 Subject: [PATCH 2/9] change malign to Amazon SES --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 5a3035e5ba..638797f78b 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,7 @@ "parse-server-fs-adapter": "1.0.1", "parse-server-push-adapter": "1.3.0", "parse-server-s3-adapter": "1.0.6", - "parse-server-simple-mailgun-adapter": "1.0.0", + "parse-server-amazon-ses-adapter": "1.0.0", "pg-promise": "5.6.4", "redis": "2.7.1", "request": "2.81.0", From ff91dc968bf4a61c1eab8b7444538b799fb62abe Mon Sep 17 00:00:00 2001 From: Marc Smith Date: Fri, 9 Feb 2018 15:56:42 -0700 Subject: [PATCH 3/9] removed the workaround --- Dockerfile | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/Dockerfile b/Dockerfile index 96245589c1..bf30a303d1 100644 --- a/Dockerfile +++ b/Dockerfile @@ -13,17 +13,6 @@ WORKDIR /parse-server RUN npm install && \ npm run build -#Temporyary work around: Remove once -# A. optionsFromArguments gets pulled into the repo - -WORKDIR /parse-server/node_modules/parse-server-s3-adapter/lib/ - -RUN rm optionsFromArguments.js && \ - wget https://raw.githubusercontent.com/mrmarcsmith/parse-server-s3-adapter/master/lib/optionsFromArguments.js - -#return to where we were -WORKDIR /parse-server -#end Temp work araound ENV PORT=1337 From 58a409a18ac0053ba88e1b50202db03f3ed1ee26 Mon Sep 17 00:00:00 2001 From: Marc Smith Date: Fri, 9 Feb 2018 16:01:56 -0700 Subject: [PATCH 4/9] removed conflict --- package.json | 1 - 1 file changed, 1 deletion(-) diff --git a/package.json b/package.json index 73532df619..d3543bd792 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,6 @@ "parse-server-fs-adapter": "1.0.1", "parse-server-push-adapter": "1.3.0", "parse-server-s3-adapter": "1.0.6", - "parse-server-amazon-ses-adapter": "1.0.0", "pg-promise": "5.6.4", "redis": "2.7.1", "request": "2.81.0", From 1d50737cfcb20a8a40cb2dfaed05eafdb51d21b1 Mon Sep 17 00:00:00 2001 From: Marc Smith Date: Fri, 9 Feb 2018 16:02:53 -0700 Subject: [PATCH 5/9] bug fix --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index d3543bd792..a821e2f510 100644 --- a/package.json +++ b/package.json @@ -33,6 +33,7 @@ "parse-server-fs-adapter": "1.0.1", "parse-server-push-adapter": "1.3.0", "parse-server-s3-adapter": "1.0.6", + "parse-server-simple-mailgun-adapter": "1.0.0", "pg-promise": "5.6.4", "redis": "2.7.1", "request": "2.81.0", From cc06b7f0cde62e7edd87b83364774fde56516a3a Mon Sep 17 00:00:00 2001 From: Marc Smith Date: Tue, 13 Feb 2018 16:14:07 -0700 Subject: [PATCH 6/9] added parse-server-amazon-ses-adapter --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index 41dc5b8b2e..d8dd5a0229 100644 --- a/package.json +++ b/package.json @@ -22,6 +22,7 @@ "@parse/push-adapter": "2.0.2", "@parse/s3-files-adapter": "1.2.1", "@parse/simple-mailgun-adapter": "1.0.1", + "parse-server-amazon-ses-adapter": "1.0.0", "bcryptjs": "2.4.3", "body-parser": "1.18.2", "commander": "2.13.0", From 6d2429ffd33d1a530e5297a84d519c1aebeb142b Mon Sep 17 00:00:00 2001 From: Marc Smith Date: Wed, 21 Feb 2018 11:50:03 -0700 Subject: [PATCH 7/9] added custom password fail message Added a custom passwordRequirementsHumanErrorMessage and clarified the reason for username containing fails --- src/RestWrite.js | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/RestWrite.js b/src/RestWrite.js index 424284d5ba..c32f513536 100644 --- a/src/RestWrite.js +++ b/src/RestWrite.js @@ -484,7 +484,19 @@ RestWrite.prototype._validatePasswordPolicy = function() { RestWrite.prototype._validatePasswordRequirements = function() { // check if the password conforms to the defined password policy if configured - const policyError = 'Password does not meet the Password Policy requirements.'; + let containsUsernameError = 'Password cannot contain your username.'; + let policyError = 'Password does not meet the Password Policy requirements.'; + + if(this.config.passwordPolicy.passwordRequirementsHumanErrorMessage){ + // If we specified a custom error in our configuration use it. + // Example: "Passwords must include a Capital Letter, Lowercase Letter, and a number." + // + // This is expesially useful on the generic "password reset" page, + // as it allows the programmer to communicate specific requirements instead of: + // a. making the user guess whats wrong + // b. making a custom password reset page that shows the requirements + policyError = this.config.passwordPolicy.passwordRequirementsHumanErrorMessage; + } // check whether the password meets the password strength requirements if (this.config.passwordPolicy.patternValidator && !this.config.passwordPolicy.patternValidator(this.data.password) || @@ -496,7 +508,7 @@ RestWrite.prototype._validatePasswordRequirements = function() { if (this.config.passwordPolicy.doNotAllowUsername === true) { if (this.data.username) { // username is not passed during password reset if (this.data.password.indexOf(this.data.username) >= 0) - return Promise.reject(new Parse.Error(Parse.Error.VALIDATION_ERROR, policyError)); + return Promise.reject(new Parse.Error(Parse.Error.VALIDATION_ERROR, containsUsernameError)); } else { // retrieve the User object using objectId during password reset return this.config.database.find('_User', {objectId: this.objectId()}) .then(results => { @@ -504,7 +516,7 @@ RestWrite.prototype._validatePasswordRequirements = function() { throw undefined; } if (this.data.password.indexOf(results[0].username) >= 0) - return Promise.reject(new Parse.Error(Parse.Error.VALIDATION_ERROR, policyError)); + return Promise.reject(new Parse.Error(Parse.Error.VALIDATION_ERROR, containsUsernameError)); return Promise.resolve(); }); } From bfe24f2cc444d145eff0f4ddd5c51d10fcd0752f Mon Sep 17 00:00:00 2001 From: Marc Smith Date: Wed, 21 Feb 2018 11:55:17 -0700 Subject: [PATCH 8/9] passwordRequirementsHumanErrorMessage example --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 9c11257723..734849d960 100644 --- a/README.md +++ b/README.md @@ -318,7 +318,8 @@ var server = ParseServer({ // 1. a RegExp object or a regex string representing the pattern to enforce validatorPattern: /^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.{8,})/, // enforce password with at least 8 char with at least 1 lower case, 1 upper case and 1 digit // 2. a callback function to be invoked to validate the password - validatorCallback: (password) => { return validatePassword(password) }, + validatorCallback: (password) => { return validatePassword(password) }, + passwordRequirementsHumanErrorMessage: 'Password must contain a capital letter, lowercase letter, a number and be at least 8 characters long.', //This error message is sent instead of the generic "Password does not meet the Password Policy requirements." message. doNotAllowUsername: true, // optional setting to disallow username in passwords maxPasswordAge: 90, // optional setting in days for password expiry. Login fails if user does not reset the password within this period after signup/last reset. maxPasswordHistory: 5, // optional setting to prevent reuse of previous n passwords. Maximum value that can be specified is 20. Not specifying it or specifying 0 will not enforce history. From 627669b0c54094c57a4d61730382597fa27a8e11 Mon Sep 17 00:00:00 2001 From: Marc Smith Date: Wed, 21 Feb 2018 11:59:01 -0700 Subject: [PATCH 9/9] removed SES for upstream PR Request --- package.json | 1 - 1 file changed, 1 deletion(-) diff --git a/package.json b/package.json index d8dd5a0229..41dc5b8b2e 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,6 @@ "@parse/push-adapter": "2.0.2", "@parse/s3-files-adapter": "1.2.1", "@parse/simple-mailgun-adapter": "1.0.1", - "parse-server-amazon-ses-adapter": "1.0.0", "bcryptjs": "2.4.3", "body-parser": "1.18.2", "commander": "2.13.0",