@strapi/admin 5.46.1 → 5.47.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (114) hide show
  1. package/dist/admin/admin/src/components/Layouts/HeaderLayout.js +51 -8
  2. package/dist/admin/admin/src/components/Layouts/HeaderLayout.js.map +1 -1
  3. package/dist/admin/admin/src/components/Layouts/HeaderLayout.mjs +52 -9
  4. package/dist/admin/admin/src/components/Layouts/HeaderLayout.mjs.map +1 -1
  5. package/dist/admin/admin/src/components/Layouts/utils/getMatchingDocLink.js +167 -0
  6. package/dist/admin/admin/src/components/Layouts/utils/getMatchingDocLink.js.map +1 -0
  7. package/dist/admin/admin/src/components/Layouts/utils/getMatchingDocLink.mjs +165 -0
  8. package/dist/admin/admin/src/components/Layouts/utils/getMatchingDocLink.mjs.map +1 -0
  9. package/dist/admin/admin/src/constants.js +8 -11
  10. package/dist/admin/admin/src/constants.js.map +1 -1
  11. package/dist/admin/admin/src/constants.mjs +8 -11
  12. package/dist/admin/admin/src/constants.mjs.map +1 -1
  13. package/dist/admin/admin/src/features/Auth.js +25 -0
  14. package/dist/admin/admin/src/features/Auth.js.map +1 -1
  15. package/dist/admin/admin/src/features/Auth.mjs +26 -1
  16. package/dist/admin/admin/src/features/Auth.mjs.map +1 -1
  17. package/dist/admin/admin/src/features/Tracking.js.map +1 -1
  18. package/dist/admin/admin/src/features/Tracking.mjs.map +1 -1
  19. package/dist/admin/admin/src/hooks/useIdleSessionLogout.js +62 -0
  20. package/dist/admin/admin/src/hooks/useIdleSessionLogout.js.map +1 -0
  21. package/dist/admin/admin/src/hooks/useIdleSessionLogout.mjs +40 -0
  22. package/dist/admin/admin/src/hooks/useIdleSessionLogout.mjs.map +1 -0
  23. package/dist/admin/admin/src/pages/Settings/constants.js +1 -2
  24. package/dist/admin/admin/src/pages/Settings/constants.js.map +1 -1
  25. package/dist/admin/admin/src/pages/Settings/constants.mjs +1 -2
  26. package/dist/admin/admin/src/pages/Settings/constants.mjs.map +1 -1
  27. package/dist/admin/admin/src/render.js +2 -1
  28. package/dist/admin/admin/src/render.js.map +1 -1
  29. package/dist/admin/admin/src/render.mjs +2 -1
  30. package/dist/admin/admin/src/render.mjs.map +1 -1
  31. package/dist/admin/admin/src/translations/en.json.js +1 -0
  32. package/dist/admin/admin/src/translations/en.json.js.map +1 -1
  33. package/dist/admin/admin/src/translations/en.json.mjs +1 -0
  34. package/dist/admin/admin/src/translations/en.json.mjs.map +1 -1
  35. package/dist/admin/admin/src/translations/sk.json.js +446 -42
  36. package/dist/admin/admin/src/translations/sk.json.js.map +1 -1
  37. package/dist/admin/admin/src/translations/sk.json.mjs +445 -43
  38. package/dist/admin/admin/src/translations/sk.json.mjs.map +1 -1
  39. package/dist/admin/admin/src/utils/baseQuery.js +5 -0
  40. package/dist/admin/admin/src/utils/baseQuery.js.map +1 -1
  41. package/dist/admin/admin/src/utils/baseQuery.mjs +6 -1
  42. package/dist/admin/admin/src/utils/baseQuery.mjs.map +1 -1
  43. package/dist/admin/admin/src/utils/getFetchClient.js +24 -0
  44. package/dist/admin/admin/src/utils/getFetchClient.js.map +1 -1
  45. package/dist/admin/admin/src/utils/getFetchClient.mjs +23 -1
  46. package/dist/admin/admin/src/utils/getFetchClient.mjs.map +1 -1
  47. package/dist/admin/admin/src/utils/jwt.js +37 -0
  48. package/dist/admin/admin/src/utils/jwt.js.map +1 -0
  49. package/dist/admin/admin/src/utils/jwt.mjs +35 -0
  50. package/dist/admin/admin/src/utils/jwt.mjs.map +1 -0
  51. package/dist/admin/index.js +2 -0
  52. package/dist/admin/index.js.map +1 -1
  53. package/dist/admin/index.mjs +1 -1
  54. package/dist/admin/src/components/Layouts/HeaderLayout.d.ts +2 -0
  55. package/dist/admin/src/components/Layouts/utils/getMatchingDocLink.d.ts +6 -0
  56. package/dist/admin/src/features/Tracking.d.ts +8 -1
  57. package/dist/admin/src/hooks/useAdminRoles.d.ts +1 -1
  58. package/dist/admin/src/hooks/useIdleSessionLogout.d.ts +33 -0
  59. package/dist/admin/src/services/admin.d.ts +6 -6
  60. package/dist/admin/src/services/contentApi.d.ts +1 -1
  61. package/dist/admin/src/services/users.d.ts +8 -8
  62. package/dist/admin/src/utils/getFetchClient.d.ts +15 -1
  63. package/dist/admin/src/utils/jwt.d.ts +15 -0
  64. package/dist/server/server/src/bootstrap.js +3 -2
  65. package/dist/server/server/src/bootstrap.js.map +1 -1
  66. package/dist/server/server/src/bootstrap.mjs +4 -3
  67. package/dist/server/server/src/bootstrap.mjs.map +1 -1
  68. package/dist/server/server/src/policies/index.js +0 -2
  69. package/dist/server/server/src/policies/index.js.map +1 -1
  70. package/dist/server/server/src/policies/index.mjs +0 -2
  71. package/dist/server/server/src/policies/index.mjs.map +1 -1
  72. package/dist/server/server/src/register.js +1 -1
  73. package/dist/server/server/src/register.js.map +1 -1
  74. package/dist/server/server/src/routes/admin-tokens.js +0 -7
  75. package/dist/server/server/src/routes/admin-tokens.js.map +1 -1
  76. package/dist/server/server/src/routes/admin-tokens.mjs +0 -7
  77. package/dist/server/server/src/routes/admin-tokens.mjs.map +1 -1
  78. package/dist/server/server/src/routes/serve-admin-panel.js +8 -1
  79. package/dist/server/server/src/routes/serve-admin-panel.js.map +1 -1
  80. package/dist/server/server/src/routes/serve-admin-panel.mjs +6 -2
  81. package/dist/server/server/src/routes/serve-admin-panel.mjs.map +1 -1
  82. package/dist/server/server/src/services/api-token.js +71 -1
  83. package/dist/server/server/src/services/api-token.js.map +1 -1
  84. package/dist/server/server/src/services/api-token.mjs +71 -2
  85. package/dist/server/server/src/services/api-token.mjs.map +1 -1
  86. package/dist/server/server/src/services/token.js +11 -0
  87. package/dist/server/server/src/services/token.js.map +1 -1
  88. package/dist/server/server/src/services/token.mjs +11 -1
  89. package/dist/server/server/src/services/token.mjs.map +1 -1
  90. package/dist/server/server/src/strategies/admin-token.js +5 -63
  91. package/dist/server/server/src/strategies/admin-token.js.map +1 -1
  92. package/dist/server/server/src/strategies/admin-token.mjs +6 -64
  93. package/dist/server/server/src/strategies/admin-token.mjs.map +1 -1
  94. package/dist/server/src/bootstrap.d.ts.map +1 -1
  95. package/dist/server/src/index.d.ts +0 -5
  96. package/dist/server/src/index.d.ts.map +1 -1
  97. package/dist/server/src/policies/index.d.ts +0 -5
  98. package/dist/server/src/policies/index.d.ts.map +1 -1
  99. package/dist/server/src/routes/admin-tokens.d.ts.map +1 -1
  100. package/dist/server/src/routes/serve-admin-panel.d.ts +2 -0
  101. package/dist/server/src/routes/serve-admin-panel.d.ts.map +1 -1
  102. package/dist/server/src/services/api-token.d.ts +15 -1
  103. package/dist/server/src/services/api-token.d.ts.map +1 -1
  104. package/dist/server/src/services/token.d.ts +7 -1
  105. package/dist/server/src/services/token.d.ts.map +1 -1
  106. package/dist/server/src/strategies/admin-token.d.ts +12 -22
  107. package/dist/server/src/strategies/admin-token.d.ts.map +1 -1
  108. package/package.json +8 -8
  109. package/dist/server/server/src/policies/isAdminTokensEnabled.js +0 -16
  110. package/dist/server/server/src/policies/isAdminTokensEnabled.js.map +0 -1
  111. package/dist/server/server/src/policies/isAdminTokensEnabled.mjs +0 -14
  112. package/dist/server/server/src/policies/isAdminTokensEnabled.mjs.map +0 -1
  113. package/dist/server/src/policies/isAdminTokensEnabled.d.ts +0 -7
  114. package/dist/server/src/policies/isAdminTokensEnabled.d.ts.map +0 -1
@@ -7,7 +7,6 @@ var adminTokens = [
7
7
  handler: 'admin-token.create',
8
8
  config: {
9
9
  policies: [
10
- 'admin::isAdminTokensEnabled',
11
10
  'admin::isAuthenticatedAdmin',
12
11
  {
13
12
  name: 'admin::hasPermissions',
@@ -26,7 +25,6 @@ var adminTokens = [
26
25
  handler: 'admin-token.list',
27
26
  config: {
28
27
  policies: [
29
- 'admin::isAdminTokensEnabled',
30
28
  'admin::isAuthenticatedAdmin',
31
29
  {
32
30
  name: 'admin::hasPermissions',
@@ -45,7 +43,6 @@ var adminTokens = [
45
43
  handler: 'admin-token.revoke',
46
44
  config: {
47
45
  policies: [
48
- 'admin::isAdminTokensEnabled',
49
46
  'admin::isAuthenticatedAdmin',
50
47
  {
51
48
  name: 'admin::hasPermissions',
@@ -64,7 +61,6 @@ var adminTokens = [
64
61
  handler: 'admin-token.get',
65
62
  config: {
66
63
  policies: [
67
- 'admin::isAdminTokensEnabled',
68
64
  'admin::isAuthenticatedAdmin',
69
65
  {
70
66
  name: 'admin::hasPermissions',
@@ -83,7 +79,6 @@ var adminTokens = [
83
79
  handler: 'admin-token.update',
84
80
  config: {
85
81
  policies: [
86
- 'admin::isAdminTokensEnabled',
87
82
  'admin::isAuthenticatedAdmin',
88
83
  {
89
84
  name: 'admin::hasPermissions',
@@ -102,7 +97,6 @@ var adminTokens = [
102
97
  handler: 'admin-token.regenerate',
103
98
  config: {
104
99
  policies: [
105
- 'admin::isAdminTokensEnabled',
106
100
  'admin::isAuthenticatedAdmin',
107
101
  {
108
102
  name: 'admin::hasPermissions',
@@ -121,7 +115,6 @@ var adminTokens = [
121
115
  handler: 'admin-token.getOwnerPermissions',
122
116
  config: {
123
117
  policies: [
124
- 'admin::isAdminTokensEnabled',
125
118
  'admin::isAuthenticatedAdmin',
126
119
  {
127
120
  name: 'admin::hasPermissions',
@@ -1 +1 @@
1
- {"version":3,"file":"admin-tokens.js","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::isAdminTokensEnabled',\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::isAdminTokensEnabled',\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::isAdminTokensEnabled',\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::isAdminTokensEnabled',\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::isAdminTokensEnabled',\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::isAdminTokensEnabled',\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::isAdminTokensEnabled',\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,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,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,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,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,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,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,6BAAA;AACA,gBAAA;oBAAEC,IAAAA,EAAM,uBAAA;oBAAyBF,MAAAA,EAAQ;wBAAEG,OAAAA,EAAS;AAAC,4BAAA;AAA2B;AAAC;AAAE;AACpF;AACH;AACF;CACD;;;;"}
1
+ {"version":3,"file":"admin-tokens.js","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;;;;"}
@@ -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::isAdminTokensEnabled',\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::isAdminTokensEnabled',\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::isAdminTokensEnabled',\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::isAdminTokensEnabled',\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::isAdminTokensEnabled',\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::isAdminTokensEnabled',\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::isAdminTokensEnabled',\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,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,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,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,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,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,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,6BAAA;AACA,gBAAA;oBAAEC,IAAAA,EAAM,uBAAA;oBAAyBF,MAAAA,EAAQ;wBAAEG,OAAAA,EAAS;AAAC,4BAAA;AAA2B;AAAC;AAAE;AACpF;AACH;AACF;CACD;;;;"}
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
- module.exports = registerAdminPanelRoute;
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\nconst serveStatic = (filesDir: any, koaStaticOptions = {}) => {\n const serve = koaStatic(filesDir, koaStaticOptions);\n\n return async (ctx: Context, next: Next) => {\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;AACA,MAAMT,WAAAA,GAAc,CAACU,QAAAA,EAAeC,gBAAAA,GAAmB,EAAE,GAAA;IACvD,MAAMC,KAAAA,GAAQC,UAAUH,QAAAA,EAAUC,gBAAAA,CAAAA;AAElC,IAAA,OAAO,OAAOzB,GAAAA,EAAcC,IAAAA,GAAAA;QAC1B,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,CAAA;;;;"}
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, basename, extname } from 'path';
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\nconst serveStatic = (filesDir: any, koaStaticOptions = {}) => {\n const serve = koaStatic(filesDir, koaStaticOptions);\n\n return async (ctx: Context, next: Next) => {\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;AACA,MAAMT,WAAAA,GAAc,CAACU,QAAAA,EAAeC,gBAAAA,GAAmB,EAAE,GAAA;IACvD,MAAMC,KAAAA,GAAQC,UAAUH,QAAAA,EAAUC,gBAAAA,CAAAA;AAElC,IAAA,OAAO,OAAOzB,GAAAA,EAAcC,IAAAA,GAAAA;QAC1B,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,CAAA;;;;"}
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;