@strapi/plugin-users-permissions 4.0.0-next.9 → 4.0.3

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 (178) hide show
  1. package/admin/src/components/BoundRoute/getMethodColor.js +41 -0
  2. package/admin/src/components/BoundRoute/index.js +40 -24
  3. package/admin/src/components/FormModal/Input/index.js +121 -0
  4. package/admin/src/components/FormModal/index.js +123 -0
  5. package/admin/src/components/Permissions/PermissionRow/CheckboxWrapper.js +19 -26
  6. package/admin/src/components/Permissions/PermissionRow/SubCategory.js +118 -0
  7. package/admin/src/components/Permissions/PermissionRow/index.js +9 -48
  8. package/admin/src/components/Permissions/index.js +36 -24
  9. package/admin/src/components/Permissions/init.js +1 -6
  10. package/admin/src/components/Policies/index.js +46 -47
  11. package/admin/src/components/UsersPermissions/index.js +29 -26
  12. package/admin/src/components/UsersPermissions/init.js +1 -2
  13. package/admin/src/hooks/useFetchRole/index.js +17 -7
  14. package/admin/src/hooks/useForm/index.js +3 -29
  15. package/admin/src/hooks/useForm/reducer.js +2 -21
  16. package/admin/src/hooks/usePlugins/index.js +12 -21
  17. package/admin/src/hooks/usePlugins/reducer.js +0 -3
  18. package/admin/src/index.js +0 -8
  19. package/admin/src/pages/AdvancedSettings/index.js +203 -193
  20. package/admin/src/pages/AdvancedSettings/utils/api.js +13 -0
  21. package/admin/src/pages/AdvancedSettings/utils/layout.js +96 -0
  22. package/admin/src/pages/AdvancedSettings/utils/schema.js +21 -0
  23. package/admin/src/pages/EmailTemplates/components/EmailForm.js +173 -0
  24. package/admin/src/pages/EmailTemplates/components/EmailTable.js +116 -0
  25. package/admin/src/pages/EmailTemplates/index.js +117 -197
  26. package/admin/src/pages/EmailTemplates/utils/api.js +13 -0
  27. package/admin/src/pages/Providers/index.js +206 -221
  28. package/admin/src/pages/Providers/utils/api.js +21 -0
  29. package/admin/src/pages/Providers/utils/forms.js +168 -126
  30. package/admin/src/pages/Roles/CreatePage/index.js +155 -147
  31. package/admin/src/pages/Roles/EditPage/index.js +162 -134
  32. package/admin/src/pages/Roles/ListPage/components/TableBody.js +96 -0
  33. package/admin/src/pages/Roles/ListPage/index.js +176 -156
  34. package/admin/src/pages/Roles/ListPage/utils/api.js +28 -0
  35. package/admin/src/translations/ar.json +0 -8
  36. package/admin/src/translations/cs.json +0 -8
  37. package/admin/src/translations/de.json +0 -8
  38. package/admin/src/translations/dk.json +0 -8
  39. package/admin/src/translations/en.json +33 -12
  40. package/admin/src/translations/es.json +0 -8
  41. package/admin/src/translations/fr.json +0 -8
  42. package/admin/src/translations/id.json +0 -8
  43. package/admin/src/translations/it.json +0 -8
  44. package/admin/src/translations/ja.json +0 -8
  45. package/admin/src/translations/ko.json +93 -54
  46. package/admin/src/translations/ms.json +0 -8
  47. package/admin/src/translations/nl.json +0 -8
  48. package/admin/src/translations/pl.json +0 -8
  49. package/admin/src/translations/pt-BR.json +0 -8
  50. package/admin/src/translations/pt.json +0 -8
  51. package/admin/src/translations/ru.json +0 -8
  52. package/admin/src/translations/sk.json +0 -8
  53. package/admin/src/translations/sv.json +0 -8
  54. package/admin/src/translations/th.json +0 -8
  55. package/admin/src/translations/tr.json +0 -8
  56. package/admin/src/translations/uk.json +0 -8
  57. package/admin/src/translations/vi.json +0 -8
  58. package/admin/src/translations/zh-Hans.json +5 -14
  59. package/admin/src/translations/zh.json +0 -8
  60. package/admin/src/utils/axiosInstance.js +36 -0
  61. package/admin/src/utils/formatPluginName.js +26 -0
  62. package/admin/src/utils/index.js +1 -0
  63. package/documentation/1.0.0/overrides/users-permissions-Role.json +6 -6
  64. package/documentation/1.0.0/overrides/users-permissions-User.json +7 -7
  65. package/jest.config.front.js +10 -0
  66. package/package.json +36 -33
  67. package/server/bootstrap/index.js +19 -21
  68. package/server/config.js +3 -3
  69. package/server/content-types/index.js +3 -3
  70. package/server/content-types/permission/index.js +30 -3
  71. package/server/content-types/role/index.js +47 -3
  72. package/server/content-types/user/index.js +65 -4
  73. package/server/controllers/auth.js +82 -245
  74. package/server/controllers/content-manager-user.js +183 -0
  75. package/server/controllers/index.js +12 -6
  76. package/server/controllers/permissions.js +26 -0
  77. package/server/controllers/role.js +77 -0
  78. package/server/controllers/settings.js +85 -0
  79. package/server/controllers/user.js +119 -45
  80. package/server/controllers/validation/auth.js +29 -0
  81. package/server/controllers/validation/user.js +38 -0
  82. package/server/graphql/index.js +44 -0
  83. package/server/graphql/mutations/auth/email-confirmation.js +39 -0
  84. package/server/graphql/mutations/auth/forgot-password.js +38 -0
  85. package/server/graphql/mutations/auth/login.js +38 -0
  86. package/server/graphql/mutations/auth/register.js +39 -0
  87. package/server/graphql/mutations/auth/reset-password.js +41 -0
  88. package/server/graphql/mutations/crud/role/create-role.js +37 -0
  89. package/server/graphql/mutations/crud/role/delete-role.js +28 -0
  90. package/server/graphql/mutations/crud/role/update-role.js +38 -0
  91. package/server/graphql/mutations/crud/user/create-user.js +48 -0
  92. package/server/graphql/mutations/crud/user/delete-user.js +42 -0
  93. package/server/graphql/mutations/crud/user/update-user.js +49 -0
  94. package/server/graphql/mutations/index.js +42 -0
  95. package/server/graphql/queries/index.js +13 -0
  96. package/server/graphql/queries/me.js +17 -0
  97. package/server/graphql/resolvers-configs.js +37 -0
  98. package/server/graphql/types/create-role-payload.js +11 -0
  99. package/server/graphql/types/delete-role-payload.js +11 -0
  100. package/server/graphql/types/index.js +21 -0
  101. package/server/graphql/types/login-input.js +13 -0
  102. package/server/graphql/types/login-payload.js +12 -0
  103. package/server/graphql/types/me-role.js +14 -0
  104. package/server/graphql/types/me.js +16 -0
  105. package/server/graphql/types/password-payload.js +11 -0
  106. package/server/graphql/types/register-input.js +13 -0
  107. package/server/graphql/types/update-role-payload.js +11 -0
  108. package/server/graphql/utils.js +27 -0
  109. package/server/index.js +21 -0
  110. package/server/middlewares/index.js +2 -2
  111. package/server/{policies → middlewares}/rateLimit.js +3 -7
  112. package/server/register.js +11 -0
  113. package/server/routes/admin/index.js +10 -0
  114. package/server/routes/admin/permissions.js +20 -0
  115. package/server/routes/admin/role.js +79 -0
  116. package/server/routes/admin/settings.js +95 -0
  117. package/server/routes/content-api/auth.js +73 -0
  118. package/server/routes/content-api/index.js +11 -0
  119. package/server/routes/content-api/permissions.js +9 -0
  120. package/server/routes/content-api/role.js +29 -0
  121. package/server/routes/content-api/user.js +61 -0
  122. package/server/routes/index.js +4 -428
  123. package/server/services/index.js +10 -8
  124. package/server/services/jwt.js +9 -17
  125. package/server/services/providers.js +32 -33
  126. package/server/services/role.js +177 -0
  127. package/server/services/user.js +23 -22
  128. package/server/services/users-permissions.js +140 -338
  129. package/server/strategies/users-permissions.js +123 -0
  130. package/server/utils/index.d.ts +2 -0
  131. package/strapi-admin.js +3 -0
  132. package/strapi-server.js +1 -19
  133. package/admin/src/assets/images/logo.svg +0 -1
  134. package/admin/src/components/BaselineAlignement/index.js +0 -33
  135. package/admin/src/components/Bloc/index.js +0 -10
  136. package/admin/src/components/BoundRoute/Components.js +0 -78
  137. package/admin/src/components/ContainerFluid/index.js +0 -13
  138. package/admin/src/components/FormBloc/index.js +0 -61
  139. package/admin/src/components/IntlInput/index.js +0 -38
  140. package/admin/src/components/ListBaselineAlignment/index.js +0 -8
  141. package/admin/src/components/ListRow/Components.js +0 -74
  142. package/admin/src/components/ListRow/index.js +0 -35
  143. package/admin/src/components/ModalForm/Wrapper.js +0 -12
  144. package/admin/src/components/ModalForm/index.js +0 -59
  145. package/admin/src/components/Permissions/ListWrapper.js +0 -9
  146. package/admin/src/components/Permissions/PermissionRow/BaselineAlignment.js +0 -7
  147. package/admin/src/components/Permissions/PermissionRow/RowStyle.js +0 -28
  148. package/admin/src/components/Permissions/PermissionRow/SubCategory/ConditionsButtonWrapper.js +0 -13
  149. package/admin/src/components/Permissions/PermissionRow/SubCategory/PolicyWrapper.js +0 -8
  150. package/admin/src/components/Permissions/PermissionRow/SubCategory/SubCategoryWrapper.js +0 -26
  151. package/admin/src/components/Permissions/PermissionRow/SubCategory/index.js +0 -116
  152. package/admin/src/components/Policies/Components.js +0 -26
  153. package/admin/src/components/PrefixedIcon/index.js +0 -27
  154. package/admin/src/components/Roles/EmptyRole/BaselineAlignment.js +0 -7
  155. package/admin/src/components/Roles/EmptyRole/index.js +0 -27
  156. package/admin/src/components/Roles/RoleListWrapper/index.js +0 -17
  157. package/admin/src/components/Roles/RoleRow/RoleDescription.js +0 -9
  158. package/admin/src/components/Roles/RoleRow/index.js +0 -45
  159. package/admin/src/components/Roles/index.js +0 -3
  160. package/admin/src/components/SizedInput/index.js +0 -24
  161. package/admin/src/pages/AdvancedSettings/reducer.js +0 -65
  162. package/admin/src/pages/AdvancedSettings/utils/form.js +0 -52
  163. package/admin/src/pages/EmailTemplates/CustomTextInput.js +0 -105
  164. package/admin/src/pages/EmailTemplates/Wrapper.js +0 -36
  165. package/admin/src/pages/EmailTemplates/reducer.js +0 -58
  166. package/admin/src/pages/EmailTemplates/utils/forms.js +0 -81
  167. package/admin/src/pages/Roles/ListPage/BaselineAlignment.js +0 -8
  168. package/server/content-types/permission/schema.json +0 -48
  169. package/server/content-types/role/schema.json +0 -46
  170. package/server/content-types/user/schema.json +0 -66
  171. package/server/controllers/user/admin.js +0 -230
  172. package/server/controllers/user/api.js +0 -174
  173. package/server/controllers/users-permissions.js +0 -271
  174. package/server/middlewares/users-permissions.js +0 -44
  175. package/server/policies/index.js +0 -11
  176. package/server/policies/isAuthenticated.js +0 -9
  177. package/server/policies/permissions.js +0 -94
  178. package/server/schema.graphql.js +0 -317
@@ -1,430 +1,6 @@
1
1
  'use strict';
2
2
 
3
- module.exports = [
4
- {
5
- method: 'GET',
6
- path: '/',
7
- handler: 'users-permissions.index',
8
- config: {
9
- policies: [],
10
- },
11
- },
12
- {
13
- method: 'GET',
14
- path: '/search/:id',
15
- handler: 'users-permissions.searchUsers',
16
- config: {
17
- policies: [],
18
- description: 'Search for users',
19
- tag: {
20
- plugin: 'users-permissions',
21
- name: 'User',
22
- actionType: 'find',
23
- },
24
- },
25
- },
26
- {
27
- method: 'GET',
28
- path: '/policies',
29
- handler: 'users-permissions.getPolicies',
30
- config: {
31
- policies: [],
32
- },
33
- },
34
- {
35
- method: 'GET',
36
- path: '/roles/:id',
37
- handler: 'users-permissions.getRole',
38
- config: {
39
- policies: [
40
- {
41
- name: 'admin::hasPermissions',
42
- options: { actions: ['plugin::users-permissions.roles.read'] },
43
- },
44
- ],
45
- description: 'Retrieve a role depending on its id',
46
- tag: {
47
- plugin: 'users-permissions',
48
- name: 'Role',
49
- actionType: 'findOne',
50
- },
51
- },
52
- },
53
- {
54
- method: 'GET',
55
- path: '/roles',
56
- handler: 'users-permissions.getRoles',
57
- config: {
58
- policies: [
59
- {
60
- name: 'admin::hasPermissions',
61
- options: { actions: ['plugin::users-permissions.roles.read'] },
62
- },
63
- ],
64
- description: 'Retrieve all role documents',
65
- tag: {
66
- plugin: 'users-permissions',
67
- name: 'Role',
68
- actionType: 'find',
69
- },
70
- },
71
- },
72
- {
73
- method: 'GET',
74
- path: '/routes',
75
- handler: 'users-permissions.getRoutes',
76
- config: {
77
- policies: [],
78
- },
79
- },
80
- {
81
- method: 'GET',
82
- path: '/email-templates',
83
- handler: 'users-permissions.getEmailTemplate',
84
- config: {
85
- policies: [
86
- {
87
- name: 'admin::hasPermissions',
88
- options: { actions: ['plugin::users-permissions.email-templates.read'] },
89
- },
90
- ],
91
- },
92
- },
93
- {
94
- method: 'PUT',
95
- path: '/email-templates',
96
- handler: 'users-permissions.updateEmailTemplate',
97
- config: {
98
- policies: [
99
- {
100
- name: 'admin::hasPermissions',
101
- options: { actions: ['plugin::users-permissions.email-templates.update'] },
102
- },
103
- ],
104
- },
105
- },
106
- {
107
- method: 'GET',
108
- path: '/advanced',
109
- handler: 'users-permissions.getAdvancedSettings',
110
- config: {
111
- policies: [
112
- {
113
- name: 'admin::hasPermissions',
114
- options: { actions: ['plugin::users-permissions.advanced-settings.read'] },
115
- },
116
- ],
117
- },
118
- },
119
- {
120
- method: 'PUT',
121
- path: '/advanced',
122
- handler: 'users-permissions.updateAdvancedSettings',
123
- config: {
124
- policies: [
125
- {
126
- name: 'admin::hasPermissions',
127
- options: { actions: ['plugin::users-permissions.advanced-settings.update'] },
128
- },
129
- ],
130
- },
131
- },
132
- {
133
- method: 'GET',
134
- path: '/permissions',
135
- handler: 'users-permissions.getPermissions',
136
- config: {
137
- policies: [],
138
- },
139
- },
140
- {
141
- method: 'GET',
142
- path: '/providers',
143
- handler: 'users-permissions.getProviders',
144
- config: {
145
- policies: [
146
- {
147
- name: 'admin::hasPermissions',
148
- options: { actions: ['plugin::users-permissions.providers.read'] },
149
- },
150
- ],
151
- },
152
- },
153
-
154
- {
155
- method: 'PUT',
156
- path: '/providers',
157
- handler: 'users-permissions.updateProviders',
158
- config: {
159
- policies: [
160
- {
161
- name: 'admin::hasPermissions',
162
- options: { actions: ['plugin::users-permissions.providers.update'] },
163
- },
164
- ],
165
- },
166
- },
167
- {
168
- method: 'POST',
169
- path: '/roles',
170
- handler: 'users-permissions.createRole',
171
- config: {
172
- policies: [
173
- {
174
- name: 'admin::hasPermissions',
175
- options: { actions: ['plugin::users-permissions.roles.create'] },
176
- },
177
- ],
178
- description: 'Create a new role',
179
- tag: {
180
- plugin: 'users-permissions',
181
- name: 'Role',
182
- actionType: 'create',
183
- },
184
- },
185
- },
186
- {
187
- method: 'PUT',
188
- path: '/roles/:role',
189
- handler: 'users-permissions.updateRole',
190
- config: {
191
- policies: [
192
- {
193
- name: 'admin::hasPermissions',
194
- options: { actions: ['plugin::users-permissions.roles.update'] },
195
- },
196
- ],
197
- description: 'Update a role',
198
- tag: {
199
- plugin: 'users-permissions',
200
- name: 'Role',
201
- actionType: 'update',
202
- },
203
- },
204
- },
205
- {
206
- method: 'DELETE',
207
- path: '/roles/:role',
208
- handler: 'users-permissions.deleteRole',
209
- config: {
210
- policies: [
211
- {
212
- name: 'admin::hasPermissions',
213
- options: { actions: ['plugin::users-permissions.roles.delete'] },
214
- },
215
- ],
216
- description: 'Delete a role',
217
- tag: {
218
- plugin: 'users-permissions',
219
- name: 'Role',
220
- actionType: 'destroy',
221
- },
222
- },
223
- },
224
- {
225
- method: 'GET',
226
- path: '/connect/*',
227
- handler: 'auth.connect',
228
- config: {
229
- policies: ['plugin::users-permissions.rateLimit'],
230
- prefix: '',
231
- description: 'Connect a provider',
232
- tag: {
233
- plugin: 'users-permissions',
234
- name: 'User',
235
- },
236
- },
237
- },
238
- {
239
- method: 'POST',
240
- path: '/auth/local',
241
- handler: 'auth.callback',
242
- config: {
243
- policies: ['plugin::users-permissions.rateLimit'],
244
- prefix: '',
245
- description: 'Login a user using the identifiers email and password',
246
- tag: {
247
- plugin: 'users-permissions',
248
- name: 'User',
249
- },
250
- },
251
- },
252
- {
253
- method: 'POST',
254
- path: '/auth/local/register',
255
- handler: 'auth.register',
256
- config: {
257
- policies: ['plugin::users-permissions.rateLimit'],
258
- prefix: '',
259
- description: 'Register a new user with the default role',
260
- tag: {
261
- plugin: 'users-permissions',
262
- name: 'User',
263
- actionType: 'create',
264
- },
265
- },
266
- },
267
- {
268
- method: 'GET',
269
- path: '/auth/:provider/callback',
270
- handler: 'auth.callback',
271
- config: {
272
- policies: [],
273
- prefix: '',
274
- description: 'Successfull redirection after approving a provider',
275
- tag: {
276
- plugin: 'users-permissions',
277
- name: 'User',
278
- },
279
- },
280
- },
281
- {
282
- method: 'POST',
283
- path: '/auth/forgot-password',
284
- handler: 'auth.forgotPassword',
285
- config: {
286
- policies: ['plugin::users-permissions.rateLimit'],
287
- prefix: '',
288
- description: 'Send the reset password email link',
289
- tag: {
290
- plugin: 'users-permissions',
291
- name: 'User',
292
- },
293
- },
294
- },
295
- {
296
- method: 'POST',
297
- path: '/auth/reset-password',
298
- handler: 'auth.resetPassword',
299
- config: {
300
- policies: ['plugin::users-permissions.rateLimit'],
301
- prefix: '',
302
- description: 'Reset user password with a code (resetToken)',
303
- tag: {
304
- plugin: 'users-permissions',
305
- name: 'User',
306
- },
307
- },
308
- },
309
- {
310
- method: 'GET',
311
- path: '/auth/email-confirmation',
312
- handler: 'auth.emailConfirmation',
313
- config: {
314
- policies: [],
315
- prefix: '',
316
- description: 'Validate a user account',
317
- tag: {
318
- plugin: 'users-permissions',
319
- name: 'User',
320
- },
321
- },
322
- },
323
- {
324
- method: 'POST',
325
- path: '/auth/send-email-confirmation',
326
- handler: 'auth.sendEmailConfirmation',
327
- config: {
328
- policies: [],
329
- prefix: '',
330
- description: 'Send a confirmation email to user',
331
- tag: {
332
- plugin: 'users-permissions',
333
- name: 'User',
334
- },
335
- },
336
- },
337
- {
338
- method: 'GET',
339
- path: '/users/count',
340
- handler: 'user.count',
341
- config: {
342
- prefix: '',
343
- policies: [],
344
- },
345
- },
346
- {
347
- method: 'GET',
348
- path: '/users',
349
- handler: 'user.find',
350
- config: {
351
- policies: [],
352
- prefix: '',
353
- description: 'Retrieve all user documents',
354
- tag: {
355
- plugin: 'users-permissions',
356
- name: 'User',
357
- actionType: 'find',
358
- },
359
- },
360
- },
361
- {
362
- method: 'GET',
363
- path: '/users/me',
364
- handler: 'user.me',
365
- config: {
366
- policies: [],
367
- prefix: '',
368
- description: 'Retrieve the logged in user information',
369
- tag: {
370
- plugin: 'users-permissions',
371
- name: 'User',
372
- actionType: 'findOne',
373
- },
374
- },
375
- },
376
- {
377
- method: 'GET',
378
- path: '/users/:id',
379
- handler: 'user.findOne',
380
- config: {
381
- policies: [],
382
- prefix: '',
383
- description: 'Retrieve a single user depending on his id',
384
- tag: {
385
- plugin: 'users-permissions',
386
- name: 'User',
387
- actionType: 'findOne',
388
- },
389
- },
390
- },
391
- {
392
- method: 'POST',
393
- path: '/users',
394
- handler: 'user.create',
395
- config: {
396
- policies: [],
397
- prefix: '',
398
- },
399
- },
400
- {
401
- method: 'PUT',
402
- path: '/users/:id',
403
- handler: 'user.update',
404
- config: {
405
- policies: [],
406
- prefix: '',
407
- description: 'Update an existing user',
408
- tag: {
409
- plugin: 'users-permissions',
410
- name: 'User',
411
- actionType: 'update',
412
- },
413
- },
414
- },
415
- {
416
- method: 'DELETE',
417
- path: '/users/:id',
418
- handler: 'user.destroy',
419
- config: {
420
- policies: [],
421
- prefix: '',
422
- description: 'Delete an existing user',
423
- tag: {
424
- plugin: 'users-permissions',
425
- name: 'User',
426
- actionType: 'destroy',
427
- },
428
- },
429
- },
430
- ];
3
+ module.exports = {
4
+ admin: require('./admin'),
5
+ 'content-api': require('./content-api'),
6
+ };
@@ -1,13 +1,15 @@
1
1
  'use strict';
2
2
 
3
- const jwtService = require('./jwt');
4
- const providersService = require('./providers');
5
- const userService = require('./user');
6
- const usersPermissionsService = require('./users-permissions');
3
+ const jwt = require('./jwt');
4
+ const providers = require('./providers');
5
+ const user = require('./user');
6
+ const role = require('./role');
7
+ const usersPermissions = require('./users-permissions');
7
8
 
8
9
  module.exports = {
9
- jwt: jwtService,
10
- providers: providersService,
11
- user: userService,
12
- 'users-permissions': usersPermissionsService,
10
+ jwt,
11
+ providers,
12
+ role,
13
+ user,
14
+ 'users-permissions': usersPermissions,
13
15
  };
@@ -11,28 +11,20 @@ const jwt = require('jsonwebtoken');
11
11
 
12
12
  module.exports = ({ strapi }) => ({
13
13
  getToken(ctx) {
14
- const params = _.assign({}, ctx.request.body, ctx.request.query);
15
-
16
- let token = '';
14
+ let token;
17
15
 
18
16
  if (ctx.request && ctx.request.header && ctx.request.header.authorization) {
19
- const parts = ctx.request.header.authorization.split(' ');
17
+ const parts = ctx.request.header.authorization.split(/\s+/);
20
18
 
21
- if (parts.length === 2) {
22
- const scheme = parts[0];
23
- const credentials = parts[1];
24
- if (/^Bearer$/i.test(scheme)) {
25
- token = credentials;
26
- }
27
- } else {
28
- throw new Error(
29
- 'Invalid authorization header format. Format is Authorization: Bearer [token]'
30
- );
19
+ if (parts[0].toLowerCase() !== 'bearer' || parts.length !== 2) {
20
+ return null;
31
21
  }
32
- } else if (params.token) {
33
- token = params.token;
22
+
23
+ token = parts[1];
24
+ } else if (ctx.query.access_token) {
25
+ token = ctx.query.access_token;
34
26
  } else {
35
- throw new Error('No authorization header was found');
27
+ return null;
36
28
  }
37
29
 
38
30
  return this.verify(token);
@@ -6,15 +6,18 @@
6
6
 
7
7
  // Public node modules.
8
8
  const _ = require('lodash');
9
- const request = require('request');
9
+ const jwt = require('jsonwebtoken');
10
+ const urlJoin = require('url-join');
10
11
 
11
- // Purest strategies.
12
- const purest = require('purest')({ request });
13
- const purestConfig = require('@purest/providers');
14
12
  const { getAbsoluteServerUrl } = require('@strapi/utils');
15
- const jwt = require('jsonwebtoken');
16
13
 
17
14
  module.exports = ({ strapi }) => {
15
+ // lazy load heavy dependencies
16
+ const request = require('request');
17
+ // Purest strategies.
18
+ const purest = require('purest')({ request });
19
+ const purestConfig = require('@purest/providers');
20
+
18
21
  /**
19
22
  * Helper to get profiles
20
23
  *
@@ -25,13 +28,8 @@ module.exports = ({ strapi }) => {
25
28
  const getProfile = async (provider, query, callback) => {
26
29
  const access_token = query.access_token || query.code || query.oauth_token;
27
30
 
28
- const grant = await strapi
29
- .store({
30
- environment: '',
31
- type: 'plugin',
32
- name: 'users-permissions',
33
- key: 'grant',
34
- })
31
+ const providers = await strapi
32
+ .store({ type: 'plugin', name: 'users-permissions', key: 'grant' })
35
33
  .get();
36
34
 
37
35
  switch (provider) {
@@ -66,7 +64,7 @@ module.exports = ({ strapi }) => {
66
64
  // Combine username and discriminator because discord username is not unique
67
65
  var username = `${body.username}#${body.discriminator}`;
68
66
  callback(null, {
69
- username: username,
67
+ username,
70
68
  email: body.email,
71
69
  });
72
70
  }
@@ -203,8 +201,8 @@ module.exports = ({ strapi }) => {
203
201
  const twitter = purest({
204
202
  provider: 'twitter',
205
203
  config: purestConfig,
206
- key: grant.twitter.key,
207
- secret: grant.twitter.secret,
204
+ key: providers.twitter.key,
205
+ secret: providers.twitter.secret,
208
206
  });
209
207
 
210
208
  twitter
@@ -227,8 +225,8 @@ module.exports = ({ strapi }) => {
227
225
  case 'instagram': {
228
226
  const instagram = purest({
229
227
  provider: 'instagram',
230
- key: grant.instagram.key,
231
- secret: grant.instagram.secret,
228
+ key: providers.instagram.key,
229
+ secret: providers.instagram.secret,
232
230
  config: purestConfig,
233
231
  });
234
232
 
@@ -300,7 +298,7 @@ module.exports = ({ strapi }) => {
300
298
 
301
299
  twitch
302
300
  .get('users')
303
- .auth(access_token, grant.twitch.key)
301
+ .auth(access_token, providers.twitch.key)
304
302
  .request((err, res, body) => {
305
303
  if (err) {
306
304
  callback(err);
@@ -405,7 +403,7 @@ module.exports = ({ strapi }) => {
405
403
  }
406
404
  case 'auth0': {
407
405
  const purestAuth0Conf = {};
408
- purestAuth0Conf[`https://${grant.auth0.subdomain}.auth0.com`] = {
406
+ purestAuth0Conf[`https://${providers.auth0.subdomain}.auth0.com`] = {
409
407
  __domain: {
410
408
  auth: {
411
409
  auth: { bearer: '[0]' },
@@ -444,7 +442,7 @@ module.exports = ({ strapi }) => {
444
442
  break;
445
443
  }
446
444
  case 'cas': {
447
- const provider_url = 'https://' + _.get(grant['cas'], 'subdomain');
445
+ const provider_url = 'https://' + _.get(providers.cas, 'subdomain');
448
446
  const cas = purest({
449
447
  provider: 'cas',
450
448
  config: {
@@ -522,23 +520,20 @@ module.exports = ({ strapi }) => {
522
520
  return reject([null, err]);
523
521
  }
524
522
 
523
+ const email = _.toLower(profile.email);
524
+
525
525
  // We need at least the mail.
526
- if (!profile.email) {
526
+ if (!email) {
527
527
  return reject([null, { message: 'Email was not available.' }]);
528
528
  }
529
529
 
530
530
  try {
531
531
  const users = await strapi.query('plugin::users-permissions.user').findMany({
532
- where: { email: profile.email },
532
+ where: { email },
533
533
  });
534
534
 
535
535
  const advanced = await strapi
536
- .store({
537
- environment: '',
538
- type: 'plugin',
539
- name: 'users-permissions',
540
- key: 'advanced',
541
- })
536
+ .store({ type: 'plugin', name: 'users-permissions', key: 'advanced' })
542
537
  .get();
543
538
 
544
539
  const user = _.find(users, { provider });
@@ -572,11 +567,13 @@ module.exports = ({ strapi }) => {
572
567
  .findOne({ where: { type: advanced.default_role } });
573
568
 
574
569
  // Create the new user.
575
- const params = _.assign(profile, {
576
- provider: provider,
570
+ const params = {
571
+ ...profile,
572
+ email, // overwrite with lowercased email
573
+ provider,
577
574
  role: defaultRole.id,
578
575
  confirmed: true,
579
- });
576
+ };
580
577
 
581
578
  const createdUser = await strapi
582
579
  .query('plugin::users-permissions.user')
@@ -590,8 +587,10 @@ module.exports = ({ strapi }) => {
590
587
  });
591
588
  };
592
589
 
593
- const buildRedirectUri = (provider = '') =>
594
- `${getAbsoluteServerUrl(strapi.config)}/connect/${provider}/callback`;
590
+ const buildRedirectUri = (provider = '') => {
591
+ const apiPrefix = strapi.config.get('api.rest.prefix');
592
+ return urlJoin(getAbsoluteServerUrl(strapi.config), apiPrefix, 'connect', provider, 'callback');
593
+ };
595
594
 
596
595
  return {
597
596
  connect,