From b0adf7e02ab0beea2cd9b759d0f788c69d291491 Mon Sep 17 00:00:00 2001 From: Manuel <5673677+mtrezza@users.noreply.github.com> Date: Sat, 23 Mar 2024 04:16:50 +0100 Subject: [PATCH] feat: Add password validation for user with unverified email via `Parse.User.verifyPassword` using master key and option `ignoreEmailVerification: true` (#2076) --- integration/test/ParseUserTest.js | 13 + integration/test/helper.js | 6 + .../support/MockEmailAdapterWithOptions.js | 21 ++ package-lock.json | 290 +++++------------- package.json | 2 +- src/ParseUser.js | 9 +- src/RESTController.js | 5 + 7 files changed, 118 insertions(+), 228 deletions(-) create mode 100644 integration/test/support/MockEmailAdapterWithOptions.js diff --git a/integration/test/ParseUserTest.js b/integration/test/ParseUserTest.js index d67baae91..d05a477fa 100644 --- a/integration/test/ParseUserTest.js +++ b/integration/test/ParseUserTest.js @@ -1057,6 +1057,19 @@ describe('Parse User', () => { } }); + it('can verify user password for user with unverified email', async () => { + await reconfigureServer({ + appName: 'AppName', + publicServerURL: 'http://localhost:1337/', + verifyUserEmails: true, + preventLoginWithUnverifiedEmail: true, + }); + await Parse.User.signUp('asd123', 'xyz123'); + const res = await Parse.User.verifyPassword('asd123', 'xyz123', { useMasterKey: true, ignoreEmailVerification: true }); + expect(typeof res).toBe('object'); + expect(res.username).toBe('asd123'); + }); + it('can encrypt user', async () => { Parse.User.enableUnsafeCurrentUser(); Parse.enableEncryptedUser(); diff --git a/integration/test/helper.js b/integration/test/helper.js index eac377681..c32516c95 100644 --- a/integration/test/helper.js +++ b/integration/test/helper.js @@ -11,6 +11,7 @@ const Parse = require('../../node'); const fs = require('fs'); const path = require('path'); const dns = require('dns'); +const MockEmailAdapterWithOptions = require('./support/MockEmailAdapterWithOptions'); // Ensure localhost resolves to ipv4 address first on node v17+ if (dns.setDefaultResultOrder) { @@ -83,6 +84,11 @@ const defaultConfiguration = { revokeSessionOnPasswordReset: false, allowCustomObjectId: false, allowClientClassCreation: true, + emailAdapter: MockEmailAdapterWithOptions({ + fromAddress: 'parse@example.com', + apiKey: 'k', + domain: 'd', + }), }; const openConnections = {}; diff --git a/integration/test/support/MockEmailAdapterWithOptions.js b/integration/test/support/MockEmailAdapterWithOptions.js new file mode 100644 index 000000000..71d23892e --- /dev/null +++ b/integration/test/support/MockEmailAdapterWithOptions.js @@ -0,0 +1,21 @@ +module.exports = options => { + if (!options) { + throw 'Options were not provided'; + } + const adapter = { + sendVerificationEmail: () => Promise.resolve(), + sendPasswordResetEmail: () => Promise.resolve(), + sendMail: () => Promise.resolve(), + }; + if (options.sendMail) { + adapter.sendMail = options.sendMail; + } + if (options.sendPasswordResetEmail) { + adapter.sendPasswordResetEmail = options.sendPasswordResetEmail; + } + if (options.sendVerificationEmail) { + adapter.sendVerificationEmail = options.sendVerificationEmail; + } + + return adapter; +}; diff --git a/package-lock.json b/package-lock.json index 6507a9a12..00281f547 100644 --- a/package-lock.json +++ b/package-lock.json @@ -65,7 +65,7 @@ "lint-staged": "13.2.2", "metro-react-native-babel-preset": "0.76.4", "mongodb-runner": "5.4.3", - "parse-server": "7.0.0-alpha.26", + "parse-server": "7.1.0-alpha.1", "prettier": "3.0.2", "puppeteer": "20.4.0", "regenerator-runtime": "0.13.11", @@ -140,9 +140,9 @@ } }, "node_modules/@apollo/server": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/@apollo/server/-/server-4.10.0.tgz", - "integrity": "sha512-pLx//lZ/pvUfWL9G8Np8+y3ujc0pYc8U7dwD6ztt9FAw8NmCPzPaDzlXLBAjGU6WnkqVBOnz8b3dOwRNjLYSUA==", + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/@apollo/server/-/server-4.10.1.tgz", + "integrity": "sha512-XGMOgTyzV4EBHQq0xQVKFry9hZF7AA/6nxxGLamqdxodhdSdGbU9jrlb5/XDveeGuXP3+5JDdrB2HcziVLJcMA==", "dev": true, "dependencies": { "@apollo/cache-control-types": "^1.0.3", @@ -11873,12 +11873,12 @@ } }, "node_modules/express-rate-limit": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-6.7.0.tgz", - "integrity": "sha512-vhwIdRoqcYB/72TK3tRZI+0ttS8Ytrk24GfmsxDXK9o9IhHNO5bXRiXQSExPQ4GbaE5tvIS7j1SGrxsuWs+sGA==", + "version": "6.11.2", + "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-6.11.2.tgz", + "integrity": "sha512-a7uwwfNTh1U60ssiIkuLFWHt4hAC5yxlLGU2VP0X4YNlyEDZAqF4tK3GD3NSitVBrCQmQ0++0uOyFOgC2y4DDw==", "dev": true, "engines": { - "node": ">= 12.9.0" + "node": ">= 14" }, "peerDependencies": { "express": "^4 || ^5" @@ -12660,9 +12660,9 @@ "dev": true }, "node_modules/follow-redirects": { - "version": "1.15.5", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz", - "integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==", + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", "dev": true, "funding": [ { @@ -23358,23 +23358,23 @@ } }, "node_modules/parse": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/parse/-/parse-4.1.0.tgz", - "integrity": "sha512-s0Ti+nWrKWj9DlFcmkEE05fGwa/K5ycZSdqCz01F8YL7Hevqv4WLXAmYGOwzq5UJSZ005seKgb20KwVwLdy/Zg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/parse/-/parse-5.0.0.tgz", + "integrity": "sha512-6gOARZWiHjmGusbTskhC1qlRn527olMEsdt2LLj9cP2GY3n4VFOwFwV8z/vm2+YfzPfPcv8z7qLih1NzmqzO0g==", "dev": true, "dependencies": { - "@babel/runtime-corejs3": "7.21.0", - "idb-keyval": "6.2.0", + "@babel/runtime-corejs3": "7.23.2", + "idb-keyval": "6.2.1", "react-native-crypto-js": "1.0.0", - "uuid": "9.0.0", - "ws": "8.12.0", + "uuid": "9.0.1", + "ws": "8.16.0", "xmlhttprequest": "1.8.0" }, "engines": { - "node": ">=14.21.0 <17 || >=18 <20" + "node": ">=18 <21" }, "optionalDependencies": { - "crypto-js": "4.1.1" + "crypto-js": "4.2.0" } }, "node_modules/parse-asn1": { @@ -23477,15 +23477,15 @@ } }, "node_modules/parse-server": { - "version": "7.0.0-alpha.26", - "resolved": "https://registry.npmjs.org/parse-server/-/parse-server-7.0.0-alpha.26.tgz", - "integrity": "sha512-6/Xb/yvy8JtCZ1Puy2gwPmgAYzmzbxntJ56wuN1zWzDA716rxUEmzj0d5Zy0ISZTdTufTlXI5LnBOORRK03K4w==", + "version": "7.1.0-alpha.1", + "resolved": "https://registry.npmjs.org/parse-server/-/parse-server-7.1.0-alpha.1.tgz", + "integrity": "sha512-kHK5eHIraVL+kEvhug/hyjJkXxEFRz8py4t+B0yJBUMVajhsU4GYvN7SwY/IU5lRRZGJo8SjR8t+ThfORrHkpw==", "dev": true, "hasInstallScript": true, "dependencies": { - "@apollo/server": "4.10.0", + "@apollo/server": "4.10.1", "@babel/eslint-parser": "7.21.8", - "@graphql-tools/merge": "8.4.1", + "@graphql-tools/merge": "9.0.3", "@graphql-tools/schema": "10.0.3", "@graphql-tools/utils": "8.12.0", "@parse/fs-files-adapter": "2.0.1", @@ -23496,8 +23496,8 @@ "cors": "2.8.5", "deepcopy": "2.1.0", "express": "4.18.2", - "express-rate-limit": "6.7.0", - "follow-redirects": "1.15.5", + "express-rate-limit": "6.11.2", + "follow-redirects": "1.15.6", "graphql": "16.8.1", "graphql-list-fields": "2.0.4", "graphql-relay": "0.10.0", @@ -23513,10 +23513,10 @@ "mongodb": "5.9.0", "mustache": "4.2.0", "otpauth": "9.2.2", - "parse": "4.1.0", + "parse": "5.0.0", "path-to-regexp": "6.2.1", "pg-monitor": "2.0.0", - "pg-promise": "11.5.4", + "pg-promise": "11.5.5", "pluralize": "8.0.0", "rate-limit-redis": "3.0.2", "redis": "4.6.13", @@ -23524,7 +23524,7 @@ "subscriptions-transport-ws": "0.11.0", "tv4": "1.3.0", "uuid": "9.0.1", - "winston": "3.11.0", + "winston": "3.12.0", "winston-daily-rotate-file": "5.0.0", "ws": "8.16.0" }, @@ -23542,32 +23542,6 @@ "@node-rs/bcrypt": "1.1.0" } }, - "node_modules/parse-server/node_modules/@graphql-tools/merge": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/@graphql-tools/merge/-/merge-8.4.1.tgz", - "integrity": "sha512-hssnPpZ818mxgl5+GfyOOSnnflAxiaTn1A1AojZcIbh4J52sS1Q0gSuBR5VrnUDjuxiqoCotpXdAQl+K+U6KLQ==", - "dev": true, - "dependencies": { - "@graphql-tools/utils": "^9.2.1", - "tslib": "^2.4.0" - }, - "peerDependencies": { - "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" - } - }, - "node_modules/parse-server/node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-9.2.1.tgz", - "integrity": "sha512-WUw506Ql6xzmOORlriNrD6Ugx+HjVgYxt9KCXD9mHAak+eaXSwuGGPyE60hy9xaDEoXKBsG7SkG69ybitaVl6A==", - "dev": true, - "dependencies": { - "@graphql-typed-document-node/core": "^3.1.1", - "tslib": "^2.4.0" - }, - "peerDependencies": { - "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" - } - }, "node_modules/parse-server/node_modules/body-parser": { "version": "1.20.2", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", @@ -23673,65 +23647,6 @@ "node": ">=10" } }, - "node_modules/parse/node_modules/@babel/runtime-corejs3": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.21.0.tgz", - "integrity": "sha512-TDD4UJzos3JJtM+tHX+w2Uc+KWj7GV+VKKFdMVd2Rx8sdA19hcc3P3AHFYd5LVOw+pYuSd5lICC3gm52B6Rwxw==", - "dev": true, - "dependencies": { - "core-js-pure": "^3.25.1", - "regenerator-runtime": "^0.13.11" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/parse/node_modules/crypto-js": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.1.1.tgz", - "integrity": "sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==", - "dev": true, - "optional": true - }, - "node_modules/parse/node_modules/idb-keyval": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/idb-keyval/-/idb-keyval-6.2.0.tgz", - "integrity": "sha512-uw+MIyQn2jl3+hroD7hF8J7PUviBU7BPKWw4f/ISf32D4LoGu98yHjrzWWJDASu9QNrX10tCJqk9YY0ClWm8Ng==", - "dev": true, - "dependencies": { - "safari-14-idb-fix": "^3.0.0" - } - }, - "node_modules/parse/node_modules/uuid": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", - "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", - "dev": true, - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/parse/node_modules/ws": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.12.0.tgz", - "integrity": "sha512-kU62emKIdKVeEIOIKVegvqpXMSTAMLJozpHZaJNDYqBjzlSYXQGviYwN1osDLJ9av68qHd4a2oSjd7yD4pacig==", - "dev": true, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, "node_modules/parse5": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", @@ -24005,9 +23920,9 @@ } }, "node_modules/pg-promise": { - "version": "11.5.4", - "resolved": "https://registry.npmjs.org/pg-promise/-/pg-promise-11.5.4.tgz", - "integrity": "sha512-esYSkDt2h6NQOkfotGAm1Ld5OjoITJLpB88Z1PIlcAU/RQ0XQE2PxW0bLJEOMHPGV5iaRnj1Y7ARznXbgN4FNw==", + "version": "11.5.5", + "resolved": "https://registry.npmjs.org/pg-promise/-/pg-promise-11.5.5.tgz", + "integrity": "sha512-DpJkDDH7rG0wUwFRRHimdV6DtG/UTK2SBEKC7KGFR6a5Zuqf9eGThR7dqIaHXnEBDZuWxUfWC5zMRqyk4EP7Lw==", "dev": true, "dependencies": { "assert-options": "0.8.1", @@ -28762,9 +28677,9 @@ } }, "node_modules/winston": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/winston/-/winston-3.11.0.tgz", - "integrity": "sha512-L3yR6/MzZAOl0DsysUXHVjOwv8mKZ71TrA/41EIduGpOOV5LQVodqN+QdQ6BS6PJ/RdIshZhq84P/fStEZkk7g==", + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/winston/-/winston-3.12.0.tgz", + "integrity": "sha512-OwbxKaOlESDi01mC9rkM0dQqQt2I8DAUMRLZ/HpbwvDXm85IryEHgoogy5fziQy38PntgZsLlhAYHz//UPHZ5w==", "dev": true, "dependencies": { "@colors/colors": "^1.6.0", @@ -28777,7 +28692,7 @@ "safe-stable-stringify": "^2.3.1", "stack-trace": "0.0.x", "triple-beam": "^1.3.0", - "winston-transport": "^4.5.0" + "winston-transport": "^4.7.0" }, "engines": { "node": ">= 12.0.0" @@ -29142,9 +29057,9 @@ } }, "@apollo/server": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/@apollo/server/-/server-4.10.0.tgz", - "integrity": "sha512-pLx//lZ/pvUfWL9G8Np8+y3ujc0pYc8U7dwD6ztt9FAw8NmCPzPaDzlXLBAjGU6WnkqVBOnz8b3dOwRNjLYSUA==", + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/@apollo/server/-/server-4.10.1.tgz", + "integrity": "sha512-XGMOgTyzV4EBHQq0xQVKFry9hZF7AA/6nxxGLamqdxodhdSdGbU9jrlb5/XDveeGuXP3+5JDdrB2HcziVLJcMA==", "dev": true, "requires": { "@apollo/cache-control-types": "^1.0.3", @@ -38279,9 +38194,9 @@ } }, "express-rate-limit": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-6.7.0.tgz", - "integrity": "sha512-vhwIdRoqcYB/72TK3tRZI+0ttS8Ytrk24GfmsxDXK9o9IhHNO5bXRiXQSExPQ4GbaE5tvIS7j1SGrxsuWs+sGA==", + "version": "6.11.2", + "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-6.11.2.tgz", + "integrity": "sha512-a7uwwfNTh1U60ssiIkuLFWHt4hAC5yxlLGU2VP0X4YNlyEDZAqF4tK3GD3NSitVBrCQmQ0++0uOyFOgC2y4DDw==", "dev": true, "requires": {} }, @@ -38907,9 +38822,9 @@ "dev": true }, "follow-redirects": { - "version": "1.15.5", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz", - "integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==", + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", "dev": true }, "for-each": { @@ -47029,59 +46944,18 @@ } }, "parse": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/parse/-/parse-4.1.0.tgz", - "integrity": "sha512-s0Ti+nWrKWj9DlFcmkEE05fGwa/K5ycZSdqCz01F8YL7Hevqv4WLXAmYGOwzq5UJSZ005seKgb20KwVwLdy/Zg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/parse/-/parse-5.0.0.tgz", + "integrity": "sha512-6gOARZWiHjmGusbTskhC1qlRn527olMEsdt2LLj9cP2GY3n4VFOwFwV8z/vm2+YfzPfPcv8z7qLih1NzmqzO0g==", "dev": true, "requires": { - "@babel/runtime-corejs3": "7.21.0", - "crypto-js": "4.1.1", - "idb-keyval": "6.2.0", + "@babel/runtime-corejs3": "7.23.2", + "crypto-js": "4.2.0", + "idb-keyval": "6.2.1", "react-native-crypto-js": "1.0.0", - "uuid": "9.0.0", - "ws": "8.12.0", + "uuid": "9.0.1", + "ws": "8.16.0", "xmlhttprequest": "1.8.0" - }, - "dependencies": { - "@babel/runtime-corejs3": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.21.0.tgz", - "integrity": "sha512-TDD4UJzos3JJtM+tHX+w2Uc+KWj7GV+VKKFdMVd2Rx8sdA19hcc3P3AHFYd5LVOw+pYuSd5lICC3gm52B6Rwxw==", - "dev": true, - "requires": { - "core-js-pure": "^3.25.1", - "regenerator-runtime": "^0.13.11" - } - }, - "crypto-js": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.1.1.tgz", - "integrity": "sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==", - "dev": true, - "optional": true - }, - "idb-keyval": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/idb-keyval/-/idb-keyval-6.2.0.tgz", - "integrity": "sha512-uw+MIyQn2jl3+hroD7hF8J7PUviBU7BPKWw4f/ISf32D4LoGu98yHjrzWWJDASu9QNrX10tCJqk9YY0ClWm8Ng==", - "dev": true, - "requires": { - "safari-14-idb-fix": "^3.0.0" - } - }, - "uuid": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", - "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", - "dev": true - }, - "ws": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.12.0.tgz", - "integrity": "sha512-kU62emKIdKVeEIOIKVegvqpXMSTAMLJozpHZaJNDYqBjzlSYXQGviYwN1osDLJ9av68qHd4a2oSjd7yD4pacig==", - "dev": true, - "requires": {} - } } }, "parse-asn1": { @@ -47162,14 +47036,14 @@ "dev": true }, "parse-server": { - "version": "7.0.0-alpha.26", - "resolved": "https://registry.npmjs.org/parse-server/-/parse-server-7.0.0-alpha.26.tgz", - "integrity": "sha512-6/Xb/yvy8JtCZ1Puy2gwPmgAYzmzbxntJ56wuN1zWzDA716rxUEmzj0d5Zy0ISZTdTufTlXI5LnBOORRK03K4w==", + "version": "7.1.0-alpha.1", + "resolved": "https://registry.npmjs.org/parse-server/-/parse-server-7.1.0-alpha.1.tgz", + "integrity": "sha512-kHK5eHIraVL+kEvhug/hyjJkXxEFRz8py4t+B0yJBUMVajhsU4GYvN7SwY/IU5lRRZGJo8SjR8t+ThfORrHkpw==", "dev": true, "requires": { - "@apollo/server": "4.10.0", + "@apollo/server": "4.10.1", "@babel/eslint-parser": "7.21.8", - "@graphql-tools/merge": "8.4.1", + "@graphql-tools/merge": "9.0.3", "@graphql-tools/schema": "10.0.3", "@graphql-tools/utils": "8.12.0", "@node-rs/bcrypt": "1.1.0", @@ -47181,8 +47055,8 @@ "cors": "2.8.5", "deepcopy": "2.1.0", "express": "4.18.2", - "express-rate-limit": "6.7.0", - "follow-redirects": "1.15.5", + "express-rate-limit": "6.11.2", + "follow-redirects": "1.15.6", "graphql": "16.8.1", "graphql-list-fields": "2.0.4", "graphql-relay": "0.10.0", @@ -47198,10 +47072,10 @@ "mongodb": "5.9.0", "mustache": "4.2.0", "otpauth": "9.2.2", - "parse": "4.1.0", + "parse": "5.0.0", "path-to-regexp": "6.2.1", "pg-monitor": "2.0.0", - "pg-promise": "11.5.4", + "pg-promise": "11.5.5", "pluralize": "8.0.0", "rate-limit-redis": "3.0.2", "redis": "4.6.13", @@ -47209,33 +47083,11 @@ "subscriptions-transport-ws": "0.11.0", "tv4": "1.3.0", "uuid": "9.0.1", - "winston": "3.11.0", + "winston": "3.12.0", "winston-daily-rotate-file": "5.0.0", "ws": "8.16.0" }, "dependencies": { - "@graphql-tools/merge": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/@graphql-tools/merge/-/merge-8.4.1.tgz", - "integrity": "sha512-hssnPpZ818mxgl5+GfyOOSnnflAxiaTn1A1AojZcIbh4J52sS1Q0gSuBR5VrnUDjuxiqoCotpXdAQl+K+U6KLQ==", - "dev": true, - "requires": { - "@graphql-tools/utils": "^9.2.1", - "tslib": "^2.4.0" - }, - "dependencies": { - "@graphql-tools/utils": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-9.2.1.tgz", - "integrity": "sha512-WUw506Ql6xzmOORlriNrD6Ugx+HjVgYxt9KCXD9mHAak+eaXSwuGGPyE60hy9xaDEoXKBsG7SkG69ybitaVl6A==", - "dev": true, - "requires": { - "@graphql-typed-document-node/core": "^3.1.1", - "tslib": "^2.4.0" - } - } - } - }, "body-parser": { "version": "1.20.2", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", @@ -47528,9 +47380,9 @@ "requires": {} }, "pg-promise": { - "version": "11.5.4", - "resolved": "https://registry.npmjs.org/pg-promise/-/pg-promise-11.5.4.tgz", - "integrity": "sha512-esYSkDt2h6NQOkfotGAm1Ld5OjoITJLpB88Z1PIlcAU/RQ0XQE2PxW0bLJEOMHPGV5iaRnj1Y7ARznXbgN4FNw==", + "version": "11.5.5", + "resolved": "https://registry.npmjs.org/pg-promise/-/pg-promise-11.5.5.tgz", + "integrity": "sha512-DpJkDDH7rG0wUwFRRHimdV6DtG/UTK2SBEKC7KGFR6a5Zuqf9eGThR7dqIaHXnEBDZuWxUfWC5zMRqyk4EP7Lw==", "dev": true, "requires": { "assert-options": "0.8.1", @@ -51386,9 +51238,9 @@ } }, "winston": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/winston/-/winston-3.11.0.tgz", - "integrity": "sha512-L3yR6/MzZAOl0DsysUXHVjOwv8mKZ71TrA/41EIduGpOOV5LQVodqN+QdQ6BS6PJ/RdIshZhq84P/fStEZkk7g==", + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/winston/-/winston-3.12.0.tgz", + "integrity": "sha512-OwbxKaOlESDi01mC9rkM0dQqQt2I8DAUMRLZ/HpbwvDXm85IryEHgoogy5fziQy38PntgZsLlhAYHz//UPHZ5w==", "dev": true, "requires": { "@colors/colors": "^1.6.0", @@ -51401,7 +51253,7 @@ "safe-stable-stringify": "^2.3.1", "stack-trace": "0.0.x", "triple-beam": "^1.3.0", - "winston-transport": "^4.5.0" + "winston-transport": "^4.7.0" }, "dependencies": { "@colors/colors": { diff --git a/package.json b/package.json index 9d5e65519..56949565c 100644 --- a/package.json +++ b/package.json @@ -85,7 +85,7 @@ "lint-staged": "13.2.2", "metro-react-native-babel-preset": "0.76.4", "mongodb-runner": "5.4.3", - "parse-server": "7.0.0-alpha.26", + "parse-server": "7.1.0-alpha.1", "prettier": "3.0.2", "puppeteer": "20.4.0", "regenerator-runtime": "0.13.11", diff --git a/src/ParseUser.js b/src/ParseUser.js index 8ba9ba8c0..9347d1239 100644 --- a/src/ParseUser.js +++ b/src/ParseUser.js @@ -882,15 +882,8 @@ class ParseUser extends ParseObject { return Promise.reject(new ParseError(ParseError.OTHER_CAUSE, 'Password must be a string.')); } - options = options || {}; - - const verificationOption = {}; - if (options.hasOwnProperty('useMasterKey')) { - verificationOption.useMasterKey = options.useMasterKey; - } - const controller = CoreManager.getUserController(); - return controller.verifyPassword(username, password, verificationOption); + return controller.verifyPassword(username, password, options || {}); } /** diff --git a/src/RESTController.js b/src/RESTController.js index 75b30a759..73c962cff 100644 --- a/src/RESTController.js +++ b/src/RESTController.js @@ -18,6 +18,7 @@ export type RequestOptions = { progress?: any, context?: any, usePost?: boolean, + ignoreEmailVerification?: boolean, }; export type FullOptions = { @@ -249,6 +250,10 @@ const RESTController = { } } + if (options.ignoreEmailVerification !== undefined) { + payload.ignoreEmailVerification = options.ignoreEmailVerification; + } + if (CoreManager.get('FORCE_REVOCABLE_SESSION')) { payload._RevocableSession = '1'; }