@strapi/plugin-users-permissions 5.12.0 → 5.12.2
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/dist/admin/components/BoundRoute/getMethodColor.js +49 -0
- package/dist/admin/components/BoundRoute/getMethodColor.js.map +1 -0
- package/dist/admin/components/BoundRoute/getMethodColor.mjs +47 -0
- package/dist/admin/components/BoundRoute/getMethodColor.mjs.map +1 -0
- package/dist/admin/components/BoundRoute/index.js +98 -0
- package/dist/admin/components/BoundRoute/index.js.map +1 -0
- package/dist/admin/components/BoundRoute/index.mjs +96 -0
- package/dist/admin/components/BoundRoute/index.mjs.map +1 -0
- package/dist/admin/components/FormModal/Input/index.js +123 -0
- package/dist/admin/components/FormModal/Input/index.js.map +1 -0
- package/dist/admin/components/FormModal/Input/index.mjs +121 -0
- package/dist/admin/components/FormModal/Input/index.mjs.map +1 -0
- package/dist/admin/components/FormModal/index.js +110 -0
- package/dist/admin/components/FormModal/index.js.map +1 -0
- package/dist/admin/components/FormModal/index.mjs +108 -0
- package/dist/admin/components/FormModal/index.mjs.map +1 -0
- package/dist/admin/components/Permissions/PermissionRow/CheckboxWrapper.js +33 -0
- package/dist/admin/components/Permissions/PermissionRow/CheckboxWrapper.js.map +1 -0
- package/dist/admin/components/Permissions/PermissionRow/CheckboxWrapper.mjs +31 -0
- package/dist/admin/components/Permissions/PermissionRow/CheckboxWrapper.mjs.map +1 -0
- package/dist/admin/components/Permissions/PermissionRow/SubCategory.js +156 -0
- package/dist/admin/components/Permissions/PermissionRow/SubCategory.js.map +1 -0
- package/dist/admin/components/Permissions/PermissionRow/SubCategory.mjs +154 -0
- package/dist/admin/components/Permissions/PermissionRow/SubCategory.mjs.map +1 -0
- package/dist/admin/components/Permissions/PermissionRow/index.js +50 -0
- package/dist/admin/components/Permissions/PermissionRow/index.js.map +1 -0
- package/dist/admin/components/Permissions/PermissionRow/index.mjs +48 -0
- package/dist/admin/components/Permissions/PermissionRow/index.mjs.map +1 -0
- package/dist/admin/components/Permissions/index.js +52 -0
- package/dist/admin/components/Permissions/index.js.map +1 -0
- package/dist/admin/components/Permissions/index.mjs +50 -0
- package/dist/admin/components/Permissions/index.mjs.map +1 -0
- package/dist/admin/components/Permissions/init.js +15 -0
- package/dist/admin/components/Permissions/init.js.map +1 -0
- package/dist/admin/components/Permissions/init.mjs +13 -0
- package/dist/admin/components/Permissions/init.mjs.map +1 -0
- package/dist/admin/components/Permissions/reducer.js +34 -0
- package/dist/admin/components/Permissions/reducer.js.map +1 -0
- package/dist/admin/components/Permissions/reducer.mjs +31 -0
- package/dist/admin/components/Permissions/reducer.mjs.map +1 -0
- package/dist/admin/components/Policies/index.js +67 -0
- package/dist/admin/components/Policies/index.js.map +1 -0
- package/dist/admin/components/Policies/index.mjs +65 -0
- package/dist/admin/components/Policies/index.mjs.map +1 -0
- package/dist/admin/components/UsersPermissions/index.js +115 -0
- package/dist/admin/components/UsersPermissions/index.js.map +1 -0
- package/dist/admin/components/UsersPermissions/index.mjs +113 -0
- package/dist/admin/components/UsersPermissions/index.mjs.map +1 -0
- package/dist/admin/components/UsersPermissions/init.js +13 -0
- package/dist/admin/components/UsersPermissions/init.js.map +1 -0
- package/dist/admin/components/UsersPermissions/init.mjs +11 -0
- package/dist/admin/components/UsersPermissions/init.mjs.map +1 -0
- package/dist/admin/components/UsersPermissions/reducer.js +73 -0
- package/dist/admin/components/UsersPermissions/reducer.js.map +1 -0
- package/dist/admin/components/UsersPermissions/reducer.mjs +68 -0
- package/dist/admin/components/UsersPermissions/reducer.mjs.map +1 -0
- package/dist/admin/constants.js +81 -0
- package/dist/admin/constants.js.map +1 -0
- package/dist/admin/constants.mjs +79 -0
- package/dist/admin/constants.mjs.map +1 -0
- package/dist/admin/contexts/UsersPermissionsContext/index.js +23 -0
- package/dist/admin/contexts/UsersPermissionsContext/index.js.map +1 -0
- package/dist/admin/contexts/UsersPermissionsContext/index.mjs +19 -0
- package/dist/admin/contexts/UsersPermissionsContext/index.mjs.map +1 -0
- package/dist/admin/index.js +119 -2
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/index.mjs +120 -1
- package/dist/admin/index.mjs.map +1 -1
- package/dist/admin/package.json.js +14 -0
- package/dist/admin/package.json.js.map +1 -0
- package/dist/admin/package.json.mjs +11 -0
- package/dist/admin/package.json.mjs.map +1 -0
- package/dist/admin/{chunks/index-DFnYIqrB.js → pages/AdvancedSettings/index.js} +14 -121
- package/dist/admin/pages/AdvancedSettings/index.js.map +1 -0
- package/dist/admin/{chunks/index-Cy-tPfRk.mjs → pages/AdvancedSettings/index.mjs} +6 -94
- package/dist/admin/pages/AdvancedSettings/index.mjs.map +1 -0
- package/dist/admin/pages/AdvancedSettings/utils/layout.js +83 -0
- package/dist/admin/pages/AdvancedSettings/utils/layout.js.map +1 -0
- package/dist/admin/pages/AdvancedSettings/utils/layout.mjs +81 -0
- package/dist/admin/pages/AdvancedSettings/utils/layout.mjs.map +1 -0
- package/dist/admin/pages/AdvancedSettings/utils/schema.js +40 -0
- package/dist/admin/pages/AdvancedSettings/utils/schema.js.map +1 -0
- package/dist/admin/pages/AdvancedSettings/utils/schema.mjs +19 -0
- package/dist/admin/pages/AdvancedSettings/utils/schema.mjs.map +1 -0
- package/dist/admin/pages/EmailTemplates/components/EmailForm.js +171 -0
- package/dist/admin/pages/EmailTemplates/components/EmailForm.js.map +1 -0
- package/dist/admin/pages/EmailTemplates/components/EmailForm.mjs +169 -0
- package/dist/admin/pages/EmailTemplates/components/EmailForm.mjs.map +1 -0
- package/dist/admin/pages/EmailTemplates/components/EmailTable.js +145 -0
- package/dist/admin/pages/EmailTemplates/components/EmailTable.js.map +1 -0
- package/dist/admin/pages/EmailTemplates/components/EmailTable.mjs +143 -0
- package/dist/admin/pages/EmailTemplates/components/EmailTable.mjs.map +1 -0
- package/dist/admin/pages/EmailTemplates/index.js +157 -0
- package/dist/admin/pages/EmailTemplates/index.js.map +1 -0
- package/dist/admin/pages/EmailTemplates/index.mjs +135 -0
- package/dist/admin/pages/EmailTemplates/index.mjs.map +1 -0
- package/dist/admin/pages/EmailTemplates/utils/schema.js +50 -0
- package/dist/admin/pages/EmailTemplates/utils/schema.js.map +1 -0
- package/dist/admin/pages/EmailTemplates/utils/schema.mjs +29 -0
- package/dist/admin/pages/EmailTemplates/utils/schema.mjs.map +1 -0
- package/dist/admin/pages/Providers/index.js +278 -0
- package/dist/admin/pages/Providers/index.js.map +1 -0
- package/dist/admin/pages/Providers/index.mjs +254 -0
- package/dist/admin/pages/Providers/index.mjs.map +1 -0
- package/dist/admin/pages/Providers/utils/forms.js +281 -0
- package/dist/admin/pages/Providers/utils/forms.js.map +1 -0
- package/dist/admin/pages/Providers/utils/forms.mjs +260 -0
- package/dist/admin/pages/Providers/utils/forms.mjs.map +1 -0
- package/dist/admin/pages/Roles/constants.js +31 -0
- package/dist/admin/pages/Roles/constants.js.map +1 -0
- package/dist/admin/pages/Roles/constants.mjs +10 -0
- package/dist/admin/pages/Roles/constants.mjs.map +1 -0
- package/dist/admin/pages/Roles/hooks/usePlugins.js +78 -0
- package/dist/admin/pages/Roles/hooks/usePlugins.js.map +1 -0
- package/dist/admin/pages/Roles/hooks/usePlugins.mjs +76 -0
- package/dist/admin/pages/Roles/hooks/usePlugins.mjs.map +1 -0
- package/dist/admin/pages/Roles/index.js +35 -0
- package/dist/admin/pages/Roles/index.js.map +1 -0
- package/dist/admin/pages/Roles/index.mjs +33 -0
- package/dist/admin/pages/Roles/index.mjs.map +1 -0
- package/dist/admin/pages/Roles/pages/CreatePage.js +225 -0
- package/dist/admin/pages/Roles/pages/CreatePage.js.map +1 -0
- package/dist/admin/pages/Roles/pages/CreatePage.mjs +203 -0
- package/dist/admin/pages/Roles/pages/CreatePage.mjs.map +1 -0
- package/dist/admin/pages/Roles/pages/EditPage.js +229 -0
- package/dist/admin/pages/Roles/pages/EditPage.js.map +1 -0
- package/dist/admin/pages/Roles/pages/EditPage.mjs +207 -0
- package/dist/admin/pages/Roles/pages/EditPage.mjs.map +1 -0
- package/dist/admin/pages/Roles/pages/ListPage/components/TableBody.js +125 -0
- package/dist/admin/pages/Roles/pages/ListPage/components/TableBody.js.map +1 -0
- package/dist/admin/pages/Roles/pages/ListPage/components/TableBody.mjs +123 -0
- package/dist/admin/pages/Roles/pages/ListPage/components/TableBody.mjs.map +1 -0
- package/dist/admin/pages/Roles/pages/ListPage/index.js +237 -0
- package/dist/admin/pages/Roles/pages/ListPage/index.js.map +1 -0
- package/dist/admin/pages/Roles/pages/ListPage/index.mjs +234 -0
- package/dist/admin/pages/Roles/pages/ListPage/index.mjs.map +1 -0
- package/dist/admin/pluginId.js +8 -0
- package/dist/admin/pluginId.js.map +1 -0
- package/dist/admin/pluginId.mjs +6 -0
- package/dist/admin/pluginId.mjs.map +1 -0
- package/dist/admin/{chunks/ar-BJwjobLp.js → translations/ar.json.js} +2 -2
- package/dist/admin/translations/ar.json.js.map +1 -0
- package/dist/admin/{chunks/ar-G6bUGuUb.mjs → translations/ar.json.mjs} +1 -1
- package/dist/admin/translations/ar.json.mjs.map +1 -0
- package/dist/admin/{chunks/cs-uS_SIEo8.js → translations/cs.json.js} +2 -2
- package/dist/admin/translations/cs.json.js.map +1 -0
- package/dist/admin/{chunks/cs-Bu59JqhG.mjs → translations/cs.json.mjs} +1 -1
- package/dist/admin/translations/cs.json.mjs.map +1 -0
- package/dist/admin/{chunks/de-7MVMrqqI.js → translations/de.json.js} +2 -2
- package/dist/admin/translations/de.json.js.map +1 -0
- package/dist/admin/{chunks/de-B81A69_5.mjs → translations/de.json.mjs} +1 -1
- package/dist/admin/translations/de.json.mjs.map +1 -0
- package/dist/admin/{chunks/dk-DwCLGmy9.js → translations/dk.json.js} +2 -2
- package/dist/admin/translations/dk.json.js.map +1 -0
- package/dist/admin/{chunks/dk-BaelzvBE.mjs → translations/dk.json.mjs} +1 -1
- package/dist/admin/translations/dk.json.mjs.map +1 -0
- package/dist/admin/{chunks/en-DwQjkHi_.js → translations/en.json.js} +2 -2
- package/dist/admin/translations/en.json.js.map +1 -0
- package/dist/admin/{chunks/en-BhgCBe7M.mjs → translations/en.json.mjs} +1 -1
- package/dist/admin/translations/en.json.mjs.map +1 -0
- package/dist/admin/{chunks/es-BOJOedG5.js → translations/es.json.js} +2 -2
- package/dist/admin/translations/es.json.js.map +1 -0
- package/dist/admin/{chunks/es-B0wXmvRj.mjs → translations/es.json.mjs} +1 -1
- package/dist/admin/translations/es.json.mjs.map +1 -0
- package/dist/admin/{chunks/fr-BDNWCNs0.js → translations/fr.json.js} +2 -2
- package/dist/admin/translations/fr.json.js.map +1 -0
- package/dist/admin/{chunks/fr-CGYvGUXg.mjs → translations/fr.json.mjs} +1 -1
- package/dist/admin/translations/fr.json.mjs.map +1 -0
- package/dist/admin/{chunks/id-UqUPykHZ.js → translations/id.json.js} +2 -2
- package/dist/admin/translations/id.json.js.map +1 -0
- package/dist/admin/{chunks/id-CNzbwFjA.mjs → translations/id.json.mjs} +1 -1
- package/dist/admin/translations/id.json.mjs.map +1 -0
- package/dist/admin/{chunks/it-D5VuyoLU.js → translations/it.json.js} +2 -2
- package/dist/admin/translations/it.json.js.map +1 -0
- package/dist/admin/{chunks/it-B2H2foTf.mjs → translations/it.json.mjs} +1 -1
- package/dist/admin/translations/it.json.mjs.map +1 -0
- package/dist/admin/{chunks/ja-MpqVsCgs.js → translations/ja.json.js} +2 -2
- package/dist/admin/translations/ja.json.js.map +1 -0
- package/dist/admin/{chunks/ja-C0z9d7L9.mjs → translations/ja.json.mjs} +1 -1
- package/dist/admin/translations/ja.json.mjs.map +1 -0
- package/dist/admin/{chunks/ko-Bm-grPSc.js → translations/ko.json.js} +2 -2
- package/dist/admin/translations/ko.json.js.map +1 -0
- package/dist/admin/{chunks/ko-CzUgzpeS.mjs → translations/ko.json.mjs} +1 -1
- package/dist/admin/translations/ko.json.mjs.map +1 -0
- package/dist/admin/{chunks/ms-D7eyBD5H.js → translations/ms.json.js} +2 -2
- package/dist/admin/translations/ms.json.js.map +1 -0
- package/dist/admin/{chunks/ms-CCacxjim.mjs → translations/ms.json.mjs} +1 -1
- package/dist/admin/translations/ms.json.mjs.map +1 -0
- package/dist/admin/{chunks/nl-BIOwAQtI.js → translations/nl.json.js} +2 -2
- package/dist/admin/translations/nl.json.js.map +1 -0
- package/dist/admin/{chunks/nl-DDC3nZW-.mjs → translations/nl.json.mjs} +1 -1
- package/dist/admin/translations/nl.json.mjs.map +1 -0
- package/dist/admin/{chunks/pl-D5BeNrg_.js → translations/pl.json.js} +2 -2
- package/dist/admin/translations/pl.json.js.map +1 -0
- package/dist/admin/{chunks/pl-XkS463rN.mjs → translations/pl.json.mjs} +1 -1
- package/dist/admin/translations/pl.json.mjs.map +1 -0
- package/dist/admin/{chunks/pt-BR-DxPBzQGx.js → translations/pt-BR.json.js} +2 -2
- package/dist/admin/translations/pt-BR.json.js.map +1 -0
- package/dist/admin/{chunks/pt-BR-8cC7z8Km.mjs → translations/pt-BR.json.mjs} +1 -1
- package/dist/admin/translations/pt-BR.json.mjs.map +1 -0
- package/dist/admin/{chunks/pt-kkCwzNvH.js → translations/pt.json.js} +2 -2
- package/dist/admin/translations/pt.json.js.map +1 -0
- package/dist/admin/{chunks/pt-DQpEvio8.mjs → translations/pt.json.mjs} +1 -1
- package/dist/admin/translations/pt.json.mjs.map +1 -0
- package/dist/admin/{chunks/ru-BQ0gHmp3.js → translations/ru.json.js} +2 -2
- package/dist/admin/translations/ru.json.js.map +1 -0
- package/dist/admin/{chunks/ru-nzL_7Mhg.mjs → translations/ru.json.mjs} +1 -1
- package/dist/admin/translations/ru.json.mjs.map +1 -0
- package/dist/admin/{chunks/sk-nVwAPdYC.js → translations/sk.json.js} +2 -2
- package/dist/admin/translations/sk.json.js.map +1 -0
- package/dist/admin/{chunks/sk-Ddxc_tZA.mjs → translations/sk.json.mjs} +1 -1
- package/dist/admin/translations/sk.json.mjs.map +1 -0
- package/dist/admin/{chunks/sv-BDfk2A-F.js → translations/sv.json.js} +2 -2
- package/dist/admin/translations/sv.json.js.map +1 -0
- package/dist/admin/{chunks/sv-By3RYpMG.mjs → translations/sv.json.mjs} +1 -1
- package/dist/admin/translations/sv.json.mjs.map +1 -0
- package/dist/admin/{chunks/th-BtTtpHe2.js → translations/th.json.js} +2 -2
- package/dist/admin/translations/th.json.js.map +1 -0
- package/dist/admin/{chunks/th-COl50vqb.mjs → translations/th.json.mjs} +1 -1
- package/dist/admin/translations/th.json.mjs.map +1 -0
- package/dist/admin/{chunks/tr-Di-Nf7cT.js → translations/tr.json.js} +2 -2
- package/dist/admin/translations/tr.json.js.map +1 -0
- package/dist/admin/{chunks/tr-80SJU6jg.mjs → translations/tr.json.mjs} +1 -1
- package/dist/admin/translations/tr.json.mjs.map +1 -0
- package/dist/admin/{chunks/uk-r5zXTAS7.js → translations/uk.json.js} +2 -2
- package/dist/admin/translations/uk.json.js.map +1 -0
- package/dist/admin/{chunks/uk-DnrIlPwG.mjs → translations/uk.json.mjs} +1 -1
- package/dist/admin/translations/uk.json.mjs.map +1 -0
- package/dist/admin/{chunks/vi-D9cCsHsU.js → translations/vi.json.js} +2 -2
- package/dist/admin/translations/vi.json.js.map +1 -0
- package/dist/admin/{chunks/vi-69AF03Iv.mjs → translations/vi.json.mjs} +1 -1
- package/dist/admin/translations/vi.json.mjs.map +1 -0
- package/dist/admin/{chunks/zh-Hans-CKqQbpsM.js → translations/zh-Hans.json.js} +2 -2
- package/dist/admin/translations/zh-Hans.json.js.map +1 -0
- package/dist/admin/{chunks/zh-Hans-DmDcSsp7.mjs → translations/zh-Hans.json.mjs} +1 -1
- package/dist/admin/translations/zh-Hans.json.mjs.map +1 -0
- package/dist/admin/{chunks/zh-BzWgJEzz.js → translations/zh.json.js} +2 -2
- package/dist/admin/translations/zh.json.js.map +1 -0
- package/dist/admin/{chunks/zh-BzSkqxo-.mjs → translations/zh.json.mjs} +1 -1
- package/dist/admin/translations/zh.json.mjs.map +1 -0
- package/dist/admin/utils/cleanPermissions.js +24 -0
- package/dist/admin/utils/cleanPermissions.js.map +1 -0
- package/dist/admin/utils/cleanPermissions.mjs +22 -0
- package/dist/admin/utils/cleanPermissions.mjs.map +1 -0
- package/dist/admin/utils/formatPluginName.js +29 -0
- package/dist/admin/utils/formatPluginName.js.map +1 -0
- package/dist/admin/utils/formatPluginName.mjs +27 -0
- package/dist/admin/utils/formatPluginName.mjs.map +1 -0
- package/dist/admin/utils/getTrad.js +8 -0
- package/dist/admin/utils/getTrad.js.map +1 -0
- package/dist/admin/utils/getTrad.mjs +6 -0
- package/dist/admin/utils/getTrad.mjs.map +1 -0
- package/dist/admin/utils/prefixPluginTranslations.js +11 -0
- package/dist/admin/utils/prefixPluginTranslations.js.map +1 -0
- package/dist/admin/utils/prefixPluginTranslations.mjs +9 -0
- package/dist/admin/utils/prefixPluginTranslations.mjs.map +1 -0
- package/dist/server/_virtual/_commonjsHelpers.js +8 -0
- package/dist/server/_virtual/_commonjsHelpers.js.map +1 -0
- package/dist/server/_virtual/_commonjsHelpers.mjs +6 -0
- package/dist/server/_virtual/_commonjsHelpers.mjs.map +1 -0
- package/dist/server/bootstrap/index.js +145 -0
- package/dist/server/bootstrap/index.js.map +1 -0
- package/dist/server/bootstrap/index.mjs +143 -0
- package/dist/server/bootstrap/index.mjs.map +1 -0
- package/dist/server/bootstrap/users-permissions-actions.js +98 -0
- package/dist/server/bootstrap/users-permissions-actions.js.map +1 -0
- package/dist/server/bootstrap/users-permissions-actions.mjs +96 -0
- package/dist/server/bootstrap/users-permissions-actions.mjs.map +1 -0
- package/dist/server/config.js +54 -0
- package/dist/server/config.js.map +1 -0
- package/dist/server/config.mjs +52 -0
- package/dist/server/config.mjs.map +1 -0
- package/dist/server/content-types/index.js +30 -0
- package/dist/server/content-types/index.js.map +1 -0
- package/dist/server/content-types/index.mjs +28 -0
- package/dist/server/content-types/index.mjs.map +1 -0
- package/dist/server/content-types/permission/index.js +44 -0
- package/dist/server/content-types/permission/index.js.map +1 -0
- package/dist/server/content-types/permission/index.mjs +42 -0
- package/dist/server/content-types/permission/index.mjs.map +1 -0
- package/dist/server/content-types/role/index.js +61 -0
- package/dist/server/content-types/role/index.js.map +1 -0
- package/dist/server/content-types/role/index.mjs +59 -0
- package/dist/server/content-types/role/index.mjs.map +1 -0
- package/dist/server/content-types/user/index.js +84 -0
- package/dist/server/content-types/user/index.js.map +1 -0
- package/dist/server/content-types/user/index.mjs +82 -0
- package/dist/server/content-types/user/index.mjs.map +1 -0
- package/dist/server/content-types/user/schema-config.js +25 -0
- package/dist/server/content-types/user/schema-config.js.map +1 -0
- package/dist/server/content-types/user/schema-config.mjs +23 -0
- package/dist/server/content-types/user/schema-config.mjs.map +1 -0
- package/dist/server/controllers/auth.js +429 -0
- package/dist/server/controllers/auth.js.map +1 -0
- package/dist/server/controllers/auth.mjs +427 -0
- package/dist/server/controllers/auth.mjs.map +1 -0
- package/dist/server/controllers/content-manager-user.js +168 -0
- package/dist/server/controllers/content-manager-user.js.map +1 -0
- package/dist/server/controllers/content-manager-user.mjs +166 -0
- package/dist/server/controllers/content-manager-user.mjs.map +1 -0
- package/dist/server/controllers/index.js +33 -0
- package/dist/server/controllers/index.js.map +1 -0
- package/dist/server/controllers/index.mjs +31 -0
- package/dist/server/controllers/index.mjs.map +1 -0
- package/dist/server/controllers/permissions.js +37 -0
- package/dist/server/controllers/permissions.js.map +1 -0
- package/dist/server/controllers/permissions.mjs +35 -0
- package/dist/server/controllers/permissions.mjs.map +1 -0
- package/dist/server/controllers/role.js +91 -0
- package/dist/server/controllers/role.js.map +1 -0
- package/dist/server/controllers/role.mjs +89 -0
- package/dist/server/controllers/role.mjs.map +1 -0
- package/dist/server/controllers/settings.js +107 -0
- package/dist/server/controllers/settings.js.map +1 -0
- package/dist/server/controllers/settings.mjs +105 -0
- package/dist/server/controllers/settings.mjs.map +1 -0
- package/dist/server/controllers/user.js +201 -0
- package/dist/server/controllers/user.js.map +1 -0
- package/dist/server/controllers/user.mjs +199 -0
- package/dist/server/controllers/user.mjs.map +1 -0
- package/dist/server/controllers/validation/auth.js +131 -0
- package/dist/server/controllers/validation/auth.js.map +1 -0
- package/dist/server/controllers/validation/auth.mjs +129 -0
- package/dist/server/controllers/validation/auth.mjs.map +1 -0
- package/dist/server/controllers/validation/email-template.js +72 -0
- package/dist/server/controllers/validation/email-template.js.map +1 -0
- package/dist/server/controllers/validation/email-template.mjs +70 -0
- package/dist/server/controllers/validation/email-template.mjs.map +1 -0
- package/dist/server/controllers/validation/user.js +49 -0
- package/dist/server/controllers/validation/user.js.map +1 -0
- package/dist/server/controllers/validation/user.mjs +47 -0
- package/dist/server/controllers/validation/user.mjs.map +1 -0
- package/dist/server/graphql/index.js +66 -0
- package/dist/server/graphql/index.js.map +1 -0
- package/dist/server/graphql/index.mjs +64 -0
- package/dist/server/graphql/index.mjs.map +1 -0
- package/dist/server/graphql/mutations/auth/change-password.js +40 -0
- package/dist/server/graphql/mutations/auth/change-password.js.map +1 -0
- package/dist/server/graphql/mutations/auth/change-password.mjs +38 -0
- package/dist/server/graphql/mutations/auth/change-password.mjs.map +1 -0
- package/dist/server/graphql/mutations/auth/email-confirmation.js +38 -0
- package/dist/server/graphql/mutations/auth/email-confirmation.js.map +1 -0
- package/dist/server/graphql/mutations/auth/email-confirmation.mjs +36 -0
- package/dist/server/graphql/mutations/auth/email-confirmation.mjs.map +1 -0
- package/dist/server/graphql/mutations/auth/forgot-password.js +37 -0
- package/dist/server/graphql/mutations/auth/forgot-password.js.map +1 -0
- package/dist/server/graphql/mutations/auth/forgot-password.mjs +35 -0
- package/dist/server/graphql/mutations/auth/forgot-password.mjs.map +1 -0
- package/dist/server/graphql/mutations/auth/login.js +40 -0
- package/dist/server/graphql/mutations/auth/login.js.map +1 -0
- package/dist/server/graphql/mutations/auth/login.mjs +38 -0
- package/dist/server/graphql/mutations/auth/login.mjs.map +1 -0
- package/dist/server/graphql/mutations/auth/register.js +38 -0
- package/dist/server/graphql/mutations/auth/register.js.map +1 -0
- package/dist/server/graphql/mutations/auth/register.mjs +36 -0
- package/dist/server/graphql/mutations/auth/register.mjs.map +1 -0
- package/dist/server/graphql/mutations/auth/reset-password.js +40 -0
- package/dist/server/graphql/mutations/auth/reset-password.js.map +1 -0
- package/dist/server/graphql/mutations/auth/reset-password.mjs +38 -0
- package/dist/server/graphql/mutations/auth/reset-password.mjs.map +1 -0
- package/dist/server/graphql/mutations/crud/role/create-role.js +37 -0
- package/dist/server/graphql/mutations/crud/role/create-role.js.map +1 -0
- package/dist/server/graphql/mutations/crud/role/create-role.mjs +35 -0
- package/dist/server/graphql/mutations/crud/role/create-role.mjs.map +1 -0
- package/dist/server/graphql/mutations/crud/role/delete-role.js +32 -0
- package/dist/server/graphql/mutations/crud/role/delete-role.js.map +1 -0
- package/dist/server/graphql/mutations/crud/role/delete-role.mjs +30 -0
- package/dist/server/graphql/mutations/crud/role/delete-role.mjs.map +1 -0
- package/dist/server/graphql/mutations/crud/role/update-role.js +39 -0
- package/dist/server/graphql/mutations/crud/role/update-role.js.map +1 -0
- package/dist/server/graphql/mutations/crud/role/update-role.mjs +37 -0
- package/dist/server/graphql/mutations/crud/role/update-role.mjs.map +1 -0
- package/dist/server/graphql/mutations/crud/user/create-user.js +46 -0
- package/dist/server/graphql/mutations/crud/user/create-user.js.map +1 -0
- package/dist/server/graphql/mutations/crud/user/create-user.mjs +44 -0
- package/dist/server/graphql/mutations/crud/user/create-user.mjs.map +1 -0
- package/dist/server/graphql/mutations/crud/user/delete-user.js +44 -0
- package/dist/server/graphql/mutations/crud/user/delete-user.js.map +1 -0
- package/dist/server/graphql/mutations/crud/user/delete-user.mjs +42 -0
- package/dist/server/graphql/mutations/crud/user/delete-user.mjs.map +1 -0
- package/dist/server/graphql/mutations/crud/user/update-user.js +49 -0
- package/dist/server/graphql/mutations/crud/user/update-user.js.map +1 -0
- package/dist/server/graphql/mutations/crud/user/update-user.mjs +47 -0
- package/dist/server/graphql/mutations/crud/user/update-user.mjs.map +1 -0
- package/dist/server/graphql/mutations/index.js +58 -0
- package/dist/server/graphql/mutations/index.js.map +1 -0
- package/dist/server/graphql/mutations/index.mjs +56 -0
- package/dist/server/graphql/mutations/index.mjs.map +1 -0
- package/dist/server/graphql/queries/index.js +25 -0
- package/dist/server/graphql/queries/index.js.map +1 -0
- package/dist/server/graphql/queries/index.mjs +23 -0
- package/dist/server/graphql/queries/index.mjs.map +1 -0
- package/dist/server/graphql/queries/me.js +23 -0
- package/dist/server/graphql/queries/me.js.map +1 -0
- package/dist/server/graphql/queries/me.mjs +21 -0
- package/dist/server/graphql/queries/me.mjs.map +1 -0
- package/dist/server/graphql/resolvers-configs.js +93 -0
- package/dist/server/graphql/resolvers-configs.js.map +1 -0
- package/dist/server/graphql/resolvers-configs.mjs +91 -0
- package/dist/server/graphql/resolvers-configs.mjs.map +1 -0
- package/dist/server/graphql/types/create-role-payload.js +20 -0
- package/dist/server/graphql/types/create-role-payload.js.map +1 -0
- package/dist/server/graphql/types/create-role-payload.mjs +18 -0
- package/dist/server/graphql/types/create-role-payload.mjs.map +1 -0
- package/dist/server/graphql/types/delete-role-payload.js +20 -0
- package/dist/server/graphql/types/delete-role-payload.js.map +1 -0
- package/dist/server/graphql/types/delete-role-payload.mjs +18 -0
- package/dist/server/graphql/types/delete-role-payload.mjs.map +1 -0
- package/dist/server/graphql/types/index.js +41 -0
- package/dist/server/graphql/types/index.js.map +1 -0
- package/dist/server/graphql/types/index.mjs +39 -0
- package/dist/server/graphql/types/index.mjs.map +1 -0
- package/dist/server/graphql/types/login-input.js +24 -0
- package/dist/server/graphql/types/login-input.js.map +1 -0
- package/dist/server/graphql/types/login-input.mjs +22 -0
- package/dist/server/graphql/types/login-input.mjs.map +1 -0
- package/dist/server/graphql/types/login-payload.js +23 -0
- package/dist/server/graphql/types/login-payload.js.map +1 -0
- package/dist/server/graphql/types/login-payload.mjs +21 -0
- package/dist/server/graphql/types/login-payload.mjs.map +1 -0
- package/dist/server/graphql/types/me-role.js +23 -0
- package/dist/server/graphql/types/me-role.js.map +1 -0
- package/dist/server/graphql/types/me-role.mjs +21 -0
- package/dist/server/graphql/types/me-role.mjs.map +1 -0
- package/dist/server/graphql/types/me.js +28 -0
- package/dist/server/graphql/types/me.js.map +1 -0
- package/dist/server/graphql/types/me.mjs +26 -0
- package/dist/server/graphql/types/me.mjs.map +1 -0
- package/dist/server/graphql/types/password-payload.js +20 -0
- package/dist/server/graphql/types/password-payload.js.map +1 -0
- package/dist/server/graphql/types/password-payload.mjs +18 -0
- package/dist/server/graphql/types/password-payload.mjs.map +1 -0
- package/dist/server/graphql/types/register-input.js +22 -0
- package/dist/server/graphql/types/register-input.js.map +1 -0
- package/dist/server/graphql/types/register-input.mjs +20 -0
- package/dist/server/graphql/types/register-input.mjs.map +1 -0
- package/dist/server/graphql/types/update-role-payload.js +20 -0
- package/dist/server/graphql/types/update-role-payload.js.map +1 -0
- package/dist/server/graphql/types/update-role-payload.mjs +18 -0
- package/dist/server/graphql/types/update-role-payload.mjs.map +1 -0
- package/dist/server/graphql/types/user-input.js +26 -0
- package/dist/server/graphql/types/user-input.js.map +1 -0
- package/dist/server/graphql/types/user-input.mjs +24 -0
- package/dist/server/graphql/types/user-input.mjs.map +1 -0
- package/dist/server/graphql/utils.js +32 -0
- package/dist/server/graphql/utils.js.map +1 -0
- package/dist/server/graphql/utils.mjs +30 -0
- package/dist/server/graphql/utils.mjs.map +1 -0
- package/dist/server/index.js +4 -4760
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +2 -4758
- package/dist/server/index.mjs.map +1 -1
- package/dist/server/index2.js +39 -0
- package/dist/server/index2.js.map +1 -0
- package/dist/server/index2.mjs +37 -0
- package/dist/server/index2.mjs.map +1 -0
- package/dist/server/middlewares/index.js +18 -0
- package/dist/server/middlewares/index.js.map +1 -0
- package/dist/server/middlewares/index.mjs +16 -0
- package/dist/server/middlewares/index.mjs.map +1 -0
- package/dist/server/middlewares/rateLimit.js +51 -0
- package/dist/server/middlewares/rateLimit.js.map +1 -0
- package/dist/server/middlewares/rateLimit.mjs +49 -0
- package/dist/server/middlewares/rateLimit.mjs.map +1 -0
- package/dist/server/register.js +41 -0
- package/dist/server/register.js.map +1 -0
- package/dist/server/register.mjs +39 -0
- package/dist/server/register.mjs.map +1 -0
- package/dist/server/routes/admin/index.js +27 -0
- package/dist/server/routes/admin/index.js.map +1 -0
- package/dist/server/routes/admin/index.mjs +25 -0
- package/dist/server/routes/admin/index.mjs.map +1 -0
- package/dist/server/routes/admin/permissions.js +29 -0
- package/dist/server/routes/admin/permissions.js.map +1 -0
- package/dist/server/routes/admin/permissions.mjs +27 -0
- package/dist/server/routes/admin/permissions.mjs.map +1 -0
- package/dist/server/routes/admin/role.js +99 -0
- package/dist/server/routes/admin/role.js.map +1 -0
- package/dist/server/routes/admin/role.mjs +97 -0
- package/dist/server/routes/admin/role.mjs.map +1 -0
- package/dist/server/routes/admin/settings.js +116 -0
- package/dist/server/routes/admin/settings.js.map +1 -0
- package/dist/server/routes/admin/settings.mjs +114 -0
- package/dist/server/routes/admin/settings.mjs.map +1 -0
- package/dist/server/routes/content-api/auth.js +104 -0
- package/dist/server/routes/content-api/auth.js.map +1 -0
- package/dist/server/routes/content-api/auth.mjs +102 -0
- package/dist/server/routes/content-api/auth.mjs.map +1 -0
- package/dist/server/routes/content-api/index.js +30 -0
- package/dist/server/routes/content-api/index.js.map +1 -0
- package/dist/server/routes/content-api/index.mjs +28 -0
- package/dist/server/routes/content-api/index.mjs.map +1 -0
- package/dist/server/routes/content-api/permissions.js +19 -0
- package/dist/server/routes/content-api/permissions.js.map +1 -0
- package/dist/server/routes/content-api/permissions.mjs +17 -0
- package/dist/server/routes/content-api/permissions.mjs.map +1 -0
- package/dist/server/routes/content-api/role.js +39 -0
- package/dist/server/routes/content-api/role.js.map +1 -0
- package/dist/server/routes/content-api/role.mjs +37 -0
- package/dist/server/routes/content-api/role.mjs.map +1 -0
- package/dist/server/routes/content-api/user.js +70 -0
- package/dist/server/routes/content-api/user.js.map +1 -0
- package/dist/server/routes/content-api/user.mjs +68 -0
- package/dist/server/routes/content-api/user.mjs.map +1 -0
- package/dist/server/routes/index.js +19 -0
- package/dist/server/routes/index.js.map +1 -0
- package/dist/server/routes/index.mjs +17 -0
- package/dist/server/routes/index.mjs.map +1 -0
- package/dist/server/services/index.js +36 -0
- package/dist/server/services/index.js.map +1 -0
- package/dist/server/services/index.mjs +34 -0
- package/dist/server/services/index.mjs.map +1 -0
- package/dist/server/services/jwt.js +50 -0
- package/dist/server/services/jwt.js.map +1 -0
- package/dist/server/services/jwt.mjs +48 -0
- package/dist/server/services/jwt.mjs.map +1 -0
- package/dist/server/services/permission.js +52 -0
- package/dist/server/services/permission.js.map +1 -0
- package/dist/server/services/permission.mjs +50 -0
- package/dist/server/services/permission.mjs.map +1 -0
- package/dist/server/services/providers-registry.js +555 -0
- package/dist/server/services/providers-registry.js.map +1 -0
- package/dist/server/services/providers-registry.mjs +553 -0
- package/dist/server/services/providers-registry.mjs.map +1 -0
- package/dist/server/services/providers.js +111 -0
- package/dist/server/services/providers.js.map +1 -0
- package/dist/server/services/providers.mjs +109 -0
- package/dist/server/services/providers.mjs.map +1 -0
- package/dist/server/services/role.js +186 -0
- package/dist/server/services/role.js.map +1 -0
- package/dist/server/services/role.mjs +184 -0
- package/dist/server/services/role.mjs.map +1 -0
- package/dist/server/services/user.js +179 -0
- package/dist/server/services/user.js.map +1 -0
- package/dist/server/services/user.mjs +177 -0
- package/dist/server/services/user.mjs.map +1 -0
- package/dist/server/services/users-permissions.js +247 -0
- package/dist/server/services/users-permissions.js.map +1 -0
- package/dist/server/services/users-permissions.mjs +245 -0
- package/dist/server/services/users-permissions.mjs.map +1 -0
- package/dist/server/strategies/users-permissions.js +114 -0
- package/dist/server/strategies/users-permissions.js.map +1 -0
- package/dist/server/strategies/users-permissions.mjs +112 -0
- package/dist/server/strategies/users-permissions.mjs.map +1 -0
- package/dist/server/utils/index.js +22 -0
- package/dist/server/utils/index.js.map +1 -0
- package/dist/server/utils/index.mjs +20 -0
- package/dist/server/utils/index.mjs.map +1 -0
- package/dist/server/utils/sanitize/index.js +21 -0
- package/dist/server/utils/sanitize/index.js.map +1 -0
- package/dist/server/utils/sanitize/index.mjs +19 -0
- package/dist/server/utils/sanitize/index.mjs.map +1 -0
- package/dist/server/utils/sanitize/sanitizers.js +32 -0
- package/dist/server/utils/sanitize/sanitizers.js.map +1 -0
- package/dist/server/utils/sanitize/sanitizers.mjs +30 -0
- package/dist/server/utils/sanitize/sanitizers.mjs.map +1 -0
- package/dist/server/utils/sanitize/visitors/index.js +17 -0
- package/dist/server/utils/sanitize/visitors/index.js.map +1 -0
- package/dist/server/utils/sanitize/visitors/index.mjs +15 -0
- package/dist/server/utils/sanitize/visitors/index.mjs.map +1 -0
- package/dist/server/utils/sanitize/visitors/remove-user-relation-from-role-entities.js +17 -0
- package/dist/server/utils/sanitize/visitors/remove-user-relation-from-role-entities.js.map +1 -0
- package/dist/server/utils/sanitize/visitors/remove-user-relation-from-role-entities.mjs +15 -0
- package/dist/server/utils/sanitize/visitors/remove-user-relation-from-role-entities.mjs.map +1 -0
- package/package.json +3 -3
- package/rollup.config.mjs +15 -48
- package/dist/admin/chunks/ar-BJwjobLp.js.map +0 -1
- package/dist/admin/chunks/ar-G6bUGuUb.mjs.map +0 -1
- package/dist/admin/chunks/cs-Bu59JqhG.mjs.map +0 -1
- package/dist/admin/chunks/cs-uS_SIEo8.js.map +0 -1
- package/dist/admin/chunks/de-7MVMrqqI.js.map +0 -1
- package/dist/admin/chunks/de-B81A69_5.mjs.map +0 -1
- package/dist/admin/chunks/dk-BaelzvBE.mjs.map +0 -1
- package/dist/admin/chunks/dk-DwCLGmy9.js.map +0 -1
- package/dist/admin/chunks/en-BhgCBe7M.mjs.map +0 -1
- package/dist/admin/chunks/en-DwQjkHi_.js.map +0 -1
- package/dist/admin/chunks/es-B0wXmvRj.mjs.map +0 -1
- package/dist/admin/chunks/es-BOJOedG5.js.map +0 -1
- package/dist/admin/chunks/fr-BDNWCNs0.js.map +0 -1
- package/dist/admin/chunks/fr-CGYvGUXg.mjs.map +0 -1
- package/dist/admin/chunks/id-CNzbwFjA.mjs.map +0 -1
- package/dist/admin/chunks/id-UqUPykHZ.js.map +0 -1
- package/dist/admin/chunks/index--_o6btSC.js +0 -471
- package/dist/admin/chunks/index--_o6btSC.js.map +0 -1
- package/dist/admin/chunks/index-BBjNJt_G.mjs +0 -448
- package/dist/admin/chunks/index-BBjNJt_G.mjs.map +0 -1
- package/dist/admin/chunks/index-BgAfLcWs.mjs +0 -1516
- package/dist/admin/chunks/index-BgAfLcWs.mjs.map +0 -1
- package/dist/admin/chunks/index-CHTUC0LM.mjs +0 -718
- package/dist/admin/chunks/index-CHTUC0LM.mjs.map +0 -1
- package/dist/admin/chunks/index-CY5JZ38k.mjs +0 -213
- package/dist/admin/chunks/index-CY5JZ38k.mjs.map +0 -1
- package/dist/admin/chunks/index-Cu1VuLS3.js +0 -741
- package/dist/admin/chunks/index-Cu1VuLS3.js.map +0 -1
- package/dist/admin/chunks/index-Cy-tPfRk.mjs.map +0 -1
- package/dist/admin/chunks/index-DD-Z6c1S.js +0 -217
- package/dist/admin/chunks/index-DD-Z6c1S.js.map +0 -1
- package/dist/admin/chunks/index-DFnYIqrB.js.map +0 -1
- package/dist/admin/chunks/index-DvubCYNe.js +0 -1537
- package/dist/admin/chunks/index-DvubCYNe.js.map +0 -1
- package/dist/admin/chunks/it-B2H2foTf.mjs.map +0 -1
- package/dist/admin/chunks/it-D5VuyoLU.js.map +0 -1
- package/dist/admin/chunks/ja-C0z9d7L9.mjs.map +0 -1
- package/dist/admin/chunks/ja-MpqVsCgs.js.map +0 -1
- package/dist/admin/chunks/ko-Bm-grPSc.js.map +0 -1
- package/dist/admin/chunks/ko-CzUgzpeS.mjs.map +0 -1
- package/dist/admin/chunks/ms-CCacxjim.mjs.map +0 -1
- package/dist/admin/chunks/ms-D7eyBD5H.js.map +0 -1
- package/dist/admin/chunks/nl-BIOwAQtI.js.map +0 -1
- package/dist/admin/chunks/nl-DDC3nZW-.mjs.map +0 -1
- package/dist/admin/chunks/pl-D5BeNrg_.js.map +0 -1
- package/dist/admin/chunks/pl-XkS463rN.mjs.map +0 -1
- package/dist/admin/chunks/pt-BR-8cC7z8Km.mjs.map +0 -1
- package/dist/admin/chunks/pt-BR-DxPBzQGx.js.map +0 -1
- package/dist/admin/chunks/pt-DQpEvio8.mjs.map +0 -1
- package/dist/admin/chunks/pt-kkCwzNvH.js.map +0 -1
- package/dist/admin/chunks/ru-BQ0gHmp3.js.map +0 -1
- package/dist/admin/chunks/ru-nzL_7Mhg.mjs.map +0 -1
- package/dist/admin/chunks/sk-Ddxc_tZA.mjs.map +0 -1
- package/dist/admin/chunks/sk-nVwAPdYC.js.map +0 -1
- package/dist/admin/chunks/sv-BDfk2A-F.js.map +0 -1
- package/dist/admin/chunks/sv-By3RYpMG.mjs.map +0 -1
- package/dist/admin/chunks/th-BtTtpHe2.js.map +0 -1
- package/dist/admin/chunks/th-COl50vqb.mjs.map +0 -1
- package/dist/admin/chunks/tr-80SJU6jg.mjs.map +0 -1
- package/dist/admin/chunks/tr-Di-Nf7cT.js.map +0 -1
- package/dist/admin/chunks/uk-DnrIlPwG.mjs.map +0 -1
- package/dist/admin/chunks/uk-r5zXTAS7.js.map +0 -1
- package/dist/admin/chunks/vi-69AF03Iv.mjs.map +0 -1
- package/dist/admin/chunks/vi-D9cCsHsU.js.map +0 -1
- package/dist/admin/chunks/zh-BzSkqxo-.mjs.map +0 -1
- package/dist/admin/chunks/zh-BzWgJEzz.js.map +0 -1
- package/dist/admin/chunks/zh-Hans-CKqQbpsM.js.map +0 -1
- package/dist/admin/chunks/zh-Hans-DmDcSsp7.mjs.map +0 -1
|
@@ -0,0 +1,553 @@
|
|
|
1
|
+
import require$$0 from 'assert';
|
|
2
|
+
import require$$1 from 'jsonwebtoken';
|
|
3
|
+
import require$$2 from 'url-join';
|
|
4
|
+
import require$$3 from 'jwk-to-pem';
|
|
5
|
+
import require$$4 from 'purest';
|
|
6
|
+
|
|
7
|
+
var providersRegistry;
|
|
8
|
+
var hasRequiredProvidersRegistry;
|
|
9
|
+
function requireProvidersRegistry() {
|
|
10
|
+
if (hasRequiredProvidersRegistry) return providersRegistry;
|
|
11
|
+
hasRequiredProvidersRegistry = 1;
|
|
12
|
+
const { strict: assert } = require$$0;
|
|
13
|
+
const jwt = require$$1;
|
|
14
|
+
const urljoin = require$$2;
|
|
15
|
+
const jwkToPem = require$$3;
|
|
16
|
+
const getCognitoPayload = async ({ idToken, jwksUrl, purest })=>{
|
|
17
|
+
const { header: { kid }, payload } = jwt.decode(idToken, {
|
|
18
|
+
complete: true
|
|
19
|
+
});
|
|
20
|
+
if (!payload || !kid) {
|
|
21
|
+
throw new Error('The provided token is not valid');
|
|
22
|
+
}
|
|
23
|
+
const config = {
|
|
24
|
+
cognito: {
|
|
25
|
+
discovery: {
|
|
26
|
+
origin: jwksUrl.origin,
|
|
27
|
+
path: jwksUrl.pathname
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
try {
|
|
32
|
+
const cognito = purest({
|
|
33
|
+
provider: 'cognito',
|
|
34
|
+
config
|
|
35
|
+
});
|
|
36
|
+
// get the JSON Web Key (JWK) for the user pool
|
|
37
|
+
const { body: jwk } = await cognito('discovery').request();
|
|
38
|
+
// Get the key with the same Key ID as the provided token
|
|
39
|
+
const key = jwk.keys.find(({ kid: jwkKid })=>jwkKid === kid);
|
|
40
|
+
const pem = jwkToPem(key);
|
|
41
|
+
// https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-using-tokens-verifying-a-jwt.html
|
|
42
|
+
const decodedToken = await new Promise((resolve, reject)=>{
|
|
43
|
+
jwt.verify(idToken, pem, {
|
|
44
|
+
algorithms: [
|
|
45
|
+
'RS256'
|
|
46
|
+
]
|
|
47
|
+
}, (err, decodedToken)=>{
|
|
48
|
+
if (err) {
|
|
49
|
+
reject();
|
|
50
|
+
}
|
|
51
|
+
resolve(decodedToken);
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
return decodedToken;
|
|
55
|
+
} catch (err) {
|
|
56
|
+
throw new Error('There was an error verifying the token');
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
const initProviders = ({ baseURL, purest })=>({
|
|
60
|
+
email: {
|
|
61
|
+
enabled: true,
|
|
62
|
+
icon: 'envelope',
|
|
63
|
+
grantConfig: {}
|
|
64
|
+
},
|
|
65
|
+
discord: {
|
|
66
|
+
enabled: false,
|
|
67
|
+
icon: 'discord',
|
|
68
|
+
grantConfig: {
|
|
69
|
+
key: '',
|
|
70
|
+
secret: '',
|
|
71
|
+
callbackUrl: `${baseURL}/discord/callback`,
|
|
72
|
+
scope: [
|
|
73
|
+
'identify',
|
|
74
|
+
'email'
|
|
75
|
+
]
|
|
76
|
+
},
|
|
77
|
+
async authCallback ({ accessToken }) {
|
|
78
|
+
const discord = purest({
|
|
79
|
+
provider: 'discord'
|
|
80
|
+
});
|
|
81
|
+
return discord.get('users/@me').auth(accessToken).request().then(({ body })=>{
|
|
82
|
+
// Combine username and discriminator (if discriminator exists and not equal to 0)
|
|
83
|
+
const username = body.discriminator && body.discriminator !== '0' ? `${body.username}#${body.discriminator}` : body.username;
|
|
84
|
+
return {
|
|
85
|
+
username,
|
|
86
|
+
email: body.email
|
|
87
|
+
};
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
},
|
|
91
|
+
facebook: {
|
|
92
|
+
enabled: false,
|
|
93
|
+
icon: 'facebook-square',
|
|
94
|
+
grantConfig: {
|
|
95
|
+
key: '',
|
|
96
|
+
secret: '',
|
|
97
|
+
callbackUrl: `${baseURL}/facebook/callback`,
|
|
98
|
+
scope: [
|
|
99
|
+
'email'
|
|
100
|
+
]
|
|
101
|
+
},
|
|
102
|
+
async authCallback ({ accessToken }) {
|
|
103
|
+
const facebook = purest({
|
|
104
|
+
provider: 'facebook'
|
|
105
|
+
});
|
|
106
|
+
return facebook.get('me').auth(accessToken).qs({
|
|
107
|
+
fields: 'name,email'
|
|
108
|
+
}).request().then(({ body })=>({
|
|
109
|
+
username: body.name,
|
|
110
|
+
email: body.email
|
|
111
|
+
}));
|
|
112
|
+
}
|
|
113
|
+
},
|
|
114
|
+
google: {
|
|
115
|
+
enabled: false,
|
|
116
|
+
icon: 'google',
|
|
117
|
+
grantConfig: {
|
|
118
|
+
key: '',
|
|
119
|
+
secret: '',
|
|
120
|
+
callbackUrl: `${baseURL}/google/callback`,
|
|
121
|
+
scope: [
|
|
122
|
+
'email'
|
|
123
|
+
]
|
|
124
|
+
},
|
|
125
|
+
async authCallback ({ accessToken }) {
|
|
126
|
+
const google = purest({
|
|
127
|
+
provider: 'google'
|
|
128
|
+
});
|
|
129
|
+
return google.query('oauth').get('tokeninfo').qs({
|
|
130
|
+
accessToken
|
|
131
|
+
}).request().then(({ body })=>({
|
|
132
|
+
username: body.email.split('@')[0],
|
|
133
|
+
email: body.email
|
|
134
|
+
}));
|
|
135
|
+
}
|
|
136
|
+
},
|
|
137
|
+
github: {
|
|
138
|
+
enabled: false,
|
|
139
|
+
icon: 'github',
|
|
140
|
+
grantConfig: {
|
|
141
|
+
key: '',
|
|
142
|
+
secret: '',
|
|
143
|
+
callbackUrl: `${baseURL}/github/callback`,
|
|
144
|
+
scope: [
|
|
145
|
+
'user',
|
|
146
|
+
'user:email'
|
|
147
|
+
]
|
|
148
|
+
},
|
|
149
|
+
async authCallback ({ accessToken }) {
|
|
150
|
+
const github = purest({
|
|
151
|
+
provider: 'github',
|
|
152
|
+
defaults: {
|
|
153
|
+
headers: {
|
|
154
|
+
'user-agent': 'strapi'
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
});
|
|
158
|
+
const { body: userBody } = await github.get('user').auth(accessToken).request();
|
|
159
|
+
// This is the public email on the github profile
|
|
160
|
+
if (userBody.email) {
|
|
161
|
+
return {
|
|
162
|
+
username: userBody.login,
|
|
163
|
+
email: userBody.email
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
// Get the email with Github's user/emails API
|
|
167
|
+
const { body: emailBody } = await github.get('user/emails').auth(accessToken).request();
|
|
168
|
+
return {
|
|
169
|
+
username: userBody.login,
|
|
170
|
+
email: Array.isArray(emailBody) ? emailBody.find((email)=>email.primary === true).email : null
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
},
|
|
174
|
+
microsoft: {
|
|
175
|
+
enabled: false,
|
|
176
|
+
icon: 'windows',
|
|
177
|
+
grantConfig: {
|
|
178
|
+
key: '',
|
|
179
|
+
secret: '',
|
|
180
|
+
callbackUrl: `${baseURL}/microsoft/callback`,
|
|
181
|
+
scope: [
|
|
182
|
+
'user.read'
|
|
183
|
+
]
|
|
184
|
+
},
|
|
185
|
+
async authCallback ({ accessToken }) {
|
|
186
|
+
const microsoft = purest({
|
|
187
|
+
provider: 'microsoft'
|
|
188
|
+
});
|
|
189
|
+
return microsoft.get('me').auth(accessToken).request().then(({ body })=>({
|
|
190
|
+
username: body.userPrincipalName,
|
|
191
|
+
email: body.userPrincipalName
|
|
192
|
+
}));
|
|
193
|
+
}
|
|
194
|
+
},
|
|
195
|
+
twitter: {
|
|
196
|
+
enabled: false,
|
|
197
|
+
icon: 'twitter',
|
|
198
|
+
grantConfig: {
|
|
199
|
+
key: '',
|
|
200
|
+
secret: '',
|
|
201
|
+
callbackUrl: `${baseURL}/twitter/callback`
|
|
202
|
+
},
|
|
203
|
+
async authCallback ({ accessToken, query, providers }) {
|
|
204
|
+
const twitter = purest({
|
|
205
|
+
provider: 'twitter',
|
|
206
|
+
defaults: {
|
|
207
|
+
oauth: {
|
|
208
|
+
consumer_key: providers.twitter.key,
|
|
209
|
+
consumer_secret: providers.twitter.secret
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
});
|
|
213
|
+
return twitter.get('account/verify_credentials').auth(accessToken, query.access_secret).qs({
|
|
214
|
+
screen_name: query['raw[screen_name]'],
|
|
215
|
+
include_email: 'true'
|
|
216
|
+
}).request().then(({ body })=>({
|
|
217
|
+
username: body.screen_name,
|
|
218
|
+
email: body.email
|
|
219
|
+
}));
|
|
220
|
+
}
|
|
221
|
+
},
|
|
222
|
+
instagram: {
|
|
223
|
+
enabled: false,
|
|
224
|
+
icon: 'instagram',
|
|
225
|
+
grantConfig: {
|
|
226
|
+
key: '',
|
|
227
|
+
secret: '',
|
|
228
|
+
callbackUrl: `${baseURL}/instagram/callback`,
|
|
229
|
+
scope: [
|
|
230
|
+
'user_profile'
|
|
231
|
+
]
|
|
232
|
+
},
|
|
233
|
+
async authCallback ({ accessToken }) {
|
|
234
|
+
const instagram = purest({
|
|
235
|
+
provider: 'instagram'
|
|
236
|
+
});
|
|
237
|
+
return instagram.get('me').auth(accessToken).qs({
|
|
238
|
+
fields: 'id,username'
|
|
239
|
+
}).request().then(({ body })=>({
|
|
240
|
+
username: body.username,
|
|
241
|
+
email: `${body.username}@strapi.io`
|
|
242
|
+
}));
|
|
243
|
+
}
|
|
244
|
+
},
|
|
245
|
+
vk: {
|
|
246
|
+
enabled: false,
|
|
247
|
+
icon: 'vk',
|
|
248
|
+
grantConfig: {
|
|
249
|
+
key: '',
|
|
250
|
+
secret: '',
|
|
251
|
+
callbackUrl: `${baseURL}/vk/callback`,
|
|
252
|
+
scope: [
|
|
253
|
+
'email'
|
|
254
|
+
]
|
|
255
|
+
},
|
|
256
|
+
async authCallback ({ accessToken, query }) {
|
|
257
|
+
const vk = purest({
|
|
258
|
+
provider: 'vk'
|
|
259
|
+
});
|
|
260
|
+
return vk.get('users').auth(accessToken).qs({
|
|
261
|
+
id: query.raw.user_id,
|
|
262
|
+
v: '5.122'
|
|
263
|
+
}).request().then(({ body })=>({
|
|
264
|
+
username: `${body.response[0].last_name} ${body.response[0].first_name}`,
|
|
265
|
+
email: query.raw.email
|
|
266
|
+
}));
|
|
267
|
+
}
|
|
268
|
+
},
|
|
269
|
+
twitch: {
|
|
270
|
+
enabled: false,
|
|
271
|
+
icon: 'twitch',
|
|
272
|
+
grantConfig: {
|
|
273
|
+
key: '',
|
|
274
|
+
secret: '',
|
|
275
|
+
callbackUrl: `${baseURL}/twitch/callback`,
|
|
276
|
+
scope: [
|
|
277
|
+
'user:read:email'
|
|
278
|
+
]
|
|
279
|
+
},
|
|
280
|
+
async authCallback ({ accessToken, providers }) {
|
|
281
|
+
const twitch = purest({
|
|
282
|
+
provider: 'twitch',
|
|
283
|
+
config: {
|
|
284
|
+
twitch: {
|
|
285
|
+
default: {
|
|
286
|
+
origin: 'https://api.twitch.tv',
|
|
287
|
+
path: 'helix/{path}',
|
|
288
|
+
headers: {
|
|
289
|
+
Authorization: 'Bearer {auth}',
|
|
290
|
+
'Client-Id': '{auth}'
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
});
|
|
296
|
+
return twitch.get('users').auth(accessToken, providers.twitch.key).request().then(({ body })=>({
|
|
297
|
+
username: body.data[0].login,
|
|
298
|
+
email: body.data[0].email
|
|
299
|
+
}));
|
|
300
|
+
}
|
|
301
|
+
},
|
|
302
|
+
linkedin: {
|
|
303
|
+
enabled: false,
|
|
304
|
+
icon: 'linkedin',
|
|
305
|
+
grantConfig: {
|
|
306
|
+
key: '',
|
|
307
|
+
secret: '',
|
|
308
|
+
callbackUrl: `${baseURL}/linkedin/callback`,
|
|
309
|
+
scope: [
|
|
310
|
+
'r_liteprofile',
|
|
311
|
+
'r_emailaddress'
|
|
312
|
+
]
|
|
313
|
+
},
|
|
314
|
+
async authCallback ({ accessToken }) {
|
|
315
|
+
const linkedIn = purest({
|
|
316
|
+
provider: 'linkedin'
|
|
317
|
+
});
|
|
318
|
+
const { body: { localizedFirstName } } = await linkedIn.get('me').auth(accessToken).request();
|
|
319
|
+
const { body: { elements } } = await linkedIn.get('emailAddress?q=members&projection=(elements*(handle~))').auth(accessToken).request();
|
|
320
|
+
const email = elements[0]['handle~'];
|
|
321
|
+
return {
|
|
322
|
+
username: localizedFirstName,
|
|
323
|
+
email: email.emailAddress
|
|
324
|
+
};
|
|
325
|
+
}
|
|
326
|
+
},
|
|
327
|
+
cognito: {
|
|
328
|
+
enabled: false,
|
|
329
|
+
icon: 'aws',
|
|
330
|
+
grantConfig: {
|
|
331
|
+
key: '',
|
|
332
|
+
secret: '',
|
|
333
|
+
subdomain: 'my.subdomain.com',
|
|
334
|
+
callback: `${baseURL}/cognito/callback`,
|
|
335
|
+
scope: [
|
|
336
|
+
'email',
|
|
337
|
+
'openid',
|
|
338
|
+
'profile'
|
|
339
|
+
]
|
|
340
|
+
},
|
|
341
|
+
async authCallback ({ query, providers }) {
|
|
342
|
+
const jwksUrl = new URL(providers.cognito.jwksurl);
|
|
343
|
+
const idToken = query.id_token;
|
|
344
|
+
const tokenPayload = await getCognitoPayload({
|
|
345
|
+
idToken,
|
|
346
|
+
jwksUrl,
|
|
347
|
+
purest
|
|
348
|
+
});
|
|
349
|
+
return {
|
|
350
|
+
username: tokenPayload['cognito:username'],
|
|
351
|
+
email: tokenPayload.email
|
|
352
|
+
};
|
|
353
|
+
}
|
|
354
|
+
},
|
|
355
|
+
reddit: {
|
|
356
|
+
enabled: false,
|
|
357
|
+
icon: 'reddit',
|
|
358
|
+
grantConfig: {
|
|
359
|
+
key: '',
|
|
360
|
+
secret: '',
|
|
361
|
+
callback: `${baseURL}/reddit/callback`,
|
|
362
|
+
scope: [
|
|
363
|
+
'identity'
|
|
364
|
+
]
|
|
365
|
+
},
|
|
366
|
+
async authCallback ({ accessToken }) {
|
|
367
|
+
const reddit = purest({
|
|
368
|
+
provider: 'reddit',
|
|
369
|
+
config: {
|
|
370
|
+
reddit: {
|
|
371
|
+
default: {
|
|
372
|
+
origin: 'https://oauth.reddit.com',
|
|
373
|
+
path: 'api/{version}/{path}',
|
|
374
|
+
version: 'v1',
|
|
375
|
+
headers: {
|
|
376
|
+
Authorization: 'Bearer {auth}',
|
|
377
|
+
'user-agent': 'strapi'
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
});
|
|
383
|
+
return reddit.get('me').auth(accessToken).request().then(({ body })=>({
|
|
384
|
+
username: body.name,
|
|
385
|
+
email: `${body.name}@strapi.io`
|
|
386
|
+
}));
|
|
387
|
+
}
|
|
388
|
+
},
|
|
389
|
+
auth0: {
|
|
390
|
+
enabled: false,
|
|
391
|
+
icon: '',
|
|
392
|
+
grantConfig: {
|
|
393
|
+
key: '',
|
|
394
|
+
secret: '',
|
|
395
|
+
subdomain: 'my-tenant.eu',
|
|
396
|
+
callback: `${baseURL}/auth0/callback`,
|
|
397
|
+
scope: [
|
|
398
|
+
'openid',
|
|
399
|
+
'email',
|
|
400
|
+
'profile'
|
|
401
|
+
]
|
|
402
|
+
},
|
|
403
|
+
async authCallback ({ accessToken, providers }) {
|
|
404
|
+
const auth0 = purest({
|
|
405
|
+
provider: 'auth0'
|
|
406
|
+
});
|
|
407
|
+
return auth0.get('userinfo').subdomain(providers.auth0.subdomain).auth(accessToken).request().then(({ body })=>{
|
|
408
|
+
const username = body.username || body.nickname || body.name || body.email.split('@')[0];
|
|
409
|
+
const email = body.email || `${username.replace(/\s+/g, '.')}@strapi.io`;
|
|
410
|
+
return {
|
|
411
|
+
username,
|
|
412
|
+
email
|
|
413
|
+
};
|
|
414
|
+
});
|
|
415
|
+
}
|
|
416
|
+
},
|
|
417
|
+
cas: {
|
|
418
|
+
enabled: false,
|
|
419
|
+
icon: 'book',
|
|
420
|
+
grantConfig: {
|
|
421
|
+
key: '',
|
|
422
|
+
secret: '',
|
|
423
|
+
callback: `${baseURL}/cas/callback`,
|
|
424
|
+
scope: [
|
|
425
|
+
'openid email'
|
|
426
|
+
],
|
|
427
|
+
subdomain: 'my.subdomain.com/cas'
|
|
428
|
+
},
|
|
429
|
+
async authCallback ({ accessToken, providers }) {
|
|
430
|
+
const cas = purest({
|
|
431
|
+
provider: 'cas'
|
|
432
|
+
});
|
|
433
|
+
return cas.get('oidc/profile').subdomain(providers.cas.subdomain).auth(accessToken).request().then(({ body })=>{
|
|
434
|
+
// CAS attribute may be in body.attributes or "FLAT", depending on CAS config
|
|
435
|
+
const username = body.attributes ? body.attributes.strapiusername || body.id || body.sub : body.strapiusername || body.id || body.sub;
|
|
436
|
+
const email = body.attributes ? body.attributes.strapiemail || body.attributes.email : body.strapiemail || body.email;
|
|
437
|
+
if (!username || !email) {
|
|
438
|
+
strapi.log.warn(`CAS Response Body did not contain required attributes: ${JSON.stringify(body)}`);
|
|
439
|
+
}
|
|
440
|
+
return {
|
|
441
|
+
username,
|
|
442
|
+
email
|
|
443
|
+
};
|
|
444
|
+
});
|
|
445
|
+
}
|
|
446
|
+
},
|
|
447
|
+
patreon: {
|
|
448
|
+
enabled: false,
|
|
449
|
+
icon: '',
|
|
450
|
+
grantConfig: {
|
|
451
|
+
key: '',
|
|
452
|
+
secret: '',
|
|
453
|
+
callback: `${baseURL}/patreon/callback`,
|
|
454
|
+
scope: [
|
|
455
|
+
'identity',
|
|
456
|
+
'identity[email]'
|
|
457
|
+
]
|
|
458
|
+
},
|
|
459
|
+
async authCallback ({ accessToken }) {
|
|
460
|
+
const patreon = purest({
|
|
461
|
+
provider: 'patreon',
|
|
462
|
+
config: {
|
|
463
|
+
patreon: {
|
|
464
|
+
default: {
|
|
465
|
+
origin: 'https://www.patreon.com',
|
|
466
|
+
path: 'api/oauth2/{path}',
|
|
467
|
+
headers: {
|
|
468
|
+
authorization: 'Bearer {auth}'
|
|
469
|
+
}
|
|
470
|
+
}
|
|
471
|
+
}
|
|
472
|
+
}
|
|
473
|
+
});
|
|
474
|
+
return patreon.get('v2/identity').auth(accessToken).qs(new URLSearchParams({
|
|
475
|
+
'fields[user]': 'full_name,email'
|
|
476
|
+
}).toString()).request().then(({ body })=>{
|
|
477
|
+
const patreonData = body.data.attributes;
|
|
478
|
+
return {
|
|
479
|
+
username: patreonData.full_name,
|
|
480
|
+
email: patreonData.email
|
|
481
|
+
};
|
|
482
|
+
});
|
|
483
|
+
}
|
|
484
|
+
},
|
|
485
|
+
keycloak: {
|
|
486
|
+
enabled: false,
|
|
487
|
+
icon: '',
|
|
488
|
+
grantConfig: {
|
|
489
|
+
key: '',
|
|
490
|
+
secret: '',
|
|
491
|
+
subdomain: 'myKeycloakProvider.com/realms/myrealm',
|
|
492
|
+
callback: `${baseURL}/keycloak/callback`,
|
|
493
|
+
scope: [
|
|
494
|
+
'openid',
|
|
495
|
+
'email',
|
|
496
|
+
'profile'
|
|
497
|
+
]
|
|
498
|
+
},
|
|
499
|
+
async authCallback ({ accessToken, providers }) {
|
|
500
|
+
const keycloak = purest({
|
|
501
|
+
provider: 'keycloak'
|
|
502
|
+
});
|
|
503
|
+
return keycloak.subdomain(providers.keycloak.subdomain).get('protocol/openid-connect/userinfo').auth(accessToken).request().then(({ body })=>{
|
|
504
|
+
return {
|
|
505
|
+
username: body.preferred_username,
|
|
506
|
+
email: body.email
|
|
507
|
+
};
|
|
508
|
+
});
|
|
509
|
+
}
|
|
510
|
+
}
|
|
511
|
+
});
|
|
512
|
+
providersRegistry = ()=>{
|
|
513
|
+
const purest = require$$4;
|
|
514
|
+
const apiPrefix = strapi.config.get('api.rest.prefix');
|
|
515
|
+
const baseURL = urljoin(strapi.config.server.url, apiPrefix, 'auth');
|
|
516
|
+
const authProviders = initProviders({
|
|
517
|
+
baseURL,
|
|
518
|
+
purest
|
|
519
|
+
});
|
|
520
|
+
/**
|
|
521
|
+
* @public
|
|
522
|
+
*/ return {
|
|
523
|
+
getAll () {
|
|
524
|
+
return authProviders;
|
|
525
|
+
},
|
|
526
|
+
get (name) {
|
|
527
|
+
return authProviders[name];
|
|
528
|
+
},
|
|
529
|
+
add (name, config) {
|
|
530
|
+
authProviders[name] = config;
|
|
531
|
+
},
|
|
532
|
+
remove (name) {
|
|
533
|
+
delete authProviders[name];
|
|
534
|
+
},
|
|
535
|
+
/**
|
|
536
|
+
* @internal
|
|
537
|
+
*/ async run ({ provider, accessToken, query, providers }) {
|
|
538
|
+
const authProvider = authProviders[provider];
|
|
539
|
+
assert(authProvider, 'Unknown auth provider');
|
|
540
|
+
return authProvider.authCallback({
|
|
541
|
+
accessToken,
|
|
542
|
+
query,
|
|
543
|
+
providers,
|
|
544
|
+
purest
|
|
545
|
+
});
|
|
546
|
+
}
|
|
547
|
+
};
|
|
548
|
+
};
|
|
549
|
+
return providersRegistry;
|
|
550
|
+
}
|
|
551
|
+
|
|
552
|
+
export { requireProvidersRegistry as __require };
|
|
553
|
+
//# sourceMappingURL=providers-registry.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"providers-registry.mjs","sources":["../../../server/services/providers-registry.js"],"sourcesContent":["'use strict';\n\nconst { strict: assert } = require('assert');\nconst jwt = require('jsonwebtoken');\nconst urljoin = require('url-join');\nconst jwkToPem = require('jwk-to-pem');\n\nconst getCognitoPayload = async ({ idToken, jwksUrl, purest }) => {\n const {\n header: { kid },\n payload,\n } = jwt.decode(idToken, { complete: true });\n\n if (!payload || !kid) {\n throw new Error('The provided token is not valid');\n }\n\n const config = {\n cognito: {\n discovery: {\n origin: jwksUrl.origin,\n path: jwksUrl.pathname,\n },\n },\n };\n try {\n const cognito = purest({ provider: 'cognito', config });\n // get the JSON Web Key (JWK) for the user pool\n const { body: jwk } = await cognito('discovery').request();\n // Get the key with the same Key ID as the provided token\n const key = jwk.keys.find(({ kid: jwkKid }) => jwkKid === kid);\n const pem = jwkToPem(key);\n\n // https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-using-tokens-verifying-a-jwt.html\n const decodedToken = await new Promise((resolve, reject) => {\n jwt.verify(idToken, pem, { algorithms: ['RS256'] }, (err, decodedToken) => {\n if (err) {\n reject();\n }\n resolve(decodedToken);\n });\n });\n return decodedToken;\n } catch (err) {\n throw new Error('There was an error verifying the token');\n }\n};\n\nconst initProviders = ({ baseURL, purest }) => ({\n email: {\n enabled: true,\n icon: 'envelope',\n grantConfig: {},\n },\n discord: {\n enabled: false,\n icon: 'discord',\n grantConfig: {\n key: '',\n secret: '',\n callbackUrl: `${baseURL}/discord/callback`,\n scope: ['identify', 'email'],\n },\n async authCallback({ accessToken }) {\n const discord = purest({ provider: 'discord' });\n\n return discord\n .get('users/@me')\n .auth(accessToken)\n .request()\n .then(({ body }) => {\n // Combine username and discriminator (if discriminator exists and not equal to 0)\n const username =\n body.discriminator && body.discriminator !== '0'\n ? `${body.username}#${body.discriminator}`\n : body.username;\n return {\n username,\n email: body.email,\n };\n });\n },\n },\n facebook: {\n enabled: false,\n icon: 'facebook-square',\n grantConfig: {\n key: '',\n secret: '',\n callbackUrl: `${baseURL}/facebook/callback`,\n scope: ['email'],\n },\n async authCallback({ accessToken }) {\n const facebook = purest({ provider: 'facebook' });\n\n return facebook\n .get('me')\n .auth(accessToken)\n .qs({ fields: 'name,email' })\n .request()\n .then(({ body }) => ({\n username: body.name,\n email: body.email,\n }));\n },\n },\n google: {\n enabled: false,\n icon: 'google',\n grantConfig: {\n key: '',\n secret: '',\n callbackUrl: `${baseURL}/google/callback`,\n scope: ['email'],\n },\n async authCallback({ accessToken }) {\n const google = purest({ provider: 'google' });\n\n return google\n .query('oauth')\n .get('tokeninfo')\n .qs({ accessToken })\n .request()\n .then(({ body }) => ({\n username: body.email.split('@')[0],\n email: body.email,\n }));\n },\n },\n github: {\n enabled: false,\n icon: 'github',\n grantConfig: {\n key: '',\n secret: '',\n callbackUrl: `${baseURL}/github/callback`,\n scope: ['user', 'user:email'],\n },\n async authCallback({ accessToken }) {\n const github = purest({\n provider: 'github',\n defaults: {\n headers: {\n 'user-agent': 'strapi',\n },\n },\n });\n\n const { body: userBody } = await github.get('user').auth(accessToken).request();\n\n // This is the public email on the github profile\n if (userBody.email) {\n return {\n username: userBody.login,\n email: userBody.email,\n };\n }\n // Get the email with Github's user/emails API\n const { body: emailBody } = await github.get('user/emails').auth(accessToken).request();\n\n return {\n username: userBody.login,\n email: Array.isArray(emailBody)\n ? emailBody.find((email) => email.primary === true).email\n : null,\n };\n },\n },\n microsoft: {\n enabled: false,\n icon: 'windows',\n grantConfig: {\n key: '',\n secret: '',\n callbackUrl: `${baseURL}/microsoft/callback`,\n scope: ['user.read'],\n },\n async authCallback({ accessToken }) {\n const microsoft = purest({ provider: 'microsoft' });\n\n return microsoft\n .get('me')\n .auth(accessToken)\n .request()\n .then(({ body }) => ({\n username: body.userPrincipalName,\n email: body.userPrincipalName,\n }));\n },\n },\n\n twitter: {\n enabled: false,\n icon: 'twitter',\n grantConfig: {\n key: '',\n secret: '',\n callbackUrl: `${baseURL}/twitter/callback`,\n },\n async authCallback({ accessToken, query, providers }) {\n const twitter = purest({\n provider: 'twitter',\n defaults: {\n oauth: {\n consumer_key: providers.twitter.key,\n consumer_secret: providers.twitter.secret,\n },\n },\n });\n\n return twitter\n .get('account/verify_credentials')\n .auth(accessToken, query.access_secret)\n .qs({ screen_name: query['raw[screen_name]'], include_email: 'true' })\n .request()\n .then(({ body }) => ({\n username: body.screen_name,\n email: body.email,\n }));\n },\n },\n instagram: {\n enabled: false,\n icon: 'instagram',\n grantConfig: {\n key: '',\n secret: '',\n callbackUrl: `${baseURL}/instagram/callback`,\n scope: ['user_profile'],\n },\n async authCallback({ accessToken }) {\n const instagram = purest({ provider: 'instagram' });\n\n return instagram\n .get('me')\n .auth(accessToken)\n .qs({ fields: 'id,username' })\n .request()\n .then(({ body }) => ({\n username: body.username,\n email: `${body.username}@strapi.io`, // dummy email as Instagram does not provide user email\n }));\n },\n },\n vk: {\n enabled: false,\n icon: 'vk',\n grantConfig: {\n key: '',\n secret: '',\n callbackUrl: `${baseURL}/vk/callback`,\n scope: ['email'],\n },\n async authCallback({ accessToken, query }) {\n const vk = purest({ provider: 'vk' });\n\n return vk\n .get('users')\n .auth(accessToken)\n .qs({ id: query.raw.user_id, v: '5.122' })\n .request()\n .then(({ body }) => ({\n username: `${body.response[0].last_name} ${body.response[0].first_name}`,\n email: query.raw.email,\n }));\n },\n },\n\n twitch: {\n enabled: false,\n icon: 'twitch',\n grantConfig: {\n key: '',\n secret: '',\n callbackUrl: `${baseURL}/twitch/callback`,\n scope: ['user:read:email'],\n },\n async authCallback({ accessToken, providers }) {\n const twitch = purest({\n provider: 'twitch',\n config: {\n twitch: {\n default: {\n origin: 'https://api.twitch.tv',\n path: 'helix/{path}',\n headers: {\n Authorization: 'Bearer {auth}',\n 'Client-Id': '{auth}',\n },\n },\n },\n },\n });\n\n return twitch\n .get('users')\n .auth(accessToken, providers.twitch.key)\n .request()\n .then(({ body }) => ({\n username: body.data[0].login,\n email: body.data[0].email,\n }));\n },\n },\n\n linkedin: {\n enabled: false,\n icon: 'linkedin',\n grantConfig: {\n key: '',\n secret: '',\n callbackUrl: `${baseURL}/linkedin/callback`,\n scope: ['r_liteprofile', 'r_emailaddress'],\n },\n async authCallback({ accessToken }) {\n const linkedIn = purest({ provider: 'linkedin' });\n const {\n body: { localizedFirstName },\n } = await linkedIn.get('me').auth(accessToken).request();\n const {\n body: { elements },\n } = await linkedIn\n .get('emailAddress?q=members&projection=(elements*(handle~))')\n .auth(accessToken)\n .request();\n\n const email = elements[0]['handle~'];\n\n return {\n username: localizedFirstName,\n email: email.emailAddress,\n };\n },\n },\n\n cognito: {\n enabled: false,\n icon: 'aws',\n grantConfig: {\n key: '',\n secret: '',\n subdomain: 'my.subdomain.com',\n callback: `${baseURL}/cognito/callback`,\n scope: ['email', 'openid', 'profile'],\n },\n async authCallback({ query, providers }) {\n const jwksUrl = new URL(providers.cognito.jwksurl);\n const idToken = query.id_token;\n const tokenPayload = await getCognitoPayload({ idToken, jwksUrl, purest });\n return {\n username: tokenPayload['cognito:username'],\n email: tokenPayload.email,\n };\n },\n },\n\n reddit: {\n enabled: false,\n icon: 'reddit',\n grantConfig: {\n key: '',\n secret: '',\n callback: `${baseURL}/reddit/callback`,\n scope: ['identity'],\n },\n async authCallback({ accessToken }) {\n const reddit = purest({\n provider: 'reddit',\n config: {\n reddit: {\n default: {\n origin: 'https://oauth.reddit.com',\n path: 'api/{version}/{path}',\n version: 'v1',\n headers: {\n Authorization: 'Bearer {auth}',\n 'user-agent': 'strapi',\n },\n },\n },\n },\n });\n\n return reddit\n .get('me')\n .auth(accessToken)\n .request()\n .then(({ body }) => ({\n username: body.name,\n email: `${body.name}@strapi.io`, // dummy email as Reddit does not provide user email\n }));\n },\n },\n\n auth0: {\n enabled: false,\n icon: '',\n grantConfig: {\n key: '',\n secret: '',\n subdomain: 'my-tenant.eu',\n callback: `${baseURL}/auth0/callback`,\n scope: ['openid', 'email', 'profile'],\n },\n async authCallback({ accessToken, providers }) {\n const auth0 = purest({ provider: 'auth0' });\n\n return auth0\n .get('userinfo')\n .subdomain(providers.auth0.subdomain)\n .auth(accessToken)\n .request()\n .then(({ body }) => {\n const username = body.username || body.nickname || body.name || body.email.split('@')[0];\n const email = body.email || `${username.replace(/\\s+/g, '.')}@strapi.io`;\n\n return {\n username,\n email,\n };\n });\n },\n },\n\n cas: {\n enabled: false,\n icon: 'book',\n grantConfig: {\n key: '',\n secret: '',\n callback: `${baseURL}/cas/callback`,\n scope: ['openid email'], // scopes should be space delimited\n subdomain: 'my.subdomain.com/cas',\n },\n async authCallback({ accessToken, providers }) {\n const cas = purest({ provider: 'cas' });\n\n return cas\n .get('oidc/profile')\n .subdomain(providers.cas.subdomain)\n .auth(accessToken)\n .request()\n .then(({ body }) => {\n // CAS attribute may be in body.attributes or \"FLAT\", depending on CAS config\n const username = body.attributes\n ? body.attributes.strapiusername || body.id || body.sub\n : body.strapiusername || body.id || body.sub;\n const email = body.attributes\n ? body.attributes.strapiemail || body.attributes.email\n : body.strapiemail || body.email;\n if (!username || !email) {\n strapi.log.warn(\n `CAS Response Body did not contain required attributes: ${JSON.stringify(body)}`\n );\n }\n return {\n username,\n email,\n };\n });\n },\n },\n\n patreon: {\n enabled: false,\n icon: '',\n grantConfig: {\n key: '',\n secret: '',\n callback: `${baseURL}/patreon/callback`,\n scope: ['identity', 'identity[email]'],\n },\n async authCallback({ accessToken }) {\n const patreon = purest({\n provider: 'patreon',\n config: {\n patreon: {\n default: {\n origin: 'https://www.patreon.com',\n path: 'api/oauth2/{path}',\n headers: {\n authorization: 'Bearer {auth}',\n },\n },\n },\n },\n });\n\n return patreon\n .get('v2/identity')\n .auth(accessToken)\n .qs(new URLSearchParams({ 'fields[user]': 'full_name,email' }).toString())\n .request()\n .then(({ body }) => {\n const patreonData = body.data.attributes;\n return {\n username: patreonData.full_name,\n email: patreonData.email,\n };\n });\n },\n },\n keycloak: {\n enabled: false,\n icon: '',\n grantConfig: {\n key: '',\n secret: '',\n subdomain: 'myKeycloakProvider.com/realms/myrealm',\n callback: `${baseURL}/keycloak/callback`,\n scope: ['openid', 'email', 'profile'],\n },\n async authCallback({ accessToken, providers }) {\n const keycloak = purest({ provider: 'keycloak' });\n\n return keycloak\n .subdomain(providers.keycloak.subdomain)\n .get('protocol/openid-connect/userinfo')\n .auth(accessToken)\n .request()\n .then(({ body }) => {\n return {\n username: body.preferred_username,\n email: body.email,\n };\n });\n },\n },\n});\n\nmodule.exports = () => {\n const purest = require('purest');\n\n const apiPrefix = strapi.config.get('api.rest.prefix');\n const baseURL = urljoin(strapi.config.server.url, apiPrefix, 'auth');\n\n const authProviders = initProviders({ baseURL, purest });\n\n /**\n * @public\n */\n return {\n getAll() {\n return authProviders;\n },\n get(name) {\n return authProviders[name];\n },\n add(name, config) {\n authProviders[name] = config;\n },\n remove(name) {\n delete authProviders[name];\n },\n\n /**\n * @internal\n */\n async run({ provider, accessToken, query, providers }) {\n const authProvider = authProviders[provider];\n\n assert(authProvider, 'Unknown auth provider');\n\n return authProvider.authCallback({ accessToken, query, providers, purest });\n },\n };\n};\n"],"names":["strict","assert","require$$0","jwt","require$$1","urljoin","require$$2","jwkToPem","require$$3","getCognitoPayload","idToken","jwksUrl","purest","header","kid","payload","decode","complete","Error","config","cognito","discovery","origin","path","pathname","provider","body","jwk","request","key","keys","find","jwkKid","pem","decodedToken","Promise","resolve","reject","verify","algorithms","err","initProviders","baseURL","email","enabled","icon","grantConfig","discord","secret","callbackUrl","scope","authCallback","accessToken","get","auth","then","username","discriminator","facebook","qs","fields","name","google","query","split","github","defaults","headers","userBody","login","emailBody","Array","isArray","primary","microsoft","userPrincipalName","twitter","providers","oauth","consumer_key","consumer_secret","access_secret","screen_name","include_email","instagram","vk","id","raw","user_id","v","response","last_name","first_name","twitch","default","Authorization","data","linkedin","linkedIn","localizedFirstName","elements","emailAddress","subdomain","callback","URL","jwksurl","id_token","tokenPayload","reddit","version","auth0","nickname","replace","cas","attributes","strapiusername","sub","strapiemail","strapi","log","warn","JSON","stringify","patreon","authorization","URLSearchParams","toString","patreonData","full_name","keycloak","preferred_username","providersRegistry","require$$4","apiPrefix","server","url","authProviders","getAll","add","remove","run","authProvider"],"mappings":"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"}
|