@strapi/plugin-users-permissions 0.0.0-next.d9724d67b33363354d7171a9f2265e1c42485e13 → 0.0.0-next.da19c0501ff87d14fb664b55b8e0630d3c548485
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/admin/src/pages/Providers/index.jsx +74 -76
- package/admin/src/pages/Roles/pages/CreatePage.jsx +4 -13
- package/admin/src/pages/Roles/pages/EditPage.jsx +4 -13
- package/admin/src/pages/Roles/pages/ListPage/index.jsx +91 -93
- package/admin/src/translations/en.json +1 -0
- package/dist/admin/pages/Providers/index.js +84 -88
- package/dist/admin/pages/Providers/index.js.map +1 -1
- package/dist/admin/pages/Providers/index.mjs +84 -88
- package/dist/admin/pages/Providers/index.mjs.map +1 -1
- package/dist/admin/pages/Roles/pages/CreatePage.js +2 -1
- package/dist/admin/pages/Roles/pages/CreatePage.js.map +1 -1
- package/dist/admin/pages/Roles/pages/CreatePage.mjs +3 -2
- package/dist/admin/pages/Roles/pages/CreatePage.mjs.map +1 -1
- package/dist/admin/pages/Roles/pages/EditPage.js +2 -1
- package/dist/admin/pages/Roles/pages/EditPage.js.map +1 -1
- package/dist/admin/pages/Roles/pages/EditPage.mjs +3 -2
- package/dist/admin/pages/Roles/pages/EditPage.mjs.map +1 -1
- package/dist/admin/pages/Roles/pages/ListPage/index.js +95 -99
- package/dist/admin/pages/Roles/pages/ListPage/index.js.map +1 -1
- package/dist/admin/pages/Roles/pages/ListPage/index.mjs +95 -99
- package/dist/admin/pages/Roles/pages/ListPage/index.mjs.map +1 -1
- package/dist/admin/translations/en.json.js +1 -0
- package/dist/admin/translations/en.json.js.map +1 -1
- package/dist/admin/translations/en.json.mjs +1 -0
- package/dist/admin/translations/en.json.mjs.map +1 -1
- package/dist/server/bootstrap/index.js +28 -7
- package/dist/server/bootstrap/index.js.map +1 -1
- package/dist/server/bootstrap/index.mjs +28 -7
- package/dist/server/bootstrap/index.mjs.map +1 -1
- package/dist/server/config.js +16 -0
- package/dist/server/config.js.map +1 -1
- package/dist/server/config.mjs +16 -0
- package/dist/server/config.mjs.map +1 -1
- package/dist/server/controllers/auth.js +204 -3
- package/dist/server/controllers/auth.js.map +1 -1
- package/dist/server/controllers/auth.mjs +204 -3
- package/dist/server/controllers/auth.mjs.map +1 -1
- package/dist/server/routes/content-api/auth.js +16 -0
- package/dist/server/routes/content-api/auth.js.map +1 -1
- package/dist/server/routes/content-api/auth.mjs +16 -0
- package/dist/server/routes/content-api/auth.mjs.map +1 -1
- package/dist/server/routes/content-api/validation.js +1 -0
- package/dist/server/routes/content-api/validation.js.map +1 -1
- package/dist/server/routes/content-api/validation.mjs +1 -0
- package/dist/server/routes/content-api/validation.mjs.map +1 -1
- package/dist/server/services/constants.js +19 -0
- package/dist/server/services/constants.js.map +1 -0
- package/dist/server/services/constants.mjs +17 -0
- package/dist/server/services/constants.mjs.map +1 -0
- package/dist/server/services/jwt.js +45 -2
- package/dist/server/services/jwt.js.map +1 -1
- package/dist/server/services/jwt.mjs +45 -2
- package/dist/server/services/jwt.mjs.map +1 -1
- package/dist/server/services/user.js +29 -20
- package/dist/server/services/user.js.map +1 -1
- package/dist/server/services/user.mjs +29 -20
- package/dist/server/services/user.mjs.map +1 -1
- package/package.json +5 -5
- package/server/bootstrap/index.js +31 -0
- package/server/config.js +22 -0
- package/server/controllers/auth.js +248 -8
- package/server/routes/content-api/auth.js +12 -0
- package/server/routes/content-api/validation.js +1 -0
- package/server/services/constants.js +9 -0
- package/server/services/jwt.js +50 -2
- package/server/services/user.js +11 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../../../admin/src/pages/Roles/pages/ListPage/index.jsx"],"sourcesContent":["import React, { useState } from 'react';\n\nimport {\n Table,\n Th,\n Thead,\n Tr,\n Typography,\n useNotifyAT,\n VisuallyHidden,\n EmptyStateLayout,\n useCollator,\n useFilter,\n LinkButton,\n Dialog,\n} from '@strapi/design-system';\nimport { Plus } from '@strapi/icons';\nimport {\n ConfirmDialog,\n useTracking,\n Page,\n SearchInput,\n useNotification,\n useQueryParams,\n useFetchClient,\n useRBAC,\n Layouts,\n} from '@strapi/strapi/admin';\nimport { useIntl } from 'react-intl';\nimport { useMutation, useQuery } from 'react-query';\nimport { NavLink } from 'react-router-dom';\n\nimport { PERMISSIONS } from '../../../../constants';\nimport { getTrad } from '../../../../utils';\n\nimport TableBody from './components/TableBody';\n\nexport const RolesListPage = () => {\n const { trackUsage } = useTracking();\n const { formatMessage, locale } = useIntl();\n const { toggleNotification } = useNotification();\n const { notifyStatus } = useNotifyAT();\n const [{ query }] = useQueryParams();\n const _q = query?._q || '';\n const [showConfirmDelete, setShowConfirmDelete] = useState(false);\n const [roleToDelete, setRoleToDelete] = useState();\n const { del, get } = useFetchClient();\n\n const {\n isLoading: isLoadingForPermissions,\n allowedActions: { canRead, canDelete, canCreate, canUpdate },\n } = useRBAC({\n create: PERMISSIONS.createRole,\n read: PERMISSIONS.readRoles,\n update: PERMISSIONS.updateRole,\n delete: PERMISSIONS.deleteRole,\n });\n\n const {\n isLoading: isLoadingForData,\n data: { roles },\n isFetching,\n refetch,\n } = useQuery('get-roles', () => fetchData(toggleNotification, formatMessage, notifyStatus), {\n initialData: {},\n enabled: canRead,\n });\n\n const { contains } = useFilter(locale, {\n sensitivity: 'base',\n });\n\n /**\n * @type {Intl.Collator}\n */\n const formatter = useCollator(locale, {\n sensitivity: 'base',\n });\n\n const isLoading = isLoadingForData || isFetching || isLoadingForPermissions;\n\n const handleShowConfirmDelete = () => {\n setShowConfirmDelete(!showConfirmDelete);\n };\n\n const deleteData = async (id, formatMessage, toggleNotification) => {\n try {\n await del(`/users-permissions/roles/${id}`);\n } catch (error) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occured' }),\n });\n }\n };\n\n const fetchData = async (toggleNotification, formatMessage, notifyStatus) => {\n try {\n const { data } = await get('/users-permissions/roles');\n notifyStatus('The roles have loaded successfully');\n\n return data;\n } catch (err) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n\n throw new Error(err);\n }\n };\n\n const emptyLayout = {\n roles: {\n id: getTrad('Roles.empty'),\n defaultMessage: \"You don't have any roles yet.\",\n },\n search: {\n id: getTrad('Roles.empty.search'),\n defaultMessage: 'No roles match the search.',\n },\n };\n\n const pageTitle = formatMessage({\n id: 'global.roles',\n defaultMessage: 'Roles',\n });\n\n const deleteMutation = useMutation((id) => deleteData(id, formatMessage, toggleNotification), {\n async onSuccess() {\n await refetch();\n },\n });\n\n const handleConfirmDelete = async () => {\n await deleteMutation.mutateAsync(roleToDelete);\n setShowConfirmDelete(!showConfirmDelete);\n };\n\n const sortedRoles = (roles || [])\n .filter((role) => contains(role.name, _q) || contains(role.description, _q))\n .sort(\n (a, b) => formatter.compare(a.name, b.name) || formatter.compare(a.description, b.description)\n );\n\n const emptyContent = _q && !sortedRoles.length ? 'search' : 'roles';\n\n const colCount = 4;\n const rowCount = (roles?.length || 0) + 1;\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n return (\n <Layouts.Root>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n { name: pageTitle }\n )}\n </Page.Title>\n <Page.Main>\n <Layouts.Header\n title={formatMessage({\n id: 'global.roles',\n defaultMessage: 'Roles',\n })}\n subtitle={formatMessage({\n id: 'Settings.roles.list.description',\n defaultMessage: 'List of roles',\n })}\n primaryAction={\n canCreate ? (\n <LinkButton\n to=\"new\"\n tag={NavLink}\n onClick={() => trackUsage('willCreateRole')}\n startIcon={<Plus />}\n size=\"S\"\n >\n {formatMessage({\n id: getTrad('List.button.roles'),\n defaultMessage: 'Add new role',\n })}\n </LinkButton>\n ) : null\n }\n />\n\n <Layouts.Action\n startActions={\n <SearchInput\n label={formatMessage({\n id: 'app.component.search.label',\n defaultMessage: 'Search',\n })}\n />\n }\n />\n\n <Layouts.Content>\n {!canRead && <Page.NoPermissions />}\n {canRead && sortedRoles && sortedRoles?.length ? (\n <Table colCount={colCount} rowCount={rowCount}>\n <Thead>\n <Tr>\n <Th>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({ id: 'global.name', defaultMessage: 'Name' })}\n </Typography>\n </Th>\n <Th>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({\n id: 'global.description',\n defaultMessage: 'Description',\n })}\n </Typography>\n </Th>\n <Th>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({\n id: 'global.users',\n defaultMessage: 'Users',\n })}\n </Typography>\n </Th>\n <Th>\n <VisuallyHidden>\n {formatMessage({\n id: 'global.actions',\n defaultMessage: 'Actions',\n })}\n </VisuallyHidden>\n </Th>\n </Tr>\n </Thead>\n <TableBody\n sortedRoles={sortedRoles}\n canDelete={canDelete}\n canUpdate={canUpdate}\n permissions={PERMISSIONS}\n setRoleToDelete={setRoleToDelete}\n onDelete={[showConfirmDelete, setShowConfirmDelete]}\n />\n </Table>\n ) : (\n <EmptyStateLayout content={formatMessage(emptyLayout[emptyContent])} />\n )}\n </Layouts.Content>\n <Dialog.Root open={showConfirmDelete} onOpenChange={handleShowConfirmDelete}>\n <ConfirmDialog onConfirm={handleConfirmDelete} />\n </Dialog.Root>\n </Page.Main>\n </Layouts.Root>\n );\n};\n\nexport const ProtectedRolesListPage = () => {\n return (\n <Page.Protect permissions={PERMISSIONS.accessRoles}>\n <RolesListPage />\n </Page.Protect>\n );\n};\n"],"names":["RolesListPage","trackUsage","useTracking","formatMessage","locale","useIntl","toggleNotification","useNotification","notifyStatus","useNotifyAT","query","useQueryParams","_q","showConfirmDelete","setShowConfirmDelete","useState","roleToDelete","setRoleToDelete","del","get","useFetchClient","isLoading","isLoadingForPermissions","allowedActions","canRead","canDelete","canCreate","canUpdate","useRBAC","create","PERMISSIONS","createRole","read","readRoles","update","updateRole","delete","deleteRole","isLoadingForData","data","roles","isFetching","refetch","useQuery","fetchData","initialData","enabled","contains","useFilter","sensitivity","formatter","useCollator","handleShowConfirmDelete","deleteData","id","error","type","message","defaultMessage","err","Error","emptyLayout","getTrad","search","pageTitle","deleteMutation","useMutation","onSuccess","handleConfirmDelete","mutateAsync","sortedRoles","filter","role","name","description","sort","a","b","compare","emptyContent","length","colCount","rowCount","_jsx","Page","Loading","_jsxs","Layouts","Root","Title","Main","Header","title","subtitle","primaryAction","LinkButton","to","tag","NavLink","onClick","startIcon","Plus","size","Action","startActions","SearchInput","label","Content","NoPermissions","Table","Thead","Tr","Th","Typography","variant","textColor","VisuallyHidden","TableBody","permissions","onDelete","EmptyStateLayout","content","Dialog","open","onOpenChange","ConfirmDialog","onConfirm","ProtectedRolesListPage","Protect","accessRoles"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../../../admin/src/pages/Roles/pages/ListPage/index.jsx"],"sourcesContent":["import React, { useState } from 'react';\n\nimport {\n Table,\n Th,\n Thead,\n Tr,\n Typography,\n useNotifyAT,\n VisuallyHidden,\n EmptyStateLayout,\n useCollator,\n useFilter,\n LinkButton,\n Dialog,\n} from '@strapi/design-system';\nimport { Plus } from '@strapi/icons';\nimport {\n ConfirmDialog,\n useTracking,\n Page,\n SearchInput,\n useNotification,\n useQueryParams,\n useFetchClient,\n useRBAC,\n Layouts,\n} from '@strapi/strapi/admin';\nimport { useIntl } from 'react-intl';\nimport { useMutation, useQuery } from 'react-query';\nimport { NavLink } from 'react-router-dom';\n\nimport { PERMISSIONS } from '../../../../constants';\nimport { getTrad } from '../../../../utils';\n\nimport TableBody from './components/TableBody';\n\nexport const RolesListPage = () => {\n const { trackUsage } = useTracking();\n const { formatMessage, locale } = useIntl();\n const { toggleNotification } = useNotification();\n const { notifyStatus } = useNotifyAT();\n const [{ query }] = useQueryParams();\n const _q = query?._q || '';\n const [showConfirmDelete, setShowConfirmDelete] = useState(false);\n const [roleToDelete, setRoleToDelete] = useState();\n const { del, get } = useFetchClient();\n\n const {\n isLoading: isLoadingForPermissions,\n allowedActions: { canRead, canDelete, canCreate, canUpdate },\n } = useRBAC({\n create: PERMISSIONS.createRole,\n read: PERMISSIONS.readRoles,\n update: PERMISSIONS.updateRole,\n delete: PERMISSIONS.deleteRole,\n });\n\n const {\n isLoading: isLoadingForData,\n data: { roles },\n isFetching,\n refetch,\n } = useQuery('get-roles', () => fetchData(toggleNotification, formatMessage, notifyStatus), {\n initialData: {},\n enabled: canRead,\n });\n\n const { contains } = useFilter(locale, {\n sensitivity: 'base',\n });\n\n /**\n * @type {Intl.Collator}\n */\n const formatter = useCollator(locale, {\n sensitivity: 'base',\n });\n\n const isLoading = isLoadingForData || isFetching || isLoadingForPermissions;\n\n const handleShowConfirmDelete = () => {\n setShowConfirmDelete(!showConfirmDelete);\n };\n\n const deleteData = async (id, formatMessage, toggleNotification) => {\n try {\n await del(`/users-permissions/roles/${id}`);\n } catch (error) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occured' }),\n });\n }\n };\n\n const fetchData = async (toggleNotification, formatMessage, notifyStatus) => {\n try {\n const { data } = await get('/users-permissions/roles');\n notifyStatus('The roles have loaded successfully');\n\n return data;\n } catch (err) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n\n throw new Error(err);\n }\n };\n\n const emptyLayout = {\n roles: {\n id: getTrad('Roles.empty'),\n defaultMessage: \"You don't have any roles yet.\",\n },\n search: {\n id: getTrad('Roles.empty.search'),\n defaultMessage: 'No roles match the search.',\n },\n };\n\n const pageTitle = formatMessage({\n id: 'global.roles',\n defaultMessage: 'Roles',\n });\n\n const deleteMutation = useMutation((id) => deleteData(id, formatMessage, toggleNotification), {\n async onSuccess() {\n await refetch();\n },\n });\n\n const handleConfirmDelete = async () => {\n await deleteMutation.mutateAsync(roleToDelete);\n setShowConfirmDelete(!showConfirmDelete);\n };\n\n const sortedRoles = (roles || [])\n .filter((role) => contains(role.name, _q) || contains(role.description, _q))\n .sort(\n (a, b) => formatter.compare(a.name, b.name) || formatter.compare(a.description, b.description)\n );\n\n const emptyContent = _q && !sortedRoles.length ? 'search' : 'roles';\n\n const colCount = 4;\n const rowCount = (roles?.length || 0) + 1;\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n return (\n <Page.Main>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n { name: pageTitle }\n )}\n </Page.Title>\n <Layouts.Header\n title={formatMessage({\n id: 'global.roles',\n defaultMessage: 'Roles',\n })}\n subtitle={formatMessage({\n id: 'Settings.roles.list.description',\n defaultMessage: 'List of roles',\n })}\n primaryAction={\n canCreate ? (\n <LinkButton\n to=\"new\"\n tag={NavLink}\n onClick={() => trackUsage('willCreateRole')}\n startIcon={<Plus />}\n size=\"S\"\n >\n {formatMessage({\n id: getTrad('List.button.roles'),\n defaultMessage: 'Add new role',\n })}\n </LinkButton>\n ) : null\n }\n />\n\n <Layouts.Action\n startActions={\n <SearchInput\n label={formatMessage({\n id: 'app.component.search.label',\n defaultMessage: 'Search',\n })}\n />\n }\n />\n\n <Layouts.Content>\n {!canRead && <Page.NoPermissions />}\n {canRead && sortedRoles && sortedRoles?.length ? (\n <Table colCount={colCount} rowCount={rowCount}>\n <Thead>\n <Tr>\n <Th>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({ id: 'global.name', defaultMessage: 'Name' })}\n </Typography>\n </Th>\n <Th>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({\n id: 'global.description',\n defaultMessage: 'Description',\n })}\n </Typography>\n </Th>\n <Th>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({\n id: 'global.users',\n defaultMessage: 'Users',\n })}\n </Typography>\n </Th>\n <Th>\n <VisuallyHidden>\n {formatMessage({\n id: 'global.actions',\n defaultMessage: 'Actions',\n })}\n </VisuallyHidden>\n </Th>\n </Tr>\n </Thead>\n <TableBody\n sortedRoles={sortedRoles}\n canDelete={canDelete}\n canUpdate={canUpdate}\n permissions={PERMISSIONS}\n setRoleToDelete={setRoleToDelete}\n onDelete={[showConfirmDelete, setShowConfirmDelete]}\n />\n </Table>\n ) : (\n <EmptyStateLayout content={formatMessage(emptyLayout[emptyContent])} />\n )}\n </Layouts.Content>\n <Dialog.Root open={showConfirmDelete} onOpenChange={handleShowConfirmDelete}>\n <ConfirmDialog onConfirm={handleConfirmDelete} />\n </Dialog.Root>\n </Page.Main>\n );\n};\n\nexport const ProtectedRolesListPage = () => {\n return (\n <Page.Protect permissions={PERMISSIONS.accessRoles}>\n <RolesListPage />\n </Page.Protect>\n );\n};\n"],"names":["RolesListPage","trackUsage","useTracking","formatMessage","locale","useIntl","toggleNotification","useNotification","notifyStatus","useNotifyAT","query","useQueryParams","_q","showConfirmDelete","setShowConfirmDelete","useState","roleToDelete","setRoleToDelete","del","get","useFetchClient","isLoading","isLoadingForPermissions","allowedActions","canRead","canDelete","canCreate","canUpdate","useRBAC","create","PERMISSIONS","createRole","read","readRoles","update","updateRole","delete","deleteRole","isLoadingForData","data","roles","isFetching","refetch","useQuery","fetchData","initialData","enabled","contains","useFilter","sensitivity","formatter","useCollator","handleShowConfirmDelete","deleteData","id","error","type","message","defaultMessage","err","Error","emptyLayout","getTrad","search","pageTitle","deleteMutation","useMutation","onSuccess","handleConfirmDelete","mutateAsync","sortedRoles","filter","role","name","description","sort","a","b","compare","emptyContent","length","colCount","rowCount","_jsx","Page","Loading","_jsxs","Main","Title","Layouts","Header","title","subtitle","primaryAction","LinkButton","to","tag","NavLink","onClick","startIcon","Plus","size","Action","startActions","SearchInput","label","Content","NoPermissions","Table","Thead","Tr","Th","Typography","variant","textColor","VisuallyHidden","TableBody","permissions","onDelete","EmptyStateLayout","content","Dialog","Root","open","onOpenChange","ConfirmDialog","onConfirm","ProtectedRolesListPage","Protect","accessRoles"],"mappings":";;;;;;;;;;;;;;;MAqCaA,aAAgB,GAAA,IAAA;IAC3B,MAAM,EAAEC,UAAU,EAAE,GAAGC,iBAAAA,EAAAA;AACvB,IAAA,MAAM,EAAEC,aAAa,EAAEC,MAAM,EAAE,GAAGC,iBAAAA,EAAAA;IAClC,MAAM,EAAEC,kBAAkB,EAAE,GAAGC,qBAAAA,EAAAA;IAC/B,MAAM,EAAEC,YAAY,EAAE,GAAGC,wBAAAA,EAAAA;AACzB,IAAA,MAAM,CAAC,EAAEC,KAAK,EAAE,CAAC,GAAGC,oBAAAA,EAAAA;IACpB,MAAMC,EAAAA,GAAKF,OAAOE,EAAM,IAAA,EAAA;AACxB,IAAA,MAAM,CAACC,iBAAAA,EAAmBC,oBAAqB,CAAA,GAAGC,cAAS,CAAA,KAAA,CAAA;IAC3D,MAAM,CAACC,YAAcC,EAAAA,eAAAA,CAAgB,GAAGF,cAAAA,EAAAA;AACxC,IAAA,MAAM,EAAEG,GAAG,EAAEC,GAAG,EAAE,GAAGC,oBAAAA,EAAAA;AAErB,IAAA,MAAM,EACJC,SAAWC,EAAAA,uBAAuB,EAClCC,cAAAA,EAAgB,EAAEC,OAAO,EAAEC,SAAS,EAAEC,SAAS,EAAEC,SAAS,EAAE,EAC7D,GAAGC,aAAQ,CAAA;AACVC,QAAAA,MAAAA,EAAQC,sBAAYC,UAAU;AAC9BC,QAAAA,IAAAA,EAAMF,sBAAYG,SAAS;AAC3BC,QAAAA,MAAAA,EAAQJ,sBAAYK,UAAU;AAC9BC,QAAAA,MAAAA,EAAQN,sBAAYO;AACtB,KAAA,CAAA;IAEA,MAAM,EACJhB,WAAWiB,gBAAgB,EAC3BC,MAAM,EAAEC,KAAK,EAAE,EACfC,UAAU,EACVC,OAAO,EACR,GAAGC,mBAAS,CAAA,WAAA,EAAa,IAAMC,SAAUtC,CAAAA,kBAAAA,EAAoBH,eAAeK,YAAe,CAAA,EAAA;AAC1FqC,QAAAA,WAAAA,EAAa,EAAC;QACdC,OAAStB,EAAAA;AACX,KAAA,CAAA;AAEA,IAAA,MAAM,EAAEuB,QAAQ,EAAE,GAAGC,uBAAU5C,MAAQ,EAAA;QACrC6C,WAAa,EAAA;AACf,KAAA,CAAA;AAEA;;MAGA,MAAMC,SAAYC,GAAAA,wBAAAA,CAAY/C,MAAQ,EAAA;QACpC6C,WAAa,EAAA;AACf,KAAA,CAAA;IAEA,MAAM5B,SAAAA,GAAYiB,oBAAoBG,UAAcnB,IAAAA,uBAAAA;AAEpD,IAAA,MAAM8B,uBAA0B,GAAA,IAAA;AAC9BtC,QAAAA,oBAAAA,CAAqB,CAACD,iBAAAA,CAAAA;AACxB,KAAA;IAEA,MAAMwC,UAAAA,GAAa,OAAOC,EAAAA,EAAInD,aAAeG,EAAAA,kBAAAA,GAAAA;QAC3C,IAAI;AACF,YAAA,MAAMY,GAAI,CAAA,CAAC,yBAAyB,EAAEoC,GAAG,CAAC,CAAA;AAC5C,SAAA,CAAE,OAAOC,KAAO,EAAA;YACdjD,kBAAmB,CAAA;gBACjBkD,IAAM,EAAA,QAAA;AACNC,gBAAAA,OAAAA,EAAStD,aAAc,CAAA;oBAAEmD,EAAI,EAAA,oBAAA;oBAAsBI,cAAgB,EAAA;AAAmB,iBAAA;AACxF,aAAA,CAAA;AACF;AACF,KAAA;IAEA,MAAMd,SAAAA,GAAY,OAAOtC,kBAAAA,EAAoBH,aAAeK,EAAAA,YAAAA,GAAAA;QAC1D,IAAI;AACF,YAAA,MAAM,EAAE+B,IAAI,EAAE,GAAG,MAAMpB,GAAI,CAAA,0BAAA,CAAA;YAC3BX,YAAa,CAAA,oCAAA,CAAA;YAEb,OAAO+B,IAAAA;AACT,SAAA,CAAE,OAAOoB,GAAK,EAAA;YACZrD,kBAAmB,CAAA;gBACjBkD,IAAM,EAAA,QAAA;AACNC,gBAAAA,OAAAA,EAAStD,aAAc,CAAA;oBAAEmD,EAAI,EAAA,oBAAA;oBAAsBI,cAAgB,EAAA;AAAoB,iBAAA;AACzF,aAAA,CAAA;AAEA,YAAA,MAAM,IAAIE,KAAMD,CAAAA,GAAAA,CAAAA;AAClB;AACF,KAAA;AAEA,IAAA,MAAME,WAAc,GAAA;QAClBrB,KAAO,EAAA;AACLc,YAAAA,EAAAA,EAAIQ,OAAQ,CAAA,aAAA,CAAA;YACZJ,cAAgB,EAAA;AAClB,SAAA;QACAK,MAAQ,EAAA;AACNT,YAAAA,EAAAA,EAAIQ,OAAQ,CAAA,oBAAA,CAAA;YACZJ,cAAgB,EAAA;AAClB;AACF,KAAA;AAEA,IAAA,MAAMM,YAAY7D,aAAc,CAAA;QAC9BmD,EAAI,EAAA,cAAA;QACJI,cAAgB,EAAA;AAClB,KAAA,CAAA;AAEA,IAAA,MAAMO,iBAAiBC,sBAAY,CAAA,CAACZ,KAAOD,UAAWC,CAAAA,EAAAA,EAAInD,eAAeG,kBAAqB,CAAA,EAAA;QAC5F,MAAM6D,SAAAA,CAAAA,GAAAA;YACJ,MAAMzB,OAAAA,EAAAA;AACR;AACF,KAAA,CAAA;AAEA,IAAA,MAAM0B,mBAAsB,GAAA,UAAA;QAC1B,MAAMH,cAAAA,CAAeI,WAAW,CAACrD,YAAAA,CAAAA;AACjCF,QAAAA,oBAAAA,CAAqB,CAACD,iBAAAA,CAAAA;AACxB,KAAA;AAEA,IAAA,MAAMyD,cAAc,CAAC9B,SAAS,EAAC,EAC5B+B,MAAM,CAAC,CAACC,IAASzB,GAAAA,QAAAA,CAASyB,KAAKC,IAAI,EAAE7D,OAAOmC,QAASyB,CAAAA,IAAAA,CAAKE,WAAW,EAAE9D,EAAAA,CAAAA,CAAAA,CACvE+D,IAAI,CACH,CAACC,CAAGC,EAAAA,CAAAA,GAAM3B,UAAU4B,OAAO,CAACF,EAAEH,IAAI,EAAEI,EAAEJ,IAAI,CAAA,IAAKvB,UAAU4B,OAAO,CAACF,EAAEF,WAAW,EAAEG,EAAEH,WAAW,CAAA,CAAA;AAGjG,IAAA,MAAMK,eAAenE,EAAM,IAAA,CAAC0D,WAAYU,CAAAA,MAAM,GAAG,QAAW,GAAA,OAAA;AAE5D,IAAA,MAAMC,QAAW,GAAA,CAAA;AACjB,IAAA,MAAMC,WAAW,CAAC1C,KAAOwC,EAAAA,MAAAA,IAAU,CAAA,IAAK,CAAA;AAExC,IAAA,IAAI3D,SAAW,EAAA;QACb,qBAAO8D,cAAA,CAACC,WAAKC,OAAO,EAAA,EAAA,CAAA;AACtB;IAEA,qBACEC,eAAA,CAACF,WAAKG,IAAI,EAAA;;AACR,0BAAAJ,cAAA,CAACC,WAAKI,KAAK,EAAA;0BACRrF,aACC,CAAA;oBAAEmD,EAAI,EAAA,oBAAA;oBAAsBI,cAAgB,EAAA;iBAC5C,EAAA;oBAAEe,IAAMT,EAAAA;AAAU,iBAAA;;AAGtB,0BAAAmB,cAAA,CAACM,cAAQC,MAAM,EAAA;AACbC,gBAAAA,KAAAA,EAAOxF,aAAc,CAAA;oBACnBmD,EAAI,EAAA,cAAA;oBACJI,cAAgB,EAAA;AAClB,iBAAA,CAAA;AACAkC,gBAAAA,QAAAA,EAAUzF,aAAc,CAAA;oBACtBmD,EAAI,EAAA,iCAAA;oBACJI,cAAgB,EAAA;AAClB,iBAAA,CAAA;AACAmC,gBAAAA,aAAAA,EACEnE,0BACEyD,cAACW,CAAAA,uBAAAA,EAAAA;oBACCC,EAAG,EAAA,KAAA;oBACHC,GAAKC,EAAAA,sBAAAA;AACLC,oBAAAA,OAAAA,EAAS,IAAMjG,UAAW,CAAA,gBAAA,CAAA;AAC1BkG,oBAAAA,SAAAA,gBAAWhB,cAACiB,CAAAA,UAAAA,EAAAA,EAAAA,CAAAA;oBACZC,IAAK,EAAA,GAAA;8BAEJlG,aAAc,CAAA;AACbmD,wBAAAA,EAAAA,EAAIQ,OAAQ,CAAA,mBAAA,CAAA;wBACZJ,cAAgB,EAAA;AAClB,qBAAA;AAEA,iBAAA,CAAA,GAAA;;AAIR,0BAAAyB,cAAA,CAACM,cAAQa,MAAM,EAAA;AACbC,gBAAAA,YAAAA,gBACEpB,cAACqB,CAAAA,iBAAAA,EAAAA;AACCC,oBAAAA,KAAAA,EAAOtG,aAAc,CAAA;wBACnBmD,EAAI,EAAA,4BAAA;wBACJI,cAAgB,EAAA;AAClB,qBAAA;;;AAKN,0BAAA4B,eAAA,CAACG,cAAQiB,OAAO,EAAA;;oBACb,CAAClF,OAAAA,kBAAW2D,cAACC,CAAAA,UAAAA,CAAKuB,aAAa,EAAA,EAAA,CAAA;oBAC/BnF,OAAW8C,IAAAA,WAAAA,IAAeA,WAAaU,EAAAA,MAAAA,iBACtCM,eAACsB,CAAAA,kBAAAA,EAAAA;wBAAM3B,QAAUA,EAAAA,QAAAA;wBAAUC,QAAUA,EAAAA,QAAAA;;0CACnCC,cAAC0B,CAAAA,kBAAAA,EAAAA;AACC,gCAAA,QAAA,gBAAAvB,eAACwB,CAAAA,eAAAA,EAAAA;;sDACC3B,cAAC4B,CAAAA,eAAAA,EAAAA;AACC,4CAAA,QAAA,gBAAA5B,cAAC6B,CAAAA,uBAAAA,EAAAA;gDAAWC,OAAQ,EAAA,OAAA;gDAAQC,SAAU,EAAA,YAAA;0DACnC/G,aAAc,CAAA;oDAAEmD,EAAI,EAAA,aAAA;oDAAeI,cAAgB,EAAA;AAAO,iDAAA;;;sDAG/DyB,cAAC4B,CAAAA,eAAAA,EAAAA;AACC,4CAAA,QAAA,gBAAA5B,cAAC6B,CAAAA,uBAAAA,EAAAA;gDAAWC,OAAQ,EAAA,OAAA;gDAAQC,SAAU,EAAA,YAAA;0DACnC/G,aAAc,CAAA;oDACbmD,EAAI,EAAA,oBAAA;oDACJI,cAAgB,EAAA;AAClB,iDAAA;;;sDAGJyB,cAAC4B,CAAAA,eAAAA,EAAAA;AACC,4CAAA,QAAA,gBAAA5B,cAAC6B,CAAAA,uBAAAA,EAAAA;gDAAWC,OAAQ,EAAA,OAAA;gDAAQC,SAAU,EAAA,YAAA;0DACnC/G,aAAc,CAAA;oDACbmD,EAAI,EAAA,cAAA;oDACJI,cAAgB,EAAA;AAClB,iDAAA;;;sDAGJyB,cAAC4B,CAAAA,eAAAA,EAAAA;AACC,4CAAA,QAAA,gBAAA5B,cAACgC,CAAAA,2BAAAA,EAAAA;0DACEhH,aAAc,CAAA;oDACbmD,EAAI,EAAA,gBAAA;oDACJI,cAAgB,EAAA;AAClB,iDAAA;;;;;;0CAKRyB,cAACiC,CAAAA,SAAAA,EAAAA;gCACC9C,WAAaA,EAAAA,WAAAA;gCACb7C,SAAWA,EAAAA,SAAAA;gCACXE,SAAWA,EAAAA,SAAAA;gCACX0F,WAAavF,EAAAA,qBAAAA;gCACbb,eAAiBA,EAAAA,eAAAA;gCACjBqG,QAAU,EAAA;AAACzG,oCAAAA,iBAAAA;AAAmBC,oCAAAA;AAAqB;;;uCAIvDqE,cAACoC,CAAAA,6BAAAA,EAAAA;wBAAiBC,OAASrH,EAAAA,aAAAA,CAAc0D,WAAW,CAACkB,YAAa,CAAA;;;;AAGtE,0BAAAI,cAAA,CAACsC,oBAAOC,IAAI,EAAA;gBAACC,IAAM9G,EAAAA,iBAAAA;gBAAmB+G,YAAcxE,EAAAA,uBAAAA;AAClD,gBAAA,QAAA,gBAAA+B,cAAC0C,CAAAA,mBAAAA,EAAAA;oBAAcC,SAAW1D,EAAAA;;;;;AAIlC;MAEa2D,sBAAyB,GAAA,IAAA;IACpC,qBACE5C,cAAA,CAACC,WAAK4C,OAAO,EAAA;AAACX,QAAAA,WAAAA,EAAavF,sBAAYmG,WAAW;AAChD,QAAA,QAAA,gBAAA9C,cAACnF,CAAAA,aAAAA,EAAAA,EAAAA;;AAGP;;;;;"}
|
|
@@ -102,7 +102,7 @@ const RolesListPage = ()=>{
|
|
|
102
102
|
if (isLoading) {
|
|
103
103
|
return /*#__PURE__*/ jsx(Page.Loading, {});
|
|
104
104
|
}
|
|
105
|
-
return /*#__PURE__*/ jsxs(
|
|
105
|
+
return /*#__PURE__*/ jsxs(Page.Main, {
|
|
106
106
|
children: [
|
|
107
107
|
/*#__PURE__*/ jsx(Page.Title, {
|
|
108
108
|
children: formatMessage({
|
|
@@ -112,113 +112,109 @@ const RolesListPage = ()=>{
|
|
|
112
112
|
name: pageTitle
|
|
113
113
|
})
|
|
114
114
|
}),
|
|
115
|
-
/*#__PURE__*/
|
|
115
|
+
/*#__PURE__*/ jsx(Layouts.Header, {
|
|
116
|
+
title: formatMessage({
|
|
117
|
+
id: 'global.roles',
|
|
118
|
+
defaultMessage: 'Roles'
|
|
119
|
+
}),
|
|
120
|
+
subtitle: formatMessage({
|
|
121
|
+
id: 'Settings.roles.list.description',
|
|
122
|
+
defaultMessage: 'List of roles'
|
|
123
|
+
}),
|
|
124
|
+
primaryAction: canCreate ? /*#__PURE__*/ jsx(LinkButton, {
|
|
125
|
+
to: "new",
|
|
126
|
+
tag: NavLink,
|
|
127
|
+
onClick: ()=>trackUsage('willCreateRole'),
|
|
128
|
+
startIcon: /*#__PURE__*/ jsx(Plus, {}),
|
|
129
|
+
size: "S",
|
|
130
|
+
children: formatMessage({
|
|
131
|
+
id: getTrad('List.button.roles'),
|
|
132
|
+
defaultMessage: 'Add new role'
|
|
133
|
+
})
|
|
134
|
+
}) : null
|
|
135
|
+
}),
|
|
136
|
+
/*#__PURE__*/ jsx(Layouts.Action, {
|
|
137
|
+
startActions: /*#__PURE__*/ jsx(SearchInput, {
|
|
138
|
+
label: formatMessage({
|
|
139
|
+
id: 'app.component.search.label',
|
|
140
|
+
defaultMessage: 'Search'
|
|
141
|
+
})
|
|
142
|
+
})
|
|
143
|
+
}),
|
|
144
|
+
/*#__PURE__*/ jsxs(Layouts.Content, {
|
|
116
145
|
children: [
|
|
117
|
-
/*#__PURE__*/ jsx(
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
}),
|
|
122
|
-
subtitle: formatMessage({
|
|
123
|
-
id: 'Settings.roles.list.description',
|
|
124
|
-
defaultMessage: 'List of roles'
|
|
125
|
-
}),
|
|
126
|
-
primaryAction: canCreate ? /*#__PURE__*/ jsx(LinkButton, {
|
|
127
|
-
to: "new",
|
|
128
|
-
tag: NavLink,
|
|
129
|
-
onClick: ()=>trackUsage('willCreateRole'),
|
|
130
|
-
startIcon: /*#__PURE__*/ jsx(Plus, {}),
|
|
131
|
-
size: "S",
|
|
132
|
-
children: formatMessage({
|
|
133
|
-
id: getTrad('List.button.roles'),
|
|
134
|
-
defaultMessage: 'Add new role'
|
|
135
|
-
})
|
|
136
|
-
}) : null
|
|
137
|
-
}),
|
|
138
|
-
/*#__PURE__*/ jsx(Layouts.Action, {
|
|
139
|
-
startActions: /*#__PURE__*/ jsx(SearchInput, {
|
|
140
|
-
label: formatMessage({
|
|
141
|
-
id: 'app.component.search.label',
|
|
142
|
-
defaultMessage: 'Search'
|
|
143
|
-
})
|
|
144
|
-
})
|
|
145
|
-
}),
|
|
146
|
-
/*#__PURE__*/ jsxs(Layouts.Content, {
|
|
146
|
+
!canRead && /*#__PURE__*/ jsx(Page.NoPermissions, {}),
|
|
147
|
+
canRead && sortedRoles && sortedRoles?.length ? /*#__PURE__*/ jsxs(Table, {
|
|
148
|
+
colCount: colCount,
|
|
149
|
+
rowCount: rowCount,
|
|
147
150
|
children: [
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
variant: "sigma",
|
|
179
|
-
textColor: "neutral600",
|
|
180
|
-
children: formatMessage({
|
|
181
|
-
id: 'global.users',
|
|
182
|
-
defaultMessage: 'Users'
|
|
183
|
-
})
|
|
184
|
-
})
|
|
185
|
-
}),
|
|
186
|
-
/*#__PURE__*/ jsx(Th, {
|
|
187
|
-
children: /*#__PURE__*/ jsx(VisuallyHidden, {
|
|
188
|
-
children: formatMessage({
|
|
189
|
-
id: 'global.actions',
|
|
190
|
-
defaultMessage: 'Actions'
|
|
191
|
-
})
|
|
192
|
-
})
|
|
151
|
+
/*#__PURE__*/ jsx(Thead, {
|
|
152
|
+
children: /*#__PURE__*/ jsxs(Tr, {
|
|
153
|
+
children: [
|
|
154
|
+
/*#__PURE__*/ jsx(Th, {
|
|
155
|
+
children: /*#__PURE__*/ jsx(Typography, {
|
|
156
|
+
variant: "sigma",
|
|
157
|
+
textColor: "neutral600",
|
|
158
|
+
children: formatMessage({
|
|
159
|
+
id: 'global.name',
|
|
160
|
+
defaultMessage: 'Name'
|
|
161
|
+
})
|
|
162
|
+
})
|
|
163
|
+
}),
|
|
164
|
+
/*#__PURE__*/ jsx(Th, {
|
|
165
|
+
children: /*#__PURE__*/ jsx(Typography, {
|
|
166
|
+
variant: "sigma",
|
|
167
|
+
textColor: "neutral600",
|
|
168
|
+
children: formatMessage({
|
|
169
|
+
id: 'global.description',
|
|
170
|
+
defaultMessage: 'Description'
|
|
171
|
+
})
|
|
172
|
+
})
|
|
173
|
+
}),
|
|
174
|
+
/*#__PURE__*/ jsx(Th, {
|
|
175
|
+
children: /*#__PURE__*/ jsx(Typography, {
|
|
176
|
+
variant: "sigma",
|
|
177
|
+
textColor: "neutral600",
|
|
178
|
+
children: formatMessage({
|
|
179
|
+
id: 'global.users',
|
|
180
|
+
defaultMessage: 'Users'
|
|
193
181
|
})
|
|
194
|
-
|
|
182
|
+
})
|
|
183
|
+
}),
|
|
184
|
+
/*#__PURE__*/ jsx(Th, {
|
|
185
|
+
children: /*#__PURE__*/ jsx(VisuallyHidden, {
|
|
186
|
+
children: formatMessage({
|
|
187
|
+
id: 'global.actions',
|
|
188
|
+
defaultMessage: 'Actions'
|
|
189
|
+
})
|
|
190
|
+
})
|
|
195
191
|
})
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
192
|
+
]
|
|
193
|
+
})
|
|
194
|
+
}),
|
|
195
|
+
/*#__PURE__*/ jsx(TableBody, {
|
|
196
|
+
sortedRoles: sortedRoles,
|
|
197
|
+
canDelete: canDelete,
|
|
198
|
+
canUpdate: canUpdate,
|
|
199
|
+
permissions: PERMISSIONS,
|
|
200
|
+
setRoleToDelete: setRoleToDelete,
|
|
201
|
+
onDelete: [
|
|
202
|
+
showConfirmDelete,
|
|
203
|
+
setShowConfirmDelete
|
|
208
204
|
]
|
|
209
|
-
}) : /*#__PURE__*/ jsx(EmptyStateLayout, {
|
|
210
|
-
content: formatMessage(emptyLayout[emptyContent])
|
|
211
205
|
})
|
|
212
206
|
]
|
|
213
|
-
}),
|
|
214
|
-
|
|
215
|
-
open: showConfirmDelete,
|
|
216
|
-
onOpenChange: handleShowConfirmDelete,
|
|
217
|
-
children: /*#__PURE__*/ jsx(ConfirmDialog, {
|
|
218
|
-
onConfirm: handleConfirmDelete
|
|
219
|
-
})
|
|
207
|
+
}) : /*#__PURE__*/ jsx(EmptyStateLayout, {
|
|
208
|
+
content: formatMessage(emptyLayout[emptyContent])
|
|
220
209
|
})
|
|
221
210
|
]
|
|
211
|
+
}),
|
|
212
|
+
/*#__PURE__*/ jsx(Dialog.Root, {
|
|
213
|
+
open: showConfirmDelete,
|
|
214
|
+
onOpenChange: handleShowConfirmDelete,
|
|
215
|
+
children: /*#__PURE__*/ jsx(ConfirmDialog, {
|
|
216
|
+
onConfirm: handleConfirmDelete
|
|
217
|
+
})
|
|
222
218
|
})
|
|
223
219
|
]
|
|
224
220
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../../../../../../admin/src/pages/Roles/pages/ListPage/index.jsx"],"sourcesContent":["import React, { useState } from 'react';\n\nimport {\n Table,\n Th,\n Thead,\n Tr,\n Typography,\n useNotifyAT,\n VisuallyHidden,\n EmptyStateLayout,\n useCollator,\n useFilter,\n LinkButton,\n Dialog,\n} from '@strapi/design-system';\nimport { Plus } from '@strapi/icons';\nimport {\n ConfirmDialog,\n useTracking,\n Page,\n SearchInput,\n useNotification,\n useQueryParams,\n useFetchClient,\n useRBAC,\n Layouts,\n} from '@strapi/strapi/admin';\nimport { useIntl } from 'react-intl';\nimport { useMutation, useQuery } from 'react-query';\nimport { NavLink } from 'react-router-dom';\n\nimport { PERMISSIONS } from '../../../../constants';\nimport { getTrad } from '../../../../utils';\n\nimport TableBody from './components/TableBody';\n\nexport const RolesListPage = () => {\n const { trackUsage } = useTracking();\n const { formatMessage, locale } = useIntl();\n const { toggleNotification } = useNotification();\n const { notifyStatus } = useNotifyAT();\n const [{ query }] = useQueryParams();\n const _q = query?._q || '';\n const [showConfirmDelete, setShowConfirmDelete] = useState(false);\n const [roleToDelete, setRoleToDelete] = useState();\n const { del, get } = useFetchClient();\n\n const {\n isLoading: isLoadingForPermissions,\n allowedActions: { canRead, canDelete, canCreate, canUpdate },\n } = useRBAC({\n create: PERMISSIONS.createRole,\n read: PERMISSIONS.readRoles,\n update: PERMISSIONS.updateRole,\n delete: PERMISSIONS.deleteRole,\n });\n\n const {\n isLoading: isLoadingForData,\n data: { roles },\n isFetching,\n refetch,\n } = useQuery('get-roles', () => fetchData(toggleNotification, formatMessage, notifyStatus), {\n initialData: {},\n enabled: canRead,\n });\n\n const { contains } = useFilter(locale, {\n sensitivity: 'base',\n });\n\n /**\n * @type {Intl.Collator}\n */\n const formatter = useCollator(locale, {\n sensitivity: 'base',\n });\n\n const isLoading = isLoadingForData || isFetching || isLoadingForPermissions;\n\n const handleShowConfirmDelete = () => {\n setShowConfirmDelete(!showConfirmDelete);\n };\n\n const deleteData = async (id, formatMessage, toggleNotification) => {\n try {\n await del(`/users-permissions/roles/${id}`);\n } catch (error) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occured' }),\n });\n }\n };\n\n const fetchData = async (toggleNotification, formatMessage, notifyStatus) => {\n try {\n const { data } = await get('/users-permissions/roles');\n notifyStatus('The roles have loaded successfully');\n\n return data;\n } catch (err) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n\n throw new Error(err);\n }\n };\n\n const emptyLayout = {\n roles: {\n id: getTrad('Roles.empty'),\n defaultMessage: \"You don't have any roles yet.\",\n },\n search: {\n id: getTrad('Roles.empty.search'),\n defaultMessage: 'No roles match the search.',\n },\n };\n\n const pageTitle = formatMessage({\n id: 'global.roles',\n defaultMessage: 'Roles',\n });\n\n const deleteMutation = useMutation((id) => deleteData(id, formatMessage, toggleNotification), {\n async onSuccess() {\n await refetch();\n },\n });\n\n const handleConfirmDelete = async () => {\n await deleteMutation.mutateAsync(roleToDelete);\n setShowConfirmDelete(!showConfirmDelete);\n };\n\n const sortedRoles = (roles || [])\n .filter((role) => contains(role.name, _q) || contains(role.description, _q))\n .sort(\n (a, b) => formatter.compare(a.name, b.name) || formatter.compare(a.description, b.description)\n );\n\n const emptyContent = _q && !sortedRoles.length ? 'search' : 'roles';\n\n const colCount = 4;\n const rowCount = (roles?.length || 0) + 1;\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n return (\n <Layouts.Root>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n { name: pageTitle }\n )}\n </Page.Title>\n <Page.Main>\n <Layouts.Header\n title={formatMessage({\n id: 'global.roles',\n defaultMessage: 'Roles',\n })}\n subtitle={formatMessage({\n id: 'Settings.roles.list.description',\n defaultMessage: 'List of roles',\n })}\n primaryAction={\n canCreate ? (\n <LinkButton\n to=\"new\"\n tag={NavLink}\n onClick={() => trackUsage('willCreateRole')}\n startIcon={<Plus />}\n size=\"S\"\n >\n {formatMessage({\n id: getTrad('List.button.roles'),\n defaultMessage: 'Add new role',\n })}\n </LinkButton>\n ) : null\n }\n />\n\n <Layouts.Action\n startActions={\n <SearchInput\n label={formatMessage({\n id: 'app.component.search.label',\n defaultMessage: 'Search',\n })}\n />\n }\n />\n\n <Layouts.Content>\n {!canRead && <Page.NoPermissions />}\n {canRead && sortedRoles && sortedRoles?.length ? (\n <Table colCount={colCount} rowCount={rowCount}>\n <Thead>\n <Tr>\n <Th>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({ id: 'global.name', defaultMessage: 'Name' })}\n </Typography>\n </Th>\n <Th>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({\n id: 'global.description',\n defaultMessage: 'Description',\n })}\n </Typography>\n </Th>\n <Th>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({\n id: 'global.users',\n defaultMessage: 'Users',\n })}\n </Typography>\n </Th>\n <Th>\n <VisuallyHidden>\n {formatMessage({\n id: 'global.actions',\n defaultMessage: 'Actions',\n })}\n </VisuallyHidden>\n </Th>\n </Tr>\n </Thead>\n <TableBody\n sortedRoles={sortedRoles}\n canDelete={canDelete}\n canUpdate={canUpdate}\n permissions={PERMISSIONS}\n setRoleToDelete={setRoleToDelete}\n onDelete={[showConfirmDelete, setShowConfirmDelete]}\n />\n </Table>\n ) : (\n <EmptyStateLayout content={formatMessage(emptyLayout[emptyContent])} />\n )}\n </Layouts.Content>\n <Dialog.Root open={showConfirmDelete} onOpenChange={handleShowConfirmDelete}>\n <ConfirmDialog onConfirm={handleConfirmDelete} />\n </Dialog.Root>\n </Page.Main>\n </Layouts.Root>\n );\n};\n\nexport const ProtectedRolesListPage = () => {\n return (\n <Page.Protect permissions={PERMISSIONS.accessRoles}>\n <RolesListPage />\n </Page.Protect>\n );\n};\n"],"names":["RolesListPage","trackUsage","useTracking","formatMessage","locale","useIntl","toggleNotification","useNotification","notifyStatus","useNotifyAT","query","useQueryParams","_q","showConfirmDelete","setShowConfirmDelete","useState","roleToDelete","setRoleToDelete","del","get","useFetchClient","isLoading","isLoadingForPermissions","allowedActions","canRead","canDelete","canCreate","canUpdate","useRBAC","create","PERMISSIONS","createRole","read","readRoles","update","updateRole","delete","deleteRole","isLoadingForData","data","roles","isFetching","refetch","useQuery","fetchData","initialData","enabled","contains","useFilter","sensitivity","formatter","useCollator","handleShowConfirmDelete","deleteData","id","error","type","message","defaultMessage","err","Error","emptyLayout","getTrad","search","pageTitle","deleteMutation","useMutation","onSuccess","handleConfirmDelete","mutateAsync","sortedRoles","filter","role","name","description","sort","a","b","compare","emptyContent","length","colCount","rowCount","_jsx","Page","Loading","_jsxs","Layouts","Root","Title","Main","Header","title","subtitle","primaryAction","LinkButton","to","tag","NavLink","onClick","startIcon","Plus","size","Action","startActions","SearchInput","label","Content","NoPermissions","Table","Thead","Tr","Th","Typography","variant","textColor","VisuallyHidden","TableBody","permissions","onDelete","EmptyStateLayout","content","Dialog","open","onOpenChange","ConfirmDialog","onConfirm","ProtectedRolesListPage","Protect","accessRoles"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../../../../../admin/src/pages/Roles/pages/ListPage/index.jsx"],"sourcesContent":["import React, { useState } from 'react';\n\nimport {\n Table,\n Th,\n Thead,\n Tr,\n Typography,\n useNotifyAT,\n VisuallyHidden,\n EmptyStateLayout,\n useCollator,\n useFilter,\n LinkButton,\n Dialog,\n} from '@strapi/design-system';\nimport { Plus } from '@strapi/icons';\nimport {\n ConfirmDialog,\n useTracking,\n Page,\n SearchInput,\n useNotification,\n useQueryParams,\n useFetchClient,\n useRBAC,\n Layouts,\n} from '@strapi/strapi/admin';\nimport { useIntl } from 'react-intl';\nimport { useMutation, useQuery } from 'react-query';\nimport { NavLink } from 'react-router-dom';\n\nimport { PERMISSIONS } from '../../../../constants';\nimport { getTrad } from '../../../../utils';\n\nimport TableBody from './components/TableBody';\n\nexport const RolesListPage = () => {\n const { trackUsage } = useTracking();\n const { formatMessage, locale } = useIntl();\n const { toggleNotification } = useNotification();\n const { notifyStatus } = useNotifyAT();\n const [{ query }] = useQueryParams();\n const _q = query?._q || '';\n const [showConfirmDelete, setShowConfirmDelete] = useState(false);\n const [roleToDelete, setRoleToDelete] = useState();\n const { del, get } = useFetchClient();\n\n const {\n isLoading: isLoadingForPermissions,\n allowedActions: { canRead, canDelete, canCreate, canUpdate },\n } = useRBAC({\n create: PERMISSIONS.createRole,\n read: PERMISSIONS.readRoles,\n update: PERMISSIONS.updateRole,\n delete: PERMISSIONS.deleteRole,\n });\n\n const {\n isLoading: isLoadingForData,\n data: { roles },\n isFetching,\n refetch,\n } = useQuery('get-roles', () => fetchData(toggleNotification, formatMessage, notifyStatus), {\n initialData: {},\n enabled: canRead,\n });\n\n const { contains } = useFilter(locale, {\n sensitivity: 'base',\n });\n\n /**\n * @type {Intl.Collator}\n */\n const formatter = useCollator(locale, {\n sensitivity: 'base',\n });\n\n const isLoading = isLoadingForData || isFetching || isLoadingForPermissions;\n\n const handleShowConfirmDelete = () => {\n setShowConfirmDelete(!showConfirmDelete);\n };\n\n const deleteData = async (id, formatMessage, toggleNotification) => {\n try {\n await del(`/users-permissions/roles/${id}`);\n } catch (error) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occured' }),\n });\n }\n };\n\n const fetchData = async (toggleNotification, formatMessage, notifyStatus) => {\n try {\n const { data } = await get('/users-permissions/roles');\n notifyStatus('The roles have loaded successfully');\n\n return data;\n } catch (err) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n\n throw new Error(err);\n }\n };\n\n const emptyLayout = {\n roles: {\n id: getTrad('Roles.empty'),\n defaultMessage: \"You don't have any roles yet.\",\n },\n search: {\n id: getTrad('Roles.empty.search'),\n defaultMessage: 'No roles match the search.',\n },\n };\n\n const pageTitle = formatMessage({\n id: 'global.roles',\n defaultMessage: 'Roles',\n });\n\n const deleteMutation = useMutation((id) => deleteData(id, formatMessage, toggleNotification), {\n async onSuccess() {\n await refetch();\n },\n });\n\n const handleConfirmDelete = async () => {\n await deleteMutation.mutateAsync(roleToDelete);\n setShowConfirmDelete(!showConfirmDelete);\n };\n\n const sortedRoles = (roles || [])\n .filter((role) => contains(role.name, _q) || contains(role.description, _q))\n .sort(\n (a, b) => formatter.compare(a.name, b.name) || formatter.compare(a.description, b.description)\n );\n\n const emptyContent = _q && !sortedRoles.length ? 'search' : 'roles';\n\n const colCount = 4;\n const rowCount = (roles?.length || 0) + 1;\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n return (\n <Page.Main>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n { name: pageTitle }\n )}\n </Page.Title>\n <Layouts.Header\n title={formatMessage({\n id: 'global.roles',\n defaultMessage: 'Roles',\n })}\n subtitle={formatMessage({\n id: 'Settings.roles.list.description',\n defaultMessage: 'List of roles',\n })}\n primaryAction={\n canCreate ? (\n <LinkButton\n to=\"new\"\n tag={NavLink}\n onClick={() => trackUsage('willCreateRole')}\n startIcon={<Plus />}\n size=\"S\"\n >\n {formatMessage({\n id: getTrad('List.button.roles'),\n defaultMessage: 'Add new role',\n })}\n </LinkButton>\n ) : null\n }\n />\n\n <Layouts.Action\n startActions={\n <SearchInput\n label={formatMessage({\n id: 'app.component.search.label',\n defaultMessage: 'Search',\n })}\n />\n }\n />\n\n <Layouts.Content>\n {!canRead && <Page.NoPermissions />}\n {canRead && sortedRoles && sortedRoles?.length ? (\n <Table colCount={colCount} rowCount={rowCount}>\n <Thead>\n <Tr>\n <Th>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({ id: 'global.name', defaultMessage: 'Name' })}\n </Typography>\n </Th>\n <Th>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({\n id: 'global.description',\n defaultMessage: 'Description',\n })}\n </Typography>\n </Th>\n <Th>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({\n id: 'global.users',\n defaultMessage: 'Users',\n })}\n </Typography>\n </Th>\n <Th>\n <VisuallyHidden>\n {formatMessage({\n id: 'global.actions',\n defaultMessage: 'Actions',\n })}\n </VisuallyHidden>\n </Th>\n </Tr>\n </Thead>\n <TableBody\n sortedRoles={sortedRoles}\n canDelete={canDelete}\n canUpdate={canUpdate}\n permissions={PERMISSIONS}\n setRoleToDelete={setRoleToDelete}\n onDelete={[showConfirmDelete, setShowConfirmDelete]}\n />\n </Table>\n ) : (\n <EmptyStateLayout content={formatMessage(emptyLayout[emptyContent])} />\n )}\n </Layouts.Content>\n <Dialog.Root open={showConfirmDelete} onOpenChange={handleShowConfirmDelete}>\n <ConfirmDialog onConfirm={handleConfirmDelete} />\n </Dialog.Root>\n </Page.Main>\n );\n};\n\nexport const ProtectedRolesListPage = () => {\n return (\n <Page.Protect permissions={PERMISSIONS.accessRoles}>\n <RolesListPage />\n </Page.Protect>\n );\n};\n"],"names":["RolesListPage","trackUsage","useTracking","formatMessage","locale","useIntl","toggleNotification","useNotification","notifyStatus","useNotifyAT","query","useQueryParams","_q","showConfirmDelete","setShowConfirmDelete","useState","roleToDelete","setRoleToDelete","del","get","useFetchClient","isLoading","isLoadingForPermissions","allowedActions","canRead","canDelete","canCreate","canUpdate","useRBAC","create","PERMISSIONS","createRole","read","readRoles","update","updateRole","delete","deleteRole","isLoadingForData","data","roles","isFetching","refetch","useQuery","fetchData","initialData","enabled","contains","useFilter","sensitivity","formatter","useCollator","handleShowConfirmDelete","deleteData","id","error","type","message","defaultMessage","err","Error","emptyLayout","getTrad","search","pageTitle","deleteMutation","useMutation","onSuccess","handleConfirmDelete","mutateAsync","sortedRoles","filter","role","name","description","sort","a","b","compare","emptyContent","length","colCount","rowCount","_jsx","Page","Loading","_jsxs","Main","Title","Layouts","Header","title","subtitle","primaryAction","LinkButton","to","tag","NavLink","onClick","startIcon","Plus","size","Action","startActions","SearchInput","label","Content","NoPermissions","Table","Thead","Tr","Th","Typography","variant","textColor","VisuallyHidden","TableBody","permissions","onDelete","EmptyStateLayout","content","Dialog","Root","open","onOpenChange","ConfirmDialog","onConfirm","ProtectedRolesListPage","Protect","accessRoles"],"mappings":"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"}
|
|
@@ -19,6 +19,7 @@ var en = {
|
|
|
19
19
|
"EditPage.form.roles": "Role details",
|
|
20
20
|
"Email.template.data.loaded": "Email templates has been loaded",
|
|
21
21
|
"Email.template.email_confirmation": "Email address confirmation",
|
|
22
|
+
"Email.template.reset_password": "Reset password",
|
|
22
23
|
"Email.template.form.edit.label": "Edit a template",
|
|
23
24
|
"Email.template.table.action.label": "action",
|
|
24
25
|
"Email.template.table.icon.label": "icon",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"en.json.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"en.json.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -17,6 +17,7 @@ var en = {
|
|
|
17
17
|
"EditPage.form.roles": "Role details",
|
|
18
18
|
"Email.template.data.loaded": "Email templates has been loaded",
|
|
19
19
|
"Email.template.email_confirmation": "Email address confirmation",
|
|
20
|
+
"Email.template.reset_password": "Reset password",
|
|
20
21
|
"Email.template.form.edit.label": "Edit a template",
|
|
21
22
|
"Email.template.table.action.label": "action",
|
|
22
23
|
"Email.template.table.icon.label": "icon",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"en.json.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"en.json.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -4,6 +4,7 @@ var require$$0 = require('crypto');
|
|
|
4
4
|
var require$$0$1 = require('lodash');
|
|
5
5
|
var index = require('../utils/index.js');
|
|
6
6
|
var usersPermissionsActions = require('./users-permissions-actions.js');
|
|
7
|
+
var constants = require('../services/constants.js');
|
|
7
8
|
|
|
8
9
|
var bootstrap;
|
|
9
10
|
var hasRequiredBootstrap;
|
|
@@ -20,6 +21,11 @@ function requireBootstrap() {
|
|
|
20
21
|
const _ = require$$0$1;
|
|
21
22
|
const { getService } = index.__require();
|
|
22
23
|
const usersPermissionsActions$1 = usersPermissionsActions.__require();
|
|
24
|
+
const { DEFAULT_ACCESS_TOKEN_LIFESPAN, DEFAULT_MAX_REFRESH_TOKEN_LIFESPAN, DEFAULT_IDLE_REFRESH_TOKEN_LIFESPAN, DEFAULT_MAX_SESSION_LIFESPAN, DEFAULT_IDLE_SESSION_LIFESPAN } = constants.__require();
|
|
25
|
+
const getSessionManager = ()=>{
|
|
26
|
+
const manager = strapi.sessionManager;
|
|
27
|
+
return manager ?? null;
|
|
28
|
+
};
|
|
23
29
|
const initGrant = async (pluginStore)=>{
|
|
24
30
|
const allProviders = getService('providers-registry').getAll();
|
|
25
31
|
const grantConfig = Object.entries(allProviders).reduce((acc, [name, provider])=>{
|
|
@@ -114,27 +120,42 @@ function requireBootstrap() {
|
|
|
114
120
|
});
|
|
115
121
|
}
|
|
116
122
|
};
|
|
117
|
-
bootstrap = async ({ strapi })=>{
|
|
118
|
-
const pluginStore =
|
|
123
|
+
bootstrap = async ({ strapi: strapi1 })=>{
|
|
124
|
+
const pluginStore = strapi1.store({
|
|
119
125
|
type: 'plugin',
|
|
120
126
|
name: 'users-permissions'
|
|
121
127
|
});
|
|
122
128
|
await initGrant(pluginStore);
|
|
123
129
|
await initEmails(pluginStore);
|
|
124
130
|
await initAdvancedOptions(pluginStore);
|
|
125
|
-
await
|
|
131
|
+
await strapi1.service('admin::permission').actionProvider.registerMany(usersPermissionsActions$1.actions);
|
|
126
132
|
await getService('users-permissions').initialize();
|
|
127
|
-
|
|
133
|
+
// Define users-permissions origin configuration for sessionManager
|
|
134
|
+
const upConfig = strapi1.config.get('plugin::users-permissions');
|
|
135
|
+
const sessionManager = getSessionManager();
|
|
136
|
+
if (sessionManager) {
|
|
137
|
+
sessionManager.defineOrigin('users-permissions', {
|
|
138
|
+
jwtSecret: upConfig.jwtSecret || strapi1.config.get('admin.auth.secret'),
|
|
139
|
+
accessTokenLifespan: upConfig.sessions?.accessTokenLifespan || DEFAULT_ACCESS_TOKEN_LIFESPAN,
|
|
140
|
+
maxRefreshTokenLifespan: upConfig.sessions?.maxRefreshTokenLifespan || DEFAULT_MAX_REFRESH_TOKEN_LIFESPAN,
|
|
141
|
+
idleRefreshTokenLifespan: upConfig.sessions?.idleRefreshTokenLifespan || DEFAULT_IDLE_REFRESH_TOKEN_LIFESPAN,
|
|
142
|
+
maxSessionLifespan: upConfig.sessions?.maxSessionLifespan || DEFAULT_MAX_SESSION_LIFESPAN,
|
|
143
|
+
idleSessionLifespan: upConfig.sessions?.idleSessionLifespan || DEFAULT_IDLE_SESSION_LIFESPAN,
|
|
144
|
+
algorithm: upConfig.jwt?.algorithm,
|
|
145
|
+
jwtOptions: upConfig.jwt || {}
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
if (!strapi1.config.get('plugin::users-permissions.jwtSecret')) {
|
|
128
149
|
if (process.env.NODE_ENV !== 'development') {
|
|
129
150
|
throw new Error(`Missing jwtSecret. Please, set configuration variable "jwtSecret" for the users-permissions plugin in config/plugins.js (ex: you can generate one using Node with \`crypto.randomBytes(16).toString('base64')\`).
|
|
130
151
|
For security reasons, prefer storing the secret in an environment variable and read it in config/plugins.js. See https://docs.strapi.io/developer-docs/latest/setup-deployment-guides/configurations/optional/environment.html#configuration-using-environment-variables.`);
|
|
131
152
|
}
|
|
132
153
|
const jwtSecret = crypto.randomBytes(16).toString('base64');
|
|
133
|
-
|
|
154
|
+
strapi1.config.set('plugin::users-permissions.jwtSecret', jwtSecret);
|
|
134
155
|
if (!process.env.JWT_SECRET) {
|
|
135
156
|
const envPath = process.env.ENV_PATH || '.env';
|
|
136
|
-
|
|
137
|
-
|
|
157
|
+
strapi1.fs.appendFile(envPath, `JWT_SECRET=${jwtSecret}\n`);
|
|
158
|
+
strapi1.log.info(`The Users & Permissions plugin automatically generated a jwt secret and stored it in ${envPath} under the name JWT_SECRET.`);
|
|
138
159
|
}
|
|
139
160
|
}
|
|
140
161
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../server/bootstrap/index.js"],"sourcesContent":["'use strict';\n\n/**\n * An asynchronous bootstrap function that runs before\n * your application gets started.\n *\n * This gives you an opportunity to set up your data model,\n * run jobs, or perform some special logic.\n */\nconst crypto = require('crypto');\nconst _ = require('lodash');\nconst { getService } = require('../utils');\nconst usersPermissionsActions = require('./users-permissions-actions');\n\nconst initGrant = async (pluginStore) => {\n const allProviders = getService('providers-registry').getAll();\n\n const grantConfig = Object.entries(allProviders).reduce((acc, [name, provider]) => {\n const { icon, enabled, grantConfig } = provider;\n\n acc[name] = {\n icon,\n enabled,\n ...grantConfig,\n };\n return acc;\n }, {});\n\n const prevGrantConfig = (await pluginStore.get({ key: 'grant' })) || {};\n\n if (!prevGrantConfig || !_.isEqual(prevGrantConfig, grantConfig)) {\n // merge with the previous provider config.\n _.keys(grantConfig).forEach((key) => {\n if (key in prevGrantConfig) {\n grantConfig[key] = _.merge(grantConfig[key], prevGrantConfig[key]);\n }\n });\n await pluginStore.set({ key: 'grant', value: grantConfig });\n }\n};\n\nconst initEmails = async (pluginStore) => {\n if (!(await pluginStore.get({ key: 'email' }))) {\n const value = {\n reset_password: {\n display: 'Email.template.reset_password',\n icon: 'sync',\n options: {\n from: {\n name: 'Administration Panel',\n email: 'no-reply@strapi.io',\n },\n response_email: '',\n object: 'Reset password',\n message: `<p>We heard that you lost your password. Sorry about that!</p>\n\n<p>But don’t worry! You can use the following link to reset your password:</p>\n<p><%= URL %>?code=<%= TOKEN %></p>\n\n<p>Thanks.</p>`,\n },\n },\n email_confirmation: {\n display: 'Email.template.email_confirmation',\n icon: 'check-square',\n options: {\n from: {\n name: 'Administration Panel',\n email: 'no-reply@strapi.io',\n },\n response_email: '',\n object: 'Account confirmation',\n message: `<p>Thank you for registering!</p>\n\n<p>You have to confirm your email address. Please click on the link below.</p>\n\n<p><%= URL %>?confirmation=<%= CODE %></p>\n\n<p>Thanks.</p>`,\n },\n },\n };\n\n await pluginStore.set({ key: 'email', value });\n }\n};\n\nconst initAdvancedOptions = async (pluginStore) => {\n if (!(await pluginStore.get({ key: 'advanced' }))) {\n const value = {\n unique_email: true,\n allow_register: true,\n email_confirmation: false,\n email_reset_password: null,\n email_confirmation_redirection: null,\n default_role: 'authenticated',\n };\n\n await pluginStore.set({ key: 'advanced', value });\n }\n};\n\nmodule.exports = async ({ strapi }) => {\n const pluginStore = strapi.store({ type: 'plugin', name: 'users-permissions' });\n\n await initGrant(pluginStore);\n await initEmails(pluginStore);\n await initAdvancedOptions(pluginStore);\n\n await strapi\n .service('admin::permission')\n .actionProvider.registerMany(usersPermissionsActions.actions);\n\n await getService('users-permissions').initialize();\n\n if (!strapi.config.get('plugin::users-permissions.jwtSecret')) {\n if (process.env.NODE_ENV !== 'development') {\n throw new Error(\n `Missing jwtSecret. Please, set configuration variable \"jwtSecret\" for the users-permissions plugin in config/plugins.js (ex: you can generate one using Node with \\`crypto.randomBytes(16).toString('base64')\\`).\nFor security reasons, prefer storing the secret in an environment variable and read it in config/plugins.js. See https://docs.strapi.io/developer-docs/latest/setup-deployment-guides/configurations/optional/environment.html#configuration-using-environment-variables.`\n );\n }\n\n const jwtSecret = crypto.randomBytes(16).toString('base64');\n\n strapi.config.set('plugin::users-permissions.jwtSecret', jwtSecret);\n\n if (!process.env.JWT_SECRET) {\n const envPath = process.env.ENV_PATH || '.env';\n strapi.fs.appendFile(envPath, `JWT_SECRET=${jwtSecret}\\n`);\n strapi.log.info(\n `The Users & Permissions plugin automatically generated a jwt secret and stored it in ${envPath} under the name JWT_SECRET.`\n );\n }\n }\n};\n"],"names":["crypto","require$$0","_","require$$1","getService","require$$2","usersPermissionsActions","require$$3","initGrant","pluginStore","allProviders","getAll","grantConfig","Object","entries","reduce","acc","name","provider","icon","enabled","prevGrantConfig","get","key","isEqual","keys","forEach","merge","set","value","initEmails","reset_password","display","options","from","email","response_email","object","message","email_confirmation","initAdvancedOptions","unique_email","allow_register","email_reset_password","email_confirmation_redirection","default_role","bootstrap","strapi","store","type","service","actionProvider","registerMany","actions","initialize","config","process","env","NODE_ENV","Error","jwtSecret","randomBytes","toString","JWT_SECRET","envPath","ENV_PATH","fs","appendFile","log","info"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../server/bootstrap/index.js"],"sourcesContent":["'use strict';\n\n/**\n * An asynchronous bootstrap function that runs before\n * your application gets started.\n *\n * This gives you an opportunity to set up your data model,\n * run jobs, or perform some special logic.\n */\nconst crypto = require('crypto');\nconst _ = require('lodash');\nconst { getService } = require('../utils');\nconst usersPermissionsActions = require('./users-permissions-actions');\nconst {\n DEFAULT_ACCESS_TOKEN_LIFESPAN,\n DEFAULT_MAX_REFRESH_TOKEN_LIFESPAN,\n DEFAULT_IDLE_REFRESH_TOKEN_LIFESPAN,\n DEFAULT_MAX_SESSION_LIFESPAN,\n DEFAULT_IDLE_SESSION_LIFESPAN,\n} = require('../services/constants');\n\nconst getSessionManager = () => {\n const manager = strapi.sessionManager;\n return manager ?? null;\n};\n\nconst initGrant = async (pluginStore) => {\n const allProviders = getService('providers-registry').getAll();\n\n const grantConfig = Object.entries(allProviders).reduce((acc, [name, provider]) => {\n const { icon, enabled, grantConfig } = provider;\n\n acc[name] = {\n icon,\n enabled,\n ...grantConfig,\n };\n return acc;\n }, {});\n\n const prevGrantConfig = (await pluginStore.get({ key: 'grant' })) || {};\n\n if (!prevGrantConfig || !_.isEqual(prevGrantConfig, grantConfig)) {\n // merge with the previous provider config.\n _.keys(grantConfig).forEach((key) => {\n if (key in prevGrantConfig) {\n grantConfig[key] = _.merge(grantConfig[key], prevGrantConfig[key]);\n }\n });\n await pluginStore.set({ key: 'grant', value: grantConfig });\n }\n};\n\nconst initEmails = async (pluginStore) => {\n if (!(await pluginStore.get({ key: 'email' }))) {\n const value = {\n reset_password: {\n display: 'Email.template.reset_password',\n icon: 'sync',\n options: {\n from: {\n name: 'Administration Panel',\n email: 'no-reply@strapi.io',\n },\n response_email: '',\n object: 'Reset password',\n message: `<p>We heard that you lost your password. Sorry about that!</p>\n\n<p>But don’t worry! You can use the following link to reset your password:</p>\n<p><%= URL %>?code=<%= TOKEN %></p>\n\n<p>Thanks.</p>`,\n },\n },\n email_confirmation: {\n display: 'Email.template.email_confirmation',\n icon: 'check-square',\n options: {\n from: {\n name: 'Administration Panel',\n email: 'no-reply@strapi.io',\n },\n response_email: '',\n object: 'Account confirmation',\n message: `<p>Thank you for registering!</p>\n\n<p>You have to confirm your email address. Please click on the link below.</p>\n\n<p><%= URL %>?confirmation=<%= CODE %></p>\n\n<p>Thanks.</p>`,\n },\n },\n };\n\n await pluginStore.set({ key: 'email', value });\n }\n};\n\nconst initAdvancedOptions = async (pluginStore) => {\n if (!(await pluginStore.get({ key: 'advanced' }))) {\n const value = {\n unique_email: true,\n allow_register: true,\n email_confirmation: false,\n email_reset_password: null,\n email_confirmation_redirection: null,\n default_role: 'authenticated',\n };\n\n await pluginStore.set({ key: 'advanced', value });\n }\n};\n\nmodule.exports = async ({ strapi }) => {\n const pluginStore = strapi.store({ type: 'plugin', name: 'users-permissions' });\n\n await initGrant(pluginStore);\n await initEmails(pluginStore);\n await initAdvancedOptions(pluginStore);\n\n await strapi\n .service('admin::permission')\n .actionProvider.registerMany(usersPermissionsActions.actions);\n\n await getService('users-permissions').initialize();\n\n // Define users-permissions origin configuration for sessionManager\n const upConfig = strapi.config.get('plugin::users-permissions');\n const sessionManager = getSessionManager();\n\n if (sessionManager) {\n sessionManager.defineOrigin('users-permissions', {\n jwtSecret: upConfig.jwtSecret || strapi.config.get('admin.auth.secret'),\n accessTokenLifespan: upConfig.sessions?.accessTokenLifespan || DEFAULT_ACCESS_TOKEN_LIFESPAN,\n maxRefreshTokenLifespan:\n upConfig.sessions?.maxRefreshTokenLifespan || DEFAULT_MAX_REFRESH_TOKEN_LIFESPAN,\n idleRefreshTokenLifespan:\n upConfig.sessions?.idleRefreshTokenLifespan || DEFAULT_IDLE_REFRESH_TOKEN_LIFESPAN,\n maxSessionLifespan: upConfig.sessions?.maxSessionLifespan || DEFAULT_MAX_SESSION_LIFESPAN,\n idleSessionLifespan: upConfig.sessions?.idleSessionLifespan || DEFAULT_IDLE_SESSION_LIFESPAN,\n algorithm: upConfig.jwt?.algorithm,\n jwtOptions: upConfig.jwt || {},\n });\n }\n\n if (!strapi.config.get('plugin::users-permissions.jwtSecret')) {\n if (process.env.NODE_ENV !== 'development') {\n throw new Error(\n `Missing jwtSecret. Please, set configuration variable \"jwtSecret\" for the users-permissions plugin in config/plugins.js (ex: you can generate one using Node with \\`crypto.randomBytes(16).toString('base64')\\`).\nFor security reasons, prefer storing the secret in an environment variable and read it in config/plugins.js. See https://docs.strapi.io/developer-docs/latest/setup-deployment-guides/configurations/optional/environment.html#configuration-using-environment-variables.`\n );\n }\n\n const jwtSecret = crypto.randomBytes(16).toString('base64');\n\n strapi.config.set('plugin::users-permissions.jwtSecret', jwtSecret);\n\n if (!process.env.JWT_SECRET) {\n const envPath = process.env.ENV_PATH || '.env';\n strapi.fs.appendFile(envPath, `JWT_SECRET=${jwtSecret}\\n`);\n strapi.log.info(\n `The Users & Permissions plugin automatically generated a jwt secret and stored it in ${envPath} under the name JWT_SECRET.`\n );\n }\n }\n};\n"],"names":["crypto","require$$0","_","require$$1","getService","require$$2","usersPermissionsActions","require$$3","DEFAULT_ACCESS_TOKEN_LIFESPAN","DEFAULT_MAX_REFRESH_TOKEN_LIFESPAN","DEFAULT_IDLE_REFRESH_TOKEN_LIFESPAN","DEFAULT_MAX_SESSION_LIFESPAN","DEFAULT_IDLE_SESSION_LIFESPAN","require$$4","getSessionManager","manager","strapi","sessionManager","initGrant","pluginStore","allProviders","getAll","grantConfig","Object","entries","reduce","acc","name","provider","icon","enabled","prevGrantConfig","get","key","isEqual","keys","forEach","merge","set","value","initEmails","reset_password","display","options","from","email","response_email","object","message","email_confirmation","initAdvancedOptions","unique_email","allow_register","email_reset_password","email_confirmation_redirection","default_role","bootstrap","store","type","service","actionProvider","registerMany","actions","initialize","upConfig","config","defineOrigin","jwtSecret","accessTokenLifespan","sessions","maxRefreshTokenLifespan","idleRefreshTokenLifespan","maxSessionLifespan","idleSessionLifespan","algorithm","jwt","jwtOptions","process","env","NODE_ENV","Error","randomBytes","toString","JWT_SECRET","envPath","ENV_PATH","fs","appendFile","log","info"],"mappings":"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"}
|
|
@@ -2,6 +2,7 @@ import require$$0 from 'crypto';
|
|
|
2
2
|
import require$$0$1 from 'lodash';
|
|
3
3
|
import { __require as requireUtils } from '../utils/index.mjs';
|
|
4
4
|
import { __require as requireUsersPermissionsActions } from './users-permissions-actions.mjs';
|
|
5
|
+
import { __require as requireConstants } from '../services/constants.mjs';
|
|
5
6
|
|
|
6
7
|
var bootstrap;
|
|
7
8
|
var hasRequiredBootstrap;
|
|
@@ -18,6 +19,11 @@ function requireBootstrap() {
|
|
|
18
19
|
const _ = require$$0$1;
|
|
19
20
|
const { getService } = requireUtils();
|
|
20
21
|
const usersPermissionsActions = requireUsersPermissionsActions();
|
|
22
|
+
const { DEFAULT_ACCESS_TOKEN_LIFESPAN, DEFAULT_MAX_REFRESH_TOKEN_LIFESPAN, DEFAULT_IDLE_REFRESH_TOKEN_LIFESPAN, DEFAULT_MAX_SESSION_LIFESPAN, DEFAULT_IDLE_SESSION_LIFESPAN } = requireConstants();
|
|
23
|
+
const getSessionManager = ()=>{
|
|
24
|
+
const manager = strapi.sessionManager;
|
|
25
|
+
return manager ?? null;
|
|
26
|
+
};
|
|
21
27
|
const initGrant = async (pluginStore)=>{
|
|
22
28
|
const allProviders = getService('providers-registry').getAll();
|
|
23
29
|
const grantConfig = Object.entries(allProviders).reduce((acc, [name, provider])=>{
|
|
@@ -112,27 +118,42 @@ function requireBootstrap() {
|
|
|
112
118
|
});
|
|
113
119
|
}
|
|
114
120
|
};
|
|
115
|
-
bootstrap = async ({ strapi })=>{
|
|
116
|
-
const pluginStore =
|
|
121
|
+
bootstrap = async ({ strapi: strapi1 })=>{
|
|
122
|
+
const pluginStore = strapi1.store({
|
|
117
123
|
type: 'plugin',
|
|
118
124
|
name: 'users-permissions'
|
|
119
125
|
});
|
|
120
126
|
await initGrant(pluginStore);
|
|
121
127
|
await initEmails(pluginStore);
|
|
122
128
|
await initAdvancedOptions(pluginStore);
|
|
123
|
-
await
|
|
129
|
+
await strapi1.service('admin::permission').actionProvider.registerMany(usersPermissionsActions.actions);
|
|
124
130
|
await getService('users-permissions').initialize();
|
|
125
|
-
|
|
131
|
+
// Define users-permissions origin configuration for sessionManager
|
|
132
|
+
const upConfig = strapi1.config.get('plugin::users-permissions');
|
|
133
|
+
const sessionManager = getSessionManager();
|
|
134
|
+
if (sessionManager) {
|
|
135
|
+
sessionManager.defineOrigin('users-permissions', {
|
|
136
|
+
jwtSecret: upConfig.jwtSecret || strapi1.config.get('admin.auth.secret'),
|
|
137
|
+
accessTokenLifespan: upConfig.sessions?.accessTokenLifespan || DEFAULT_ACCESS_TOKEN_LIFESPAN,
|
|
138
|
+
maxRefreshTokenLifespan: upConfig.sessions?.maxRefreshTokenLifespan || DEFAULT_MAX_REFRESH_TOKEN_LIFESPAN,
|
|
139
|
+
idleRefreshTokenLifespan: upConfig.sessions?.idleRefreshTokenLifespan || DEFAULT_IDLE_REFRESH_TOKEN_LIFESPAN,
|
|
140
|
+
maxSessionLifespan: upConfig.sessions?.maxSessionLifespan || DEFAULT_MAX_SESSION_LIFESPAN,
|
|
141
|
+
idleSessionLifespan: upConfig.sessions?.idleSessionLifespan || DEFAULT_IDLE_SESSION_LIFESPAN,
|
|
142
|
+
algorithm: upConfig.jwt?.algorithm,
|
|
143
|
+
jwtOptions: upConfig.jwt || {}
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
if (!strapi1.config.get('plugin::users-permissions.jwtSecret')) {
|
|
126
147
|
if (process.env.NODE_ENV !== 'development') {
|
|
127
148
|
throw new Error(`Missing jwtSecret. Please, set configuration variable "jwtSecret" for the users-permissions plugin in config/plugins.js (ex: you can generate one using Node with \`crypto.randomBytes(16).toString('base64')\`).
|
|
128
149
|
For security reasons, prefer storing the secret in an environment variable and read it in config/plugins.js. See https://docs.strapi.io/developer-docs/latest/setup-deployment-guides/configurations/optional/environment.html#configuration-using-environment-variables.`);
|
|
129
150
|
}
|
|
130
151
|
const jwtSecret = crypto.randomBytes(16).toString('base64');
|
|
131
|
-
|
|
152
|
+
strapi1.config.set('plugin::users-permissions.jwtSecret', jwtSecret);
|
|
132
153
|
if (!process.env.JWT_SECRET) {
|
|
133
154
|
const envPath = process.env.ENV_PATH || '.env';
|
|
134
|
-
|
|
135
|
-
|
|
155
|
+
strapi1.fs.appendFile(envPath, `JWT_SECRET=${jwtSecret}\n`);
|
|
156
|
+
strapi1.log.info(`The Users & Permissions plugin automatically generated a jwt secret and stored it in ${envPath} under the name JWT_SECRET.`);
|
|
136
157
|
}
|
|
137
158
|
}
|
|
138
159
|
};
|