@strapi/admin 5.46.1 → 5.47.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/admin/src/StrapiApp.js +53 -11
- package/dist/admin/admin/src/StrapiApp.js.map +1 -1
- package/dist/admin/admin/src/StrapiApp.mjs +53 -11
- package/dist/admin/admin/src/StrapiApp.mjs.map +1 -1
- package/dist/admin/admin/src/components/Layouts/HeaderLayout.js +51 -8
- package/dist/admin/admin/src/components/Layouts/HeaderLayout.js.map +1 -1
- package/dist/admin/admin/src/components/Layouts/HeaderLayout.mjs +52 -9
- package/dist/admin/admin/src/components/Layouts/HeaderLayout.mjs.map +1 -1
- package/dist/admin/admin/src/components/Layouts/utils/getMatchingDocLink.js +167 -0
- package/dist/admin/admin/src/components/Layouts/utils/getMatchingDocLink.js.map +1 -0
- package/dist/admin/admin/src/components/Layouts/utils/getMatchingDocLink.mjs +165 -0
- package/dist/admin/admin/src/components/Layouts/utils/getMatchingDocLink.mjs.map +1 -0
- package/dist/admin/admin/src/constants.js +8 -11
- package/dist/admin/admin/src/constants.js.map +1 -1
- package/dist/admin/admin/src/constants.mjs +8 -11
- package/dist/admin/admin/src/constants.mjs.map +1 -1
- package/dist/admin/admin/src/features/Auth.js +27 -1
- package/dist/admin/admin/src/features/Auth.js.map +1 -1
- package/dist/admin/admin/src/features/Auth.mjs +28 -2
- package/dist/admin/admin/src/features/Auth.mjs.map +1 -1
- package/dist/admin/admin/src/features/Tracking.js.map +1 -1
- package/dist/admin/admin/src/features/Tracking.mjs.map +1 -1
- package/dist/admin/admin/src/hooks/useIdleSessionLogout.js +62 -0
- package/dist/admin/admin/src/hooks/useIdleSessionLogout.js.map +1 -0
- package/dist/admin/admin/src/hooks/useIdleSessionLogout.mjs +40 -0
- package/dist/admin/admin/src/hooks/useIdleSessionLogout.mjs.map +1 -0
- package/dist/admin/admin/src/pages/Settings/constants.js +1 -2
- package/dist/admin/admin/src/pages/Settings/constants.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/constants.mjs +1 -2
- package/dist/admin/admin/src/pages/Settings/constants.mjs.map +1 -1
- package/dist/admin/admin/src/render.js +2 -1
- package/dist/admin/admin/src/render.js.map +1 -1
- package/dist/admin/admin/src/render.mjs +2 -1
- package/dist/admin/admin/src/render.mjs.map +1 -1
- package/dist/admin/admin/src/translations/{dk.json.js → da.json.js} +3 -3
- package/dist/admin/admin/src/translations/{dk.json.js.map → da.json.js.map} +1 -1
- package/dist/admin/admin/src/translations/{dk.json.mjs → da.json.mjs} +3 -3
- package/dist/admin/admin/src/translations/{dk.json.mjs.map → da.json.mjs.map} +1 -1
- package/dist/admin/admin/src/translations/en.json.js +1 -0
- package/dist/admin/admin/src/translations/en.json.js.map +1 -1
- package/dist/admin/admin/src/translations/en.json.mjs +1 -0
- package/dist/admin/admin/src/translations/en.json.mjs.map +1 -1
- package/dist/admin/admin/src/translations/languageNativeNames.js +1 -1
- package/dist/admin/admin/src/translations/languageNativeNames.js.map +1 -1
- package/dist/admin/admin/src/translations/languageNativeNames.mjs +1 -1
- package/dist/admin/admin/src/translations/languageNativeNames.mjs.map +1 -1
- package/dist/admin/admin/src/translations/normalizeAdminLocale.js +8 -0
- package/dist/admin/admin/src/translations/normalizeAdminLocale.js.map +1 -0
- package/dist/admin/admin/src/translations/normalizeAdminLocale.mjs +6 -0
- package/dist/admin/admin/src/translations/normalizeAdminLocale.mjs.map +1 -0
- package/dist/admin/admin/src/translations/sk.json.js +446 -42
- package/dist/admin/admin/src/translations/sk.json.js.map +1 -1
- package/dist/admin/admin/src/translations/sk.json.mjs +445 -43
- package/dist/admin/admin/src/translations/sk.json.mjs.map +1 -1
- package/dist/admin/admin/src/utils/baseQuery.js +5 -0
- package/dist/admin/admin/src/utils/baseQuery.js.map +1 -1
- package/dist/admin/admin/src/utils/baseQuery.mjs +6 -1
- package/dist/admin/admin/src/utils/baseQuery.mjs.map +1 -1
- package/dist/admin/admin/src/utils/getFetchClient.js +24 -0
- package/dist/admin/admin/src/utils/getFetchClient.js.map +1 -1
- package/dist/admin/admin/src/utils/getFetchClient.mjs +23 -1
- package/dist/admin/admin/src/utils/getFetchClient.mjs.map +1 -1
- package/dist/admin/admin/src/utils/jwt.js +37 -0
- package/dist/admin/admin/src/utils/jwt.js.map +1 -0
- package/dist/admin/admin/src/utils/jwt.mjs +35 -0
- package/dist/admin/admin/src/utils/jwt.mjs.map +1 -0
- package/dist/admin/index.js +2 -0
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/index.mjs +1 -1
- package/dist/admin/src/StrapiApp.d.ts +2 -0
- package/dist/admin/src/components/Layouts/HeaderLayout.d.ts +2 -0
- package/dist/admin/src/components/Layouts/utils/getMatchingDocLink.d.ts +6 -0
- package/dist/admin/src/features/Tracking.d.ts +8 -1
- package/dist/admin/src/hooks/useAdminRoles.d.ts +1 -1
- package/dist/admin/src/hooks/useIdleSessionLogout.d.ts +33 -0
- package/dist/admin/src/services/admin.d.ts +6 -6
- package/dist/admin/src/services/contentApi.d.ts +1 -1
- package/dist/admin/src/services/users.d.ts +8 -8
- package/dist/admin/src/translations/languageNativeNames.d.ts +1 -1
- package/dist/admin/src/translations/normalizeAdminLocale.d.ts +4 -0
- package/dist/admin/src/utils/getFetchClient.d.ts +15 -1
- package/dist/admin/src/utils/jwt.d.ts +15 -0
- package/dist/server/server/src/bootstrap.js +3 -2
- package/dist/server/server/src/bootstrap.js.map +1 -1
- package/dist/server/server/src/bootstrap.mjs +4 -3
- package/dist/server/server/src/bootstrap.mjs.map +1 -1
- package/dist/server/server/src/controllers/admin.js +8 -2
- package/dist/server/server/src/controllers/admin.js.map +1 -1
- package/dist/server/server/src/controllers/admin.mjs +8 -2
- package/dist/server/server/src/controllers/admin.mjs.map +1 -1
- package/dist/server/server/src/controllers/webhooks.js +1 -2
- package/dist/server/server/src/controllers/webhooks.js.map +1 -1
- package/dist/server/server/src/controllers/webhooks.mjs +1 -2
- package/dist/server/server/src/controllers/webhooks.mjs.map +1 -1
- package/dist/server/server/src/migrations/database/migrate-prefered-language-dk-to-da.js +28 -0
- package/dist/server/server/src/migrations/database/migrate-prefered-language-dk-to-da.js.map +1 -0
- package/dist/server/server/src/migrations/database/migrate-prefered-language-dk-to-da.mjs +26 -0
- package/dist/server/server/src/migrations/database/migrate-prefered-language-dk-to-da.mjs.map +1 -0
- package/dist/server/server/src/policies/index.js +0 -2
- package/dist/server/server/src/policies/index.js.map +1 -1
- package/dist/server/server/src/policies/index.mjs +0 -2
- package/dist/server/server/src/policies/index.mjs.map +1 -1
- package/dist/server/server/src/register.js +3 -1
- package/dist/server/server/src/register.js.map +1 -1
- package/dist/server/server/src/register.mjs +2 -0
- package/dist/server/server/src/register.mjs.map +1 -1
- package/dist/server/server/src/routes/admin-tokens.js +0 -7
- package/dist/server/server/src/routes/admin-tokens.js.map +1 -1
- package/dist/server/server/src/routes/admin-tokens.mjs +0 -7
- package/dist/server/server/src/routes/admin-tokens.mjs.map +1 -1
- package/dist/server/server/src/routes/serve-admin-panel.js +8 -1
- package/dist/server/server/src/routes/serve-admin-panel.js.map +1 -1
- package/dist/server/server/src/routes/serve-admin-panel.mjs +6 -2
- package/dist/server/server/src/routes/serve-admin-panel.mjs.map +1 -1
- package/dist/server/server/src/services/api-token.js +71 -1
- package/dist/server/server/src/services/api-token.js.map +1 -1
- package/dist/server/server/src/services/api-token.mjs +71 -2
- package/dist/server/server/src/services/api-token.mjs.map +1 -1
- package/dist/server/server/src/services/token.js +11 -0
- package/dist/server/server/src/services/token.js.map +1 -1
- package/dist/server/server/src/services/token.mjs +11 -1
- package/dist/server/server/src/services/token.mjs.map +1 -1
- package/dist/server/server/src/strategies/admin-token.js +5 -63
- package/dist/server/server/src/strategies/admin-token.js.map +1 -1
- package/dist/server/server/src/strategies/admin-token.mjs +6 -64
- package/dist/server/server/src/strategies/admin-token.mjs.map +1 -1
- package/dist/server/src/bootstrap.d.ts.map +1 -1
- package/dist/server/src/controllers/admin.d.ts.map +1 -1
- package/dist/server/src/controllers/webhooks.d.ts.map +1 -1
- package/dist/server/src/index.d.ts +0 -5
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/migrations/database/migrate-prefered-language-dk-to-da.d.ts +22 -0
- package/dist/server/src/migrations/database/migrate-prefered-language-dk-to-da.d.ts.map +1 -0
- package/dist/server/src/policies/index.d.ts +0 -5
- package/dist/server/src/policies/index.d.ts.map +1 -1
- package/dist/server/src/register.d.ts.map +1 -1
- package/dist/server/src/routes/admin-tokens.d.ts.map +1 -1
- package/dist/server/src/routes/serve-admin-panel.d.ts +2 -0
- package/dist/server/src/routes/serve-admin-panel.d.ts.map +1 -1
- package/dist/server/src/services/api-token.d.ts +15 -1
- package/dist/server/src/services/api-token.d.ts.map +1 -1
- package/dist/server/src/services/token.d.ts +7 -1
- package/dist/server/src/services/token.d.ts.map +1 -1
- package/dist/server/src/strategies/admin-token.d.ts +12 -22
- package/dist/server/src/strategies/admin-token.d.ts.map +1 -1
- package/package.json +10 -12
- package/dist/server/server/src/policies/isAdminTokensEnabled.js +0 -16
- package/dist/server/server/src/policies/isAdminTokensEnabled.js.map +0 -1
- package/dist/server/server/src/policies/isAdminTokensEnabled.mjs +0 -14
- package/dist/server/server/src/policies/isAdminTokensEnabled.mjs.map +0 -1
- package/dist/server/src/policies/isAdminTokensEnabled.d.ts +0 -7
- package/dist/server/src/policies/isAdminTokensEnabled.d.ts.map +0 -1
|
@@ -5,7 +5,6 @@ var adminTokens = [
|
|
|
5
5
|
handler: 'admin-token.create',
|
|
6
6
|
config: {
|
|
7
7
|
policies: [
|
|
8
|
-
'admin::isAdminTokensEnabled',
|
|
9
8
|
'admin::isAuthenticatedAdmin',
|
|
10
9
|
{
|
|
11
10
|
name: 'admin::hasPermissions',
|
|
@@ -24,7 +23,6 @@ var adminTokens = [
|
|
|
24
23
|
handler: 'admin-token.list',
|
|
25
24
|
config: {
|
|
26
25
|
policies: [
|
|
27
|
-
'admin::isAdminTokensEnabled',
|
|
28
26
|
'admin::isAuthenticatedAdmin',
|
|
29
27
|
{
|
|
30
28
|
name: 'admin::hasPermissions',
|
|
@@ -43,7 +41,6 @@ var adminTokens = [
|
|
|
43
41
|
handler: 'admin-token.revoke',
|
|
44
42
|
config: {
|
|
45
43
|
policies: [
|
|
46
|
-
'admin::isAdminTokensEnabled',
|
|
47
44
|
'admin::isAuthenticatedAdmin',
|
|
48
45
|
{
|
|
49
46
|
name: 'admin::hasPermissions',
|
|
@@ -62,7 +59,6 @@ var adminTokens = [
|
|
|
62
59
|
handler: 'admin-token.get',
|
|
63
60
|
config: {
|
|
64
61
|
policies: [
|
|
65
|
-
'admin::isAdminTokensEnabled',
|
|
66
62
|
'admin::isAuthenticatedAdmin',
|
|
67
63
|
{
|
|
68
64
|
name: 'admin::hasPermissions',
|
|
@@ -81,7 +77,6 @@ var adminTokens = [
|
|
|
81
77
|
handler: 'admin-token.update',
|
|
82
78
|
config: {
|
|
83
79
|
policies: [
|
|
84
|
-
'admin::isAdminTokensEnabled',
|
|
85
80
|
'admin::isAuthenticatedAdmin',
|
|
86
81
|
{
|
|
87
82
|
name: 'admin::hasPermissions',
|
|
@@ -100,7 +95,6 @@ var adminTokens = [
|
|
|
100
95
|
handler: 'admin-token.regenerate',
|
|
101
96
|
config: {
|
|
102
97
|
policies: [
|
|
103
|
-
'admin::isAdminTokensEnabled',
|
|
104
98
|
'admin::isAuthenticatedAdmin',
|
|
105
99
|
{
|
|
106
100
|
name: 'admin::hasPermissions',
|
|
@@ -119,7 +113,6 @@ var adminTokens = [
|
|
|
119
113
|
handler: 'admin-token.getOwnerPermissions',
|
|
120
114
|
config: {
|
|
121
115
|
policies: [
|
|
122
|
-
'admin::isAdminTokensEnabled',
|
|
123
116
|
'admin::isAuthenticatedAdmin',
|
|
124
117
|
{
|
|
125
118
|
name: 'admin::hasPermissions',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin-tokens.mjs","sources":["../../../../../server/src/routes/admin-tokens.ts"],"sourcesContent":["export default [\n {\n method: 'POST',\n path: '/admin-tokens',\n handler: 'admin-token.create',\n config: {\n policies: [\n 'admin::
|
|
1
|
+
{"version":3,"file":"admin-tokens.mjs","sources":["../../../../../server/src/routes/admin-tokens.ts"],"sourcesContent":["export default [\n {\n method: 'POST',\n path: '/admin-tokens',\n handler: 'admin-token.create',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n { name: 'admin::hasPermissions', config: { actions: ['admin::admin-tokens.create'] } },\n ],\n },\n },\n {\n method: 'GET',\n path: '/admin-tokens',\n handler: 'admin-token.list',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n { name: 'admin::hasPermissions', config: { actions: ['admin::admin-tokens.read'] } },\n ],\n },\n },\n {\n method: 'DELETE',\n path: '/admin-tokens/:id',\n handler: 'admin-token.revoke',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n { name: 'admin::hasPermissions', config: { actions: ['admin::admin-tokens.delete'] } },\n ],\n },\n },\n {\n method: 'GET',\n path: '/admin-tokens/:id',\n handler: 'admin-token.get',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n { name: 'admin::hasPermissions', config: { actions: ['admin::admin-tokens.read'] } },\n ],\n },\n },\n {\n method: 'PUT',\n path: '/admin-tokens/:id',\n handler: 'admin-token.update',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n { name: 'admin::hasPermissions', config: { actions: ['admin::admin-tokens.update'] } },\n ],\n },\n },\n {\n method: 'POST',\n path: '/admin-tokens/:id/regenerate',\n handler: 'admin-token.regenerate',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n { name: 'admin::hasPermissions', config: { actions: ['admin::admin-tokens.regenerate'] } },\n ],\n },\n },\n {\n method: 'GET',\n path: '/admin-tokens/:id/owner-permissions',\n handler: 'admin-token.getOwnerPermissions',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n { name: 'admin::hasPermissions', config: { actions: ['admin::admin-tokens.read'] } },\n ],\n },\n },\n];\n"],"names":["method","path","handler","config","policies","name","actions"],"mappings":"AAAA,kBAAe;AACb,IAAA;QACEA,MAAAA,EAAQ,MAAA;QACRC,IAAAA,EAAM,eAAA;QACNC,OAAAA,EAAS,oBAAA;QACTC,MAAAA,EAAQ;YACNC,QAAAA,EAAU;AACR,gBAAA,6BAAA;AACA,gBAAA;oBAAEC,IAAAA,EAAM,uBAAA;oBAAyBF,MAAAA,EAAQ;wBAAEG,OAAAA,EAAS;AAAC,4BAAA;AAA6B;AAAC;AAAE;AACtF;AACH;AACF,KAAA;AACA,IAAA;QACEN,MAAAA,EAAQ,KAAA;QACRC,IAAAA,EAAM,eAAA;QACNC,OAAAA,EAAS,kBAAA;QACTC,MAAAA,EAAQ;YACNC,QAAAA,EAAU;AACR,gBAAA,6BAAA;AACA,gBAAA;oBAAEC,IAAAA,EAAM,uBAAA;oBAAyBF,MAAAA,EAAQ;wBAAEG,OAAAA,EAAS;AAAC,4BAAA;AAA2B;AAAC;AAAE;AACpF;AACH;AACF,KAAA;AACA,IAAA;QACEN,MAAAA,EAAQ,QAAA;QACRC,IAAAA,EAAM,mBAAA;QACNC,OAAAA,EAAS,oBAAA;QACTC,MAAAA,EAAQ;YACNC,QAAAA,EAAU;AACR,gBAAA,6BAAA;AACA,gBAAA;oBAAEC,IAAAA,EAAM,uBAAA;oBAAyBF,MAAAA,EAAQ;wBAAEG,OAAAA,EAAS;AAAC,4BAAA;AAA6B;AAAC;AAAE;AACtF;AACH;AACF,KAAA;AACA,IAAA;QACEN,MAAAA,EAAQ,KAAA;QACRC,IAAAA,EAAM,mBAAA;QACNC,OAAAA,EAAS,iBAAA;QACTC,MAAAA,EAAQ;YACNC,QAAAA,EAAU;AACR,gBAAA,6BAAA;AACA,gBAAA;oBAAEC,IAAAA,EAAM,uBAAA;oBAAyBF,MAAAA,EAAQ;wBAAEG,OAAAA,EAAS;AAAC,4BAAA;AAA2B;AAAC;AAAE;AACpF;AACH;AACF,KAAA;AACA,IAAA;QACEN,MAAAA,EAAQ,KAAA;QACRC,IAAAA,EAAM,mBAAA;QACNC,OAAAA,EAAS,oBAAA;QACTC,MAAAA,EAAQ;YACNC,QAAAA,EAAU;AACR,gBAAA,6BAAA;AACA,gBAAA;oBAAEC,IAAAA,EAAM,uBAAA;oBAAyBF,MAAAA,EAAQ;wBAAEG,OAAAA,EAAS;AAAC,4BAAA;AAA6B;AAAC;AAAE;AACtF;AACH;AACF,KAAA;AACA,IAAA;QACEN,MAAAA,EAAQ,MAAA;QACRC,IAAAA,EAAM,8BAAA;QACNC,OAAAA,EAAS,wBAAA;QACTC,MAAAA,EAAQ;YACNC,QAAAA,EAAU;AACR,gBAAA,6BAAA;AACA,gBAAA;oBAAEC,IAAAA,EAAM,uBAAA;oBAAyBF,MAAAA,EAAQ;wBAAEG,OAAAA,EAAS;AAAC,4BAAA;AAAiC;AAAC;AAAE;AAC1F;AACH;AACF,KAAA;AACA,IAAA;QACEN,MAAAA,EAAQ,KAAA;QACRC,IAAAA,EAAM,qCAAA;QACNC,OAAAA,EAAS,iCAAA;QACTC,MAAAA,EAAQ;YACNC,QAAAA,EAAU;AACR,gBAAA,6BAAA;AACA,gBAAA;oBAAEC,IAAAA,EAAM,uBAAA;oBAAyBF,MAAAA,EAAQ;wBAAEG,OAAAA,EAAS;AAAC,4BAAA;AAA2B;AAAC;AAAE;AACpF;AACH;AACF;CACD;;;;"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
3
5
|
var path = require('path');
|
|
4
6
|
var fse = require('fs-extra');
|
|
5
7
|
var koaStatic = require('koa-static');
|
|
@@ -49,6 +51,10 @@ const registerAdminPanelRoute = ({ strapi })=>{
|
|
|
49
51
|
const serveStatic = (filesDir, koaStaticOptions = {})=>{
|
|
50
52
|
const serve = koaStatic(filesDir, koaStaticOptions);
|
|
51
53
|
return async (ctx, next)=>{
|
|
54
|
+
if (!path.extname(ctx.path)) {
|
|
55
|
+
await next();
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
52
58
|
const prev = ctx.path;
|
|
53
59
|
const newPath = path.basename(ctx.path);
|
|
54
60
|
ctx.path = newPath;
|
|
@@ -61,5 +67,6 @@ const serveStatic = (filesDir, koaStaticOptions = {})=>{
|
|
|
61
67
|
};
|
|
62
68
|
};
|
|
63
69
|
|
|
64
|
-
|
|
70
|
+
exports.default = registerAdminPanelRoute;
|
|
71
|
+
exports.serveStatic = serveStatic;
|
|
65
72
|
//# sourceMappingURL=serve-admin-panel.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serve-admin-panel.js","sources":["../../../../../server/src/routes/serve-admin-panel.ts"],"sourcesContent":["import type { Context, Next } from 'koa';\nimport { resolve, join, extname, basename } from 'path';\nimport fse from 'fs-extra';\nimport koaStatic from 'koa-static';\nimport type { Core } from '@strapi/types';\n\nconst registerAdminPanelRoute = ({ strapi }: { strapi: Core.Strapi }) => {\n let buildDir = resolve(strapi.dirs.dist.root, 'build');\n\n if (!fse.pathExistsSync(buildDir)) {\n buildDir = resolve(__dirname, '../../build');\n }\n\n const serveAdminMiddleware = async (ctx: Context, next: Next) => {\n await next();\n\n if (ctx.method !== 'HEAD' && ctx.method !== 'GET') {\n return;\n }\n\n if (ctx.body != null || ctx.status !== 404) {\n return;\n }\n\n ctx.type = 'html';\n ctx.body = fse.createReadStream(join(buildDir, 'index.html'));\n };\n\n strapi.server.routes([\n {\n method: 'GET',\n path: `${strapi.config.admin.path}/:path*`,\n handler: [\n serveAdminMiddleware,\n serveStatic(buildDir, {\n maxage: 31536000,\n defer: false,\n index: 'index.html',\n setHeaders(res: any, path: any) {\n const ext = extname(path);\n // publicly cache static files to avoid unnecessary network & disk access\n if (ext !== '.html') {\n res.setHeader('cache-control', 'public, max-age=31536000, immutable');\n }\n },\n }),\n ],\n config: { auth: false },\n },\n ]);\n};\n\n// serveStatic is not supposed to be used to serve a folder that have sub-folders\
|
|
1
|
+
{"version":3,"file":"serve-admin-panel.js","sources":["../../../../../server/src/routes/serve-admin-panel.ts"],"sourcesContent":["import type { Context, Next } from 'koa';\nimport { resolve, join, extname, basename } from 'path';\nimport fse from 'fs-extra';\nimport koaStatic from 'koa-static';\nimport type { Core } from '@strapi/types';\n\nconst registerAdminPanelRoute = ({ strapi }: { strapi: Core.Strapi }) => {\n let buildDir = resolve(strapi.dirs.dist.root, 'build');\n\n if (!fse.pathExistsSync(buildDir)) {\n buildDir = resolve(__dirname, '../../build');\n }\n\n const serveAdminMiddleware = async (ctx: Context, next: Next) => {\n await next();\n\n if (ctx.method !== 'HEAD' && ctx.method !== 'GET') {\n return;\n }\n\n if (ctx.body != null || ctx.status !== 404) {\n return;\n }\n\n ctx.type = 'html';\n ctx.body = fse.createReadStream(join(buildDir, 'index.html'));\n };\n\n strapi.server.routes([\n {\n method: 'GET',\n path: `${strapi.config.admin.path}/:path*`,\n handler: [\n serveAdminMiddleware,\n serveStatic(buildDir, {\n maxage: 31536000,\n defer: false,\n index: 'index.html',\n setHeaders(res: any, path: any) {\n const ext = extname(path);\n // publicly cache static files to avoid unnecessary network & disk access\n if (ext !== '.html') {\n res.setHeader('cache-control', 'public, max-age=31536000, immutable');\n }\n },\n }),\n ],\n config: { auth: false },\n },\n ]);\n};\n\n// serveStatic is not supposed to be used to serve a folder that have sub-folders\nexport const serveStatic = (filesDir: any, koaStaticOptions = {}) => {\n const serve = koaStatic(filesDir, koaStaticOptions);\n\n return async (ctx: Context, next: Next) => {\n if (!extname(ctx.path)) {\n await next();\n return;\n }\n\n const prev = ctx.path;\n const newPath = basename(ctx.path);\n\n ctx.path = newPath;\n await serve(ctx, async () => {\n ctx.path = prev;\n await next();\n ctx.path = newPath;\n });\n ctx.path = prev;\n };\n};\n\nexport default registerAdminPanelRoute;\n"],"names":["registerAdminPanelRoute","strapi","buildDir","resolve","dirs","dist","root","fse","pathExistsSync","__dirname","serveAdminMiddleware","ctx","next","method","body","status","type","createReadStream","join","server","routes","path","config","admin","handler","serveStatic","maxage","defer","index","setHeaders","res","ext","extname","setHeader","auth","filesDir","koaStaticOptions","serve","koaStatic","prev","newPath","basename"],"mappings":";;;;;;;;AAMA,MAAMA,uBAAAA,GAA0B,CAAC,EAAEC,MAAM,EAA2B,GAAA;IAClE,IAAIC,QAAAA,GAAWC,aAAQF,MAAAA,CAAOG,IAAI,CAACC,IAAI,CAACC,IAAI,EAAE,OAAA,CAAA;AAE9C,IAAA,IAAI,CAACC,GAAAA,CAAIC,cAAc,CAACN,QAAAA,CAAAA,EAAW;AACjCA,QAAAA,QAAAA,GAAWC,aAAQM,SAAAA,EAAW,aAAA,CAAA;AAChC,IAAA;IAEA,MAAMC,oBAAAA,GAAuB,OAAOC,GAAAA,EAAcC,IAAAA,GAAAA;QAChD,MAAMA,IAAAA,EAAAA;AAEN,QAAA,IAAID,IAAIE,MAAM,KAAK,UAAUF,GAAAA,CAAIE,MAAM,KAAK,KAAA,EAAO;AACjD,YAAA;AACF,QAAA;AAEA,QAAA,IAAIF,IAAIG,IAAI,IAAI,QAAQH,GAAAA,CAAII,MAAM,KAAK,GAAA,EAAK;AAC1C,YAAA;AACF,QAAA;AAEAJ,QAAAA,GAAAA,CAAIK,IAAI,GAAG,MAAA;AACXL,QAAAA,GAAAA,CAAIG,IAAI,GAAGP,GAAAA,CAAIU,gBAAgB,CAACC,UAAKhB,QAAAA,EAAU,YAAA,CAAA,CAAA;AACjD,IAAA,CAAA;IAEAD,MAAAA,CAAOkB,MAAM,CAACC,MAAM,CAAC;AACnB,QAAA;YACEP,MAAAA,EAAQ,KAAA;YACRQ,IAAAA,EAAM,CAAA,EAAGpB,OAAOqB,MAAM,CAACC,KAAK,CAACF,IAAI,CAAC,OAAO,CAAC;YAC1CG,OAAAA,EAAS;AACPd,gBAAAA,oBAAAA;AACAe,gBAAAA,WAAAA,CAAYvB,QAAAA,EAAU;oBACpBwB,MAAAA,EAAQ,QAAA;oBACRC,KAAAA,EAAO,KAAA;oBACPC,KAAAA,EAAO,YAAA;oBACPC,UAAAA,CAAAA,CAAWC,GAAQ,EAAET,MAAS,EAAA;AAC5B,wBAAA,MAAMU,MAAMC,YAAAA,CAAQX,MAAAA,CAAAA;;AAEpB,wBAAA,IAAIU,QAAQ,OAAA,EAAS;4BACnBD,GAAAA,CAAIG,SAAS,CAAC,eAAA,EAAiB,qCAAA,CAAA;AACjC,wBAAA;AACF,oBAAA;AACF,iBAAA;AACD,aAAA;YACDX,MAAAA,EAAQ;gBAAEY,IAAAA,EAAM;AAAM;AACxB;AACD,KAAA,CAAA;AACH;AAEA;MACaT,WAAAA,GAAc,CAACU,QAAAA,EAAeC,gBAAAA,GAAmB,EAAE,GAAA;IAC9D,MAAMC,KAAAA,GAAQC,UAAUH,QAAAA,EAAUC,gBAAAA,CAAAA;AAElC,IAAA,OAAO,OAAOzB,GAAAA,EAAcC,IAAAA,GAAAA;AAC1B,QAAA,IAAI,CAACoB,YAAAA,CAAQrB,GAAAA,CAAIU,IAAI,CAAA,EAAG;YACtB,MAAMT,IAAAA,EAAAA;AACN,YAAA;AACF,QAAA;QAEA,MAAM2B,IAAAA,GAAO5B,IAAIU,IAAI;QACrB,MAAMmB,OAAAA,GAAUC,aAAAA,CAAS9B,GAAAA,CAAIU,IAAI,CAAA;AAEjCV,QAAAA,GAAAA,CAAIU,IAAI,GAAGmB,OAAAA;AACX,QAAA,MAAMH,MAAM1B,GAAAA,EAAK,UAAA;AACfA,YAAAA,GAAAA,CAAIU,IAAI,GAAGkB,IAAAA;YACX,MAAM3B,IAAAA,EAAAA;AACND,YAAAA,GAAAA,CAAIU,IAAI,GAAGmB,OAAAA;AACb,QAAA,CAAA,CAAA;AACA7B,QAAAA,GAAAA,CAAIU,IAAI,GAAGkB,IAAAA;AACb,IAAA,CAAA;AACF;;;;;"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { resolve, join,
|
|
1
|
+
import { resolve, join, extname, basename } from 'path';
|
|
2
2
|
import fse from 'fs-extra';
|
|
3
3
|
import koaStatic from 'koa-static';
|
|
4
4
|
|
|
@@ -47,6 +47,10 @@ const registerAdminPanelRoute = ({ strapi })=>{
|
|
|
47
47
|
const serveStatic = (filesDir, koaStaticOptions = {})=>{
|
|
48
48
|
const serve = koaStatic(filesDir, koaStaticOptions);
|
|
49
49
|
return async (ctx, next)=>{
|
|
50
|
+
if (!extname(ctx.path)) {
|
|
51
|
+
await next();
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
50
54
|
const prev = ctx.path;
|
|
51
55
|
const newPath = basename(ctx.path);
|
|
52
56
|
ctx.path = newPath;
|
|
@@ -59,5 +63,5 @@ const serveStatic = (filesDir, koaStaticOptions = {})=>{
|
|
|
59
63
|
};
|
|
60
64
|
};
|
|
61
65
|
|
|
62
|
-
export { registerAdminPanelRoute as default };
|
|
66
|
+
export { registerAdminPanelRoute as default, serveStatic };
|
|
63
67
|
//# sourceMappingURL=serve-admin-panel.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serve-admin-panel.mjs","sources":["../../../../../server/src/routes/serve-admin-panel.ts"],"sourcesContent":["import type { Context, Next } from 'koa';\nimport { resolve, join, extname, basename } from 'path';\nimport fse from 'fs-extra';\nimport koaStatic from 'koa-static';\nimport type { Core } from '@strapi/types';\n\nconst registerAdminPanelRoute = ({ strapi }: { strapi: Core.Strapi }) => {\n let buildDir = resolve(strapi.dirs.dist.root, 'build');\n\n if (!fse.pathExistsSync(buildDir)) {\n buildDir = resolve(__dirname, '../../build');\n }\n\n const serveAdminMiddleware = async (ctx: Context, next: Next) => {\n await next();\n\n if (ctx.method !== 'HEAD' && ctx.method !== 'GET') {\n return;\n }\n\n if (ctx.body != null || ctx.status !== 404) {\n return;\n }\n\n ctx.type = 'html';\n ctx.body = fse.createReadStream(join(buildDir, 'index.html'));\n };\n\n strapi.server.routes([\n {\n method: 'GET',\n path: `${strapi.config.admin.path}/:path*`,\n handler: [\n serveAdminMiddleware,\n serveStatic(buildDir, {\n maxage: 31536000,\n defer: false,\n index: 'index.html',\n setHeaders(res: any, path: any) {\n const ext = extname(path);\n // publicly cache static files to avoid unnecessary network & disk access\n if (ext !== '.html') {\n res.setHeader('cache-control', 'public, max-age=31536000, immutable');\n }\n },\n }),\n ],\n config: { auth: false },\n },\n ]);\n};\n\n// serveStatic is not supposed to be used to serve a folder that have sub-folders\
|
|
1
|
+
{"version":3,"file":"serve-admin-panel.mjs","sources":["../../../../../server/src/routes/serve-admin-panel.ts"],"sourcesContent":["import type { Context, Next } from 'koa';\nimport { resolve, join, extname, basename } from 'path';\nimport fse from 'fs-extra';\nimport koaStatic from 'koa-static';\nimport type { Core } from '@strapi/types';\n\nconst registerAdminPanelRoute = ({ strapi }: { strapi: Core.Strapi }) => {\n let buildDir = resolve(strapi.dirs.dist.root, 'build');\n\n if (!fse.pathExistsSync(buildDir)) {\n buildDir = resolve(__dirname, '../../build');\n }\n\n const serveAdminMiddleware = async (ctx: Context, next: Next) => {\n await next();\n\n if (ctx.method !== 'HEAD' && ctx.method !== 'GET') {\n return;\n }\n\n if (ctx.body != null || ctx.status !== 404) {\n return;\n }\n\n ctx.type = 'html';\n ctx.body = fse.createReadStream(join(buildDir, 'index.html'));\n };\n\n strapi.server.routes([\n {\n method: 'GET',\n path: `${strapi.config.admin.path}/:path*`,\n handler: [\n serveAdminMiddleware,\n serveStatic(buildDir, {\n maxage: 31536000,\n defer: false,\n index: 'index.html',\n setHeaders(res: any, path: any) {\n const ext = extname(path);\n // publicly cache static files to avoid unnecessary network & disk access\n if (ext !== '.html') {\n res.setHeader('cache-control', 'public, max-age=31536000, immutable');\n }\n },\n }),\n ],\n config: { auth: false },\n },\n ]);\n};\n\n// serveStatic is not supposed to be used to serve a folder that have sub-folders\nexport const serveStatic = (filesDir: any, koaStaticOptions = {}) => {\n const serve = koaStatic(filesDir, koaStaticOptions);\n\n return async (ctx: Context, next: Next) => {\n if (!extname(ctx.path)) {\n await next();\n return;\n }\n\n const prev = ctx.path;\n const newPath = basename(ctx.path);\n\n ctx.path = newPath;\n await serve(ctx, async () => {\n ctx.path = prev;\n await next();\n ctx.path = newPath;\n });\n ctx.path = prev;\n };\n};\n\nexport default registerAdminPanelRoute;\n"],"names":["registerAdminPanelRoute","strapi","buildDir","resolve","dirs","dist","root","fse","pathExistsSync","__dirname","serveAdminMiddleware","ctx","next","method","body","status","type","createReadStream","join","server","routes","path","config","admin","handler","serveStatic","maxage","defer","index","setHeaders","res","ext","extname","setHeader","auth","filesDir","koaStaticOptions","serve","koaStatic","prev","newPath","basename"],"mappings":";;;;AAMA,MAAMA,uBAAAA,GAA0B,CAAC,EAAEC,MAAM,EAA2B,GAAA;IAClE,IAAIC,QAAAA,GAAWC,QAAQF,MAAAA,CAAOG,IAAI,CAACC,IAAI,CAACC,IAAI,EAAE,OAAA,CAAA;AAE9C,IAAA,IAAI,CAACC,GAAAA,CAAIC,cAAc,CAACN,QAAAA,CAAAA,EAAW;AACjCA,QAAAA,QAAAA,GAAWC,QAAQM,SAAAA,EAAW,aAAA,CAAA;AAChC,IAAA;IAEA,MAAMC,oBAAAA,GAAuB,OAAOC,GAAAA,EAAcC,IAAAA,GAAAA;QAChD,MAAMA,IAAAA,EAAAA;AAEN,QAAA,IAAID,IAAIE,MAAM,KAAK,UAAUF,GAAAA,CAAIE,MAAM,KAAK,KAAA,EAAO;AACjD,YAAA;AACF,QAAA;AAEA,QAAA,IAAIF,IAAIG,IAAI,IAAI,QAAQH,GAAAA,CAAII,MAAM,KAAK,GAAA,EAAK;AAC1C,YAAA;AACF,QAAA;AAEAJ,QAAAA,GAAAA,CAAIK,IAAI,GAAG,MAAA;AACXL,QAAAA,GAAAA,CAAIG,IAAI,GAAGP,GAAAA,CAAIU,gBAAgB,CAACC,KAAKhB,QAAAA,EAAU,YAAA,CAAA,CAAA;AACjD,IAAA,CAAA;IAEAD,MAAAA,CAAOkB,MAAM,CAACC,MAAM,CAAC;AACnB,QAAA;YACEP,MAAAA,EAAQ,KAAA;YACRQ,IAAAA,EAAM,CAAA,EAAGpB,OAAOqB,MAAM,CAACC,KAAK,CAACF,IAAI,CAAC,OAAO,CAAC;YAC1CG,OAAAA,EAAS;AACPd,gBAAAA,oBAAAA;AACAe,gBAAAA,WAAAA,CAAYvB,QAAAA,EAAU;oBACpBwB,MAAAA,EAAQ,QAAA;oBACRC,KAAAA,EAAO,KAAA;oBACPC,KAAAA,EAAO,YAAA;oBACPC,UAAAA,CAAAA,CAAWC,GAAQ,EAAET,IAAS,EAAA;AAC5B,wBAAA,MAAMU,MAAMC,OAAAA,CAAQX,IAAAA,CAAAA;;AAEpB,wBAAA,IAAIU,QAAQ,OAAA,EAAS;4BACnBD,GAAAA,CAAIG,SAAS,CAAC,eAAA,EAAiB,qCAAA,CAAA;AACjC,wBAAA;AACF,oBAAA;AACF,iBAAA;AACD,aAAA;YACDX,MAAAA,EAAQ;gBAAEY,IAAAA,EAAM;AAAM;AACxB;AACD,KAAA,CAAA;AACH;AAEA;MACaT,WAAAA,GAAc,CAACU,QAAAA,EAAeC,gBAAAA,GAAmB,EAAE,GAAA;IAC9D,MAAMC,KAAAA,GAAQC,UAAUH,QAAAA,EAAUC,gBAAAA,CAAAA;AAElC,IAAA,OAAO,OAAOzB,GAAAA,EAAcC,IAAAA,GAAAA;AAC1B,QAAA,IAAI,CAACoB,OAAAA,CAAQrB,GAAAA,CAAIU,IAAI,CAAA,EAAG;YACtB,MAAMT,IAAAA,EAAAA;AACN,YAAA;AACF,QAAA;QAEA,MAAM2B,IAAAA,GAAO5B,IAAIU,IAAI;QACrB,MAAMmB,OAAAA,GAAUC,QAAAA,CAAS9B,GAAAA,CAAIU,IAAI,CAAA;AAEjCV,QAAAA,GAAAA,CAAIU,IAAI,GAAGmB,OAAAA;AACX,QAAA,MAAMH,MAAM1B,GAAAA,EAAK,UAAA;AACfA,YAAAA,GAAAA,CAAIU,IAAI,GAAGkB,IAAAA;YACX,MAAM3B,IAAAA,EAAAA;AACND,YAAAA,GAAAA,CAAIU,IAAI,GAAGmB,OAAAA;AACb,QAAA,CAAA,CAAA;AACA7B,QAAAA,GAAAA,CAAIU,IAAI,GAAGkB,IAAAA;AACb,IAAA,CAAA;AACF;;;;"}
|
|
@@ -7,9 +7,10 @@ var constants = require('./constants.js');
|
|
|
7
7
|
var index = require('../utils/index.js');
|
|
8
8
|
var index$1 = require('../domain/permission/index.js');
|
|
9
9
|
var permission = require('../validation/permission.js');
|
|
10
|
+
var apiTokenUtils = require('../strategies/api-token-utils.js');
|
|
10
11
|
|
|
11
12
|
const { SUPER_ADMIN_CODE } = constants;
|
|
12
|
-
const { ValidationError, NotFoundError } = utils.errors;
|
|
13
|
+
const { ValidationError, NotFoundError, UnauthorizedError } = utils.errors;
|
|
13
14
|
const assertOwnerMatchesCallingUser = async (adminUserOwner, callingUser)=>{
|
|
14
15
|
if (callingUser === undefined || callingUser === null) {
|
|
15
16
|
throw new ValidationError('adminUserOwner requires an authenticated admin user');
|
|
@@ -36,6 +37,16 @@ const getOwnerId = (token)=>{
|
|
|
36
37
|
const owner = token.adminUserOwner;
|
|
37
38
|
return String(typeof owner === 'object' ? owner.id : owner);
|
|
38
39
|
};
|
|
40
|
+
const resolveAdminTokenOwnerId = (token)=>{
|
|
41
|
+
const owner = token.adminUserOwner;
|
|
42
|
+
if (owner === null || owner === undefined) {
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
if (typeof owner === 'object') {
|
|
46
|
+
return owner.id;
|
|
47
|
+
}
|
|
48
|
+
return owner;
|
|
49
|
+
};
|
|
39
50
|
const toAdminTokenOwner = (owner)=>{
|
|
40
51
|
if (owner === null || owner === undefined) {
|
|
41
52
|
throw new Error('adminUserOwner is required');
|
|
@@ -504,6 +515,63 @@ const pickComparableFields = fp.pick(COMPARABLE_FIELDS);
|
|
|
504
515
|
const salt = apiTokenCfg.salt;
|
|
505
516
|
return crypto.createHmac('sha512', salt).update(accessKey).digest('hex');
|
|
506
517
|
};
|
|
518
|
+
const authenticateAdminToken = async (accessToken)=>{
|
|
519
|
+
const apiToken = await getBy({
|
|
520
|
+
accessKey: hash(accessToken)
|
|
521
|
+
});
|
|
522
|
+
if (apiToken === null || apiToken === undefined) {
|
|
523
|
+
return {
|
|
524
|
+
authenticated: false
|
|
525
|
+
};
|
|
526
|
+
}
|
|
527
|
+
if (apiToken.kind !== 'admin') {
|
|
528
|
+
return {
|
|
529
|
+
authenticated: false
|
|
530
|
+
};
|
|
531
|
+
}
|
|
532
|
+
const expiryError = apiTokenUtils.checkExpiry(apiToken);
|
|
533
|
+
if (expiryError !== null) {
|
|
534
|
+
return {
|
|
535
|
+
authenticated: false,
|
|
536
|
+
error: expiryError
|
|
537
|
+
};
|
|
538
|
+
}
|
|
539
|
+
const ownerId = resolveAdminTokenOwnerId(apiToken);
|
|
540
|
+
if (ownerId === null) {
|
|
541
|
+
return {
|
|
542
|
+
authenticated: false,
|
|
543
|
+
error: new UnauthorizedError('Token owner not found')
|
|
544
|
+
};
|
|
545
|
+
}
|
|
546
|
+
const user = await strapi.db.query('admin::user').findOne({
|
|
547
|
+
where: {
|
|
548
|
+
id: ownerId
|
|
549
|
+
},
|
|
550
|
+
populate: [
|
|
551
|
+
'roles'
|
|
552
|
+
]
|
|
553
|
+
});
|
|
554
|
+
if (user === null || user === undefined) {
|
|
555
|
+
return {
|
|
556
|
+
authenticated: false,
|
|
557
|
+
error: new UnauthorizedError('Token owner not found')
|
|
558
|
+
};
|
|
559
|
+
}
|
|
560
|
+
if (user.isActive !== true || user.blocked === true) {
|
|
561
|
+
return {
|
|
562
|
+
authenticated: false,
|
|
563
|
+
error: new UnauthorizedError('Token owner is deactivated')
|
|
564
|
+
};
|
|
565
|
+
}
|
|
566
|
+
await apiTokenUtils.updateLastUsedAt(apiToken);
|
|
567
|
+
const ability = await index.getService('permission').engine.generateTokenAbility(apiToken.adminPermissions ?? [], user);
|
|
568
|
+
return {
|
|
569
|
+
authenticated: true,
|
|
570
|
+
credentials: apiToken,
|
|
571
|
+
user,
|
|
572
|
+
ability
|
|
573
|
+
};
|
|
574
|
+
};
|
|
507
575
|
const getExpirationFields = (lifespan)=>{
|
|
508
576
|
// it must be nil or a finite number >= 0
|
|
509
577
|
const isValidNumber = fp.isNumber(lifespan) && Number.isFinite(lifespan) && lifespan > 0;
|
|
@@ -1004,6 +1072,7 @@ function createTokenService(kind) {
|
|
|
1004
1072
|
}
|
|
1005
1073
|
const svc = {
|
|
1006
1074
|
...shared,
|
|
1075
|
+
authenticateAdminToken,
|
|
1007
1076
|
create: (attributes, callingUser)=>create({
|
|
1008
1077
|
...attributes,
|
|
1009
1078
|
kind: 'admin'
|
|
@@ -1035,6 +1104,7 @@ function createTokenService(kind) {
|
|
|
1035
1104
|
}
|
|
1036
1105
|
|
|
1037
1106
|
exports.assignAdminPermissionsToToken = assignAdminPermissionsToToken;
|
|
1107
|
+
exports.authenticateAdminToken = authenticateAdminToken;
|
|
1038
1108
|
exports.checkSaltIsDefined = checkSaltIsDefined;
|
|
1039
1109
|
exports.count = count;
|
|
1040
1110
|
exports.create = create;
|