@strapi/plugin-users-permissions 0.0.0-experimental.6340da17068c3bed7fb006e7bcc554c71129e282 → 0.0.0-experimental.63624e21eb5b0713345a0cf2f68f1c40eab427bc
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/.eslintrc.cjs +2 -0
- package/admin/src/pages/EmailTemplates/components/EmailForm.jsx +3 -1
- package/admin/src/pages/Roles/pages/EditPage.jsx +1 -1
- package/admin/src/pages/Roles/pages/ListPage/index.jsx +1 -1
- package/admin/src/translations/en.json +1 -0
- package/admin/src/translations/es.json +1 -1
- package/admin/src/translations/ko.json +2 -1
- package/admin/src/translations/sv.json +1 -1
- package/admin/src/translations/uk.json +1 -1
- package/dist/admin/pages/EmailTemplates/components/EmailForm.js +2 -1
- package/dist/admin/pages/EmailTemplates/components/EmailForm.js.map +1 -1
- package/dist/admin/pages/EmailTemplates/components/EmailForm.mjs +2 -1
- package/dist/admin/pages/EmailTemplates/components/EmailForm.mjs.map +1 -1
- package/dist/admin/pages/Roles/pages/EditPage.js +1 -1
- package/dist/admin/pages/Roles/pages/EditPage.js.map +1 -1
- package/dist/admin/pages/Roles/pages/EditPage.mjs +1 -1
- package/dist/admin/pages/Roles/pages/EditPage.mjs.map +1 -1
- package/dist/admin/pages/Roles/pages/ListPage/index.js +1 -1
- package/dist/admin/pages/Roles/pages/ListPage/index.js.map +1 -1
- package/dist/admin/pages/Roles/pages/ListPage/index.mjs +1 -1
- package/dist/admin/pages/Roles/pages/ListPage/index.mjs.map +1 -1
- package/dist/admin/translations/en.json.js +1 -0
- package/dist/admin/translations/en.json.js.map +1 -1
- package/dist/admin/translations/en.json.mjs +1 -0
- package/dist/admin/translations/en.json.mjs.map +1 -1
- package/dist/admin/translations/es.json.js +1 -1
- package/dist/admin/translations/es.json.mjs +1 -1
- package/dist/admin/translations/ko.json.js +2 -1
- package/dist/admin/translations/ko.json.js.map +1 -1
- package/dist/admin/translations/ko.json.mjs +2 -1
- package/dist/admin/translations/ko.json.mjs.map +1 -1
- package/dist/admin/translations/sv.json.js +1 -1
- package/dist/admin/translations/sv.json.mjs +1 -1
- package/dist/admin/translations/uk.json.js +1 -1
- package/dist/admin/translations/uk.json.mjs +1 -1
- package/dist/server/_virtual/_node_crypto.js +10 -0
- package/dist/server/_virtual/_node_crypto.js.map +1 -0
- package/dist/server/_virtual/_node_crypto.mjs +7 -0
- package/dist/server/_virtual/_node_crypto.mjs.map +1 -0
- package/dist/server/_virtual/_node_url.js +10 -0
- package/dist/server/_virtual/_node_url.js.map +1 -0
- package/dist/server/_virtual/_node_url.mjs +7 -0
- package/dist/server/_virtual/_node_url.mjs.map +1 -0
- package/dist/server/bootstrap/index.js.map +1 -1
- package/dist/server/bootstrap/index.mjs.map +1 -1
- package/dist/server/bootstrap/users-permissions-actions.js.map +1 -1
- package/dist/server/bootstrap/users-permissions-actions.mjs.map +1 -1
- package/dist/server/config.js.map +1 -1
- package/dist/server/config.mjs.map +1 -1
- package/dist/server/content-types/index.js.map +1 -1
- package/dist/server/content-types/index.mjs.map +1 -1
- package/dist/server/content-types/permission/index.js.map +1 -1
- package/dist/server/content-types/permission/index.mjs.map +1 -1
- package/dist/server/content-types/role/index.js.map +1 -1
- package/dist/server/content-types/role/index.mjs.map +1 -1
- package/dist/server/content-types/user/index.js.map +1 -1
- package/dist/server/content-types/user/index.mjs.map +1 -1
- package/dist/server/content-types/user/schema-config.js.map +1 -1
- package/dist/server/content-types/user/schema-config.mjs.map +1 -1
- package/dist/server/controllers/auth.js +38 -30
- package/dist/server/controllers/auth.js.map +1 -1
- package/dist/server/controllers/auth.mjs +38 -28
- package/dist/server/controllers/auth.mjs.map +1 -1
- package/dist/server/controllers/content-manager-user.js.map +1 -1
- package/dist/server/controllers/content-manager-user.mjs.map +1 -1
- package/dist/server/controllers/index.js.map +1 -1
- package/dist/server/controllers/index.mjs.map +1 -1
- package/dist/server/controllers/permissions.js.map +1 -1
- package/dist/server/controllers/permissions.mjs.map +1 -1
- package/dist/server/controllers/role.js.map +1 -1
- package/dist/server/controllers/role.mjs.map +1 -1
- package/dist/server/controllers/settings.js.map +1 -1
- package/dist/server/controllers/settings.mjs.map +1 -1
- package/dist/server/controllers/user.js.map +1 -1
- package/dist/server/controllers/user.mjs.map +1 -1
- package/dist/server/controllers/validation/auth.js +6 -6
- package/dist/server/controllers/validation/auth.js.map +1 -1
- package/dist/server/controllers/validation/auth.mjs +6 -6
- package/dist/server/controllers/validation/auth.mjs.map +1 -1
- package/dist/server/controllers/validation/email-template.js +1 -4
- package/dist/server/controllers/validation/email-template.js.map +1 -1
- package/dist/server/controllers/validation/email-template.mjs +1 -3
- package/dist/server/controllers/validation/email-template.mjs.map +1 -1
- package/dist/server/controllers/validation/user.js.map +1 -1
- package/dist/server/controllers/validation/user.mjs.map +1 -1
- package/dist/server/graphql/index.js.map +1 -1
- package/dist/server/graphql/index.mjs.map +1 -1
- package/dist/server/graphql/mutations/auth/change-password.js +7 -4
- package/dist/server/graphql/mutations/auth/change-password.js.map +1 -1
- package/dist/server/graphql/mutations/auth/change-password.mjs +7 -4
- package/dist/server/graphql/mutations/auth/change-password.mjs.map +1 -1
- package/dist/server/graphql/mutations/auth/email-confirmation.js +1 -1
- package/dist/server/graphql/mutations/auth/email-confirmation.js.map +1 -1
- package/dist/server/graphql/mutations/auth/email-confirmation.mjs +1 -1
- package/dist/server/graphql/mutations/auth/email-confirmation.mjs.map +1 -1
- package/dist/server/graphql/mutations/auth/forgot-password.js +7 -4
- package/dist/server/graphql/mutations/auth/forgot-password.js.map +1 -1
- package/dist/server/graphql/mutations/auth/forgot-password.mjs +7 -4
- package/dist/server/graphql/mutations/auth/forgot-password.mjs.map +1 -1
- package/dist/server/graphql/mutations/auth/login.js +10 -7
- package/dist/server/graphql/mutations/auth/login.js.map +1 -1
- package/dist/server/graphql/mutations/auth/login.mjs +10 -7
- package/dist/server/graphql/mutations/auth/login.mjs.map +1 -1
- package/dist/server/graphql/mutations/auth/rate-limit.js +63 -0
- package/dist/server/graphql/mutations/auth/rate-limit.js.map +1 -0
- package/dist/server/graphql/mutations/auth/rate-limit.mjs +61 -0
- package/dist/server/graphql/mutations/auth/rate-limit.mjs.map +1 -0
- package/dist/server/graphql/mutations/auth/register.js +7 -4
- package/dist/server/graphql/mutations/auth/register.js.map +1 -1
- package/dist/server/graphql/mutations/auth/register.mjs +7 -4
- package/dist/server/graphql/mutations/auth/register.mjs.map +1 -1
- package/dist/server/graphql/mutations/auth/reset-password.js +7 -4
- package/dist/server/graphql/mutations/auth/reset-password.js.map +1 -1
- package/dist/server/graphql/mutations/auth/reset-password.mjs +7 -4
- package/dist/server/graphql/mutations/auth/reset-password.mjs.map +1 -1
- package/dist/server/graphql/mutations/crud/role/create-role.js +1 -1
- package/dist/server/graphql/mutations/crud/role/create-role.js.map +1 -1
- package/dist/server/graphql/mutations/crud/role/create-role.mjs +1 -1
- package/dist/server/graphql/mutations/crud/role/create-role.mjs.map +1 -1
- package/dist/server/graphql/mutations/crud/role/delete-role.js.map +1 -1
- package/dist/server/graphql/mutations/crud/role/delete-role.mjs.map +1 -1
- package/dist/server/graphql/mutations/crud/role/update-role.js.map +1 -1
- package/dist/server/graphql/mutations/crud/role/update-role.mjs.map +1 -1
- package/dist/server/graphql/mutations/crud/user/create-user.js +1 -1
- package/dist/server/graphql/mutations/crud/user/create-user.js.map +1 -1
- package/dist/server/graphql/mutations/crud/user/create-user.mjs +1 -1
- package/dist/server/graphql/mutations/crud/user/create-user.mjs.map +1 -1
- package/dist/server/graphql/mutations/crud/user/delete-user.js.map +1 -1
- package/dist/server/graphql/mutations/crud/user/delete-user.mjs.map +1 -1
- package/dist/server/graphql/mutations/crud/user/update-user.js +1 -1
- package/dist/server/graphql/mutations/crud/user/update-user.js.map +1 -1
- package/dist/server/graphql/mutations/crud/user/update-user.mjs +1 -1
- package/dist/server/graphql/mutations/crud/user/update-user.mjs.map +1 -1
- package/dist/server/graphql/mutations/index.js.map +1 -1
- package/dist/server/graphql/mutations/index.mjs.map +1 -1
- package/dist/server/graphql/queries/index.js.map +1 -1
- package/dist/server/graphql/queries/index.mjs.map +1 -1
- package/dist/server/graphql/queries/me.js.map +1 -1
- package/dist/server/graphql/queries/me.mjs.map +1 -1
- package/dist/server/graphql/resolvers-configs.js.map +1 -1
- package/dist/server/graphql/resolvers-configs.mjs.map +1 -1
- package/dist/server/graphql/types/create-role-payload.js.map +1 -1
- package/dist/server/graphql/types/create-role-payload.mjs.map +1 -1
- package/dist/server/graphql/types/delete-role-payload.js.map +1 -1
- package/dist/server/graphql/types/delete-role-payload.mjs.map +1 -1
- package/dist/server/graphql/types/index.js.map +1 -1
- package/dist/server/graphql/types/index.mjs.map +1 -1
- package/dist/server/graphql/types/login-input.js.map +1 -1
- package/dist/server/graphql/types/login-input.mjs.map +1 -1
- package/dist/server/graphql/types/login-payload.js.map +1 -1
- package/dist/server/graphql/types/login-payload.mjs.map +1 -1
- package/dist/server/graphql/types/me-role.js.map +1 -1
- package/dist/server/graphql/types/me-role.mjs.map +1 -1
- package/dist/server/graphql/types/me.js.map +1 -1
- package/dist/server/graphql/types/me.mjs.map +1 -1
- package/dist/server/graphql/types/password-payload.js.map +1 -1
- package/dist/server/graphql/types/password-payload.mjs.map +1 -1
- package/dist/server/graphql/types/register-input.js.map +1 -1
- package/dist/server/graphql/types/register-input.mjs.map +1 -1
- package/dist/server/graphql/types/update-role-payload.js.map +1 -1
- package/dist/server/graphql/types/update-role-payload.mjs.map +1 -1
- package/dist/server/graphql/types/user-input.js.map +1 -1
- package/dist/server/graphql/types/user-input.mjs.map +1 -1
- package/dist/server/graphql/utils.js +4 -4
- package/dist/server/graphql/utils.js.map +1 -1
- package/dist/server/graphql/utils.mjs +4 -4
- package/dist/server/graphql/utils.mjs.map +1 -1
- package/dist/server/index.js +2 -2
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +3 -3
- package/dist/server/index.mjs.map +1 -1
- package/dist/server/index2.js +8 -8
- package/dist/server/index2.js.map +1 -1
- package/dist/server/index2.mjs +8 -8
- package/dist/server/index2.mjs.map +1 -1
- package/dist/server/middlewares/index.js.map +1 -1
- package/dist/server/middlewares/index.mjs.map +1 -1
- package/dist/server/middlewares/rateLimit.js +5 -5
- package/dist/server/middlewares/rateLimit.js.map +1 -1
- package/dist/server/middlewares/rateLimit.mjs +5 -5
- package/dist/server/middlewares/rateLimit.mjs.map +1 -1
- package/dist/server/register.js.map +1 -1
- package/dist/server/register.mjs.map +1 -1
- package/dist/server/routes/admin/index.js.map +1 -1
- package/dist/server/routes/admin/index.mjs.map +1 -1
- package/dist/server/routes/admin/permissions.js.map +1 -1
- package/dist/server/routes/admin/permissions.mjs.map +1 -1
- package/dist/server/routes/admin/role.js.map +1 -1
- package/dist/server/routes/admin/role.mjs.map +1 -1
- package/dist/server/routes/admin/settings.js.map +1 -1
- package/dist/server/routes/admin/settings.mjs.map +1 -1
- package/dist/server/routes/content-api/auth.js.map +1 -1
- package/dist/server/routes/content-api/auth.mjs.map +1 -1
- package/dist/server/routes/content-api/index.js.map +1 -1
- package/dist/server/routes/content-api/index.mjs.map +1 -1
- package/dist/server/routes/content-api/permissions.js.map +1 -1
- package/dist/server/routes/content-api/permissions.mjs.map +1 -1
- package/dist/server/routes/content-api/role.js.map +1 -1
- package/dist/server/routes/content-api/role.mjs.map +1 -1
- package/dist/server/routes/content-api/user.js.map +1 -1
- package/dist/server/routes/content-api/user.mjs.map +1 -1
- package/dist/server/routes/content-api/validation.js.map +1 -1
- package/dist/server/routes/content-api/validation.mjs.map +1 -1
- package/dist/server/routes/index.js.map +1 -1
- package/dist/server/routes/index.mjs.map +1 -1
- package/dist/server/services/constants.js.map +1 -1
- package/dist/server/services/constants.mjs.map +1 -1
- package/dist/server/services/index.js.map +1 -1
- package/dist/server/services/index.mjs.map +1 -1
- package/dist/server/services/jwt.js.map +1 -1
- package/dist/server/services/jwt.mjs.map +1 -1
- package/dist/server/services/permission.js.map +1 -1
- package/dist/server/services/permission.mjs.map +1 -1
- package/dist/server/services/providers-registry.js +188 -248
- package/dist/server/services/providers-registry.js.map +1 -1
- package/dist/server/services/providers-registry.mjs +188 -245
- package/dist/server/services/providers-registry.mjs.map +1 -1
- package/dist/server/services/providers.js +15 -11
- package/dist/server/services/providers.js.map +1 -1
- package/dist/server/services/providers.mjs +14 -10
- package/dist/server/services/providers.mjs.map +1 -1
- package/dist/server/services/role.js +2 -2
- package/dist/server/services/role.js.map +1 -1
- package/dist/server/services/role.mjs +2 -2
- package/dist/server/services/role.mjs.map +1 -1
- package/dist/server/services/user.js +14 -14
- package/dist/server/services/user.js.map +1 -1
- package/dist/server/services/user.mjs +13 -13
- package/dist/server/services/user.mjs.map +1 -1
- package/dist/server/services/users-permissions.js +17 -20
- package/dist/server/services/users-permissions.js.map +1 -1
- package/dist/server/services/users-permissions.mjs +16 -18
- package/dist/server/services/users-permissions.mjs.map +1 -1
- package/dist/server/strategies/users-permissions.js +9 -8
- package/dist/server/strategies/users-permissions.js.map +1 -1
- package/dist/server/strategies/users-permissions.mjs +9 -8
- package/dist/server/strategies/users-permissions.mjs.map +1 -1
- package/dist/server/utils/index.js.map +1 -1
- package/dist/server/utils/index.mjs.map +1 -1
- package/dist/server/utils/oauth-connect/index.js +241 -0
- package/dist/server/utils/oauth-connect/index.js.map +1 -0
- package/dist/server/utils/oauth-connect/index.mjs +235 -0
- package/dist/server/utils/oauth-connect/index.mjs.map +1 -0
- package/dist/server/utils/oauth-connect/oauth1.js +138 -0
- package/dist/server/utils/oauth-connect/oauth1.js.map +1 -0
- package/dist/server/utils/oauth-connect/oauth1.mjs +136 -0
- package/dist/server/utils/oauth-connect/oauth1.mjs.map +1 -0
- package/dist/server/utils/oauth-connect/oauth2.js +117 -0
- package/dist/server/utils/oauth-connect/oauth2.js.map +1 -0
- package/dist/server/utils/oauth-connect/oauth2.mjs +115 -0
- package/dist/server/utils/oauth-connect/oauth2.mjs.map +1 -0
- package/dist/server/utils/oauth-connect/providers.js +109 -0
- package/dist/server/utils/oauth-connect/providers.js.map +1 -0
- package/dist/server/utils/oauth-connect/providers.mjs +107 -0
- package/dist/server/utils/oauth-connect/providers.mjs.map +1 -0
- package/dist/server/utils/provider-http.js +52 -0
- package/dist/server/utils/provider-http.js.map +1 -0
- package/dist/server/utils/provider-http.mjs +50 -0
- package/dist/server/utils/provider-http.mjs.map +1 -0
- package/dist/server/utils/refresh-cookie-options.js.map +1 -1
- package/dist/server/utils/refresh-cookie-options.mjs.map +1 -1
- package/dist/server/utils/sanitize/index.js.map +1 -1
- package/dist/server/utils/sanitize/index.mjs.map +1 -1
- package/dist/server/utils/sanitize/sanitizers.js +1 -1
- package/dist/server/utils/sanitize/sanitizers.js.map +1 -1
- package/dist/server/utils/sanitize/sanitizers.mjs +1 -1
- package/dist/server/utils/sanitize/sanitizers.mjs.map +1 -1
- package/dist/server/utils/sanitize/visitors/index.js.map +1 -1
- package/dist/server/utils/sanitize/visitors/index.mjs.map +1 -1
- package/dist/server/utils/sanitize/visitors/remove-user-relation-from-role-entities.js.map +1 -1
- package/dist/server/utils/sanitize/visitors/remove-user-relation-from-role-entities.mjs.map +1 -1
- package/dist/server/utils/trim-grant-session-response.js +67 -0
- package/dist/server/utils/trim-grant-session-response.js.map +1 -0
- package/dist/server/utils/trim-grant-session-response.mjs +65 -0
- package/dist/server/utils/trim-grant-session-response.mjs.map +1 -0
- package/dist/server/utils/verify-jwt-with-jwks.js +60 -0
- package/dist/server/utils/verify-jwt-with-jwks.js.map +1 -0
- package/dist/server/utils/verify-jwt-with-jwks.mjs +54 -0
- package/dist/server/utils/verify-jwt-with-jwks.mjs.map +1 -0
- package/jsconfig.json +7 -0
- package/package.json +28 -18
- package/rollup.config.mjs +2 -2
- package/server/{controllers → src/controllers}/auth.js +36 -29
- package/server/{controllers → src/controllers}/validation/auth.js +6 -6
- package/server/{controllers → src/controllers}/validation/email-template.js +1 -2
- package/server/{graphql → src/graphql}/mutations/auth/change-password.js +6 -6
- package/server/{graphql → src/graphql}/mutations/auth/email-confirmation.js +1 -1
- package/server/{graphql → src/graphql}/mutations/auth/forgot-password.js +6 -6
- package/server/{graphql → src/graphql}/mutations/auth/login.js +11 -7
- package/server/src/graphql/mutations/auth/rate-limit.js +62 -0
- package/server/{graphql → src/graphql}/mutations/auth/register.js +6 -6
- package/server/{graphql → src/graphql}/mutations/auth/reset-password.js +6 -6
- package/server/{graphql → src/graphql}/mutations/crud/role/create-role.js +1 -1
- package/server/{graphql → src/graphql}/mutations/crud/user/create-user.js +1 -1
- package/server/{graphql → src/graphql}/mutations/crud/user/update-user.js +1 -1
- package/server/{graphql → src/graphql}/utils.js +3 -3
- package/server/{middlewares → src/middlewares}/rateLimit.js +4 -4
- package/server/src/services/providers-registry.js +487 -0
- package/server/{services → src/services}/providers.js +9 -7
- package/server/{services → src/services}/role.js +2 -2
- package/server/{services → src/services}/user.js +16 -6
- package/server/{services → src/services}/users-permissions.js +14 -16
- package/server/{strategies → src/strategies}/users-permissions.js +14 -10
- package/server/src/utils/oauth-connect/index.js +262 -0
- package/server/src/utils/oauth-connect/oauth1.js +169 -0
- package/server/src/utils/oauth-connect/oauth2.js +123 -0
- package/server/src/utils/oauth-connect/providers.js +100 -0
- package/server/src/utils/provider-http.js +49 -0
- package/server/{utils → src/utils}/sanitize/sanitizers.js +1 -1
- package/server/src/utils/trim-grant-session-response.js +70 -0
- package/server/src/utils/verify-jwt-with-jwks.js +43 -0
- package/types/strapi-server.d.ts +65 -0
- package/server/services/providers-registry.js +0 -567
- package/server/utils/index.d.ts +0 -23
- /package/server/{bootstrap → src/bootstrap}/index.js +0 -0
- /package/server/{bootstrap → src/bootstrap}/users-permissions-actions.js +0 -0
- /package/server/{config.js → src/config.js} +0 -0
- /package/server/{content-types → src/content-types}/index.js +0 -0
- /package/server/{content-types → src/content-types}/permission/index.js +0 -0
- /package/server/{content-types → src/content-types}/role/index.js +0 -0
- /package/server/{content-types → src/content-types}/user/index.js +0 -0
- /package/server/{content-types → src/content-types}/user/schema-config.js +0 -0
- /package/server/{controllers → src/controllers}/content-manager-user.js +0 -0
- /package/server/{controllers → src/controllers}/index.js +0 -0
- /package/server/{controllers → src/controllers}/permissions.js +0 -0
- /package/server/{controllers → src/controllers}/role.js +0 -0
- /package/server/{controllers → src/controllers}/settings.js +0 -0
- /package/server/{controllers → src/controllers}/user.js +0 -0
- /package/server/{controllers → src/controllers}/validation/user.js +0 -0
- /package/server/{graphql → src/graphql}/index.js +0 -0
- /package/server/{graphql → src/graphql}/mutations/crud/role/delete-role.js +0 -0
- /package/server/{graphql → src/graphql}/mutations/crud/role/update-role.js +0 -0
- /package/server/{graphql → src/graphql}/mutations/crud/user/delete-user.js +0 -0
- /package/server/{graphql → src/graphql}/mutations/index.js +0 -0
- /package/server/{graphql → src/graphql}/queries/index.js +0 -0
- /package/server/{graphql → src/graphql}/queries/me.js +0 -0
- /package/server/{graphql → src/graphql}/resolvers-configs.js +0 -0
- /package/server/{graphql → src/graphql}/types/create-role-payload.js +0 -0
- /package/server/{graphql → src/graphql}/types/delete-role-payload.js +0 -0
- /package/server/{graphql → src/graphql}/types/index.js +0 -0
- /package/server/{graphql → src/graphql}/types/login-input.js +0 -0
- /package/server/{graphql → src/graphql}/types/login-payload.js +0 -0
- /package/server/{graphql → src/graphql}/types/me-role.js +0 -0
- /package/server/{graphql → src/graphql}/types/me.js +0 -0
- /package/server/{graphql → src/graphql}/types/password-payload.js +0 -0
- /package/server/{graphql → src/graphql}/types/register-input.js +0 -0
- /package/server/{graphql → src/graphql}/types/update-role-payload.js +0 -0
- /package/server/{graphql → src/graphql}/types/user-input.js +0 -0
- /package/server/{index.js → src/index.js} +0 -0
- /package/server/{middlewares → src/middlewares}/index.js +0 -0
- /package/server/{register.js → src/register.js} +0 -0
- /package/server/{routes → src/routes}/admin/index.js +0 -0
- /package/server/{routes → src/routes}/admin/permissions.js +0 -0
- /package/server/{routes → src/routes}/admin/role.js +0 -0
- /package/server/{routes → src/routes}/admin/settings.js +0 -0
- /package/server/{routes → src/routes}/content-api/auth.js +0 -0
- /package/server/{routes → src/routes}/content-api/index.js +0 -0
- /package/server/{routes → src/routes}/content-api/permissions.js +0 -0
- /package/server/{routes → src/routes}/content-api/role.js +0 -0
- /package/server/{routes → src/routes}/content-api/user.js +0 -0
- /package/server/{routes → src/routes}/content-api/validation.js +0 -0
- /package/server/{routes → src/routes}/index.js +0 -0
- /package/server/{services → src/services}/constants.js +0 -0
- /package/server/{services → src/services}/index.js +0 -0
- /package/server/{services → src/services}/jwt.js +0 -0
- /package/server/{services → src/services}/permission.js +0 -0
- /package/server/{utils → src/utils}/index.js +0 -0
- /package/server/{utils → src/utils}/refresh-cookie-options.js +0 -0
- /package/server/{utils → src/utils}/sanitize/index.js +0 -0
- /package/server/{utils → src/utils}/sanitize/visitors/index.js +0 -0
- /package/server/{utils → src/utils}/sanitize/visitors/remove-user-relation-from-role-entities.js +0 -0
|
@@ -9,7 +9,6 @@
|
|
|
9
9
|
/* eslint-disable no-useless-escape */
|
|
10
10
|
const crypto = require('crypto');
|
|
11
11
|
const _ = require('lodash');
|
|
12
|
-
const { concat, compact, isArray } = require('lodash/fp');
|
|
13
12
|
const utils = require('@strapi/utils');
|
|
14
13
|
const { getService } = require('../utils');
|
|
15
14
|
const { buildRefreshCookieOptions } = require('../utils/refresh-cookie-options');
|
|
@@ -41,7 +40,6 @@ const extractDeviceId = (requestBody) => {
|
|
|
41
40
|
|
|
42
41
|
const buildSessionMetadataFromContext = (ctx) =>
|
|
43
42
|
buildSessionMetadata({
|
|
44
|
-
ip: ctx.request.ip,
|
|
45
43
|
userAgent: ctx.request.headers['user-agent'],
|
|
46
44
|
});
|
|
47
45
|
|
|
@@ -206,7 +204,15 @@ module.exports = ({ strapi }) => ({
|
|
|
206
204
|
|
|
207
205
|
// Connect the user with the third-party provider.
|
|
208
206
|
try {
|
|
209
|
-
const
|
|
207
|
+
const grantResponse = _.get(ctx, 'session.grant.response');
|
|
208
|
+
|
|
209
|
+
if (!grantResponse) {
|
|
210
|
+
throw new ApplicationError('OAuth authentication requires a completed provider session');
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
const user = await getService('providers').connect(provider, grantResponse, {
|
|
214
|
+
grantResponse,
|
|
215
|
+
});
|
|
210
216
|
|
|
211
217
|
if (user.blocked) {
|
|
212
218
|
throw new ForbiddenError('Your account has been blocked by an administrator');
|
|
@@ -372,7 +378,14 @@ module.exports = ({ strapi }) => ({
|
|
|
372
378
|
const requestHttpOnly = ctx.request.header['x-strapi-refresh-cookie'] === 'httpOnly';
|
|
373
379
|
if (upSessions?.httpOnly || requestHttpOnly) {
|
|
374
380
|
const cookieName = upSessions.cookie?.name || 'strapi_up_refresh';
|
|
375
|
-
|
|
381
|
+
const isProduction = process.env.NODE_ENV === 'production';
|
|
382
|
+
|
|
383
|
+
const { maxAge: _maxAge, ...cookieOptions } = buildRefreshCookieOptions(
|
|
384
|
+
upSessions,
|
|
385
|
+
isProduction
|
|
386
|
+
);
|
|
387
|
+
|
|
388
|
+
ctx.cookies.set(cookieName, '', { ...cookieOptions, expires: new Date(0) });
|
|
376
389
|
}
|
|
377
390
|
return ctx.send({ ok: true });
|
|
378
391
|
},
|
|
@@ -419,24 +432,14 @@ module.exports = ({ strapi }) => ({
|
|
|
419
432
|
return ctx.send({ data: {} });
|
|
420
433
|
},
|
|
421
434
|
async connect(ctx, next) {
|
|
422
|
-
const grant = require('grant').koa();
|
|
423
|
-
|
|
424
435
|
const providers = await strapi
|
|
425
436
|
.store({ type: 'plugin', name: 'users-permissions', key: 'grant' })
|
|
426
437
|
.get();
|
|
427
438
|
|
|
428
|
-
const apiPrefix = strapi.config.get('api.rest.prefix');
|
|
429
|
-
const grantConfig = {
|
|
430
|
-
defaults: {
|
|
431
|
-
prefix: `${apiPrefix}/connect`,
|
|
432
|
-
},
|
|
433
|
-
...providers,
|
|
434
|
-
};
|
|
435
|
-
|
|
436
439
|
const [requestPath] = ctx.request.url.split('?');
|
|
437
440
|
const provider = requestPath.split('/connect/')[1].split('/')[0];
|
|
438
441
|
|
|
439
|
-
if (!_.get(
|
|
442
|
+
if (!_.get(providers, [provider, 'enabled'])) {
|
|
440
443
|
throw new ApplicationError('This provider is disabled');
|
|
441
444
|
}
|
|
442
445
|
|
|
@@ -446,32 +449,35 @@ module.exports = ({ strapi }) => ({
|
|
|
446
449
|
);
|
|
447
450
|
}
|
|
448
451
|
|
|
449
|
-
// Ability to pass OAuth callback dynamically
|
|
450
452
|
const queryCustomCallback = _.get(ctx, 'query.callback');
|
|
451
453
|
const dynamicSessionCallback = _.get(ctx, 'session.grant.dynamic.callback');
|
|
452
|
-
|
|
453
454
|
const customCallback = queryCustomCallback ?? dynamicSessionCallback;
|
|
454
455
|
|
|
455
|
-
// The custom callback is validated to make sure it's not redirecting to an unwanted actor.
|
|
456
456
|
if (customCallback !== undefined) {
|
|
457
457
|
try {
|
|
458
|
-
// We're extracting the callback validator from the plugin config since it can be user-customized
|
|
459
458
|
const { validate: validateCallback } = strapi
|
|
460
459
|
.plugin('users-permissions')
|
|
461
460
|
.config('callback');
|
|
462
461
|
|
|
463
|
-
await validateCallback(customCallback,
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
462
|
+
await validateCallback(customCallback, providers[provider]);
|
|
463
|
+
|
|
464
|
+
// Persist across the provider redirect round-trip (request state alone is lost).
|
|
465
|
+
ctx.session = ctx.session || {};
|
|
466
|
+
ctx.session.grant = ctx.session.grant || {};
|
|
467
|
+
ctx.session.grant.dynamic = {
|
|
468
|
+
...ctx.session.grant.dynamic,
|
|
469
|
+
callback: customCallback,
|
|
470
|
+
};
|
|
471
|
+
ctx.state.oauthConnect = { callback: customCallback };
|
|
472
|
+
} catch {
|
|
467
473
|
throw new ValidationError('Invalid callback URL provided', { callback: customCallback });
|
|
468
474
|
}
|
|
469
475
|
}
|
|
470
476
|
|
|
471
|
-
|
|
472
|
-
|
|
477
|
+
const { createOAuthConnectMiddleware } = require('../utils/oauth-connect');
|
|
478
|
+
const oauthConnect = createOAuthConnectMiddleware();
|
|
473
479
|
|
|
474
|
-
return
|
|
480
|
+
return oauthConnect(ctx, next);
|
|
475
481
|
},
|
|
476
482
|
|
|
477
483
|
async forgotPassword(ctx) {
|
|
@@ -549,9 +555,10 @@ module.exports = ({ strapi }) => ({
|
|
|
549
555
|
const alwaysAllowedKeys = ['username', 'password', 'email'];
|
|
550
556
|
|
|
551
557
|
// Note that we intentionally do not filter allowedFields to allow a project to explicitly accept private or other Strapi field on registration
|
|
552
|
-
const allowedKeys =
|
|
553
|
-
|
|
554
|
-
|
|
558
|
+
const allowedKeys = [
|
|
559
|
+
...alwaysAllowedKeys,
|
|
560
|
+
...(Array.isArray(register?.allowedFields) ? register.allowedFields : []),
|
|
561
|
+
].filter((field) => Boolean(field));
|
|
555
562
|
|
|
556
563
|
// Check if there are any keys in requestBody that are not in allowedKeys
|
|
557
564
|
const invalidKeys = Object.keys(ctx.request.body).filter((key) => !allowedKeys.includes(key));
|
|
@@ -14,7 +14,7 @@ const createRegisterSchema = (config) =>
|
|
|
14
14
|
password: yup
|
|
15
15
|
.string()
|
|
16
16
|
.required()
|
|
17
|
-
.test(function (value) {
|
|
17
|
+
.test(function validateRegisterPasswordMaxLength(value) {
|
|
18
18
|
if (!value) return true;
|
|
19
19
|
const isValid = new TextEncoder().encode(value).length <= 72;
|
|
20
20
|
if (!isValid) {
|
|
@@ -22,7 +22,7 @@ const createRegisterSchema = (config) =>
|
|
|
22
22
|
}
|
|
23
23
|
return true;
|
|
24
24
|
})
|
|
25
|
-
.test(async function (value) {
|
|
25
|
+
.test(async function validateRegisterPassword(value) {
|
|
26
26
|
if (typeof config?.validatePassword === 'function') {
|
|
27
27
|
try {
|
|
28
28
|
const isValid = await config.validatePassword(value);
|
|
@@ -57,7 +57,7 @@ const createResetPasswordSchema = (config) =>
|
|
|
57
57
|
password: yup
|
|
58
58
|
.string()
|
|
59
59
|
.required()
|
|
60
|
-
.test(function (value) {
|
|
60
|
+
.test(function validateResetPasswordMaxLength(value) {
|
|
61
61
|
if (!value) return true;
|
|
62
62
|
const isValid = new TextEncoder().encode(value).length <= 72;
|
|
63
63
|
if (!isValid) {
|
|
@@ -65,7 +65,7 @@ const createResetPasswordSchema = (config) =>
|
|
|
65
65
|
}
|
|
66
66
|
return true;
|
|
67
67
|
})
|
|
68
|
-
.test(async function (value) {
|
|
68
|
+
.test(async function validateResetPassword(value) {
|
|
69
69
|
if (typeof config?.validatePassword === 'function') {
|
|
70
70
|
try {
|
|
71
71
|
const isValid = await config.validatePassword(value);
|
|
@@ -93,7 +93,7 @@ const createChangePasswordSchema = (config) =>
|
|
|
93
93
|
password: yup
|
|
94
94
|
.string()
|
|
95
95
|
.required()
|
|
96
|
-
.test(function (value) {
|
|
96
|
+
.test(function validateChangePasswordMaxLength(value) {
|
|
97
97
|
if (!value) return true;
|
|
98
98
|
const isValid = new TextEncoder().encode(value).length <= 72;
|
|
99
99
|
if (!isValid) {
|
|
@@ -101,7 +101,7 @@ const createChangePasswordSchema = (config) =>
|
|
|
101
101
|
}
|
|
102
102
|
return true;
|
|
103
103
|
})
|
|
104
|
-
.test(async function (value) {
|
|
104
|
+
.test(async function validateChangePassword(value) {
|
|
105
105
|
if (typeof config?.validatePassword === 'function') {
|
|
106
106
|
try {
|
|
107
107
|
const isValid = await config.validatePassword(value);
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
const { trim } = require('lodash/fp');
|
|
4
3
|
const {
|
|
5
4
|
template: { createLooseInterpolationRegExp, createStrictInterpolationRegExp },
|
|
6
5
|
} = require('@strapi/utils');
|
|
@@ -33,7 +32,7 @@ const matchAll = (pattern, src) => {
|
|
|
33
32
|
while ((match = regexPatternWithGlobal.exec(src))) {
|
|
34
33
|
const [, group] = match;
|
|
35
34
|
|
|
36
|
-
matches.push(trim(
|
|
35
|
+
matches.push(group.trim());
|
|
37
36
|
}
|
|
38
37
|
|
|
39
38
|
return matches;
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
const { toPlainObject } = require('lodash
|
|
3
|
+
const { toPlainObject } = require('lodash');
|
|
4
4
|
|
|
5
5
|
const { checkBadRequest } = require('../../utils');
|
|
6
|
+
const { createRateLimitRunner } = require('./rate-limit');
|
|
6
7
|
|
|
7
8
|
module.exports = ({ nexus, strapi }) => {
|
|
8
9
|
const { nonNull } = nexus;
|
|
10
|
+
const runRateLimit = createRateLimitRunner(strapi, '/auth/change-password');
|
|
9
11
|
|
|
10
12
|
return {
|
|
11
13
|
type: 'UsersPermissionsLoginPayload',
|
|
@@ -21,11 +23,9 @@ module.exports = ({ nexus, strapi }) => {
|
|
|
21
23
|
async resolve(parent, args, context) {
|
|
22
24
|
const { koaContext } = context;
|
|
23
25
|
|
|
24
|
-
koaContext
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
const output = koaContext.body;
|
|
26
|
+
const output = await runRateLimit(koaContext, { body: toPlainObject(args) }, (ctx) =>
|
|
27
|
+
strapi.plugin('users-permissions').controller('auth').changePassword(ctx)
|
|
28
|
+
);
|
|
29
29
|
|
|
30
30
|
checkBadRequest(output);
|
|
31
31
|
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
const { toPlainObject } = require('lodash
|
|
3
|
+
const { toPlainObject } = require('lodash');
|
|
4
4
|
|
|
5
5
|
const { checkBadRequest } = require('../../utils');
|
|
6
|
+
const { createRateLimitRunner } = require('./rate-limit');
|
|
6
7
|
|
|
7
8
|
module.exports = ({ nexus, strapi }) => {
|
|
8
9
|
const { nonNull } = nexus;
|
|
10
|
+
const runRateLimit = createRateLimitRunner(strapi, '/auth/forgot-password');
|
|
9
11
|
|
|
10
12
|
return {
|
|
11
13
|
type: 'UsersPermissionsPasswordPayload',
|
|
@@ -19,11 +21,9 @@ module.exports = ({ nexus, strapi }) => {
|
|
|
19
21
|
async resolve(parent, args, context) {
|
|
20
22
|
const { koaContext } = context;
|
|
21
23
|
|
|
22
|
-
koaContext
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
const output = koaContext.body;
|
|
24
|
+
const output = await runRateLimit(koaContext, { body: toPlainObject(args) }, (ctx) =>
|
|
25
|
+
strapi.plugin('users-permissions').controller('auth').forgotPassword(ctx)
|
|
26
|
+
);
|
|
27
27
|
|
|
28
28
|
checkBadRequest(output);
|
|
29
29
|
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
const { toPlainObject } = require('lodash
|
|
3
|
+
const { toPlainObject } = require('lodash');
|
|
4
4
|
|
|
5
5
|
const { checkBadRequest } = require('../../utils');
|
|
6
|
+
const { createRateLimitRunner } = require('./rate-limit');
|
|
6
7
|
|
|
7
8
|
module.exports = ({ nexus, strapi }) => {
|
|
8
9
|
const { nonNull } = nexus;
|
|
10
|
+
const runRateLimit = createRateLimitRunner(strapi, '/auth/local');
|
|
9
11
|
|
|
10
12
|
return {
|
|
11
13
|
type: nonNull('UsersPermissionsLoginPayload'),
|
|
@@ -17,12 +19,14 @@ module.exports = ({ nexus, strapi }) => {
|
|
|
17
19
|
async resolve(parent, args, context) {
|
|
18
20
|
const { koaContext } = context;
|
|
19
21
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
22
|
+
const output = await runRateLimit(
|
|
23
|
+
koaContext,
|
|
24
|
+
{
|
|
25
|
+
body: toPlainObject(args.input),
|
|
26
|
+
params: { provider: args.input.provider },
|
|
27
|
+
},
|
|
28
|
+
(ctx) => strapi.plugin('users-permissions').controller('auth').callback(ctx)
|
|
29
|
+
);
|
|
26
30
|
|
|
27
31
|
checkBadRequest(output);
|
|
28
32
|
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const RATE_LIMIT_MIDDLEWARE = 'plugin::users-permissions.rateLimit';
|
|
4
|
+
const contextQueues = new WeakMap();
|
|
5
|
+
|
|
6
|
+
const getRateLimitPath = (strapi, routeSuffix) => {
|
|
7
|
+
const configuredPrefix = strapi.config.get('api.rest.prefix', '/api');
|
|
8
|
+
const prefix = typeof configuredPrefix === 'string' ? configuredPrefix : '/api';
|
|
9
|
+
const normalizedPrefix = prefix.replace(/^\/+|\/+$/g, '');
|
|
10
|
+
const normalizedSuffix = routeSuffix.replace(/^\/+/, '');
|
|
11
|
+
|
|
12
|
+
return `/${[normalizedPrefix, normalizedSuffix].filter(Boolean).join('/')}`;
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
const enqueueContextOperation = (koaContext, operation) => {
|
|
16
|
+
const previous = contextQueues.get(koaContext) || Promise.resolve();
|
|
17
|
+
const result = previous.catch(() => undefined).then(operation);
|
|
18
|
+
|
|
19
|
+
contextQueues.set(
|
|
20
|
+
koaContext,
|
|
21
|
+
result.catch(() => undefined)
|
|
22
|
+
);
|
|
23
|
+
|
|
24
|
+
return result;
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
const createRateLimitRunner = (strapi, routeSuffix) => {
|
|
28
|
+
const rateLimit = strapi.middleware(RATE_LIMIT_MIDDLEWARE)({}, { strapi });
|
|
29
|
+
const routePath = getRateLimitPath(strapi, routeSuffix);
|
|
30
|
+
|
|
31
|
+
return (koaContext, { body, params }, controller) =>
|
|
32
|
+
enqueueContextOperation(koaContext, async () => {
|
|
33
|
+
const originalBody = koaContext.request.body;
|
|
34
|
+
const originalPath = koaContext.request.path;
|
|
35
|
+
const originalParams = koaContext.params;
|
|
36
|
+
const originalResponseBody = koaContext.body;
|
|
37
|
+
let responseStatus = 200;
|
|
38
|
+
|
|
39
|
+
koaContext.request.path = routePath;
|
|
40
|
+
koaContext.request.body = body;
|
|
41
|
+
if (params) {
|
|
42
|
+
koaContext.params = params;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
try {
|
|
46
|
+
await rateLimit(koaContext, () => controller(koaContext));
|
|
47
|
+
responseStatus = koaContext.status;
|
|
48
|
+
return koaContext.body;
|
|
49
|
+
} finally {
|
|
50
|
+
koaContext.request.path = originalPath;
|
|
51
|
+
koaContext.request.body = originalBody;
|
|
52
|
+
koaContext.params = originalParams;
|
|
53
|
+
koaContext.body = originalResponseBody;
|
|
54
|
+
koaContext.status = responseStatus;
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
module.exports = {
|
|
60
|
+
createRateLimitRunner,
|
|
61
|
+
getRateLimitPath,
|
|
62
|
+
};
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
const { toPlainObject } = require('lodash
|
|
3
|
+
const { toPlainObject } = require('lodash');
|
|
4
4
|
|
|
5
5
|
const { checkBadRequest } = require('../../utils');
|
|
6
|
+
const { createRateLimitRunner } = require('./rate-limit');
|
|
6
7
|
|
|
7
8
|
module.exports = ({ nexus, strapi }) => {
|
|
8
9
|
const { nonNull } = nexus;
|
|
10
|
+
const runRateLimit = createRateLimitRunner(strapi, '/auth/local/register');
|
|
9
11
|
|
|
10
12
|
return {
|
|
11
13
|
type: nonNull('UsersPermissionsLoginPayload'),
|
|
@@ -19,11 +21,9 @@ module.exports = ({ nexus, strapi }) => {
|
|
|
19
21
|
async resolve(parent, args, context) {
|
|
20
22
|
const { koaContext } = context;
|
|
21
23
|
|
|
22
|
-
koaContext
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
const output = koaContext.body;
|
|
24
|
+
const output = await runRateLimit(koaContext, { body: toPlainObject(args.input) }, (ctx) =>
|
|
25
|
+
strapi.plugin('users-permissions').controller('auth').register(ctx)
|
|
26
|
+
);
|
|
27
27
|
|
|
28
28
|
checkBadRequest(output);
|
|
29
29
|
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
const { toPlainObject } = require('lodash
|
|
3
|
+
const { toPlainObject } = require('lodash');
|
|
4
4
|
|
|
5
5
|
const { checkBadRequest } = require('../../utils');
|
|
6
|
+
const { createRateLimitRunner } = require('./rate-limit');
|
|
6
7
|
|
|
7
8
|
module.exports = ({ nexus, strapi }) => {
|
|
8
9
|
const { nonNull } = nexus;
|
|
10
|
+
const runRateLimit = createRateLimitRunner(strapi, '/auth/reset-password');
|
|
9
11
|
|
|
10
12
|
return {
|
|
11
13
|
type: 'UsersPermissionsLoginPayload',
|
|
@@ -21,11 +23,9 @@ module.exports = ({ nexus, strapi }) => {
|
|
|
21
23
|
async resolve(parent, args, context) {
|
|
22
24
|
const { koaContext } = context;
|
|
23
25
|
|
|
24
|
-
koaContext
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
const output = koaContext.body;
|
|
26
|
+
const output = await runRateLimit(koaContext, { body: toPlainObject(args) }, (ctx) =>
|
|
27
|
+
strapi.plugin('users-permissions').controller('auth').resetPassword(ctx)
|
|
28
|
+
);
|
|
29
29
|
|
|
30
30
|
checkBadRequest(output);
|
|
31
31
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
const {
|
|
3
|
+
const { get } = require('lodash');
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* Throws an ApolloError if context body contains a bad request
|
|
@@ -8,10 +8,10 @@ const { getOr } = require('lodash/fp');
|
|
|
8
8
|
* @throws ApolloError if the body is a bad request
|
|
9
9
|
*/
|
|
10
10
|
function checkBadRequest(contextBody) {
|
|
11
|
-
const statusCode =
|
|
11
|
+
const statusCode = get(contextBody, 'statusCode', 200);
|
|
12
12
|
|
|
13
13
|
if (statusCode !== 200) {
|
|
14
|
-
const errorMessage =
|
|
14
|
+
const errorMessage = get(contextBody, 'error', 'Bad Request');
|
|
15
15
|
|
|
16
16
|
const exception = new Error(errorMessage);
|
|
17
17
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
const path = require('path');
|
|
4
4
|
const utils = require('@strapi/utils');
|
|
5
|
-
const { isString, has
|
|
5
|
+
const { toLower, isString, has } = require('lodash');
|
|
6
6
|
|
|
7
7
|
const { RateLimitError } = utils.errors;
|
|
8
8
|
|
|
@@ -46,8 +46,8 @@ const routeUsesEmailIdentifier = (requestPath) => {
|
|
|
46
46
|
* `/api/auth/local/` share one bucket.
|
|
47
47
|
*/
|
|
48
48
|
const normalizeRequestPathForRateLimit = (requestPath) => {
|
|
49
|
-
const normalized = path.normalize(requestPath);
|
|
50
|
-
const lower =
|
|
49
|
+
const normalized = path.posix.normalize(requestPath);
|
|
50
|
+
const lower = normalized.toLowerCase();
|
|
51
51
|
return lower.replace(/\/+$/, '') || '/';
|
|
52
52
|
};
|
|
53
53
|
|
|
@@ -102,7 +102,7 @@ module.exports =
|
|
|
102
102
|
};
|
|
103
103
|
}
|
|
104
104
|
|
|
105
|
-
if (!has('enabled'
|
|
105
|
+
if (!has(rateLimitConfig, 'enabled')) {
|
|
106
106
|
rateLimitConfig.enabled = true;
|
|
107
107
|
}
|
|
108
108
|
|