Compare commits
3 Commits
9.2.0
...
9.2.1-alph
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a4909792bd | ||
|
|
e29910764d | ||
|
|
8cc71cf9e4 |
@@ -1,3 +1,10 @@
|
|||||||
|
## [9.2.1-alpha.1](https://github.com/parse-community/parse-server/compare/9.2.0...9.2.1-alpha.1) (2026-02-06)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* Default HTML pages for password reset, email verification not found ([#10034](https://github.com/parse-community/parse-server/issues/10034)) ([e299107](https://github.com/parse-community/parse-server/commit/e29910764daef3c03ed1b09eee19cedc3b12a86a))
|
||||||
|
|
||||||
# [9.2.0-alpha.5](https://github.com/parse-community/parse-server/compare/9.2.0-alpha.4...9.2.0-alpha.5) (2026-02-05)
|
# [9.2.0-alpha.5](https://github.com/parse-community/parse-server/compare/9.2.0-alpha.4...9.2.0-alpha.5) (2026-02-05)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
126
package-lock.json
generated
126
package-lock.json
generated
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "parse-server",
|
"name": "parse-server",
|
||||||
"version": "9.2.0",
|
"version": "9.2.1-alpha.1",
|
||||||
"lockfileVersion": 2,
|
"lockfileVersion": 2,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "parse-server",
|
"name": "parse-server",
|
||||||
"version": "9.2.0",
|
"version": "9.2.1-alpha.1",
|
||||||
"hasInstallScript": true,
|
"hasInstallScript": true,
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
@@ -61,7 +61,7 @@
|
|||||||
"@actions/core": "1.11.1",
|
"@actions/core": "1.11.1",
|
||||||
"@apollo/client": "3.13.8",
|
"@apollo/client": "3.13.8",
|
||||||
"@babel/cli": "7.27.0",
|
"@babel/cli": "7.27.0",
|
||||||
"@babel/core": "7.28.6",
|
"@babel/core": "7.29.0",
|
||||||
"@babel/eslint-parser": "7.28.6",
|
"@babel/eslint-parser": "7.28.6",
|
||||||
"@babel/plugin-proposal-object-rest-spread": "7.20.7",
|
"@babel/plugin-proposal-object-rest-spread": "7.20.7",
|
||||||
"@babel/plugin-transform-flow-strip-types": "7.26.5",
|
"@babel/plugin-transform-flow-strip-types": "7.26.5",
|
||||||
@@ -497,9 +497,9 @@
|
|||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"node_modules/@babel/code-frame": {
|
"node_modules/@babel/code-frame": {
|
||||||
"version": "7.28.6",
|
"version": "7.29.0",
|
||||||
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.28.6.tgz",
|
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz",
|
||||||
"integrity": "sha512-JYgintcMjRiCvS8mMECzaEn+m3PfoQiyqukOMCCVQtoJGYJw8j/8LBJEiqkHLkfwCcs74E3pbAUFNg7d9VNJ+Q==",
|
"integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/helper-validator-identifier": "^7.28.5",
|
"@babel/helper-validator-identifier": "^7.28.5",
|
||||||
@@ -520,20 +520,20 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@babel/core": {
|
"node_modules/@babel/core": {
|
||||||
"version": "7.28.6",
|
"version": "7.29.0",
|
||||||
"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.6.tgz",
|
"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz",
|
||||||
"integrity": "sha512-H3mcG6ZDLTlYfaSNi0iOKkigqMFvkTKlGUYlD8GW7nNOYRrevuA46iTypPyv+06V3fEmvvazfntkBU34L0azAw==",
|
"integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/code-frame": "^7.28.6",
|
"@babel/code-frame": "^7.29.0",
|
||||||
"@babel/generator": "^7.28.6",
|
"@babel/generator": "^7.29.0",
|
||||||
"@babel/helper-compilation-targets": "^7.28.6",
|
"@babel/helper-compilation-targets": "^7.28.6",
|
||||||
"@babel/helper-module-transforms": "^7.28.6",
|
"@babel/helper-module-transforms": "^7.28.6",
|
||||||
"@babel/helpers": "^7.28.6",
|
"@babel/helpers": "^7.28.6",
|
||||||
"@babel/parser": "^7.28.6",
|
"@babel/parser": "^7.29.0",
|
||||||
"@babel/template": "^7.28.6",
|
"@babel/template": "^7.28.6",
|
||||||
"@babel/traverse": "^7.28.6",
|
"@babel/traverse": "^7.29.0",
|
||||||
"@babel/types": "^7.28.6",
|
"@babel/types": "^7.29.0",
|
||||||
"@jridgewell/remapping": "^2.3.5",
|
"@jridgewell/remapping": "^2.3.5",
|
||||||
"convert-source-map": "^2.0.0",
|
"convert-source-map": "^2.0.0",
|
||||||
"debug": "^4.1.0",
|
"debug": "^4.1.0",
|
||||||
@@ -592,13 +592,13 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@babel/generator": {
|
"node_modules/@babel/generator": {
|
||||||
"version": "7.28.6",
|
"version": "7.29.1",
|
||||||
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.6.tgz",
|
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz",
|
||||||
"integrity": "sha512-lOoVRwADj8hjf7al89tvQ2a1lf53Z+7tiXMgpZJL3maQPDxh0DgLMN62B2MKUOFcoodBHLMbDM6WAbKgNy5Suw==",
|
"integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/parser": "^7.28.6",
|
"@babel/parser": "^7.29.0",
|
||||||
"@babel/types": "^7.28.6",
|
"@babel/types": "^7.29.0",
|
||||||
"@jridgewell/gen-mapping": "^0.3.12",
|
"@jridgewell/gen-mapping": "^0.3.12",
|
||||||
"@jridgewell/trace-mapping": "^0.3.28",
|
"@jridgewell/trace-mapping": "^0.3.28",
|
||||||
"jsesc": "^3.0.2"
|
"jsesc": "^3.0.2"
|
||||||
@@ -919,12 +919,12 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@babel/parser": {
|
"node_modules/@babel/parser": {
|
||||||
"version": "7.28.6",
|
"version": "7.29.0",
|
||||||
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.6.tgz",
|
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.0.tgz",
|
||||||
"integrity": "sha512-TeR9zWR18BvbfPmGbLampPMW+uW1NZnJlRuuHso8i87QZNq2JRF9i6RgxRqtEq+wQGsS19NNTWr2duhnE49mfQ==",
|
"integrity": "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/types": "^7.28.6"
|
"@babel/types": "^7.29.0"
|
||||||
},
|
},
|
||||||
"bin": {
|
"bin": {
|
||||||
"parser": "bin/babel-parser.js"
|
"parser": "bin/babel-parser.js"
|
||||||
@@ -2192,17 +2192,17 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@babel/traverse": {
|
"node_modules/@babel/traverse": {
|
||||||
"version": "7.28.6",
|
"version": "7.29.0",
|
||||||
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.6.tgz",
|
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz",
|
||||||
"integrity": "sha512-fgWX62k02qtjqdSNTAGxmKYY/7FSL9WAS1o2Hu5+I5m9T0yxZzr4cnrfXQ/MX0rIifthCSs6FKTlzYbJcPtMNg==",
|
"integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/code-frame": "^7.28.6",
|
"@babel/code-frame": "^7.29.0",
|
||||||
"@babel/generator": "^7.28.6",
|
"@babel/generator": "^7.29.0",
|
||||||
"@babel/helper-globals": "^7.28.0",
|
"@babel/helper-globals": "^7.28.0",
|
||||||
"@babel/parser": "^7.28.6",
|
"@babel/parser": "^7.29.0",
|
||||||
"@babel/template": "^7.28.6",
|
"@babel/template": "^7.28.6",
|
||||||
"@babel/types": "^7.28.6",
|
"@babel/types": "^7.29.0",
|
||||||
"debug": "^4.3.1"
|
"debug": "^4.3.1"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
@@ -2210,9 +2210,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@babel/types": {
|
"node_modules/@babel/types": {
|
||||||
"version": "7.28.6",
|
"version": "7.29.0",
|
||||||
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.6.tgz",
|
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz",
|
||||||
"integrity": "sha512-0ZrskXVEHSWIqZM/sQZ4EV3jZJXRkio/WCxaqKZP1g//CEWEPSfeZFcms4XeKBCHU0ZKnIkdJeU/kF+eRp5lBg==",
|
"integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/helper-string-parser": "^7.27.1",
|
"@babel/helper-string-parser": "^7.27.1",
|
||||||
@@ -22819,9 +22819,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@babel/code-frame": {
|
"@babel/code-frame": {
|
||||||
"version": "7.28.6",
|
"version": "7.29.0",
|
||||||
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.28.6.tgz",
|
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz",
|
||||||
"integrity": "sha512-JYgintcMjRiCvS8mMECzaEn+m3PfoQiyqukOMCCVQtoJGYJw8j/8LBJEiqkHLkfwCcs74E3pbAUFNg7d9VNJ+Q==",
|
"integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"@babel/helper-validator-identifier": "^7.28.5",
|
"@babel/helper-validator-identifier": "^7.28.5",
|
||||||
@@ -22836,20 +22836,20 @@
|
|||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"@babel/core": {
|
"@babel/core": {
|
||||||
"version": "7.28.6",
|
"version": "7.29.0",
|
||||||
"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.6.tgz",
|
"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz",
|
||||||
"integrity": "sha512-H3mcG6ZDLTlYfaSNi0iOKkigqMFvkTKlGUYlD8GW7nNOYRrevuA46iTypPyv+06V3fEmvvazfntkBU34L0azAw==",
|
"integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"@babel/code-frame": "^7.28.6",
|
"@babel/code-frame": "^7.29.0",
|
||||||
"@babel/generator": "^7.28.6",
|
"@babel/generator": "^7.29.0",
|
||||||
"@babel/helper-compilation-targets": "^7.28.6",
|
"@babel/helper-compilation-targets": "^7.28.6",
|
||||||
"@babel/helper-module-transforms": "^7.28.6",
|
"@babel/helper-module-transforms": "^7.28.6",
|
||||||
"@babel/helpers": "^7.28.6",
|
"@babel/helpers": "^7.28.6",
|
||||||
"@babel/parser": "^7.28.6",
|
"@babel/parser": "^7.29.0",
|
||||||
"@babel/template": "^7.28.6",
|
"@babel/template": "^7.28.6",
|
||||||
"@babel/traverse": "^7.28.6",
|
"@babel/traverse": "^7.29.0",
|
||||||
"@babel/types": "^7.28.6",
|
"@babel/types": "^7.29.0",
|
||||||
"@jridgewell/remapping": "^2.3.5",
|
"@jridgewell/remapping": "^2.3.5",
|
||||||
"convert-source-map": "^2.0.0",
|
"convert-source-map": "^2.0.0",
|
||||||
"debug": "^4.1.0",
|
"debug": "^4.1.0",
|
||||||
@@ -22892,13 +22892,13 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@babel/generator": {
|
"@babel/generator": {
|
||||||
"version": "7.28.6",
|
"version": "7.29.1",
|
||||||
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.6.tgz",
|
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz",
|
||||||
"integrity": "sha512-lOoVRwADj8hjf7al89tvQ2a1lf53Z+7tiXMgpZJL3maQPDxh0DgLMN62B2MKUOFcoodBHLMbDM6WAbKgNy5Suw==",
|
"integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"@babel/parser": "^7.28.6",
|
"@babel/parser": "^7.29.0",
|
||||||
"@babel/types": "^7.28.6",
|
"@babel/types": "^7.29.0",
|
||||||
"@jridgewell/gen-mapping": "^0.3.12",
|
"@jridgewell/gen-mapping": "^0.3.12",
|
||||||
"@jridgewell/trace-mapping": "^0.3.28",
|
"@jridgewell/trace-mapping": "^0.3.28",
|
||||||
"jsesc": "^3.0.2"
|
"jsesc": "^3.0.2"
|
||||||
@@ -23128,12 +23128,12 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@babel/parser": {
|
"@babel/parser": {
|
||||||
"version": "7.28.6",
|
"version": "7.29.0",
|
||||||
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.6.tgz",
|
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.0.tgz",
|
||||||
"integrity": "sha512-TeR9zWR18BvbfPmGbLampPMW+uW1NZnJlRuuHso8i87QZNq2JRF9i6RgxRqtEq+wQGsS19NNTWr2duhnE49mfQ==",
|
"integrity": "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"@babel/types": "^7.28.6"
|
"@babel/types": "^7.29.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@babel/plugin-bugfix-firefox-class-in-computed-class-key": {
|
"@babel/plugin-bugfix-firefox-class-in-computed-class-key": {
|
||||||
@@ -23913,24 +23913,24 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@babel/traverse": {
|
"@babel/traverse": {
|
||||||
"version": "7.28.6",
|
"version": "7.29.0",
|
||||||
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.6.tgz",
|
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz",
|
||||||
"integrity": "sha512-fgWX62k02qtjqdSNTAGxmKYY/7FSL9WAS1o2Hu5+I5m9T0yxZzr4cnrfXQ/MX0rIifthCSs6FKTlzYbJcPtMNg==",
|
"integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"@babel/code-frame": "^7.28.6",
|
"@babel/code-frame": "^7.29.0",
|
||||||
"@babel/generator": "^7.28.6",
|
"@babel/generator": "^7.29.0",
|
||||||
"@babel/helper-globals": "^7.28.0",
|
"@babel/helper-globals": "^7.28.0",
|
||||||
"@babel/parser": "^7.28.6",
|
"@babel/parser": "^7.29.0",
|
||||||
"@babel/template": "^7.28.6",
|
"@babel/template": "^7.28.6",
|
||||||
"@babel/types": "^7.28.6",
|
"@babel/types": "^7.29.0",
|
||||||
"debug": "^4.3.1"
|
"debug": "^4.3.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@babel/types": {
|
"@babel/types": {
|
||||||
"version": "7.28.6",
|
"version": "7.29.0",
|
||||||
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.6.tgz",
|
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz",
|
||||||
"integrity": "sha512-0ZrskXVEHSWIqZM/sQZ4EV3jZJXRkio/WCxaqKZP1g//CEWEPSfeZFcms4XeKBCHU0ZKnIkdJeU/kF+eRp5lBg==",
|
"integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"@babel/helper-string-parser": "^7.27.1",
|
"@babel/helper-string-parser": "^7.27.1",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "parse-server",
|
"name": "parse-server",
|
||||||
"version": "9.2.0",
|
"version": "9.2.1-alpha.1",
|
||||||
"description": "An express module providing a Parse-compatible API server",
|
"description": "An express module providing a Parse-compatible API server",
|
||||||
"main": "lib/index.js",
|
"main": "lib/index.js",
|
||||||
"repository": {
|
"repository": {
|
||||||
@@ -10,7 +10,7 @@
|
|||||||
"files": [
|
"files": [
|
||||||
"bin/",
|
"bin/",
|
||||||
"lib/",
|
"lib/",
|
||||||
"public_html/",
|
"public/",
|
||||||
"views/",
|
"views/",
|
||||||
"LICENSE",
|
"LICENSE",
|
||||||
"NOTICE",
|
"NOTICE",
|
||||||
@@ -68,7 +68,7 @@
|
|||||||
"@actions/core": "1.11.1",
|
"@actions/core": "1.11.1",
|
||||||
"@apollo/client": "3.13.8",
|
"@apollo/client": "3.13.8",
|
||||||
"@babel/cli": "7.27.0",
|
"@babel/cli": "7.27.0",
|
||||||
"@babel/core": "7.28.6",
|
"@babel/core": "7.29.0",
|
||||||
"@babel/eslint-parser": "7.28.6",
|
"@babel/eslint-parser": "7.28.6",
|
||||||
"@babel/plugin-proposal-object-rest-spread": "7.20.7",
|
"@babel/plugin-proposal-object-rest-spread": "7.20.7",
|
||||||
"@babel/plugin-transform-flow-strip-types": "7.26.5",
|
"@babel/plugin-transform-flow-strip-types": "7.26.5",
|
||||||
|
|||||||
@@ -1181,6 +1181,61 @@ describe('Pages Router', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('async publicServerURL', () => {
|
||||||
|
it('resolves async publicServerURL for password reset page', async () => {
|
||||||
|
const emailAdapter = {
|
||||||
|
sendVerificationEmail: () => Promise.resolve(),
|
||||||
|
sendPasswordResetEmail: () => Promise.resolve(),
|
||||||
|
sendMail: () => {},
|
||||||
|
};
|
||||||
|
await reconfigureServer({
|
||||||
|
appId: 'test',
|
||||||
|
appName: 'exampleAppname',
|
||||||
|
verifyUserEmails: true,
|
||||||
|
emailAdapter,
|
||||||
|
publicServerURL: () => 'http://localhost:8378/1',
|
||||||
|
pages: { enableRouter: true },
|
||||||
|
});
|
||||||
|
|
||||||
|
const user = new Parse.User();
|
||||||
|
user.setUsername('asyncUrlUser');
|
||||||
|
user.setPassword('examplePassword');
|
||||||
|
user.set('email', 'async-url@example.com');
|
||||||
|
await user.signUp();
|
||||||
|
await Parse.User.requestPasswordReset('async-url@example.com');
|
||||||
|
|
||||||
|
const response = await request({
|
||||||
|
url: 'http://localhost:8378/1/apps/test/request_password_reset?token=invalidToken',
|
||||||
|
followRedirects: false,
|
||||||
|
}).catch(e => e);
|
||||||
|
expect(response.status).toBe(200);
|
||||||
|
expect(response.text).toContain('Invalid password reset link!');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('resolves async publicServerURL for email verification page', async () => {
|
||||||
|
const emailAdapter = {
|
||||||
|
sendVerificationEmail: () => Promise.resolve(),
|
||||||
|
sendPasswordResetEmail: () => Promise.resolve(),
|
||||||
|
sendMail: () => {},
|
||||||
|
};
|
||||||
|
await reconfigureServer({
|
||||||
|
appId: 'test',
|
||||||
|
appName: 'exampleAppname',
|
||||||
|
verifyUserEmails: true,
|
||||||
|
emailAdapter,
|
||||||
|
publicServerURL: () => 'http://localhost:8378/1',
|
||||||
|
pages: { enableRouter: true },
|
||||||
|
});
|
||||||
|
|
||||||
|
const response = await request({
|
||||||
|
url: 'http://localhost:8378/1/apps/test/verify_email?token=invalidToken',
|
||||||
|
followRedirects: false,
|
||||||
|
}).catch(e => e);
|
||||||
|
expect(response.status).toBe(200);
|
||||||
|
expect(response.text).toContain('Invalid verification link!');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
describe('XSS Protection', () => {
|
describe('XSS Protection', () => {
|
||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
await reconfigureServer({
|
await reconfigureServer({
|
||||||
|
|||||||
@@ -624,12 +624,14 @@ export class PagesRouter extends PromiseRouter {
|
|||||||
* @param {Boolean} failGracefully Is true if failing to set the config should
|
* @param {Boolean} failGracefully Is true if failing to set the config should
|
||||||
* not result in an invalid request response. Default is `false`.
|
* not result in an invalid request response. Default is `false`.
|
||||||
*/
|
*/
|
||||||
setConfig(req, failGracefully = false) {
|
async setConfig(req, failGracefully = false) {
|
||||||
req.config = Config.get(req.params.appId || req.query.appId);
|
req.config = Config.get(req.params.appId || req.query.appId);
|
||||||
if (!req.config && !failGracefully) {
|
if (!req.config && !failGracefully) {
|
||||||
this.invalidRequest();
|
this.invalidRequest();
|
||||||
}
|
}
|
||||||
return Promise.resolve();
|
if (req.config) {
|
||||||
|
await req.config.loadKeys();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
mountPagesRoutes() {
|
mountPagesRoutes() {
|
||||||
@@ -637,7 +639,7 @@ export class PagesRouter extends PromiseRouter {
|
|||||||
'GET',
|
'GET',
|
||||||
`/${this.pagesEndpoint}/:appId/verify_email`,
|
`/${this.pagesEndpoint}/:appId/verify_email`,
|
||||||
req => {
|
req => {
|
||||||
this.setConfig(req);
|
return this.setConfig(req);
|
||||||
},
|
},
|
||||||
req => {
|
req => {
|
||||||
return this.verifyEmail(req);
|
return this.verifyEmail(req);
|
||||||
@@ -648,7 +650,7 @@ export class PagesRouter extends PromiseRouter {
|
|||||||
'POST',
|
'POST',
|
||||||
`/${this.pagesEndpoint}/:appId/resend_verification_email`,
|
`/${this.pagesEndpoint}/:appId/resend_verification_email`,
|
||||||
req => {
|
req => {
|
||||||
this.setConfig(req);
|
return this.setConfig(req);
|
||||||
},
|
},
|
||||||
req => {
|
req => {
|
||||||
return this.resendVerificationEmail(req);
|
return this.resendVerificationEmail(req);
|
||||||
@@ -659,7 +661,7 @@ export class PagesRouter extends PromiseRouter {
|
|||||||
'GET',
|
'GET',
|
||||||
`/${this.pagesEndpoint}/choose_password`,
|
`/${this.pagesEndpoint}/choose_password`,
|
||||||
req => {
|
req => {
|
||||||
this.setConfig(req);
|
return this.setConfig(req);
|
||||||
},
|
},
|
||||||
req => {
|
req => {
|
||||||
return this.passwordReset(req);
|
return this.passwordReset(req);
|
||||||
@@ -670,7 +672,7 @@ export class PagesRouter extends PromiseRouter {
|
|||||||
'POST',
|
'POST',
|
||||||
`/${this.pagesEndpoint}/:appId/request_password_reset`,
|
`/${this.pagesEndpoint}/:appId/request_password_reset`,
|
||||||
req => {
|
req => {
|
||||||
this.setConfig(req);
|
return this.setConfig(req);
|
||||||
},
|
},
|
||||||
req => {
|
req => {
|
||||||
return this.resetPassword(req);
|
return this.resetPassword(req);
|
||||||
@@ -681,7 +683,7 @@ export class PagesRouter extends PromiseRouter {
|
|||||||
'GET',
|
'GET',
|
||||||
`/${this.pagesEndpoint}/:appId/request_password_reset`,
|
`/${this.pagesEndpoint}/:appId/request_password_reset`,
|
||||||
req => {
|
req => {
|
||||||
this.setConfig(req);
|
return this.setConfig(req);
|
||||||
},
|
},
|
||||||
req => {
|
req => {
|
||||||
return this.requestResetPassword(req);
|
return this.requestResetPassword(req);
|
||||||
@@ -695,7 +697,7 @@ export class PagesRouter extends PromiseRouter {
|
|||||||
route.method,
|
route.method,
|
||||||
`/${this.pagesEndpoint}/:appId/${route.path}`,
|
`/${this.pagesEndpoint}/:appId/${route.path}`,
|
||||||
req => {
|
req => {
|
||||||
this.setConfig(req);
|
return this.setConfig(req);
|
||||||
},
|
},
|
||||||
async req => {
|
async req => {
|
||||||
const { file, query = {} } = (await route.handler(req)) || {};
|
const { file, query = {} } = (await route.handler(req)) || {};
|
||||||
@@ -718,7 +720,7 @@ export class PagesRouter extends PromiseRouter {
|
|||||||
'GET',
|
'GET',
|
||||||
`/${this.pagesEndpoint}/*resource`,
|
`/${this.pagesEndpoint}/*resource`,
|
||||||
req => {
|
req => {
|
||||||
this.setConfig(req, true);
|
return this.setConfig(req, true);
|
||||||
},
|
},
|
||||||
req => {
|
req => {
|
||||||
return this.staticRoute(req);
|
return this.staticRoute(req);
|
||||||
|
|||||||
Reference in New Issue
Block a user