@baseplate-dev/plugin-auth 0.6.5 → 0.6.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +34 -0
- package/dist/local-auth/core/generators/auth-email-password/templates/module/schema/password-reset.mutations.js +2 -1
- package/dist/local-auth/core/generators/auth-email-password/templates/module/schema/password-reset.mutations.js.map +1 -1
- package/dist/local-auth/core/generators/auth-email-password/templates/module/schema/password-reset.mutations.ts +2 -1
- package/dist/local-auth/core/generators/auth-email-password/templates/module/services/password-reset.service.d.ts +2 -1
- package/dist/local-auth/core/generators/auth-email-password/templates/module/services/password-reset.service.d.ts.map +1 -1
- package/dist/local-auth/core/generators/auth-email-password/templates/module/services/password-reset.service.js +4 -1
- package/dist/local-auth/core/generators/auth-email-password/templates/module/services/password-reset.service.js.map +1 -1
- package/dist/local-auth/core/generators/auth-email-password/templates/module/services/password-reset.service.ts +6 -0
- package/dist/local-auth/core/generators/auth-email-password/templates/module/services/user-password.service.d.ts +9 -0
- package/dist/local-auth/core/generators/auth-email-password/templates/module/services/user-password.service.d.ts.map +1 -1
- package/dist/local-auth/core/generators/auth-email-password/templates/module/services/user-password.service.js +21 -7
- package/dist/local-auth/core/generators/auth-email-password/templates/module/services/user-password.service.js.map +1 -1
- package/dist/local-auth/core/generators/auth-email-password/templates/module/services/user-password.service.ts +32 -11
- package/dist/local-auth/core/generators/auth-routes/auth-routes.generator.js +3 -3
- package/dist/local-auth/core/generators/auth-routes/auth-routes.generator.js.map +1 -1
- package/dist/local-auth/core/generators/auth-routes/templates/routes/auth_/forgot-password.js +1 -1
- package/dist/local-auth/core/generators/auth-routes/templates/routes/auth_/forgot-password.js.map +1 -1
- package/dist/local-auth/core/generators/auth-routes/templates/routes/auth_/forgot-password.tsx +1 -1
- package/dist/local-auth/core/generators/auth-routes/templates/routes/auth_/login.js +17 -2
- package/dist/local-auth/core/generators/auth-routes/templates/routes/auth_/login.js.map +1 -1
- package/dist/local-auth/core/generators/auth-routes/templates/routes/auth_/login.tsx +21 -2
- package/dist/local-auth/core/generators/auth-routes/templates/routes/auth_/reset-password.js +5 -2
- package/dist/local-auth/core/generators/auth-routes/templates/routes/auth_/reset-password.js.map +1 -1
- package/dist/local-auth/core/generators/auth-routes/templates/routes/auth_/reset-password.tsx +11 -2
- package/dist/web/assets/{__federation_expose_authCoreCommon-NPAy2Xu2.js → __federation_expose_authCoreCommon-CP84XoaZ.js} +3 -3
- package/dist/web/assets/{__federation_expose_authCoreCommon-NPAy2Xu2.js.map → __federation_expose_authCoreCommon-CP84XoaZ.js.map} +1 -1
- package/dist/web/assets/{__federation_expose_authCoreWeb-D0AlXNml.js → __federation_expose_authCoreWeb-DI2UmqKo.js} +6 -6
- package/dist/web/assets/__federation_expose_authCoreWeb-DI2UmqKo.js.map +1 -0
- package/dist/web/assets/{__federation_expose_better-authAdminCommon-Bp8fb_BT.js → __federation_expose_better-authAdminCommon-D0_9WcWn.js} +2 -2
- package/dist/web/assets/{__federation_expose_better-authAdminCommon-Bp8fb_BT.js.map → __federation_expose_better-authAdminCommon-D0_9WcWn.js.map} +1 -1
- package/dist/web/assets/{__federation_expose_better-authAdminWeb-Dggf6fZk.js → __federation_expose_better-authAdminWeb-D_dXlhKK.js} +2 -2
- package/dist/web/assets/{__federation_expose_better-authAdminWeb-Dggf6fZk.js.map → __federation_expose_better-authAdminWeb-D_dXlhKK.js.map} +1 -1
- package/dist/web/assets/{__federation_expose_better-authCoreCommon-D3bQgHWh.js → __federation_expose_better-authCoreCommon-48JK7oT2.js} +4 -4
- package/dist/web/assets/{__federation_expose_better-authCoreCommon-D3bQgHWh.js.map → __federation_expose_better-authCoreCommon-48JK7oT2.js.map} +1 -1
- package/dist/web/assets/{__federation_expose_better-authCoreWeb-4VA_40fu.js → __federation_expose_better-authCoreWeb-BxmF6zJd.js} +5 -5
- package/dist/web/assets/{__federation_expose_better-authCoreWeb-4VA_40fu.js.map → __federation_expose_better-authCoreWeb-BxmF6zJd.js.map} +1 -1
- package/dist/web/assets/{__federation_expose_local-authAdminCommon-Bp8fb_BT.js → __federation_expose_local-authAdminCommon-D0_9WcWn.js} +2 -2
- package/dist/web/assets/{__federation_expose_local-authAdminCommon-Bp8fb_BT.js.map → __federation_expose_local-authAdminCommon-D0_9WcWn.js.map} +1 -1
- package/dist/web/assets/{__federation_expose_local-authAdminWeb-BDyZDL1a.js → __federation_expose_local-authAdminWeb-BTSMv1QG.js} +2 -2
- package/dist/web/assets/{__federation_expose_local-authAdminWeb-BDyZDL1a.js.map → __federation_expose_local-authAdminWeb-BTSMv1QG.js.map} +1 -1
- package/dist/web/assets/{__federation_expose_local-authCoreCommon-C3UyEu-M.js → __federation_expose_local-authCoreCommon-CHvPbnK-.js} +4 -4
- package/dist/web/assets/{__federation_expose_local-authCoreCommon-C3UyEu-M.js.map → __federation_expose_local-authCoreCommon-CHvPbnK-.js.map} +1 -1
- package/dist/web/assets/{__federation_expose_local-authCoreWeb-BYkl2IGk.js → __federation_expose_local-authCoreWeb-ZGfSzqOX.js} +5 -5
- package/dist/web/assets/{__federation_expose_local-authCoreWeb-BYkl2IGk.js.map → __federation_expose_local-authCoreWeb-ZGfSzqOX.js.map} +1 -1
- package/dist/web/assets/{__federation_expose_placeholder-authCoreCommon-Bq0ln8n5.js → __federation_expose_placeholder-authCoreCommon-Cdpmumwc.js} +3 -3
- package/dist/web/assets/{__federation_expose_placeholder-authCoreCommon-Bq0ln8n5.js.map → __federation_expose_placeholder-authCoreCommon-Cdpmumwc.js.map} +1 -1
- package/dist/web/assets/{__federation_expose_placeholder-authCoreWeb-BNGIcu0Y.js → __federation_expose_placeholder-authCoreWeb-D44O5ZAh.js} +5 -5
- package/dist/web/assets/{__federation_expose_placeholder-authCoreWeb-BNGIcu0Y.js.map → __federation_expose_placeholder-authCoreWeb-D44O5ZAh.js.map} +1 -1
- package/dist/web/assets/{__federation_fn_import-DybuDj1g.js → __federation_fn_import-_bDjmFT3.js} +2 -2
- package/dist/web/assets/{__federation_fn_import-DybuDj1g.js.map → __federation_fn_import-_bDjmFT3.js.map} +1 -1
- package/dist/web/assets/__federation_shared_@baseplate-dev/project-builder-lib/{web-CAuxM6sN.js → web-CtILEBu2.js} +5 -5
- package/dist/web/assets/__federation_shared_@baseplate-dev/project-builder-lib/{web-CAuxM6sN.js.map → web-CtILEBu2.js.map} +1 -1
- package/dist/web/assets/__federation_shared_@baseplate-dev/{project-builder-lib-DkaXS95C.js → project-builder-lib-CSgNGpA4.js} +4 -4
- package/dist/web/assets/__federation_shared_@baseplate-dev/{project-builder-lib-DkaXS95C.js.map → project-builder-lib-CSgNGpA4.js.map} +1 -1
- package/dist/web/assets/__federation_shared_@baseplate-dev/{ui-components-DX4jbl4M.js → ui-components-w6NlcuHV.js} +6440 -1603
- package/dist/web/assets/__federation_shared_@baseplate-dev/ui-components-w6NlcuHV.js.map +1 -0
- package/dist/web/assets/__federation_shared_@baseplate-dev/{utils-B-MiuXg4.js → utils-DIoUxQTf.js} +2 -2
- package/dist/web/assets/__federation_shared_@baseplate-dev/{utils-B-MiuXg4.js.map → utils-DIoUxQTf.js.map} +1 -1
- package/dist/web/assets/__federation_shared_@tanstack/{react-router-DyqK0P1G.js → react-router-1SsG_axk.js} +2 -2
- package/dist/web/assets/__federation_shared_@tanstack/react-router-1SsG_axk.js.map +1 -0
- package/dist/web/assets/{get-auth-plugin-definition-BigT75An.js → get-auth-plugin-definition-Cmw1uujk.js} +2 -2
- package/dist/web/assets/{get-auth-plugin-definition-BigT75An.js.map → get-auth-plugin-definition-Cmw1uujk.js.map} +1 -1
- package/dist/web/assets/{index-BwviOVwi.js → index-DtgwNsxm.js} +2 -2
- package/dist/web/assets/{index-BwviOVwi.js.map → index-DtgwNsxm.js.map} +1 -1
- package/dist/web/assets/{index.esm-Db6zPKK9.js → index.esm-DEvG0Fdh.js} +2 -2
- package/dist/web/assets/{index.esm-Db6zPKK9.js.map → index.esm-DEvG0Fdh.js.map} +1 -1
- package/dist/web/assets/{model-utils-D0sDtkf1.js → model-utils-CEcdbDEB.js} +2 -2
- package/dist/web/assets/{model-utils-D0sDtkf1.js.map → model-utils-CEcdbDEB.js.map} +1 -1
- package/dist/web/assets/{plugin-definition-BQN6LXOW.js → plugin-definition-B4WkBbF0.js} +2 -2
- package/dist/web/assets/{plugin-definition-BQN6LXOW.js.map → plugin-definition-B4WkBbF0.js.map} +1 -1
- package/dist/web/assets/{plugin-definition-D9-5sSEf.js → plugin-definition-CesRcgD_.js} +2 -2
- package/dist/web/assets/{plugin-definition-D9-5sSEf.js.map → plugin-definition-CesRcgD_.js.map} +1 -1
- package/dist/web/assets/{plugin-definition-ChoxTjiw.js → plugin-definition-D4cbPQK9.js} +2 -2
- package/dist/web/assets/{plugin-definition-ChoxTjiw.js.map → plugin-definition-D4cbPQK9.js.map} +1 -1
- package/dist/web/assets/{plugin-definition-Cg8Gij5x.js → plugin-definition-DbLssGrM.js} +2 -2
- package/dist/web/assets/{plugin-definition-Cg8Gij5x.js.map → plugin-definition-DbLssGrM.js.map} +1 -1
- package/dist/web/assets/{react-CcDhDxl8.js → react-cA_AFJxD.js} +2 -2
- package/dist/web/assets/react-cA_AFJxD.js.map +1 -0
- package/dist/web/assets/remoteEntry.js +12 -12
- package/dist/web/assets/{styles-Otn_yxD1.js → styles-tNSeSNta.js} +3 -3
- package/dist/web/assets/styles-tNSeSNta.js.map +1 -0
- package/package.json +12 -12
- package/dist/web/assets/__federation_expose_authCoreWeb-D0AlXNml.js.map +0 -1
- package/dist/web/assets/__federation_shared_@baseplate-dev/ui-components-DX4jbl4M.js.map +0 -1
- package/dist/web/assets/__federation_shared_@tanstack/react-router-DyqK0P1G.js.map +0 -1
- package/dist/web/assets/react-CcDhDxl8.js.map +0 -1
- package/dist/web/assets/styles-Otn_yxD1.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,39 @@
|
|
|
1
1
|
# @baseplate-dev/plugin-auth
|
|
2
2
|
|
|
3
|
+
## 0.6.7
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [#877](https://github.com/halfdomelabs/baseplate/pull/877) [`0527c02`](https://github.com/halfdomelabs/baseplate/commit/0527c02fc9cc08363a93ff640345680ef832cd30) Thanks [@kingston](https://github.com/kingston)! - Reduce password rate limit aggressiveness (15 attempts/hour for IP, 10 consecutive fails/hour), reset login rate limits after successful password reset, and improve error messages to suggest password reset when rate limited
|
|
8
|
+
|
|
9
|
+
- Updated dependencies [[`2d39358`](https://github.com/halfdomelabs/baseplate/commit/2d39358510f73073a80ac78c3c7433a3aac2f0cd), [`335e063`](https://github.com/halfdomelabs/baseplate/commit/335e063b85676c9a55635ade6cf9b7b38bdd431d), [`c3a6719`](https://github.com/halfdomelabs/baseplate/commit/c3a67191d9a456d7440728f43f34cd02d28ffd12), [`2d39358`](https://github.com/halfdomelabs/baseplate/commit/2d39358510f73073a80ac78c3c7433a3aac2f0cd), [`2d39358`](https://github.com/halfdomelabs/baseplate/commit/2d39358510f73073a80ac78c3c7433a3aac2f0cd), [`7031c74`](https://github.com/halfdomelabs/baseplate/commit/7031c74af6a0ee74007a2b3cce30c738cff36e6a)]:
|
|
10
|
+
- @baseplate-dev/core-generators@0.6.7
|
|
11
|
+
- @baseplate-dev/ui-components@0.6.7
|
|
12
|
+
- @baseplate-dev/fastify-generators@0.6.7
|
|
13
|
+
- @baseplate-dev/react-generators@0.6.7
|
|
14
|
+
- @baseplate-dev/plugin-email@0.6.7
|
|
15
|
+
- @baseplate-dev/plugin-queue@0.6.7
|
|
16
|
+
- @baseplate-dev/plugin-rate-limit@0.6.7
|
|
17
|
+
- @baseplate-dev/project-builder-lib@0.6.7
|
|
18
|
+
- @baseplate-dev/sync@0.6.7
|
|
19
|
+
- @baseplate-dev/utils@0.6.7
|
|
20
|
+
|
|
21
|
+
## 0.6.6
|
|
22
|
+
|
|
23
|
+
### Patch Changes
|
|
24
|
+
|
|
25
|
+
- Updated dependencies [[`7cffc85`](https://github.com/halfdomelabs/baseplate/commit/7cffc85dfc2e9dc3ca6e1f243aeb874d2a1c5b13)]:
|
|
26
|
+
- @baseplate-dev/fastify-generators@0.6.6
|
|
27
|
+
- @baseplate-dev/plugin-email@0.6.6
|
|
28
|
+
- @baseplate-dev/plugin-queue@0.6.6
|
|
29
|
+
- @baseplate-dev/plugin-rate-limit@0.6.6
|
|
30
|
+
- @baseplate-dev/core-generators@0.6.6
|
|
31
|
+
- @baseplate-dev/project-builder-lib@0.6.6
|
|
32
|
+
- @baseplate-dev/react-generators@0.6.6
|
|
33
|
+
- @baseplate-dev/sync@0.6.6
|
|
34
|
+
- @baseplate-dev/ui-components@0.6.6
|
|
35
|
+
- @baseplate-dev/utils@0.6.6
|
|
36
|
+
|
|
3
37
|
## 0.6.5
|
|
4
38
|
|
|
5
39
|
### Patch Changes
|
|
@@ -30,9 +30,10 @@ builder.mutationField('resetPasswordWithToken', (t) => t.fieldWithInputPayload({
|
|
|
30
30
|
token: t.input.field({ required: true, type: 'String' }),
|
|
31
31
|
newPassword: t.input.field({ required: true, type: 'String' }),
|
|
32
32
|
},
|
|
33
|
-
resolve: async (_root, { input }) => completePasswordReset({
|
|
33
|
+
resolve: async (_root, { input }, context) => completePasswordReset({
|
|
34
34
|
token: input.token,
|
|
35
35
|
newPassword: input.newPassword,
|
|
36
|
+
context,
|
|
36
37
|
}),
|
|
37
38
|
}));
|
|
38
39
|
//# sourceMappingURL=password-reset.mutations.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"password-reset.mutations.js","sourceRoot":"","sources":["../../../../../../../../src/local-auth/core/generators/auth-email-password/templates/module/schema/password-reset.mutations.ts"],"names":[],"mappings":"AAAA,cAAc;AAEd,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,0BAA0B,GAC3B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAEzC,OAAO,CAAC,aAAa,CAAC,sBAAsB,EAAE,CAAC,CAAC,EAAE,EAAE,CAClD,CAAC,CAAC,qBAAqB,CAAC;IACtB,SAAS,EAAE,CAAC,QAAQ,CAAC;IACrB,OAAO,EAAE;QACP,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;KAC9C;IACD,KAAK,EAAE;QACL,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;KACzD;IACD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,CAC3C,oBAAoB,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC;CACxD,CAAC,CACH,CAAC;AAEF,OAAO,CAAC,aAAa,CAAC,4BAA4B,EAAE,CAAC,CAAC,EAAE,EAAE,CACxD,CAAC,CAAC,qBAAqB,CAAC;IACtB,SAAS,EAAE,CAAC,QAAQ,CAAC;IACrB,OAAO,EAAE;QACP,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;KAC9C;IACD,KAAK,EAAE;QACL,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;KACzD;IACD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAClC,0BAA0B,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC;CACrD,CAAC,CACH,CAAC;AAEF,OAAO,CAAC,aAAa,CAAC,wBAAwB,EAAE,CAAC,CAAC,EAAE,EAAE,CACpD,CAAC,CAAC,qBAAqB,CAAC;IACtB,SAAS,EAAE,CAAC,QAAQ,CAAC;IACrB,OAAO,EAAE;QACP,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;KAC9C;IACD,KAAK,EAAE;QACL,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;QACxD,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;KAC/D;IACD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"password-reset.mutations.js","sourceRoot":"","sources":["../../../../../../../../src/local-auth/core/generators/auth-email-password/templates/module/schema/password-reset.mutations.ts"],"names":[],"mappings":"AAAA,cAAc;AAEd,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,0BAA0B,GAC3B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAEzC,OAAO,CAAC,aAAa,CAAC,sBAAsB,EAAE,CAAC,CAAC,EAAE,EAAE,CAClD,CAAC,CAAC,qBAAqB,CAAC;IACtB,SAAS,EAAE,CAAC,QAAQ,CAAC;IACrB,OAAO,EAAE;QACP,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;KAC9C;IACD,KAAK,EAAE;QACL,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;KACzD;IACD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,CAC3C,oBAAoB,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC;CACxD,CAAC,CACH,CAAC;AAEF,OAAO,CAAC,aAAa,CAAC,4BAA4B,EAAE,CAAC,CAAC,EAAE,EAAE,CACxD,CAAC,CAAC,qBAAqB,CAAC;IACtB,SAAS,EAAE,CAAC,QAAQ,CAAC;IACrB,OAAO,EAAE;QACP,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;KAC9C;IACD,KAAK,EAAE;QACL,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;KACzD;IACD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAClC,0BAA0B,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC;CACrD,CAAC,CACH,CAAC;AAEF,OAAO,CAAC,aAAa,CAAC,wBAAwB,EAAE,CAAC,CAAC,EAAE,EAAE,CACpD,CAAC,CAAC,qBAAqB,CAAC;IACtB,SAAS,EAAE,CAAC,QAAQ,CAAC;IACrB,OAAO,EAAE;QACP,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;KAC9C;IACD,KAAK,EAAE;QACL,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;QACxD,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;KAC/D;IACD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,CAC3C,qBAAqB,CAAC;QACpB,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,OAAO;KACR,CAAC;CACL,CAAC,CACH,CAAC"}
|
|
@@ -45,10 +45,11 @@ builder.mutationField('resetPasswordWithToken', (t) =>
|
|
|
45
45
|
token: t.input.field({ required: true, type: 'String' }),
|
|
46
46
|
newPassword: t.input.field({ required: true, type: 'String' }),
|
|
47
47
|
},
|
|
48
|
-
resolve: async (_root, { input }) =>
|
|
48
|
+
resolve: async (_root, { input }, context) =>
|
|
49
49
|
completePasswordReset({
|
|
50
50
|
token: input.token,
|
|
51
51
|
newPassword: input.newPassword,
|
|
52
|
+
context,
|
|
52
53
|
}),
|
|
53
54
|
}),
|
|
54
55
|
);
|
|
@@ -28,9 +28,10 @@ export declare function validatePasswordResetToken({ token: rawToken, }: {
|
|
|
28
28
|
* - Always invalidates all existing sessions for security
|
|
29
29
|
* - All remaining password-reset tokens for this user are deleted
|
|
30
30
|
*/
|
|
31
|
-
export declare function completePasswordReset({ token: rawToken, newPassword: rawNewPassword, }: {
|
|
31
|
+
export declare function completePasswordReset({ token: rawToken, newPassword: rawNewPassword, context, }: {
|
|
32
32
|
token: string;
|
|
33
33
|
newPassword: string;
|
|
34
|
+
context: RequestServiceContext;
|
|
34
35
|
}): Promise<{
|
|
35
36
|
success: true;
|
|
36
37
|
}>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"password-reset.service.d.ts","sourceRoot":"","sources":["../../../../../../../../src/local-auth/core/generators/auth-email-password/templates/module/services/password-reset.service.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"password-reset.service.d.ts","sourceRoot":"","sources":["../../../../../../../../src/local-auth/core/generators/auth-email-password/templates/module/services/password-reset.service.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AA6D3E;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,EACzC,KAAK,EAAE,QAAQ,EACf,OAAO,GACR,EAAE;IACD,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,qBAAqB,CAAC;CAChC,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,IAAI,CAAA;CAAE,CAAC,CAgD7B;AAMD;;;;;GAKG;AACH,wBAAsB,0BAA0B,CAAC,EAC/C,KAAK,EAAE,QAAQ,GAChB,EAAE;IACD,KAAK,EAAE,MAAM,CAAC;CACf,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,IAAI,CAAA;CAAE,CAAC,CAe7B;AAOD;;;;;;;;GAQG;AACH,wBAAsB,qBAAqB,CAAC,EAC1C,KAAK,EAAE,QAAQ,EACf,WAAW,EAAE,cAAc,EAC3B,OAAO,GACR,EAAE;IACD,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,qBAAqB,CAAC;CAChC,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,IAAI,CAAA;CAAE,CAAC,CAiE7B"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
// @ts-nocheck
|
|
2
2
|
import { PASSWORD_MAX_LENGTH, PASSWORD_MIN_LENGTH, PASSWORD_RESET_TOKEN_EXPIRY_SEC, } from '$constantsPassword';
|
|
3
|
+
import { resetLoginRateLimits } from '$servicesUserPassword';
|
|
3
4
|
import { createAuthVerification, validateAuthVerification, } from '%authModuleImports';
|
|
4
5
|
import { config } from '%configServiceImports';
|
|
5
6
|
import { sendEmail } from '%emailModuleImports';
|
|
@@ -103,7 +104,7 @@ const completePasswordResetSchema = z.object({
|
|
|
103
104
|
* - Always invalidates all existing sessions for security
|
|
104
105
|
* - All remaining password-reset tokens for this user are deleted
|
|
105
106
|
*/
|
|
106
|
-
export async function completePasswordReset({ token: rawToken, newPassword: rawNewPassword, }) {
|
|
107
|
+
export async function completePasswordReset({ token: rawToken, newPassword: rawNewPassword, context, }) {
|
|
107
108
|
const { token, newPassword } = await completePasswordResetSchema
|
|
108
109
|
.parseAsync({
|
|
109
110
|
token: rawToken,
|
|
@@ -151,6 +152,8 @@ export async function completePasswordReset({ token: rawToken, newPassword: rawN
|
|
|
151
152
|
where: { userId: user.id },
|
|
152
153
|
}),
|
|
153
154
|
]);
|
|
155
|
+
// Reset login rate limits so the user can log in with their new password
|
|
156
|
+
await resetLoginRateLimits({ email: user.email, ip: context.reqInfo.ip });
|
|
154
157
|
// Send password changed confirmation email
|
|
155
158
|
await sendEmail(TPL_PASSWORD_CHANGED_EMAIL, {
|
|
156
159
|
to: user.email,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"password-reset.service.js","sourceRoot":"","sources":["../../../../../../../../src/local-auth/core/generators/auth-email-password/templates/module/services/password-reset.service.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"password-reset.service.js","sourceRoot":"","sources":["../../../../../../../../src/local-auth/core/generators/auth-email-password/templates/module/services/password-reset.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,6 +7,7 @@ import {
|
|
|
7
7
|
PASSWORD_MIN_LENGTH,
|
|
8
8
|
PASSWORD_RESET_TOKEN_EXPIRY_SEC,
|
|
9
9
|
} from '$constantsPassword';
|
|
10
|
+
import { resetLoginRateLimits } from '$servicesUserPassword';
|
|
10
11
|
import {
|
|
11
12
|
createAuthVerification,
|
|
12
13
|
validateAuthVerification,
|
|
@@ -167,9 +168,11 @@ const completePasswordResetSchema = z.object({
|
|
|
167
168
|
export async function completePasswordReset({
|
|
168
169
|
token: rawToken,
|
|
169
170
|
newPassword: rawNewPassword,
|
|
171
|
+
context,
|
|
170
172
|
}: {
|
|
171
173
|
token: string;
|
|
172
174
|
newPassword: string;
|
|
175
|
+
context: RequestServiceContext;
|
|
173
176
|
}): Promise<{ success: true }> {
|
|
174
177
|
const { token, newPassword } = await completePasswordResetSchema
|
|
175
178
|
.parseAsync({
|
|
@@ -225,6 +228,9 @@ export async function completePasswordReset({
|
|
|
225
228
|
}),
|
|
226
229
|
]);
|
|
227
230
|
|
|
231
|
+
// Reset login rate limits so the user can log in with their new password
|
|
232
|
+
await resetLoginRateLimits({ email: user.email, ip: context.reqInfo.ip });
|
|
233
|
+
|
|
228
234
|
// Send password changed confirmation email
|
|
229
235
|
await sendEmail(TPL_PASSWORD_CHANGED_EMAIL, {
|
|
230
236
|
to: user.email,
|
|
@@ -1,6 +1,15 @@
|
|
|
1
1
|
import type { User } from '%prismaGeneratedImports';
|
|
2
2
|
import type { RequestServiceContext } from '%requestServiceContextImports';
|
|
3
3
|
import type { UserSessionPayload } from '%userSessionTypesImports';
|
|
4
|
+
/**
|
|
5
|
+
* Resets login rate limits for the given email+IP combination.
|
|
6
|
+
* Intentionally scoped to the requesting IP only — a password reset should not
|
|
7
|
+
* clear rate limits accumulated from other IPs (which may be attacker traffic).
|
|
8
|
+
*/
|
|
9
|
+
export declare function resetLoginRateLimits({ email, ip, }: {
|
|
10
|
+
email: string;
|
|
11
|
+
ip: string;
|
|
12
|
+
}): Promise<void>;
|
|
4
13
|
export declare function createUserWithEmailAndPassword({ input, }: {
|
|
5
14
|
input: {
|
|
6
15
|
email: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user-password.service.d.ts","sourceRoot":"","sources":["../../../../../../../../src/local-auth/core/generators/auth-email-password/templates/module/services/user-password.service.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAC3E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAwDnE,wBAAsB,8BAA8B,CAAC,EACnD,KAAK,GACN,EAAE;IACD,KAAK,EAAE;QACL,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;CACH,GAAG,OAAO,CAAC,IAAI,CAAC,CAmChB;AAED,wBAAsB,gCAAgC,CAAC,EACrD,KAAK,EACL,OAAO,GACR,EAAE;IACD,KAAK,EAAE;QACL,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;IACF,OAAO,EAAE,qBAAqB,CAAC;CAChC,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,kBAAkB,CAAC;IAAC,IAAI,EAAE,IAAI,CAAA;CAAE,CAAC,CAevD;AAED,wBAAsB,oCAAoC,CAAC,EACzD,KAAK,EACL,OAAO,GACR,EAAE;IACD,KAAK,EAAE;QACL,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,OAAO,EAAE,qBAAqB,CAAC;CAChC,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,kBAAkB,CAAA;CAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"user-password.service.d.ts","sourceRoot":"","sources":["../../../../../../../../src/local-auth/core/generators/auth-email-password/templates/module/services/user-password.service.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAC3E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAwDnE;;;;GAIG;AACH,wBAAsB,oBAAoB,CAAC,EACzC,KAAK,EACL,EAAE,GACH,EAAE;IACD,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;CACZ,GAAG,OAAO,CAAC,IAAI,CAAC,CAKhB;AAED,wBAAsB,8BAA8B,CAAC,EACnD,KAAK,GACN,EAAE;IACD,KAAK,EAAE;QACL,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;CACH,GAAG,OAAO,CAAC,IAAI,CAAC,CAmChB;AAED,wBAAsB,gCAAgC,CAAC,EACrD,KAAK,EACL,OAAO,GACR,EAAE;IACD,KAAK,EAAE;QACL,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;IACF,OAAO,EAAE,qBAAqB,CAAC;CAChC,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,kBAAkB,CAAC;IAAC,IAAI,EAAE,IAAI,CAAA;CAAE,CAAC,CAevD;AAED,wBAAsB,oCAAoC,CAAC,EACzD,KAAK,EACL,OAAO,GACR,EAAE;IACD,KAAK,EAAE;QACL,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,OAAO,EAAE,qBAAqB,CAAC;CAChC,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,kBAAkB,CAAA;CAAE,CAAC,CAgE3C;AAOD;;;;;;;;GAQG;AACH,wBAAsB,kBAAkB,CAAC,EACvC,MAAM,EACN,KAAK,GACN,EAAE;IACD,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE;QACL,eAAe,EAAE,MAAM,CAAC;QACxB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;CACH,GAAG,OAAO,CAAC,IAAI,CAAC,CAyChB;AAMD;;;;;;;;GAQG;AACH,wBAAsB,iBAAiB,CAAC,EACtC,MAAM,EACN,KAAK,GACN,EAAE;IACD,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE;QACL,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;CACH,GAAG,OAAO,CAAC,IAAI,CAAC,CA2ChB"}
|
|
@@ -25,15 +25,26 @@ const getRegistrationLimiter = memoizeRateLimiter('registration', {
|
|
|
25
25
|
blockDuration: 60 * 60, // Block for 1 hour if exceeded
|
|
26
26
|
});
|
|
27
27
|
const getLoginIpLimiter = memoizeRateLimiter('login-ip', {
|
|
28
|
-
points:
|
|
29
|
-
duration: 60 * 60
|
|
28
|
+
points: 15,
|
|
29
|
+
duration: 60 * 60, // 1 hour
|
|
30
30
|
blockDuration: 60 * 60, // Block for 1 hour if exceeded
|
|
31
31
|
});
|
|
32
32
|
const getLoginConsecutiveFailsLimiter = memoizeRateLimiter('login-consecutive-fails', {
|
|
33
|
-
points:
|
|
34
|
-
duration: 60 * 60
|
|
35
|
-
blockDuration: 60 * 15, // Block for 15 minutes after
|
|
33
|
+
points: 10,
|
|
34
|
+
duration: 60 * 60, // 1 hour (duration for tracking)
|
|
35
|
+
blockDuration: 60 * 15, // Block for 15 minutes after consecutive fails
|
|
36
36
|
});
|
|
37
|
+
/**
|
|
38
|
+
* Resets login rate limits for the given email+IP combination.
|
|
39
|
+
* Intentionally scoped to the requesting IP only — a password reset should not
|
|
40
|
+
* clear rate limits accumulated from other IPs (which may be attacker traffic).
|
|
41
|
+
*/
|
|
42
|
+
export async function resetLoginRateLimits({ email, ip, }) {
|
|
43
|
+
await Promise.all([
|
|
44
|
+
getLoginConsecutiveFailsLimiter().delete(`${email}_${ip}`),
|
|
45
|
+
getLoginIpLimiter().delete(ip),
|
|
46
|
+
]);
|
|
47
|
+
}
|
|
37
48
|
export async function createUserWithEmailAndPassword({ input, }) {
|
|
38
49
|
const { email, password, name } = await emailPasswordSchema
|
|
39
50
|
.parseAsync(input)
|
|
@@ -84,11 +95,14 @@ export async function authenticateUserWithEmailAndPassword({ input, context, })
|
|
|
84
95
|
const clientIp = context.reqInfo.ip;
|
|
85
96
|
const emailIpKey = `${email}_${clientIp}`;
|
|
86
97
|
// Check IP-based rate limit (slow brute force protection)
|
|
87
|
-
await getLoginIpLimiter().
|
|
98
|
+
const ipResult = await getLoginIpLimiter().consume(clientIp);
|
|
99
|
+
if (!ipResult.allowed) {
|
|
100
|
+
throw new TooManyRequestsError('Too many login attempts. Please try again later or reset your password.', 'login-ip-rate-limited', { retryAfterMs: ipResult.msBeforeNext });
|
|
101
|
+
}
|
|
88
102
|
// Check consecutive failures rate limit (fast brute force protection)
|
|
89
103
|
const consecutiveFailsResult = await getLoginConsecutiveFailsLimiter().get(emailIpKey);
|
|
90
104
|
if (consecutiveFailsResult && !consecutiveFailsResult.allowed) {
|
|
91
|
-
throw new TooManyRequestsError('Account temporarily locked due to too many failed attempts. Please try again later.', 'login-consecutive-fails-blocked', { retryAfterMs: consecutiveFailsResult.msBeforeNext });
|
|
105
|
+
throw new TooManyRequestsError('Account temporarily locked due to too many failed attempts. Please reset your password or try again later.', 'login-consecutive-fails-blocked', { retryAfterMs: consecutiveFailsResult.msBeforeNext });
|
|
92
106
|
}
|
|
93
107
|
// check if user with that email exists
|
|
94
108
|
const userAccount = await prisma.userAccount.findUnique({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user-password.service.js","sourceRoot":"","sources":["../../../../../../../../src/local-auth/core/generators/auth-email-password/templates/module/services/user-password.service.ts"],"names":[],"mappings":"AAAA,cAAc;AAMd,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC9E,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EACL,eAAe,EACf,+BAA+B,EAC/B,QAAQ,EACR,aAAa,EACb,oBAAoB,GACrB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,CAAC,MAAM,KAAK,CAAC;AAEpB,MAAM,WAAW,GAAG,gBAAgB,CAAC;AAErC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,KAAK,EAAE,CAAC;SACL,KAAK,EAAE;SACP,GAAG,CAAC,mBAAmB,CAAC;SACxB,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;IAC5C,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,GAAG,CAAC,mBAAmB,CAAC;IACtE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;CAC5C,CAAC,CAAC;AAEH;;GAEG;AAEH,MAAM,sBAAsB,GAAG,kBAAkB,CAAC,cAAc,EAAE;IAChE,MAAM,EAAE,EAAE;IACV,QAAQ,EAAE,EAAE,GAAG,EAAE,EAAE,SAAS;IAC5B,aAAa,EAAE,EAAE,GAAG,EAAE,EAAE,+BAA+B;CACxD,CAAC,CAAC;AAEH,MAAM,iBAAiB,GAAG,kBAAkB,CAAC,UAAU,EAAE;IACvD,MAAM,EAAE,EAAE;IACV,QAAQ,EAAE,EAAE,GAAG,EAAE,
|
|
1
|
+
{"version":3,"file":"user-password.service.js","sourceRoot":"","sources":["../../../../../../../../src/local-auth/core/generators/auth-email-password/templates/module/services/user-password.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -44,20 +44,38 @@ const getRegistrationLimiter = memoizeRateLimiter('registration', {
|
|
|
44
44
|
});
|
|
45
45
|
|
|
46
46
|
const getLoginIpLimiter = memoizeRateLimiter('login-ip', {
|
|
47
|
-
points:
|
|
48
|
-
duration: 60 * 60
|
|
47
|
+
points: 15,
|
|
48
|
+
duration: 60 * 60, // 1 hour
|
|
49
49
|
blockDuration: 60 * 60, // Block for 1 hour if exceeded
|
|
50
50
|
});
|
|
51
51
|
|
|
52
52
|
const getLoginConsecutiveFailsLimiter = memoizeRateLimiter(
|
|
53
53
|
'login-consecutive-fails',
|
|
54
54
|
{
|
|
55
|
-
points:
|
|
56
|
-
duration: 60 * 60
|
|
57
|
-
blockDuration: 60 * 15, // Block for 15 minutes after
|
|
55
|
+
points: 10,
|
|
56
|
+
duration: 60 * 60, // 1 hour (duration for tracking)
|
|
57
|
+
blockDuration: 60 * 15, // Block for 15 minutes after consecutive fails
|
|
58
58
|
},
|
|
59
59
|
);
|
|
60
60
|
|
|
61
|
+
/**
|
|
62
|
+
* Resets login rate limits for the given email+IP combination.
|
|
63
|
+
* Intentionally scoped to the requesting IP only — a password reset should not
|
|
64
|
+
* clear rate limits accumulated from other IPs (which may be attacker traffic).
|
|
65
|
+
*/
|
|
66
|
+
export async function resetLoginRateLimits({
|
|
67
|
+
email,
|
|
68
|
+
ip,
|
|
69
|
+
}: {
|
|
70
|
+
email: string;
|
|
71
|
+
ip: string;
|
|
72
|
+
}): Promise<void> {
|
|
73
|
+
await Promise.all([
|
|
74
|
+
getLoginConsecutiveFailsLimiter().delete(`${email}_${ip}`),
|
|
75
|
+
getLoginIpLimiter().delete(ip),
|
|
76
|
+
]);
|
|
77
|
+
}
|
|
78
|
+
|
|
61
79
|
export async function createUserWithEmailAndPassword({
|
|
62
80
|
input,
|
|
63
81
|
}: {
|
|
@@ -149,11 +167,14 @@ export async function authenticateUserWithEmailAndPassword({
|
|
|
149
167
|
const emailIpKey = `${email}_${clientIp}`;
|
|
150
168
|
|
|
151
169
|
// Check IP-based rate limit (slow brute force protection)
|
|
152
|
-
await getLoginIpLimiter().
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
170
|
+
const ipResult = await getLoginIpLimiter().consume(clientIp);
|
|
171
|
+
if (!ipResult.allowed) {
|
|
172
|
+
throw new TooManyRequestsError(
|
|
173
|
+
'Too many login attempts. Please try again later or reset your password.',
|
|
174
|
+
'login-ip-rate-limited',
|
|
175
|
+
{ retryAfterMs: ipResult.msBeforeNext },
|
|
176
|
+
);
|
|
177
|
+
}
|
|
157
178
|
|
|
158
179
|
// Check consecutive failures rate limit (fast brute force protection)
|
|
159
180
|
const consecutiveFailsResult =
|
|
@@ -161,7 +182,7 @@ export async function authenticateUserWithEmailAndPassword({
|
|
|
161
182
|
|
|
162
183
|
if (consecutiveFailsResult && !consecutiveFailsResult.allowed) {
|
|
163
184
|
throw new TooManyRequestsError(
|
|
164
|
-
'Account temporarily locked due to too many failed attempts. Please try again later.',
|
|
185
|
+
'Account temporarily locked due to too many failed attempts. Please reset your password or try again later.',
|
|
165
186
|
'login-consecutive-fails-blocked',
|
|
166
187
|
{ retryAfterMs: consecutiveFailsResult.msBeforeNext },
|
|
167
188
|
);
|
|
@@ -22,11 +22,11 @@ export const authRoutesGenerator = createGenerator({
|
|
|
22
22
|
},
|
|
23
23
|
run({ renderers, paths }) {
|
|
24
24
|
const schemaFields = {
|
|
25
|
-
email:
|
|
25
|
+
email: `z.email('Please enter a valid email address').transform((value) => value.toLowerCase())`,
|
|
26
26
|
...(requireNameOnRegistration
|
|
27
|
-
? { name:
|
|
27
|
+
? { name: `z.string().min(1, 'Please enter your name').max(100)` }
|
|
28
28
|
: {}),
|
|
29
|
-
password: `z.string().min(PASSWORD_MIN_LENGTH).max(PASSWORD_MAX_LENGTH)`,
|
|
29
|
+
password: `z.string().min(PASSWORD_MIN_LENGTH, \`Password must be at least \${PASSWORD_MIN_LENGTH} characters\`).max(PASSWORD_MAX_LENGTH)`,
|
|
30
30
|
};
|
|
31
31
|
const registerSchema = tsTemplateWithImports(tsImportBuilder(['PASSWORD_MAX_LENGTH', 'PASSWORD_MIN_LENGTH']).from(paths.constants)) `z.object(${TsCodeUtils.mergeFragmentsAsObject(schemaFields)})`;
|
|
32
32
|
const inputFields = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth-routes.generator.js","sourceRoot":"","sources":["../../../../../src/local-auth/core/generators/auth-routes/auth-routes.generator.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,eAAe,EACf,qBAAqB,GACtB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC3E,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,+BAA+B,IAAI,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAE9F,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChC,yBAAyB,EAAE,CAAC,CAAC,OAAO,EAAE;CACvC,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,eAAe,CAAC;IACjD,IAAI,EAAE,uBAAuB;IAC7B,gBAAgB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG;IACjC,gBAAgB;IAChB,UAAU,EAAE,CAAC,EAAE,yBAAyB,EAAE,EAAE,EAAE,CAAC,CAAC;QAC9C,KAAK,EAAE,mBAAmB,CAAC,KAAK,CAAC,IAAI;QACrC,SAAS,EAAE,mBAAmB,CAAC,SAAS,CAAC,IAAI;QAC7C,IAAI,EAAE,mBAAmB,CAAC;YACxB,YAAY,EAAE;gBACZ,SAAS,EAAE,mBAAmB,CAAC,SAAS,CAAC,QAAQ;gBACjD,KAAK,EAAE,mBAAmB,CAAC,KAAK,CAAC,QAAQ;aAC1C;YACD,GAAG,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE;gBACtB,MAAM,YAAY,GAA2B;oBAC3C,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"auth-routes.generator.js","sourceRoot":"","sources":["../../../../../src/local-auth/core/generators/auth-routes/auth-routes.generator.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,eAAe,EACf,qBAAqB,GACtB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC3E,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,+BAA+B,IAAI,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAE9F,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChC,yBAAyB,EAAE,CAAC,CAAC,OAAO,EAAE;CACvC,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,eAAe,CAAC;IACjD,IAAI,EAAE,uBAAuB;IAC7B,gBAAgB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG;IACjC,gBAAgB;IAChB,UAAU,EAAE,CAAC,EAAE,yBAAyB,EAAE,EAAE,EAAE,CAAC,CAAC;QAC9C,KAAK,EAAE,mBAAmB,CAAC,KAAK,CAAC,IAAI;QACrC,SAAS,EAAE,mBAAmB,CAAC,SAAS,CAAC,IAAI;QAC7C,IAAI,EAAE,mBAAmB,CAAC;YACxB,YAAY,EAAE;gBACZ,SAAS,EAAE,mBAAmB,CAAC,SAAS,CAAC,QAAQ;gBACjD,KAAK,EAAE,mBAAmB,CAAC,KAAK,CAAC,QAAQ;aAC1C;YACD,GAAG,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE;gBACtB,MAAM,YAAY,GAA2B;oBAC3C,KAAK,EAAE,yFAAyF;oBAChG,GAAG,CAAC,yBAAyB;wBAC3B,CAAC,CAAC,EAAE,IAAI,EAAE,sDAAsD,EAAE;wBAClE,CAAC,CAAC,EAAE,CAAC;oBACP,QAAQ,EAAE,gIAAgI;iBAC3I,CAAC;gBAEF,MAAM,cAAc,GAAG,qBAAqB,CAC1C,eAAe,CAAC,CAAC,qBAAqB,EAAE,qBAAqB,CAAC,CAAC,CAAC,IAAI,CAClE,KAAK,CAAC,SAAS,CAChB,CACF,CAAA,YAAY,WAAW,CAAC,sBAAsB,CAAC,YAAY,CAAC,GAAG,CAAC;gBAEjE,MAAM,WAAW,GAA2B;oBAC1C,KAAK,EAAE,YAAY;oBACnB,GAAG,CAAC,yBAAyB,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC3D,QAAQ,EAAE,eAAe;iBAC1B,CAAC;gBAEF,MAAM,aAAa,GAAG,WAAW,CAAC,+BAA+B,CAC/D,WAAW,EACX,EAAE,mBAAmB,EAAE,KAAK,EAAE,CAC/B,CAAC;gBAEF,OAAO;oBACL,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;wBACvB,MAAM,OAAO,CAAC,KAAK,CACjB,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC;4BACzB,SAAS,EAAE;gCACT,QAAQ,EAAE;oCACR,mBAAmB,EAAE,cAAc;oCACnC,kBAAkB,EAAE,aAAa;oCACjC,qBAAqB,EAAE,yBAAyB;wCAC9C,CAAC,CAAC;;;;;;;eAOT;wCACO,CAAC,CAAC,EAAE;iCACP;6BACF;yBACF,CAAC,CACH,CAAC;wBACF,MAAM,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;oBACxD,CAAC;iBACF,CAAC;YACJ,CAAC;SACF,CAAC;KACH,CAAC;CACH,CAAC,CAAC"}
|
package/dist/local-auth/core/generators/auth-routes/templates/routes/auth_/forgot-password.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"forgot-password.js","sourceRoot":"","sources":["../../../../../../../../src/local-auth/core/generators/auth-routes/templates/routes/auth_/forgot-password.tsx"],"names":[],"mappings":";AAAA,cAAc;AAEd,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EACL,MAAM,EACN,IAAI,EACJ,WAAW,EACX,eAAe,EACf,UAAU,EACV,SAAS,EACT,oBAAoB,GACrB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAC/B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,KAAK,GAAG,eAAe,CAAC,wBAAwB,CAAC,CAAC;IAC7D,SAAS,EAAE,kBAAkB;IAC7B,UAAU,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE;QACtC,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,QAAQ,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1B,KAAK,EAAE,CAAC;SACL,KAAK,
|
|
1
|
+
{"version":3,"file":"forgot-password.js","sourceRoot":"","sources":["../../../../../../../../src/local-auth/core/generators/auth-routes/templates/routes/auth_/forgot-password.tsx"],"names":[],"mappings":"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"}
|
|
@@ -27,8 +27,13 @@ export const Route = createFileRoute('/auth_/login')({
|
|
|
27
27
|
},
|
|
28
28
|
});
|
|
29
29
|
const formSchema = z.object({
|
|
30
|
-
email: z
|
|
31
|
-
|
|
30
|
+
email: z
|
|
31
|
+
.email('Please enter a valid email address')
|
|
32
|
+
.transform((value) => value.toLowerCase()),
|
|
33
|
+
password: z
|
|
34
|
+
.string()
|
|
35
|
+
.min(PASSWORD_MIN_LENGTH, `Password must be at least ${PASSWORD_MIN_LENGTH} characters`)
|
|
36
|
+
.max(PASSWORD_MAX_LENGTH),
|
|
32
37
|
});
|
|
33
38
|
const loginWithEmailPasswordMutation = graphql(`
|
|
34
39
|
mutation LoginWithEmailPassword($input: LoginWithEmailPasswordInput!) {
|
|
@@ -67,6 +72,8 @@ function LoginPage() {
|
|
|
67
72
|
.catch((err) => {
|
|
68
73
|
const errorCode = getApolloErrorCode(err, [
|
|
69
74
|
'invalid-credentials',
|
|
75
|
+
'login-ip-rate-limited',
|
|
76
|
+
'login-consecutive-fails-blocked',
|
|
70
77
|
]);
|
|
71
78
|
switch (errorCode) {
|
|
72
79
|
case 'invalid-credentials': {
|
|
@@ -74,6 +81,14 @@ function LoginPage() {
|
|
|
74
81
|
setFormError('password', { message: 'Invalid email or password' }, { shouldFocus: true });
|
|
75
82
|
break;
|
|
76
83
|
}
|
|
84
|
+
case 'login-ip-rate-limited':
|
|
85
|
+
case 'login-consecutive-fails-blocked': {
|
|
86
|
+
resetField('password');
|
|
87
|
+
setFormError('password', {
|
|
88
|
+
message: 'Too many failed login attempts. Please reset your password or try again later.',
|
|
89
|
+
});
|
|
90
|
+
break;
|
|
91
|
+
}
|
|
77
92
|
default: {
|
|
78
93
|
toast.error(logAndFormatError(err, 'Sorry, we could not log you in.'));
|
|
79
94
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../../../../../../../src/local-auth/core/generators/auth-routes/templates/routes/auth_/login.tsx"],"names":[],"mappings":";AAAA,cAAc;AAEd,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EACL,MAAM,EACN,IAAI,EACJ,WAAW,EACX,eAAe,EACf,UAAU,EACV,SAAS,EACT,oBAAoB,GACrB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EACL,eAAe,EACf,IAAI,EACJ,QAAQ,EACR,WAAW,GACZ,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAC/B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,KAAK,GAAG,eAAe,CAAC,cAAc,CAAC,CAAC;IACnD,cAAc,EAAE,CAAC,CAAC,MAAM,CAAC;QACvB,SAAS,EAAE,CAAC;aACT,MAAM,EAAE;aACR,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;aACvD,QAAQ,EAAE;KACd,CAAC;IACF,SAAS,EAAE,SAAS;IACpB,UAAU,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE;QAC7D,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,QAAQ,CAAC,EAAE,EAAE,EAAE,SAAS,IAAI,GAAG,EAAE,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1B,KAAK,EAAE,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../../../../../../../src/local-auth/core/generators/auth-routes/templates/routes/auth_/login.tsx"],"names":[],"mappings":";AAAA,cAAc;AAEd,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EACL,MAAM,EACN,IAAI,EACJ,WAAW,EACX,eAAe,EACf,UAAU,EACV,SAAS,EACT,oBAAoB,GACrB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EACL,eAAe,EACf,IAAI,EACJ,QAAQ,EACR,WAAW,GACZ,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAC/B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,KAAK,GAAG,eAAe,CAAC,cAAc,CAAC,CAAC;IACnD,cAAc,EAAE,CAAC,CAAC,MAAM,CAAC;QACvB,SAAS,EAAE,CAAC;aACT,MAAM,EAAE;aACR,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;aACvD,QAAQ,EAAE;KACd,CAAC;IACF,SAAS,EAAE,SAAS;IACpB,UAAU,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE;QAC7D,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,QAAQ,CAAC,EAAE,EAAE,EAAE,SAAS,IAAI,GAAG,EAAE,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1B,KAAK,EAAE,CAAC;SACL,KAAK,CAAC,oCAAoC,CAAC;SAC3C,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;IAC5C,QAAQ,EAAE,CAAC;SACR,MAAM,EAAE;SACR,GAAG,CACF,mBAAmB,EACnB,6BAA6B,mBAAmB,aAAa,CAC9D;SACA,GAAG,CAAC,mBAAmB,CAAC;CAC5B,CAAC,CAAC;AAIH,MAAM,8BAA8B,GAAG,OAAO,CAAC;;;;;;;;CAQ9C,CAAC,CAAC;AAEH,SAAS,SAAS;IAChB,MAAM,EACJ,OAAO,EACP,YAAY,EACZ,UAAU,EACV,QAAQ,EAAE,YAAY,GACvB,GAAG,OAAO,CAAW;QACpB,QAAQ,EAAE,WAAW,CAAC,UAAU,CAAC;QACjC,cAAc,EAAE,QAAQ;KACzB,CAAC,CAAC;IACH,MAAM,CAAC,sBAAsB,EAAE,EAAE,OAAO,EAAE,CAAC,GAAG,WAAW,CACvD,8BAA8B,CAC/B,CAAC;IACF,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,MAAM,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;IAExC,MAAM,QAAQ,GAAG,CAAC,IAAc,EAAQ,EAAE;QACxC,sBAAsB,CAAC;YACrB,SAAS,EAAE;gBACT,KAAK,EAAE;oBACL,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,QAAQ,EAAE,IAAI,CAAC,QAAQ;iBACxB;aACF;SACF,CAAC;aACC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE;YACjB,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;YAC1D,CAAC;YACD,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC;YACvD,iBAAiB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAEjC,QAAQ,CAAC,EAAE,EAAE,EAAE,SAAS,IAAI,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACpE,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;YACtB,MAAM,SAAS,GAAG,kBAAkB,CAAC,GAAG,EAAE;gBACxC,qBAAqB;gBACrB,uBAAuB;gBACvB,iCAAiC;aACzB,CAAC,CAAC;YACZ,QAAQ,SAAS,EAAE,CAAC;gBAClB,KAAK,qBAAqB,CAAC,CAAC,CAAC;oBAC3B,UAAU,CAAC,UAAU,CAAC,CAAC;oBACvB,YAAY,CACV,UAAU,EACV,EAAE,OAAO,EAAE,2BAA2B,EAAE,EACxC,EAAE,WAAW,EAAE,IAAI,EAAE,CACtB,CAAC;oBACF,MAAM;gBACR,CAAC;gBACD,KAAK,uBAAuB,CAAC;gBAC7B,KAAK,iCAAiC,CAAC,CAAC,CAAC;oBACvC,UAAU,CAAC,UAAU,CAAC,CAAC;oBACvB,YAAY,CAAC,UAAU,EAAE;wBACvB,OAAO,EACL,gFAAgF;qBACnF,CAAC,CAAC;oBACH,MAAM;gBACR,CAAC;gBACD,OAAO,CAAC,CAAC,CAAC;oBACR,KAAK,CAAC,KAAK,CACT,iBAAiB,CAAC,GAAG,EAAE,iCAAiC,CAAC,CAC1D,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAC;IACP,CAAC,CAAC;IAEF,OAAO,CACL,MAAC,IAAI,eACH,MAAC,UAAU,eACT,KAAC,SAAS,wCAAkC,EAC5C,KAAC,eAAe,kEAEE,IACP,EACb,KAAC,WAAW,cACV,gBAAM,QAAQ,EAAE,YAAY,CAAC,QAAQ,CAAC,aACpC,eAAK,SAAS,EAAC,qBAAqB,aAClC,KAAC,oBAAoB,IACnB,OAAO,EAAE,OAAO,EAChB,IAAI,EAAC,OAAO,EACZ,IAAI,EAAC,OAAO,EACZ,YAAY,EAAC,OAAO,EACpB,WAAW,EAAC,kBAAkB,GAC9B,EACF,KAAC,oBAAoB,IACnB,OAAO,EAAE,OAAO,EAChB,IAAI,EAAC,UAAU,EACf,IAAI,EAAC,UAAU,EACf,YAAY,EAAC,kBAAkB,EAC/B,WAAW,EAAC,UAAU,GACtB,EACF,KAAC,MAAM,IAAC,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAC,QAAQ,EAAC,QAAQ,EAAE,OAAO,sBAEjD,IACL,EACN,eAAK,SAAS,EAAC,8CAA8C,aAC3D,KAAC,IAAI,IACH,EAAE,EAAC,uBAAuB,EAC1B,SAAS,EAAC,0DAA0D,sCAG/D,EACP,oDAC8B,GAAG,EAC/B,KAAC,IAAI,IACH,EAAE,EAAC,gBAAgB,EACnB,SAAS,EAAC,8BAA8B,wBAGnC,IACH,IACF,IACD,GACK,IACT,CACR,CAAC;AACJ,CAAC"}
|
|
@@ -42,8 +42,16 @@ export const Route = createFileRoute('/auth_/login')({
|
|
|
42
42
|
});
|
|
43
43
|
|
|
44
44
|
const formSchema = z.object({
|
|
45
|
-
email: z
|
|
46
|
-
|
|
45
|
+
email: z
|
|
46
|
+
.email('Please enter a valid email address')
|
|
47
|
+
.transform((value) => value.toLowerCase()),
|
|
48
|
+
password: z
|
|
49
|
+
.string()
|
|
50
|
+
.min(
|
|
51
|
+
PASSWORD_MIN_LENGTH,
|
|
52
|
+
`Password must be at least ${PASSWORD_MIN_LENGTH} characters`,
|
|
53
|
+
)
|
|
54
|
+
.max(PASSWORD_MAX_LENGTH),
|
|
47
55
|
});
|
|
48
56
|
|
|
49
57
|
type FormData = z.infer<typeof formSchema>;
|
|
@@ -95,6 +103,8 @@ function LoginPage(): React.JSX.Element {
|
|
|
95
103
|
.catch((err: unknown) => {
|
|
96
104
|
const errorCode = getApolloErrorCode(err, [
|
|
97
105
|
'invalid-credentials',
|
|
106
|
+
'login-ip-rate-limited',
|
|
107
|
+
'login-consecutive-fails-blocked',
|
|
98
108
|
] as const);
|
|
99
109
|
switch (errorCode) {
|
|
100
110
|
case 'invalid-credentials': {
|
|
@@ -106,6 +116,15 @@ function LoginPage(): React.JSX.Element {
|
|
|
106
116
|
);
|
|
107
117
|
break;
|
|
108
118
|
}
|
|
119
|
+
case 'login-ip-rate-limited':
|
|
120
|
+
case 'login-consecutive-fails-blocked': {
|
|
121
|
+
resetField('password');
|
|
122
|
+
setFormError('password', {
|
|
123
|
+
message:
|
|
124
|
+
'Too many failed login attempts. Please reset your password or try again later.',
|
|
125
|
+
});
|
|
126
|
+
break;
|
|
127
|
+
}
|
|
109
128
|
default: {
|
|
110
129
|
toast.error(
|
|
111
130
|
logAndFormatError(err, 'Sorry, we could not log you in.'),
|
package/dist/local-auth/core/generators/auth-routes/templates/routes/auth_/reset-password.js
CHANGED
|
@@ -28,10 +28,13 @@ export const Route = createFileRoute('/auth_/reset-password')({
|
|
|
28
28
|
});
|
|
29
29
|
const formSchema = z
|
|
30
30
|
.object({
|
|
31
|
-
newPassword: z
|
|
31
|
+
newPassword: z
|
|
32
|
+
.string()
|
|
33
|
+
.min(PASSWORD_MIN_LENGTH, `Password must be at least ${PASSWORD_MIN_LENGTH} characters`)
|
|
34
|
+
.max(PASSWORD_MAX_LENGTH),
|
|
32
35
|
confirmPassword: z
|
|
33
36
|
.string()
|
|
34
|
-
.min(PASSWORD_MIN_LENGTH)
|
|
37
|
+
.min(PASSWORD_MIN_LENGTH, `Password must be at least ${PASSWORD_MIN_LENGTH} characters`)
|
|
35
38
|
.max(PASSWORD_MAX_LENGTH),
|
|
36
39
|
})
|
|
37
40
|
.refine((data) => data.newPassword === data.confirmPassword, {
|
package/dist/local-auth/core/generators/auth-routes/templates/routes/auth_/reset-password.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reset-password.js","sourceRoot":"","sources":["../../../../../../../../src/local-auth/core/generators/auth-routes/templates/routes/auth_/reset-password.tsx"],"names":[],"mappings":";AAAA,cAAc;AAEd,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EACL,MAAM,EACN,IAAI,EACJ,WAAW,EACX,eAAe,EACf,UAAU,EACV,SAAS,EACT,oBAAoB,GACrB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EACL,eAAe,EACf,IAAI,EACJ,QAAQ,EACR,WAAW,GACZ,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACzD,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAC/B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,KAAK,GAAG,eAAe,CAAC,uBAAuB,CAAC,CAAC;IAC5D,cAAc,EAAE,CAAC,CAAC,MAAM,CAAC;QACvB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KAC7B,CAAC;IACF,SAAS,EAAE,iBAAiB;IAC5B,UAAU,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE;QACzD,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,QAAQ,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;QAC9B,CAAC;QACD,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,QAAQ,CAAC,EAAE,EAAE,EAAE,uBAAuB,EAAE,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,UAAU,GAAG,CAAC;KACjB,MAAM,CAAC;IACN,WAAW,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"reset-password.js","sourceRoot":"","sources":["../../../../../../../../src/local-auth/core/generators/auth-routes/templates/routes/auth_/reset-password.tsx"],"names":[],"mappings":"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"}
|
package/dist/local-auth/core/generators/auth-routes/templates/routes/auth_/reset-password.tsx
CHANGED
|
@@ -43,10 +43,19 @@ export const Route = createFileRoute('/auth_/reset-password')({
|
|
|
43
43
|
|
|
44
44
|
const formSchema = z
|
|
45
45
|
.object({
|
|
46
|
-
newPassword: z
|
|
46
|
+
newPassword: z
|
|
47
|
+
.string()
|
|
48
|
+
.min(
|
|
49
|
+
PASSWORD_MIN_LENGTH,
|
|
50
|
+
`Password must be at least ${PASSWORD_MIN_LENGTH} characters`,
|
|
51
|
+
)
|
|
52
|
+
.max(PASSWORD_MAX_LENGTH),
|
|
47
53
|
confirmPassword: z
|
|
48
54
|
.string()
|
|
49
|
-
.min(
|
|
55
|
+
.min(
|
|
56
|
+
PASSWORD_MIN_LENGTH,
|
|
57
|
+
`Password must be at least ${PASSWORD_MIN_LENGTH} characters`,
|
|
58
|
+
)
|
|
50
59
|
.max(PASSWORD_MAX_LENGTH),
|
|
51
60
|
})
|
|
52
61
|
.refine((data) => data.newPassword === data.confirmPassword, {
|