@strapi/plugin-users-permissions 5.52.2 → 5.53.0

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.
Files changed (66) hide show
  1. package/dist/server/controllers/auth.js +8 -2
  2. package/dist/server/controllers/auth.js.map +1 -1
  3. package/dist/server/controllers/auth.mjs +8 -2
  4. package/dist/server/controllers/auth.mjs.map +1 -1
  5. package/dist/server/graphql/mutations/auth/change-password.js +6 -3
  6. package/dist/server/graphql/mutations/auth/change-password.js.map +1 -1
  7. package/dist/server/graphql/mutations/auth/change-password.mjs +6 -3
  8. package/dist/server/graphql/mutations/auth/change-password.mjs.map +1 -1
  9. package/dist/server/graphql/mutations/auth/forgot-password.js +6 -3
  10. package/dist/server/graphql/mutations/auth/forgot-password.js.map +1 -1
  11. package/dist/server/graphql/mutations/auth/forgot-password.mjs +6 -3
  12. package/dist/server/graphql/mutations/auth/forgot-password.mjs.map +1 -1
  13. package/dist/server/graphql/mutations/auth/login.js +9 -6
  14. package/dist/server/graphql/mutations/auth/login.js.map +1 -1
  15. package/dist/server/graphql/mutations/auth/login.mjs +9 -6
  16. package/dist/server/graphql/mutations/auth/login.mjs.map +1 -1
  17. package/dist/server/graphql/mutations/auth/rate-limit.js +63 -0
  18. package/dist/server/graphql/mutations/auth/rate-limit.js.map +1 -0
  19. package/dist/server/graphql/mutations/auth/rate-limit.mjs +61 -0
  20. package/dist/server/graphql/mutations/auth/rate-limit.mjs.map +1 -0
  21. package/dist/server/graphql/mutations/auth/register.js +6 -3
  22. package/dist/server/graphql/mutations/auth/register.js.map +1 -1
  23. package/dist/server/graphql/mutations/auth/register.mjs +6 -3
  24. package/dist/server/graphql/mutations/auth/register.mjs.map +1 -1
  25. package/dist/server/graphql/mutations/auth/reset-password.js +6 -3
  26. package/dist/server/graphql/mutations/auth/reset-password.js.map +1 -1
  27. package/dist/server/graphql/mutations/auth/reset-password.mjs +6 -3
  28. package/dist/server/graphql/mutations/auth/reset-password.mjs.map +1 -1
  29. package/dist/server/middlewares/rateLimit.js +1 -1
  30. package/dist/server/middlewares/rateLimit.js.map +1 -1
  31. package/dist/server/middlewares/rateLimit.mjs +1 -1
  32. package/dist/server/middlewares/rateLimit.mjs.map +1 -1
  33. package/dist/server/services/providers-registry.js +80 -19
  34. package/dist/server/services/providers-registry.js.map +1 -1
  35. package/dist/server/services/providers-registry.mjs +80 -19
  36. package/dist/server/services/providers-registry.mjs.map +1 -1
  37. package/dist/server/services/providers.js +12 -8
  38. package/dist/server/services/providers.js.map +1 -1
  39. package/dist/server/services/providers.mjs +12 -8
  40. package/dist/server/services/providers.mjs.map +1 -1
  41. package/dist/server/services/user.js +7 -7
  42. package/dist/server/services/user.js.map +1 -1
  43. package/dist/server/services/user.mjs +7 -7
  44. package/dist/server/services/user.mjs.map +1 -1
  45. package/dist/server/utils/oauth-connect/index.js +11 -6
  46. package/dist/server/utils/oauth-connect/index.js.map +1 -1
  47. package/dist/server/utils/oauth-connect/index.mjs +11 -6
  48. package/dist/server/utils/oauth-connect/index.mjs.map +1 -1
  49. package/dist/server/utils/trim-grant-session-response.js +67 -0
  50. package/dist/server/utils/trim-grant-session-response.js.map +1 -0
  51. package/dist/server/utils/trim-grant-session-response.mjs +65 -0
  52. package/dist/server/utils/trim-grant-session-response.mjs.map +1 -0
  53. package/package.json +4 -4
  54. package/server/src/controllers/auth.js +13 -2
  55. package/server/src/graphql/mutations/auth/change-password.js +5 -5
  56. package/server/src/graphql/mutations/auth/forgot-password.js +5 -5
  57. package/server/src/graphql/mutations/auth/login.js +10 -6
  58. package/server/src/graphql/mutations/auth/rate-limit.js +62 -0
  59. package/server/src/graphql/mutations/auth/register.js +5 -5
  60. package/server/src/graphql/mutations/auth/reset-password.js +5 -5
  61. package/server/src/middlewares/rateLimit.js +1 -1
  62. package/server/src/services/providers-registry.js +99 -23
  63. package/server/src/services/providers.js +9 -7
  64. package/server/src/services/user.js +15 -5
  65. package/server/src/utils/oauth-connect/index.js +12 -6
  66. package/server/src/utils/trim-grant-session-response.js +70 -0
@@ -5,6 +5,7 @@ const { errors } = require('@strapi/utils');
5
5
  const builtinProviderEndpoints = require('./providers');
6
6
  const oauth1 = require('./oauth1');
7
7
  const oauth2 = require('./oauth2');
8
+ const { trimGrantSessionResponse } = require('../trim-grant-session-response');
8
9
 
9
10
  const CONNECT_PREFIX = '/connect';
10
11
 
@@ -87,6 +88,15 @@ const preserveGrantDynamic = (ctx) => {
87
88
  return dynamic ? { dynamic } : {};
88
89
  };
89
90
 
91
+ const redirectWithSessionResponse = (ctx, callbackUrl, provider, tokenResponse) => {
92
+ const grantResponse = oauth2.tokensToQueryPayload(provider, tokenResponse);
93
+ ctx.session.grant = {
94
+ response: trimGrantSessionResponse(grantResponse, provider.name),
95
+ };
96
+
97
+ return redirectWithPayload(ctx, callbackUrl, {});
98
+ };
99
+
90
100
  const startOAuth1Flow = async (ctx, provider, parsed, redirectUri) => {
91
101
  const requestToken = await oauth1.requestToken({
92
102
  requestUrl: provider.request_url,
@@ -142,9 +152,7 @@ const handleOAuth1Callback = async (ctx, provider, callbackUrl) => {
142
152
  oauthTokenCredential: requestToken.oauth_token_secret,
143
153
  });
144
154
 
145
- const payload = oauth2.tokensToQueryPayload(provider, tokenResponse);
146
- ctx.session.grant = {};
147
- return redirectWithPayload(ctx, callbackUrl, payload);
155
+ return redirectWithSessionResponse(ctx, callbackUrl, provider, tokenResponse);
148
156
  };
149
157
 
150
158
  const handleOAuth2Callback = async (ctx, provider, callbackUrl, redirectUri) => {
@@ -176,9 +184,7 @@ const handleOAuth2Callback = async (ctx, provider, callbackUrl, redirectUri) =>
176
184
  subdomain: provider.subdomain,
177
185
  });
178
186
 
179
- const payload = oauth2.tokensToQueryPayload(provider, tokenResponse);
180
- ctx.session.grant = {};
181
- return redirectWithPayload(ctx, callbackUrl, payload);
187
+ return redirectWithSessionResponse(ctx, callbackUrl, provider, tokenResponse);
182
188
  };
183
189
 
184
190
  const createOAuthConnectMiddleware = () => {
@@ -0,0 +1,70 @@
1
+ 'use strict';
2
+
3
+ const compact = (value) => {
4
+ if (value === null || value === undefined) {
5
+ return undefined;
6
+ }
7
+
8
+ if (typeof value !== 'object' || Array.isArray(value)) {
9
+ return value;
10
+ }
11
+
12
+ return Object.fromEntries(
13
+ Object.entries(value)
14
+ .map(([key, entry]) => [key, compact(entry)])
15
+ .filter(([, entry]) => entry !== undefined)
16
+ );
17
+ };
18
+
19
+ /**
20
+ * Compact grant's OAuth token response before it is written to the signed
21
+ * koa-session cookie. The full token exchange payload (especially Cognito's
22
+ * dual JWTs plus a duplicated raw blob) can exceed the browser's ~4 KB
23
+ * per-cookie limit and silently break the auth callback.
24
+ *
25
+ * Keep only fields that auth.callback / providers-registry actually read.
26
+ */
27
+ const trimGrantSessionResponse = (grantResponse, provider) => {
28
+ if (!grantResponse || typeof grantResponse !== 'object') {
29
+ return grantResponse;
30
+ }
31
+
32
+ switch (provider) {
33
+ case 'cognito':
34
+ return compact({
35
+ id_token: grantResponse.id_token,
36
+ });
37
+
38
+ case 'twitter':
39
+ return compact({
40
+ access_token: grantResponse.access_token,
41
+ access_secret: grantResponse.access_secret,
42
+ raw: grantResponse.raw?.screen_name
43
+ ? { screen_name: grantResponse.raw.screen_name }
44
+ : undefined,
45
+ });
46
+
47
+ case 'vk':
48
+ return compact({
49
+ access_token: grantResponse.access_token,
50
+ raw:
51
+ grantResponse.raw?.email != null && grantResponse.raw?.user_id != null
52
+ ? {
53
+ email: grantResponse.raw.email,
54
+ user_id: grantResponse.raw.user_id,
55
+ }
56
+ : undefined,
57
+ });
58
+
59
+ default:
60
+ return compact({
61
+ access_token: grantResponse.access_token,
62
+ oauth_token: grantResponse.oauth_token,
63
+ id_token: grantResponse.id_token,
64
+ });
65
+ }
66
+ };
67
+
68
+ module.exports = {
69
+ trimGrantSessionResponse,
70
+ };