@strapi/plugin-users-permissions 0.0.0-next.e21fe90bf2ab9906267ea6e6ca620bdcc729906c → 0.0.0-next.e326c69a49373b420f6566c30aca26f4b6274c6a
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 +3 -12
- package/admin/src/pages/Roles/pages/EditPage.jsx +3 -12
- package/admin/src/pages/Roles/pages/ListPage/index.jsx +91 -93
- package/admin/src/utils/formatPluginName.js +1 -1
- 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 +1 -1
- package/dist/admin/pages/Roles/pages/CreatePage.js.map +1 -1
- package/dist/admin/pages/Roles/pages/CreatePage.mjs +2 -2
- package/dist/admin/pages/Roles/pages/CreatePage.mjs.map +1 -1
- package/dist/admin/pages/Roles/pages/EditPage.js +1 -1
- package/dist/admin/pages/Roles/pages/EditPage.js.map +1 -1
- package/dist/admin/pages/Roles/pages/EditPage.mjs +2 -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/utils/formatPluginName.js +1 -1
- package/dist/admin/utils/formatPluginName.js.map +1 -1
- package/dist/admin/utils/formatPluginName.mjs +1 -1
- package/dist/admin/utils/formatPluginName.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 +198 -3
- package/dist/server/controllers/auth.js.map +1 -1
- package/dist/server/controllers/auth.mjs +198 -3
- package/dist/server/controllers/auth.mjs.map +1 -1
- package/dist/server/controllers/content-manager-user.js +3 -3
- package/dist/server/controllers/content-manager-user.js.map +1 -1
- package/dist/server/controllers/content-manager-user.mjs +3 -3
- package/dist/server/controllers/content-manager-user.mjs.map +1 -1
- package/dist/server/controllers/validation/user.js +6 -1
- package/dist/server/controllers/validation/user.js.map +1 -1
- package/dist/server/controllers/validation/user.mjs +6 -1
- package/dist/server/controllers/validation/user.mjs.map +1 -1
- package/dist/server/routes/content-api/auth.js +155 -91
- package/dist/server/routes/content-api/auth.js.map +1 -1
- package/dist/server/routes/content-api/auth.mjs +155 -91
- package/dist/server/routes/content-api/auth.mjs.map +1 -1
- package/dist/server/routes/content-api/index.js +11 -9
- package/dist/server/routes/content-api/index.js.map +1 -1
- package/dist/server/routes/content-api/index.mjs +11 -9
- package/dist/server/routes/content-api/index.mjs.map +1 -1
- package/dist/server/routes/content-api/permissions.js +14 -7
- package/dist/server/routes/content-api/permissions.js.map +1 -1
- package/dist/server/routes/content-api/permissions.mjs +14 -7
- package/dist/server/routes/content-api/permissions.mjs.map +1 -1
- package/dist/server/routes/content-api/role.js +61 -27
- package/dist/server/routes/content-api/role.js.map +1 -1
- package/dist/server/routes/content-api/role.mjs +61 -27
- package/dist/server/routes/content-api/role.mjs.map +1 -1
- package/dist/server/routes/content-api/user.js +119 -57
- package/dist/server/routes/content-api/user.js.map +1 -1
- package/dist/server/routes/content-api/user.mjs +119 -57
- package/dist/server/routes/content-api/user.mjs.map +1 -1
- package/dist/server/routes/content-api/validation.js +217 -0
- package/dist/server/routes/content-api/validation.js.map +1 -0
- package/dist/server/routes/content-api/validation.mjs +215 -0
- package/dist/server/routes/content-api/validation.mjs.map +1 -0
- 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/dist/server/services/users-permissions.js +4 -3
- package/dist/server/services/users-permissions.js.map +1 -1
- package/dist/server/services/users-permissions.mjs +4 -3
- package/dist/server/services/users-permissions.mjs.map +1 -1
- package/package.json +8 -7
- package/server/bootstrap/index.js +31 -0
- package/server/config.js +22 -0
- package/server/controllers/auth.js +232 -8
- package/server/controllers/content-manager-user.js +3 -4
- package/server/controllers/validation/user.js +12 -1
- package/server/routes/content-api/auth.js +119 -71
- package/server/routes/content-api/index.js +11 -4
- package/server/routes/content-api/permissions.js +14 -7
- package/server/routes/content-api/role.js +57 -27
- package/server/routes/content-api/user.js +108 -51
- package/server/routes/content-api/validation.js +250 -0
- package/server/services/constants.js +9 -0
- package/server/services/jwt.js +50 -2
- package/server/services/user.js +11 -0
- package/server/services/users-permissions.js +4 -2
|
@@ -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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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"formatPluginName.js","sources":["../../../admin/src/utils/formatPluginName.js"],"sourcesContent":["import upperFirst from 'lodash/upperFirst';\n\nfunction formatPluginName(pluginSlug) {\n switch (pluginSlug) {\n case 'application':\n return 'Application';\n case 'plugin::content-manager':\n return 'Content manager';\n case 'plugin::content-type-builder':\n return 'Content types builder';\n case 'plugin::documentation':\n return 'Documentation';\n case 'plugin::email':\n return 'Email';\n case 'plugin::i18n':\n return 'i18n';\n case 'plugin::upload':\n return '
|
|
1
|
+
{"version":3,"file":"formatPluginName.js","sources":["../../../admin/src/utils/formatPluginName.js"],"sourcesContent":["import upperFirst from 'lodash/upperFirst';\n\nfunction formatPluginName(pluginSlug) {\n switch (pluginSlug) {\n case 'application':\n return 'Application';\n case 'plugin::content-manager':\n return 'Content manager';\n case 'plugin::content-type-builder':\n return 'Content types builder';\n case 'plugin::documentation':\n return 'Documentation';\n case 'plugin::email':\n return 'Email';\n case 'plugin::i18n':\n return 'i18n';\n case 'plugin::upload':\n return 'Media Library';\n case 'plugin::users-permissions':\n return 'Users-permissions';\n default:\n return upperFirst(pluginSlug.replace('api::', '').replace('plugin::', ''));\n }\n}\n\nexport default formatPluginName;\n"],"names":["formatPluginName","pluginSlug","upperFirst","replace"],"mappings":";;;;AAEA,SAASA,iBAAiBC,UAAU,EAAA;IAClC,OAAQA,UAAAA;QACN,KAAK,aAAA;YACH,OAAO,aAAA;QACT,KAAK,yBAAA;YACH,OAAO,iBAAA;QACT,KAAK,8BAAA;YACH,OAAO,uBAAA;QACT,KAAK,uBAAA;YACH,OAAO,eAAA;QACT,KAAK,eAAA;YACH,OAAO,OAAA;QACT,KAAK,cAAA;YACH,OAAO,MAAA;QACT,KAAK,gBAAA;YACH,OAAO,eAAA;QACT,KAAK,2BAAA;YACH,OAAO,mBAAA;AACT,QAAA;YACE,OAAOC,UAAAA,CAAWD,WAAWE,OAAO,CAAC,SAAS,EAAIA,CAAAA,CAAAA,OAAO,CAAC,UAAY,EAAA,EAAA,CAAA,CAAA;AAC1E;AACF;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"formatPluginName.mjs","sources":["../../../admin/src/utils/formatPluginName.js"],"sourcesContent":["import upperFirst from 'lodash/upperFirst';\n\nfunction formatPluginName(pluginSlug) {\n switch (pluginSlug) {\n case 'application':\n return 'Application';\n case 'plugin::content-manager':\n return 'Content manager';\n case 'plugin::content-type-builder':\n return 'Content types builder';\n case 'plugin::documentation':\n return 'Documentation';\n case 'plugin::email':\n return 'Email';\n case 'plugin::i18n':\n return 'i18n';\n case 'plugin::upload':\n return '
|
|
1
|
+
{"version":3,"file":"formatPluginName.mjs","sources":["../../../admin/src/utils/formatPluginName.js"],"sourcesContent":["import upperFirst from 'lodash/upperFirst';\n\nfunction formatPluginName(pluginSlug) {\n switch (pluginSlug) {\n case 'application':\n return 'Application';\n case 'plugin::content-manager':\n return 'Content manager';\n case 'plugin::content-type-builder':\n return 'Content types builder';\n case 'plugin::documentation':\n return 'Documentation';\n case 'plugin::email':\n return 'Email';\n case 'plugin::i18n':\n return 'i18n';\n case 'plugin::upload':\n return 'Media Library';\n case 'plugin::users-permissions':\n return 'Users-permissions';\n default:\n return upperFirst(pluginSlug.replace('api::', '').replace('plugin::', ''));\n }\n}\n\nexport default formatPluginName;\n"],"names":["formatPluginName","pluginSlug","upperFirst","replace"],"mappings":";;AAEA,SAASA,iBAAiBC,UAAU,EAAA;IAClC,OAAQA,UAAAA;QACN,KAAK,aAAA;YACH,OAAO,aAAA;QACT,KAAK,yBAAA;YACH,OAAO,iBAAA;QACT,KAAK,8BAAA;YACH,OAAO,uBAAA;QACT,KAAK,uBAAA;YACH,OAAO,eAAA;QACT,KAAK,eAAA;YACH,OAAO,OAAA;QACT,KAAK,cAAA;YACH,OAAO,MAAA;QACT,KAAK,gBAAA;YACH,OAAO,eAAA;QACT,KAAK,2BAAA;YACH,OAAO,mBAAA;AACT,QAAA;YACE,OAAOC,UAAAA,CAAWD,WAAWE,OAAO,CAAC,SAAS,EAAIA,CAAAA,CAAAA,OAAO,CAAC,UAAY,EAAA,EAAA,CAAA,CAAA;AAC1E;AACF;;;;"}
|
|
@@ -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
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","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":";;;;;;;;;;AAEA;;;;;;AAMA,KACA,MAAMA,MAASC,GAAAA,UAAAA;AACf,IAAA,MAAMC,CAAIC,GAAAA,YAAAA;IACV,MAAM,EAAEC,UAAU,EAAE,GAAGC,YAAAA,EAAAA;AACvB,IAAA,MAAMC,uBAA0BC,GAAAA,8BAAAA,EAAAA;AAEhC,IAAA,MAAMC,YAAY,OAAOC,WAAAA,GAAAA;QACvB,MAAMC,YAAAA,GAAeN,UAAW,CAAA,oBAAA,CAAA,CAAsBO,MAAM,EAAA;QAE5D,MAAMC,WAAAA,GAAcC,MAAOC,CAAAA,OAAO,CAACJ,YAAAA,CAAAA,CAAcK,MAAM,CAAC,CAACC,GAAAA,EAAK,CAACC,IAAAA,EAAMC,QAAS,CAAA,GAAA;AAC5E,YAAA,MAAM,EAAEC,IAAI,EAAEC,OAAO,EAAER,WAAW,EAAE,GAAGM,QAAAA;YAEvCF,GAAG,CAACC,KAAK,GAAG;AACVE,gBAAAA,IAAAA;AACAC,gBAAAA,OAAAA;AACA,gBAAA,GAAGR;AACT,aAAA;YACI,OAAOI,GAAAA;AACR,SAAA,EAAE,EAAE,CAAA;AAEL,QAAA,MAAMK,eAAkB,GAAC,MAAMZ,WAAAA,CAAYa,GAAG,CAAC;YAAEC,GAAK,EAAA;cAAe;AAErE,QAAA,IAAI,CAACF,eAAmB,IAAA,CAACnB,EAAEsB,OAAO,CAACH,iBAAiBT,WAAc,CAAA,EAAA;;AAEhEV,YAAAA,CAAAA,CAAEuB,IAAI,CAACb,WAAac,CAAAA,CAAAA,OAAO,CAAC,CAACH,GAAAA,GAAAA;AAC3B,gBAAA,IAAIA,OAAOF,eAAiB,EAAA;AAC1BT,oBAAAA,WAAW,CAACW,GAAAA,CAAI,GAAGrB,CAAAA,CAAEyB,KAAK,CAACf,WAAW,CAACW,GAAI,CAAA,EAAEF,eAAe,CAACE,GAAI,CAAA,CAAA;AAClE;AACP,aAAA,CAAA;YACI,MAAMd,WAAAA,CAAYmB,GAAG,CAAC;gBAAEL,GAAK,EAAA,OAAA;gBAASM,KAAOjB,EAAAA;AAAW,aAAA,CAAA;AACzD;AACH,KAAA;AAEA,IAAA,MAAMkB,aAAa,OAAOrB,WAAAA,GAAAA;AACxB,QAAA,IAAI,CAAE,MAAMA,WAAYa,CAAAA,GAAG,CAAC;YAAEC,GAAK,EAAA;SAAa,CAAA,EAAA;AAC9C,YAAA,MAAMM,KAAQ,GAAA;gBACZE,cAAgB,EAAA;oBACdC,OAAS,EAAA,+BAAA;oBACTb,IAAM,EAAA,MAAA;oBACNc,OAAS,EAAA;wBACPC,IAAM,EAAA;4BACJjB,IAAM,EAAA,sBAAA;4BACNkB,KAAO,EAAA;AACR,yBAAA;wBACDC,cAAgB,EAAA,EAAA;wBAChBC,MAAQ,EAAA,gBAAA;AACRC,wBAAAA,OAAAA,EAAS,CAAC;;;;;cAKN;AACL;AACF,iBAAA;gBACDC,kBAAoB,EAAA;oBAClBP,OAAS,EAAA,mCAAA;oBACTb,IAAM,EAAA,cAAA;oBACNc,OAAS,EAAA;wBACPC,IAAM,EAAA;4BACJjB,IAAM,EAAA,sBAAA;4BACNkB,KAAO,EAAA;AACR,yBAAA;wBACDC,cAAgB,EAAA,EAAA;wBAChBC,MAAQ,EAAA,sBAAA;AACRC,wBAAAA,OAAAA,EAAS,CAAC;;;;;;cAMN;AACL;AACF;AACP,aAAA;YAEI,MAAM7B,WAAAA,CAAYmB,GAAG,CAAC;gBAAEL,GAAK,EAAA,OAAA;AAASM,gBAAAA;AAAK,aAAA,CAAA;AAC5C;AACH,KAAA;AAEA,IAAA,MAAMW,sBAAsB,OAAO/B,WAAAA,GAAAA;AACjC,QAAA,IAAI,CAAE,MAAMA,WAAYa,CAAAA,GAAG,CAAC;YAAEC,GAAK,EAAA;SAAgB,CAAA,EAAA;AACjD,YAAA,MAAMM,KAAQ,GAAA;gBACZY,YAAc,EAAA,IAAA;gBACdC,cAAgB,EAAA,IAAA;gBAChBH,kBAAoB,EAAA,KAAA;gBACpBI,oBAAsB,EAAA,IAAA;gBACtBC,8BAAgC,EAAA,IAAA;gBAChCC,YAAc,EAAA;AACpB,aAAA;YAEI,MAAMpC,WAAAA,CAAYmB,GAAG,CAAC;gBAAEL,GAAK,EAAA,UAAA;AAAYM,gBAAAA;AAAK,aAAA,CAAA;AAC/C;AACH,KAAA;IAEAiB,SAAiB,GAAA,OAAO,EAAEC,MAAM,EAAE,GAAA;QAChC,MAAMtC,WAAAA,GAAcsC,MAAOC,CAAAA,KAAK,CAAC;YAAEC,IAAM,EAAA,QAAA;YAAUhC,IAAM,EAAA;AAAmB,SAAA,CAAA;AAE5E,QAAA,MAAMT,SAAUC,CAAAA,WAAAA,CAAAA;AAChB,QAAA,MAAMqB,UAAWrB,CAAAA,WAAAA,CAAAA;AACjB,QAAA,MAAM+B,mBAAoB/B,CAAAA,WAAAA,CAAAA;QAE1B,MAAMsC,MAAAA,CACHG,OAAO,CAAC,mBAAA,CAAA,CACRC,cAAc,CAACC,YAAY,CAAC9C,uBAAAA,CAAwB+C,OAAO,CAAA;QAE9D,MAAMjD,UAAAA,CAAW,qBAAqBkD,UAAU,EAAA;AAEhD,QAAA,IAAI,CAACP,MAAOQ,CAAAA,MAAM,CAACjC,GAAG,CAAC,qCAAwC,CAAA,EAAA;AAC7D,YAAA,IAAIkC,OAAQC,CAAAA,GAAG,CAACC,QAAQ,KAAK,aAAe,EAAA;gBAC1C,MAAM,IAAIC,MACR,CAAC;yQACgQ,CAAC,CAAA;AAErQ;AAED,YAAA,MAAMC,YAAY5D,MAAO6D,CAAAA,WAAW,CAAC,EAAA,CAAA,CAAIC,QAAQ,CAAC,QAAA,CAAA;AAElDf,YAAAA,MAAAA,CAAOQ,MAAM,CAAC3B,GAAG,CAAC,qCAAuCgC,EAAAA,SAAAA,CAAAA;AAEzD,YAAA,IAAI,CAACJ,OAAAA,CAAQC,GAAG,CAACM,UAAU,EAAE;AAC3B,gBAAA,MAAMC,OAAUR,GAAAA,OAAAA,CAAQC,GAAG,CAACQ,QAAQ,IAAI,MAAA;gBACxClB,MAAOmB,CAAAA,EAAE,CAACC,UAAU,CAACH,OAAAA,EAAS,CAAC,WAAW,EAAEJ,SAAU,CAAA,EAAE,CAAC,CAAA;gBACzDb,MAAOqB,CAAAA,GAAG,CAACC,IAAI,CACb,CAAC,qFAAqF,EAAEL,OAAQ,CAAA,2BAA2B,CAAC,CAAA;AAE/H;AACF;AACH,KAAA;;;;;;"}
|
|
1
|
+
{"version":3,"file":"index.mjs","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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"}
|