@strapi/admin 4.6.1 → 4.7.0-beta.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.
- package/admin/src/assets/images/onboarding-preview.png +0 -0
- package/admin/src/content-manager/components/CollectionTypeFormWrapper/index.js +0 -2
- package/admin/src/hooks/useRegenerate/index.js +2 -2
- package/admin/src/hooks/useSettingsMenu/utils/defaultGlobalLinks.js +7 -0
- package/admin/src/pages/Admin/Onboarding/constants.js +46 -0
- package/admin/src/pages/Admin/Onboarding/index.js +161 -89
- package/admin/src/pages/Admin/index.js +5 -2
- package/admin/src/pages/SettingsPage/{pages/ApiTokens/EditView/components → components/Tokens}/FormHead/index.js +36 -19
- package/admin/src/pages/SettingsPage/components/Tokens/FormiTokenContainer/LifeSpanInput.js +96 -0
- package/admin/src/pages/SettingsPage/components/Tokens/LifeSpanInput/index.js +98 -0
- package/admin/src/pages/SettingsPage/components/Tokens/Regenerate/index.js +73 -0
- package/admin/src/pages/SettingsPage/{pages/ApiTokens/ListView/DynamicTable → components/Tokens/Table}/DefaultButton/index.js +1 -1
- package/admin/src/pages/SettingsPage/{pages/ApiTokens/ListView/DynamicTable → components/Tokens/Table}/DeleteButton/index.js +1 -1
- package/admin/src/pages/SettingsPage/{pages/ApiTokens/ListView/DynamicTable → components/Tokens/Table}/ReadButton/index.js +0 -0
- package/admin/src/pages/SettingsPage/{pages/ApiTokens/ListView/DynamicTable → components/Tokens/Table}/UpdateButton/index.js +0 -0
- package/admin/src/pages/SettingsPage/components/Tokens/Table/index.js +135 -0
- package/admin/src/pages/SettingsPage/{pages/ApiTokens/EditView/components/ContentBox → components/Tokens/TokenBox}/index.js +17 -17
- package/admin/src/pages/SettingsPage/components/Tokens/TokenDescription/index.js +51 -0
- package/admin/src/pages/SettingsPage/components/Tokens/TokenName/index.js +46 -0
- package/admin/src/pages/SettingsPage/components/Tokens/TokenTypeSelect/index.js +69 -0
- package/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/components/CollapsableContentType/index.js +5 -3
- package/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/components/FormApiTokenContainer/index.js +52 -142
- package/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/components/Regenerate/index.js +5 -1
- package/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/index.js +37 -14
- package/admin/src/pages/SettingsPage/pages/ApiTokens/ListView/index.js +5 -13
- package/admin/src/pages/SettingsPage/pages/TransferTokens/EditView/components/FormTransferTokenContainer/index.js +105 -0
- package/admin/src/pages/SettingsPage/pages/TransferTokens/EditView/components/LoadingView/index.js +50 -0
- package/admin/src/pages/SettingsPage/pages/TransferTokens/EditView/index.js +201 -0
- package/admin/src/pages/SettingsPage/pages/TransferTokens/EditView/utils/getDateOfExpiration.js +16 -0
- package/admin/src/pages/SettingsPage/pages/TransferTokens/EditView/utils/index.js +4 -0
- package/admin/src/pages/SettingsPage/pages/TransferTokens/EditView/utils/schema.js +10 -0
- package/admin/src/pages/SettingsPage/pages/TransferTokens/ListView/index.js +182 -0
- package/admin/src/pages/SettingsPage/pages/TransferTokens/ListView/utils/tableHeaders.js +48 -0
- package/admin/src/pages/SettingsPage/pages/TransferTokens/ProtectedCreateView/index.js +14 -0
- package/admin/src/pages/SettingsPage/pages/TransferTokens/ProtectedEditView/index.js +14 -0
- package/admin/src/pages/SettingsPage/pages/TransferTokens/ProtectedListView/index.js +12 -0
- package/admin/src/pages/SettingsPage/utils/defaultRoutes.js +33 -0
- package/admin/src/permissions/defaultPermissions.js +8 -0
- package/admin/src/translations/en.json +18 -1
- package/build/19eb2dfcf2603eb55733.png +0 -0
- package/build/4649.15cc0afe.chunk.js +30 -0
- package/build/7259.aa68d808.chunk.js +1 -0
- package/build/7407.883fb1f5.chunk.js +1 -0
- package/build/Admin-authenticatedApp.f29f6021.chunk.js +79 -0
- package/build/{Admin_settingsPage.d1493824.chunk.js → Admin_settingsPage.178dc6e3.chunk.js} +25 -25
- package/build/{admin-app.25934eaa.chunk.js → admin-app.77a50e1f.chunk.js} +19 -19
- package/build/{api-tokens-create-page.d248362d.chunk.js → api-tokens-create-page.0db3aec1.chunk.js} +1 -1
- package/build/{api-tokens-edit-page.8516fa20.chunk.js → api-tokens-edit-page.671e0e26.chunk.js} +1 -1
- package/build/api-tokens-list-page.7387102c.chunk.js +16 -0
- package/build/{content-manager.35ff9726.chunk.js → content-manager.42b24d46.chunk.js} +77 -77
- package/build/en-json.b0748970.chunk.js +1 -0
- package/build/index.html +1 -1
- package/build/main.1022ed01.js +4393 -0
- package/build/runtime~main.84941a97.js +2 -0
- package/build/transfer-tokens-create-page.16e23791.chunk.js +1 -0
- package/build/transfer-tokens-edit-page.3886c973.chunk.js +1 -0
- package/build/transfer-tokens-list-page.e8010a89.chunk.js +16 -0
- package/package.json +12 -12
- package/server/bootstrap.js +2 -0
- package/server/config/admin-actions.js +48 -0
- package/server/content-types/index.js +2 -0
- package/server/content-types/transfer-token-permission.js +36 -0
- package/server/content-types/transfer-token.js +66 -0
- package/server/controllers/api-token.js +4 -5
- package/server/controllers/index.js +1 -0
- package/server/controllers/transfer/index.js +13 -0
- package/server/controllers/transfer/runner.js +24 -0
- package/server/controllers/transfer/token.js +131 -0
- package/server/register.js +2 -9
- package/server/routes/index.js +2 -0
- package/server/routes/transfer.js +95 -0
- package/server/services/api-token.js +2 -3
- package/server/services/constants.js +6 -0
- package/server/services/index.js +1 -0
- package/server/services/transfer/index.js +6 -0
- package/server/services/transfer/permission.js +22 -0
- package/server/services/transfer/token.js +409 -0
- package/server/strategies/api-token.js +4 -2
- package/server/strategies/data-transfer.js +107 -0
- package/server/strategies/index.js +1 -0
- package/server/utils/index.d.ts +2 -0
- package/server/validation/api-tokens.js +1 -6
- package/server/validation/transfer/index.js +5 -0
- package/server/validation/transfer/token.js +34 -0
- package/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/components/FormBody/index.js +0 -78
- package/admin/src/pages/SettingsPage/pages/ApiTokens/ListView/DynamicTable/index.js +0 -112
- package/build/4318.f96a9d4d.chunk.js +0 -30
- package/build/8633.00ccd382.chunk.js +0 -1
- package/build/Admin-authenticatedApp.ce646f66.chunk.js +0 -75
- package/build/api-tokens-list-page.44a79fda.chunk.js +0 -16
- package/build/en-json.1f137a90.chunk.js +0 -1
- package/build/main.7b151630.js +0 -4377
- package/build/runtime~main.a20d633b.js +0 -2
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
(function(){"use strict";var j={},m={};function e(n){var i=m[n];if(i!==void 0)return i.exports;var t=m[n]={id:n,loaded:!1,exports:{}};return j[n].call(t.exports,t,t.exports,e),t.loaded=!0,t.exports}e.m=j,function(){var n=[];e.O=function(i,t,o,r){if(t){r=r||0;for(var s=n.length;s>0&&n[s-1][2]>r;s--)n[s]=n[s-1];n[s]=[t,o,r];return}for(var a=1/0,s=0;s<n.length;s++){for(var t=n[s][0],o=n[s][1],r=n[s][2],c=!0,l=0;l<t.length;l++)(r&!1||a>=r)&&Object.keys(e.O).every(function(b){return e.O[b](t[l])})?t.splice(l--,1):(c=!1,r<a&&(a=r));if(c){n.splice(s--,1);var d=o();d!==void 0&&(i=d)}}return i}}(),function(){e.n=function(n){var i=n&&n.__esModule?function(){return n.default}:function(){return n};return e.d(i,{a:i}),i}}(),function(){var n=Object.getPrototypeOf?function(t){return Object.getPrototypeOf(t)}:function(t){return t.__proto__},i;e.t=function(t,o){if(o&1&&(t=this(t)),o&8||typeof t=="object"&&t&&(o&4&&t.__esModule||o&16&&typeof t.then=="function"))return t;var r=Object.create(null);e.r(r);var s={};i=i||[null,n({}),n([]),n(n)];for(var a=o&2&&t;typeof a=="object"&&!~i.indexOf(a);a=n(a))Object.getOwnPropertyNames(a).forEach(function(c){s[c]=function(){return t[c]}});return s.default=function(){return t},e.d(r,s),r}}(),function(){e.d=function(n,i){for(var t in i)e.o(i,t)&&!e.o(n,t)&&Object.defineProperty(n,t,{enumerable:!0,get:i[t]})}}(),function(){e.f={},e.e=function(n){return Promise.all(Object.keys(e.f).reduce(function(i,t){return e.f[t](n,i),i},[]))}}(),function(){e.u=function(n){return""+({46:"content-type-builder-translation-zh-Hans-json",90:"i18n-translation-de-json",92:"api-tokens-edit-page",96:"email-translation-de-json",123:"ru-json",129:"i18n-translation-es-json",302:"sso-settings-page",320:"en-json",395:"tr-json",435:"email-translation-it-json",562:"no-json",585:"upload-translation-pt-json",606:"sk-json",615:"upload-translation-uk-json",695:"upload-settings",742:"content-type-builder-translation-th-json",744:"email-translation-cs-json",749:"th-json",801:"Admin-authenticatedApp",830:"he-json",931:"content-type-builder-translation-en-json",994:"content-manager",1001:"content-type-builder-translation-nl-json",1009:"upload-translation-ms-json",1011:"zh-json",1018:"email-translation-ko-json",1023:"content-type-builder-translation-it-json",1056:"upload-translation-tr-json",1157:"email-translation-pt-BR-json",1167:"users-permissions-translation-ko-json",1180:"i18n-translation-tr-json",1312:"ja-json",1331:"upload-translation-es-json",1375:"upload-translation-pt-BR-json",1377:"ko-json",1442:"users-permissions-translation-cs-json",1495:"email-settings-page",1674:"users-permissions-translation-ru-json",1930:"users-permissions-translation-pt-json",2137:"i18n-translation-fr-json",2151:"content-type-builder-translation-id-json",2246:"content-type-builder-translation-dk-json",2248:"gu-json",2282:"users-providers-settings-page",2380:"users-permissions-translation-tr-json",2411:"email-translation-tr-json",2464:"users-permissions-translation-de-json",2489:"upload-translation-ko-json",2492:"transfer-tokens-edit-page",2544:"admin-edit-roles-page",2553:"zh-Hans-json",2567:"content-type-builder-translation-ko-json",2603:"email-translation-en-json",2648:"email-translation-ar-json",2657:"content-type-builder-translation-cs-json",2671:"nl-json",2742:"users-permissions-translation-zh-Hans-json",2812:"audit-logs-settings-page",3025:"ms-json",3038:"upload-translation-sk-json",3043:"email-translation-zh-Hans-json",3095:"users-permissions-translation-sk-json",3098:"users-permissions-translation-fr-json",3166:"email-translation-pt-json",3206:"email-translation-nl-json",3278:"vi-json",3304:"content-type-builder-translation-tr-json",3340:"pt-json",3516:"ca-json",3530:"users-permissions-translation-vi-json",3552:"i18n-settings-page",3650:"upload",3677:"Admin_pluginsPage",3702:"users-permissions-translation-pl-json",3825:"email-translation-dk-json",3948:"content-type-builder-translation-pl-json",3964:"content-type-builder-translation-ms-json",3981:"Admin_homePage",4021:"upload-translation-de-json",4121:"webhook-list-page",4179:"users-permissions-translation-id-json",4263:"admin-edit-users",4299:"api-tokens-create-page",4302:"content-type-builder-translation-zh-json",4587:"email-translation-th-json",4693:"email-translation-fr-json",4804:"upload-translation-ru-json",4816:"transfer-tokens-create-page",4987:"upload-translation-pl-json",5053:"upload-translation-zh-json",5162:"webhook-edit-page",5199:"admin-users",5222:"upload-translation-it-json",5296:"i18n-translation-dk-json",5388:"email-translation-ru-json",5396:"users-permissions-translation-zh-json",5516:"Admin_marketplace",5538:"admin-app",5751:"email-translation-es-json",5880:"upload-translation-ja-json",5894:"hu-json",5895:"Admin_settingsPage",5905:"content-type-builder-list-view",5906:"content-type-builder-translation-pt-BR-json",6232:"upload-translation-th-json",6280:"i18n-translation-ko-json",6332:"hi-json",6377:"users-permissions-translation-dk-json",6434:"upload-translation-en-json",6460:"users-permissions-translation-en-json",6745:"email-translation-uk-json",6784:"email-translation-ms-json",6817:"it-json",6831:"upload-translation-zh-Hans-json",6836:"users-permissions-translation-uk-json",6848:"email-translation-zh-json",6901:"de-json",7048:"users-permissions-translation-nl-json",7094:"users-permissions-translation-ar-json",7155:"content-type-builder-translation-de-json",7186:"content-type-builder-translation-ru-json",7327:"email-translation-vi-json",7347:"highlight.js",7403:"uk-json",7465:"upload-translation-dk-json",7519:"cs-json",7663:"email-translation-id-json",7808:"i18n-translation-zh-json",7817:"users-permissions-translation-es-json",7828:"users-permissions-translation-th-json",7833:"upload-translation-fr-json",7846:"pl-json",7898:"dk-json",7934:"content-type-builder-translation-pt-json",7958:"ar-json",7997:"content-type-builder-translation-sk-json",8006:"fr-json",8056:"api-tokens-list-page",8175:"i18n-translation-en-json",8178:"email-translation-ja-json",8329:"content-type-builder-translation-sv-json",8342:"content-type-builder-translation-es-json",8360:"eu-json",8367:"es-json",8418:"users-email-settings-page",8423:"upload-translation-ca-json",8467:"users-permissions-translation-sv-json",8481:"email-translation-pl-json",8573:"content-type-builder-translation-uk-json",8736:"users-permissions-translation-pt-BR-json",8853:"users-roles-settings-page",8880:"content-type-builder",8897:"id-json",8907:"content-type-builder-translation-ja-json",8965:"content-type-builder-translation-fr-json",9220:"users-permissions-translation-ms-json",9303:"sv-json",9366:"i18n-translation-pl-json",9412:"email-translation-sk-json",9460:"users-advanced-settings-page",9497:"Admin_profilePage",9501:"Admin_InternalErrorPage",9502:"users-permissions-translation-ja-json",9511:"content-type-builder-translation-ar-json",9514:"Upload_ConfigureTheView",9600:"transfer-tokens-list-page",9647:"pt-BR-json",9726:"sa-json",9762:"i18n-translation-zh-Hans-json",9797:"upload-translation-he-json",9903:"ml-json",9905:"users-permissions-translation-it-json"}[n]||n)+"."+{46:"52a30266",90:"362384a6",92:"671e0e26",96:"1b334230",123:"aa5cd123",129:"87b494d1",302:"b85ad080",320:"b0748970",395:"9f41dc08",435:"a2ed8c78",562:"1a2258ba",585:"6b937fdf",606:"9ec60d9f",615:"9950466a",695:"ef64bbf9",742:"6fe3ed55",744:"6eaeec6a",749:"6e68155c",801:"f29f6021",830:"ad22e8cc",931:"e577d595",994:"42b24d46",1001:"40bbc562",1009:"74f6d746",1011:"f88f563d",1018:"4de49b23",1023:"13b3c26a",1056:"74117e5c",1157:"81cca553",1167:"357d7a33",1180:"10f0600d",1312:"c9f12d0b",1331:"ba2eb03a",1375:"d1704f0b",1377:"ef463065",1412:"936ed920",1442:"7e23424a",1495:"d1fcc7a3",1674:"20e177db",1683:"c8aa7b7c",1930:"a7eda429",2137:"57ddc77e",2151:"ee3b36bb",2246:"e05583e9",2248:"676518f2",2282:"e5a9a3f1",2380:"2bd7ff98",2411:"e6c0f8fc",2464:"a6fb670f",2489:"a52eab64",2492:"3886c973",2544:"446b69dc",2553:"9c0eac99",2567:"8a274be5",2603:"4211d4d0",2607:"2e48dbf8",2648:"88304564",2657:"a5b299ca",2671:"c416295a",2742:"0b31c705",2743:"6d1632f9",2812:"c3dce30d",3025:"db87d8d3",3038:"483a18f6",3043:"c6841563",3075:"dc3894fe",3095:"7f37180f",3098:"7e55bbbb",3166:"2a2a0643",3206:"377bdd9f",3278:"f08d7d03",3304:"cea4d226",3340:"62927d1e",3516:"f6a0f472",3530:"6722a8a2",3552:"b8d8753e",3632:"0317b618",3650:"c5730dfa",3677:"5c24f963",3702:"0a7287d1",3825:"85402492",3948:"24a34349",3964:"2d29c1e0",3981:"b1730882",4021:"420c943b",4121:"1134f130",4179:"a5a0fb59",4263:"2ed69bfd",4299:"0db3aec1",4302:"faedd610",4587:"660fa9a8",4649:"15cc0afe",4693:"78be2787",4804:"675f6b93",4816:"16e23791",4855:"bd092921",4987:"426f31c9",5015:"8e3fe50b",5053:"e1dd6eb2",5162:"73e51e64",5199:"fc003b10",5222:"e87d7966",5296:"89401417",5388:"6bce37dd",5396:"7978eaa6",5516:"ea0316c2",5538:"77a50e1f",5751:"0b6b1006",5880:"44b88e7a",5894:"f947088f",5895:"178dc6e3",5905:"79e84b36",5906:"97f71a9d",6232:"3847dae0",6280:"ef4f9471",6332:"19b51c09",6377:"60e50f48",6434:"8b7573ce",6460:"4b302272",6745:"bd1fb6bf",6784:"7390477e",6817:"2fd90f4d",6831:"3da5cf56",6836:"6a0a1572",6848:"7a2232ea",6901:"30e1f35b",7048:"c9f92a3c",7094:"7d87d54d",7155:"0979cccb",7186:"54d11230",7259:"aa68d808",7327:"9fb7e6d7",7347:"26ef649f",7403:"b2fcd567",7407:"883fb1f5",7465:"bbb2fa05",7519:"79879fb6",7663:"c97239fe",7808:"bef2dc07",7817:"35007573",7828:"1e9c0247",7833:"84429734",7846:"8cf0c871",7898:"e6d9ffa4",7934:"ddb44f8c",7958:"932794f7",7997:"626c9493",8006:"78545ef8",8056:"7387102c",8175:"60af6722",8178:"63eebd02",8329:"59f5e1e5",8342:"fe4daad8",8360:"fceecd8b",8367:"e275481d",8418:"343d0ad2",8423:"57954414",8467:"17187818",8481:"97d0db97",8573:"c4524247",8736:"1b6d2920",8853:"66312f31",8880:"855db321",8897:"504daa84",8907:"9be0d5b2",8965:"b1eb52f6",9220:"c83f87c4",9303:"c6b0c237",9366:"dfac513d",9412:"53da2fcd",9460:"fce9908e",9497:"59af1978",9501:"157152a8",9502:"891fe76e",9511:"56d8fcf4",9514:"3f2b6e6a",9600:"e8010a89",9647:"51fab8d0",9707:"7290fd92",9726:"f3fa5407",9762:"757ce62d",9797:"0a830937",9903:"490f666c",9905:"0705465d"}[n]+".chunk.js"}}(),function(){e.miniCssF=function(n){}}(),function(){e.g=function(){if(typeof globalThis=="object")return globalThis;try{return this||new Function("return this")()}catch{if(typeof window=="object")return window}}()}(),function(){e.o=function(n,i){return Object.prototype.hasOwnProperty.call(n,i)}}(),function(){var n={},i="@strapi/admin:";e.l=function(t,o,r,s){if(n[t]){n[t].push(o);return}var a,c;if(r!==void 0)for(var l=document.getElementsByTagName("script"),d=0;d<l.length;d++){var f=l[d];if(f.getAttribute("src")==t||f.getAttribute("data-webpack")==i+r){a=f;break}}a||(c=!0,a=document.createElement("script"),a.charset="utf-8",a.timeout=120,e.nc&&a.setAttribute("nonce",e.nc),a.setAttribute("data-webpack",i+r),a.src=t),n[t]=[o];var u=function(g,b){a.onerror=a.onload=null,clearTimeout(p);var h=n[t];if(delete n[t],a.parentNode&&a.parentNode.removeChild(a),h&&h.forEach(function(y){return y(b)}),g)return g(b)},p=setTimeout(u.bind(null,void 0,{type:"timeout",target:a}),12e4);a.onerror=u.bind(null,a.onerror),a.onload=u.bind(null,a.onload),c&&document.head.appendChild(a)}}(),function(){e.r=function(n){typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})}}(),function(){e.nmd=function(n){return n.paths=[],n.children||(n.children=[]),n}}(),function(){e.p="/admin/"}(),function(){e.b=document.baseURI||self.location.href;var n={1303:0};e.f.j=function(o,r){var s=e.o(n,o)?n[o]:void 0;if(s!==0)if(s)r.push(s[2]);else if(o!=1303){var a=new Promise(function(f,u){s=n[o]=[f,u]});r.push(s[2]=a);var c=e.p+e.u(o),l=new Error,d=function(f){if(e.o(n,o)&&(s=n[o],s!==0&&(n[o]=void 0),s)){var u=f&&(f.type==="load"?"missing":f.type),p=f&&f.target&&f.target.src;l.message="Loading chunk "+o+` failed.
|
|
2
|
+
(`+u+": "+p+")",l.name="ChunkLoadError",l.type=u,l.request=p,s[1](l)}};e.l(c,d,"chunk-"+o,o)}else n[o]=0},e.O.j=function(o){return n[o]===0};var i=function(o,r){var s=r[0],a=r[1],c=r[2],l,d,f=0;if(s.some(function(p){return n[p]!==0})){for(l in a)e.o(a,l)&&(e.m[l]=a[l]);if(c)var u=c(e)}for(o&&o(r);f<s.length;f++)d=s[f],e.o(n,d)&&n[d]&&n[d][0](),n[d]=0;return e.O(u)},t=self.webpackChunk_strapi_admin=self.webpackChunk_strapi_admin||[];t.forEach(i.bind(null,0)),t.push=i.bind(null,t.push.bind(t))}(),function(){e.nc=void 0}()})();
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";(self.webpackChunk_strapi_admin=self.webpackChunk_strapi_admin||[]).push([[4816],{76411:function(r,s,e){e.r(s);var t=e(32735),n=e(88425),i=e.n(n),_=e(72041),a=e(37259);const E=()=>t.createElement(n.CheckPagePermissions,{permissions:_.Z.settings["transfer-tokens"].create},t.createElement(a.Z,null));s.default=E}}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";(self.webpackChunk_strapi_admin=self.webpackChunk_strapi_admin||[]).push([[2492],{32392:function(r,s,e){e.r(s);var n=e(32735),t=e(88425),i=e.n(t),_=e(72041),a=e(37259);const E=()=>n.createElement(t.CheckPagePermissions,{permissions:_.Z.settings["transfer-tokens"].read},n.createElement(a.Z,null));s.default=E}}]);
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";(self.webpackChunk_strapi_admin=self.webpackChunk_strapi_admin||[]).push([[9600],{81450:function(j,C,t){t.d(C,{Z:function(){return O}});var e=t(32735),r=t(5141),R=t(60216),n=t.n(R),u=t(49372),B=t(3594),P=t(29005),g=t(66735),U=t(87933),l=t(88425),I=t(4038),V=t(50563),D=t(72850),Z=t(5636);const L=({tokenName:a,onClickDelete:i})=>{const{formatMessage:T}=(0,Z.useIntl)(),{trackUsage:y}=(0,l.useTracking)();return e.createElement(D.x,{paddingLeft:1,...l.stopPropagation},e.createElement(V.h,{onClick:()=>{y("willDeleteToken"),i()},label:T({id:"global.delete-target",defaultMessage:"Delete {target}"},{target:`${a}`}),name:"delete",noBorder:!0,icon:e.createElement(I.default,null)}))};L.propTypes={tokenName:n().string.isRequired,onClickDelete:n().func.isRequired};var x=L,W=t(68625),$=t(83292);const z={edit:{id:"app.component.table.edit",defaultMessage:"Edit {target}"},read:{id:"app.component.table.read",defaultMessage:"Read {target}"}},F=(0,$.default)(l.Link)`
|
|
2
|
+
svg {
|
|
3
|
+
path {
|
|
4
|
+
fill: ${({theme:a})=>a.colors.neutral500};
|
|
5
|
+
}
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
&:hover,
|
|
9
|
+
&:focus {
|
|
10
|
+
svg {
|
|
11
|
+
path {
|
|
12
|
+
fill: ${({theme:a})=>a.colors.neutral800};
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
`,h=({tokenName:a,tokenId:i,buttonType:T,children:y})=>{const{formatMessage:d}=(0,Z.useIntl)(),{location:{pathname:f}}=(0,r.useHistory)();return e.createElement(F,{to:`${f}/${i}`,title:d(z[T],{target:a})},y)};h.propTypes={tokenName:n().string.isRequired,tokenId:n().oneOfType([n().string,n().number]).isRequired,buttonType:n().string,children:n().node.isRequired},h.defaultProps={buttonType:"edit"};var m=h;const E=({tokenName:a,tokenId:i})=>e.createElement(m,{tokenName:a,tokenId:i},e.createElement(W.Z,null));E.propTypes={tokenName:n().string.isRequired,tokenId:n().oneOfType([n().string,n().number]).isRequired};var k=E,H=t(54894);const M=({tokenName:a,tokenId:i})=>e.createElement(m,{tokenName:a,tokenId:i,buttonType:"read"},e.createElement(H.default,null));M.propTypes={tokenName:n().string.isRequired,tokenId:n().oneOfType([n().string,n().number]).isRequired};var c=M;const v=({permissions:a,headers:i,contentType:T,isLoading:y,tokens:d,onConfirmDelete:f})=>{const{canDelete:S,canUpdate:p,canRead:b}=a,A=S||p||b,[{query:N}]=(0,l.useQueryParams)(),[,Q]=N?N.sort.split(":"):"ASC",{push:o,location:{pathname:Y}}=(0,r.useHistory)(),{trackUsage:w}=(0,l.useTracking)(),J=d.sort((s,K)=>{const G=s.name.localeCompare(K.name);return Q==="DESC"?-G:G});return e.createElement(l.DynamicTable,{headers:i,contentType:T,rows:d,withBulkActions:A,isLoading:y,onConfirmDelete:f},e.createElement(B.p,null,J.map(s=>e.createElement(P.Tr,{key:s.id,...(0,l.onRowClick)({fn(){w("willEditTokenFromList"),o(`${Y}/${s.id}`)},condition:p})},e.createElement(g.Td,null,e.createElement(u.Z,{textColor:"neutral800",fontWeight:"bold"},s.name)),e.createElement(g.Td,{maxWidth:(0,l.pxToRem)(250)},e.createElement(u.Z,{textColor:"neutral800",ellipsis:!0},s.description)),e.createElement(g.Td,null,e.createElement(u.Z,{textColor:"neutral800"},e.createElement(l.RelativeTime,{timestamp:new Date(s.createdAt)}))),e.createElement(g.Td,null,s.lastUsedAt&&e.createElement(u.Z,{textColor:"neutral800"},e.createElement(l.RelativeTime,{timestamp:new Date(s.lastUsedAt)}))),A&&e.createElement(g.Td,null,e.createElement(U.k,{justifyContent:"end"},p&&e.createElement(k,{tokenName:s.name,tokenId:s.id}),!p&&b&&e.createElement(c,{tokenName:s.name,tokenId:s.id}),S&&e.createElement(x,{tokenName:s.name,onClickDelete:()=>f(s.id)})))))))};v.propTypes={tokens:n().array,permissions:n().shape({canRead:n().bool,canDelete:n().bool,canUpdate:n().bool}).isRequired,headers:n().arrayOf(n().shape({cellFormatter:n().func,key:n().string.isRequired,metadatas:n().shape({label:n().string.isRequired,sortable:n().bool}).isRequired,name:n().string.isRequired})),contentType:n().string.isRequired,isLoading:n().bool,onConfirmDelete:n().func},v.defaultProps={tokens:[],headers:[],isLoading:!1,onConfirmDelete(){}};var O=v},38286:function(j,C,t){t.r(C),t.d(C,{default:function(){return F}});var e=t(32735),r=t(88425),R=t(72041),n=t(5636),u=t(84968),B=t(5141),P=t(33348),g=t.n(P),U=t(28356),l=t(17e3),I=t(27649),V=t(41415),D=t(19406),L=[{name:"name",key:"name",metadatas:{label:{id:"Settings.transferTokens.ListView.headers.name",defaultMessage:"Name"},sortable:!0}},{name:"description",key:"description",metadatas:{label:{id:"Settings.transferTokens.ListView.headers.description",defaultMessage:"Description"},sortable:!1}},{name:"createdAt",key:"createdAt",metadatas:{label:{id:"Settings.transferTokens.ListView.headers.createdAt",defaultMessage:"Created at"},sortable:!1}},{name:"lastUsedAt",key:"lastUsedAt",metadatas:{label:{id:"Settings.transferTokens.ListView.headers.lastUsedAt",defaultMessage:"Last used"},sortable:!1}}],x=t(81450),$=()=>{(0,r.useFocusWhenNavigate)();const h=(0,u.useQueryClient)(),{formatMessage:m}=(0,n.useIntl)(),E=(0,r.useNotification)(),{allowedActions:{canCreate:k,canDelete:H,canUpdate:M,canRead:c}}=(0,r.useRBAC)(R.Z.settings["transfer-tokens"]),{push:v}=(0,B.useHistory)(),{startSection:O}=(0,r.useGuidedTour)(),a=(0,e.useRef)(O),{get:i,del:T}=(0,r.useFetchClient)();(0,e.useEffect)(()=>{a.current&&a.current("transferTokens")},[]),(0,e.useEffect)(()=>{v({search:g().stringify({sort:"name:ASC"},{encode:!1})})},[v]);const y=L.map(o=>({...o,metadatas:{...o.metadatas,label:m(o.metadatas.label)}})),{data:d,status:f,isFetching:S}=(0,u.useQuery)(["transfer-tokens"],async()=>{const{data:{data:o}}=await i("/admin/transfer/tokens");return o},{enabled:c,onError(){E({type:"warning",message:{id:"notification.error",defaultMessage:"An error occured"}})}}),p=c&&(f!=="success"&&f!=="error"||f==="success"&&S),b=(0,u.useMutation)(async o=>{await T(`/admin/transfer/tokens/${o}`)},{async onSuccess(){await h.invalidateQueries(["transfer-tokens"])},onError(o){o?.response?.data?.data?E({type:"warning",message:o.response.data.data}):E({type:"warning",message:{id:"notification.error",defaultMessage:"An error occured"}})}}),A=c&&d,N=c&&!d&&!k,Q=c&&!d&&k;return e.createElement(I.o,{"aria-busy":p},e.createElement(r.SettingsPageTitle,{name:"Transfer Tokens"}),e.createElement(U.T,{title:m({id:"Settings.transferTokens.title",defaultMessage:"Transfer Tokens"}),subtitle:m({id:"Settings.transferTokens.description",defaultMessage:'"List of generated transfer tokens"'}),primaryAction:k?e.createElement(r.LinkButton,{"data-testid":"create-transfer-token-button",startIcon:e.createElement(D.default,null),size:"S",to:"/settings/transfer-tokens/create"},m({id:"Settings.transferTokens.create",defaultMessage:"Create new Transfer Token"})):void 0}),e.createElement(l.D,null,!c&&e.createElement(r.NoPermissions,null),A&&e.createElement(x.Z,{permissions:{canRead:c,canDelete:H,canUpdate:M},headers:y,contentType:"trasfer-tokens",rows:d,isLoading:p,onConfirmDelete:o=>b.mutateAsync(o),tokens:d}),Q&&e.createElement(r.NoContent,{content:{id:"Settings.transferTokens.addFirstToken",defaultMessage:"Add your first Transfer Token"},action:e.createElement(V.z,{variant:"secondary",startIcon:e.createElement(D.default,null)},m({id:"Settings.transferTokens.addNewToken",defaultMessage:"Add new Transfer Token"}))}),N&&e.createElement(r.NoContent,{content:{id:"Settings.transferTokens.emptyStateLayout",defaultMessage:"You don\u2019t have any content yet..."}})))},F=()=>e.createElement(r.CheckPagePermissions,{permissions:R.Z.settings["transfer-tokens"].main},e.createElement($,null))}}]);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@strapi/admin",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.7.0-beta.0",
|
|
4
4
|
"description": "Strapi Admin",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -46,15 +46,15 @@
|
|
|
46
46
|
"@casl/ability": "^5.4.3",
|
|
47
47
|
"@fingerprintjs/fingerprintjs": "3.3.6",
|
|
48
48
|
"@pmmmwh/react-refresh-webpack-plugin": "0.5.10",
|
|
49
|
-
"@strapi/babel-plugin-switch-ee-ce": "4.
|
|
50
|
-
"@strapi/data-transfer": "4.
|
|
49
|
+
"@strapi/babel-plugin-switch-ee-ce": "4.7.0-beta.0",
|
|
50
|
+
"@strapi/data-transfer": "4.7.0-beta.0",
|
|
51
51
|
"@strapi/design-system": "1.6.3",
|
|
52
|
-
"@strapi/helper-plugin": "4.
|
|
52
|
+
"@strapi/helper-plugin": "4.7.0-beta.0",
|
|
53
53
|
"@strapi/icons": "1.6.3",
|
|
54
|
-
"@strapi/permissions": "4.
|
|
55
|
-
"@strapi/provider-audit-logs-local": "4.
|
|
56
|
-
"@strapi/typescript-utils": "4.
|
|
57
|
-
"@strapi/utils": "4.
|
|
54
|
+
"@strapi/permissions": "4.7.0-beta.0",
|
|
55
|
+
"@strapi/provider-audit-logs-local": "4.7.0-beta.0",
|
|
56
|
+
"@strapi/typescript-utils": "4.7.0-beta.0",
|
|
57
|
+
"@strapi/utils": "4.7.0-beta.0",
|
|
58
58
|
"axios": "1.2.2",
|
|
59
59
|
"babel-loader": "^9.1.2",
|
|
60
60
|
"babel-plugin-styled-components": "2.0.2",
|
|
@@ -100,7 +100,6 @@
|
|
|
100
100
|
"markdown-it-sup": "1.0.0",
|
|
101
101
|
"match-sorter": "^4.0.2",
|
|
102
102
|
"mini-css-extract-plugin": "2.7.2",
|
|
103
|
-
"msw": "0.49.1",
|
|
104
103
|
"node-polyfill-webpack-plugin": "2.0.1",
|
|
105
104
|
"node-schedule": "2.1.0",
|
|
106
105
|
"p-map": "4.0.0",
|
|
@@ -118,12 +117,12 @@
|
|
|
118
117
|
"react-intl": "6.2.7",
|
|
119
118
|
"react-is": "^17.0.2",
|
|
120
119
|
"react-query": "3.24.3",
|
|
121
|
-
"react-redux": "
|
|
120
|
+
"react-redux": "8.0.5",
|
|
122
121
|
"react-refresh": "0.14.0",
|
|
123
122
|
"react-router": "5.2.0",
|
|
124
123
|
"react-router-dom": "5.3.4",
|
|
125
124
|
"react-window": "1.8.7",
|
|
126
|
-
"redux": "^4.
|
|
125
|
+
"redux": "^4.2.1",
|
|
127
126
|
"reselect": "^4.0.0",
|
|
128
127
|
"rimraf": "3.0.2",
|
|
129
128
|
"sanitize-html": "2.7.3",
|
|
@@ -145,6 +144,7 @@
|
|
|
145
144
|
"@testing-library/user-event": "14.4.3",
|
|
146
145
|
"duplicate-dependencies-webpack-plugin": "^1.0.2",
|
|
147
146
|
"glob": "8.0.3",
|
|
147
|
+
"msw": "1.0.0",
|
|
148
148
|
"react-test-renderer": "^17.0.2",
|
|
149
149
|
"speed-measure-webpack-plugin": "1.5.0",
|
|
150
150
|
"webpack-bundle-analyzer": "^4.7.0"
|
|
@@ -165,5 +165,5 @@
|
|
|
165
165
|
}
|
|
166
166
|
}
|
|
167
167
|
},
|
|
168
|
-
"gitHead": "
|
|
168
|
+
"gitHead": "880ba7af867ad43c4cc45b47467b76a9b5606b6e"
|
|
169
169
|
}
|
package/server/bootstrap.js
CHANGED
|
@@ -78,6 +78,7 @@ module.exports = async () => {
|
|
|
78
78
|
const userService = getService('user');
|
|
79
79
|
const roleService = getService('role');
|
|
80
80
|
const apiTokenService = getService('api-token');
|
|
81
|
+
const transferService = getService('transfer');
|
|
81
82
|
const tokenService = getService('token');
|
|
82
83
|
|
|
83
84
|
await roleService.createRolesIfNoneExist();
|
|
@@ -93,5 +94,6 @@ module.exports = async () => {
|
|
|
93
94
|
await syncAPITokensPermissions();
|
|
94
95
|
|
|
95
96
|
apiTokenService.checkSaltIsDefined();
|
|
97
|
+
transferService.token.checkSaltIsDefined();
|
|
96
98
|
tokenService.checkSecretIsDefined();
|
|
97
99
|
};
|
|
@@ -180,5 +180,53 @@ module.exports = {
|
|
|
180
180
|
section: 'settings',
|
|
181
181
|
category: 'project',
|
|
182
182
|
},
|
|
183
|
+
{
|
|
184
|
+
uid: 'transfer.tokens.access',
|
|
185
|
+
displayName: 'Access the transfer tokens settings page',
|
|
186
|
+
pluginName: 'admin',
|
|
187
|
+
section: 'settings',
|
|
188
|
+
category: 'transfer tokens',
|
|
189
|
+
subCategory: 'transfer tokens',
|
|
190
|
+
},
|
|
191
|
+
{
|
|
192
|
+
uid: 'transfer.tokens.create',
|
|
193
|
+
displayName: 'Create (generate)',
|
|
194
|
+
pluginName: 'admin',
|
|
195
|
+
section: 'settings',
|
|
196
|
+
category: 'transfer tokens',
|
|
197
|
+
subCategory: 'general',
|
|
198
|
+
},
|
|
199
|
+
{
|
|
200
|
+
uid: 'transfer.tokens.read',
|
|
201
|
+
displayName: 'Read',
|
|
202
|
+
pluginName: 'admin',
|
|
203
|
+
section: 'settings',
|
|
204
|
+
category: 'transfer tokens',
|
|
205
|
+
subCategory: 'general',
|
|
206
|
+
},
|
|
207
|
+
{
|
|
208
|
+
uid: 'transfer.tokens.update',
|
|
209
|
+
displayName: 'Update',
|
|
210
|
+
pluginName: 'admin',
|
|
211
|
+
section: 'settings',
|
|
212
|
+
category: 'transfer tokens',
|
|
213
|
+
subCategory: 'general',
|
|
214
|
+
},
|
|
215
|
+
{
|
|
216
|
+
uid: 'transfer.tokens.regenerate',
|
|
217
|
+
displayName: 'Regenerate',
|
|
218
|
+
pluginName: 'admin',
|
|
219
|
+
section: 'settings',
|
|
220
|
+
category: 'transfer tokens',
|
|
221
|
+
subCategory: 'general',
|
|
222
|
+
},
|
|
223
|
+
{
|
|
224
|
+
uid: 'transfer.tokens.delete',
|
|
225
|
+
displayName: 'Delete (revoke)',
|
|
226
|
+
pluginName: 'admin',
|
|
227
|
+
section: 'settings',
|
|
228
|
+
category: 'transfer tokens',
|
|
229
|
+
subCategory: 'general',
|
|
230
|
+
},
|
|
183
231
|
],
|
|
184
232
|
};
|
|
@@ -6,4 +6,6 @@ module.exports = {
|
|
|
6
6
|
role: { schema: require('./Role') },
|
|
7
7
|
'api-token': { schema: require('./api-token') },
|
|
8
8
|
'api-token-permission': { schema: require('./api-token-permission') },
|
|
9
|
+
'transfer-token': { schema: require('./transfer-token') },
|
|
10
|
+
'transfer-token-permission': { schema: require('./transfer-token-permission') },
|
|
9
11
|
};
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
module.exports = {
|
|
4
|
+
collectionName: 'strapi_transfer_token_permissions',
|
|
5
|
+
info: {
|
|
6
|
+
name: 'Transfer Token Permission',
|
|
7
|
+
description: '',
|
|
8
|
+
singularName: 'transfer-token-permission',
|
|
9
|
+
pluralName: 'transfer-token-permissions',
|
|
10
|
+
displayName: 'Transfer Token Permission',
|
|
11
|
+
},
|
|
12
|
+
options: {},
|
|
13
|
+
pluginOptions: {
|
|
14
|
+
'content-manager': {
|
|
15
|
+
visible: false,
|
|
16
|
+
},
|
|
17
|
+
'content-type-builder': {
|
|
18
|
+
visible: false,
|
|
19
|
+
},
|
|
20
|
+
},
|
|
21
|
+
attributes: {
|
|
22
|
+
action: {
|
|
23
|
+
type: 'string',
|
|
24
|
+
minLength: 1,
|
|
25
|
+
configurable: false,
|
|
26
|
+
required: true,
|
|
27
|
+
},
|
|
28
|
+
token: {
|
|
29
|
+
configurable: false,
|
|
30
|
+
type: 'relation',
|
|
31
|
+
relation: 'manyToOne',
|
|
32
|
+
inversedBy: 'permissions',
|
|
33
|
+
target: 'admin::transfer-token',
|
|
34
|
+
},
|
|
35
|
+
},
|
|
36
|
+
};
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
module.exports = {
|
|
4
|
+
collectionName: 'strapi_transfer_tokens',
|
|
5
|
+
info: {
|
|
6
|
+
name: 'Transfer Token',
|
|
7
|
+
singularName: 'transfer-token',
|
|
8
|
+
pluralName: 'transfer-tokens',
|
|
9
|
+
displayName: 'Transfer Token',
|
|
10
|
+
description: '',
|
|
11
|
+
},
|
|
12
|
+
options: {},
|
|
13
|
+
pluginOptions: {
|
|
14
|
+
'content-manager': {
|
|
15
|
+
visible: false,
|
|
16
|
+
},
|
|
17
|
+
'content-type-builder': {
|
|
18
|
+
visible: false,
|
|
19
|
+
},
|
|
20
|
+
},
|
|
21
|
+
attributes: {
|
|
22
|
+
name: {
|
|
23
|
+
type: 'string',
|
|
24
|
+
minLength: 1,
|
|
25
|
+
configurable: false,
|
|
26
|
+
required: true,
|
|
27
|
+
unique: true,
|
|
28
|
+
},
|
|
29
|
+
description: {
|
|
30
|
+
type: 'string',
|
|
31
|
+
minLength: 1,
|
|
32
|
+
configurable: false,
|
|
33
|
+
required: false,
|
|
34
|
+
default: '',
|
|
35
|
+
},
|
|
36
|
+
accessKey: {
|
|
37
|
+
type: 'string',
|
|
38
|
+
minLength: 1,
|
|
39
|
+
configurable: false,
|
|
40
|
+
required: true,
|
|
41
|
+
},
|
|
42
|
+
lastUsedAt: {
|
|
43
|
+
type: 'datetime',
|
|
44
|
+
configurable: false,
|
|
45
|
+
required: false,
|
|
46
|
+
},
|
|
47
|
+
permissions: {
|
|
48
|
+
type: 'relation',
|
|
49
|
+
target: 'admin::transfer-token-permission',
|
|
50
|
+
relation: 'oneToMany',
|
|
51
|
+
mappedBy: 'token',
|
|
52
|
+
configurable: false,
|
|
53
|
+
required: false,
|
|
54
|
+
},
|
|
55
|
+
expiresAt: {
|
|
56
|
+
type: 'datetime',
|
|
57
|
+
configurable: false,
|
|
58
|
+
required: false,
|
|
59
|
+
},
|
|
60
|
+
lifespan: {
|
|
61
|
+
type: 'biginteger',
|
|
62
|
+
configurable: false,
|
|
63
|
+
required: false,
|
|
64
|
+
},
|
|
65
|
+
},
|
|
66
|
+
};
|
|
@@ -2,8 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
const { stringEquals } = require('@strapi/utils/lib');
|
|
4
4
|
const { ApplicationError } = require('@strapi/utils').errors;
|
|
5
|
-
const { trim } = require('lodash/fp');
|
|
6
|
-
const has = require('lodash/has');
|
|
5
|
+
const { trim, has } = require('lodash/fp');
|
|
7
6
|
const { getService } = require('../utils');
|
|
8
7
|
const {
|
|
9
8
|
validateApiTokenCreationInput,
|
|
@@ -93,11 +92,11 @@ module.exports = {
|
|
|
93
92
|
* - having a space at the end or start of the value.
|
|
94
93
|
* - having only spaces as value;
|
|
95
94
|
*/
|
|
96
|
-
if (has(
|
|
95
|
+
if (has('name', attributes)) {
|
|
97
96
|
attributes.name = trim(body.name);
|
|
98
97
|
}
|
|
99
98
|
|
|
100
|
-
if (has(
|
|
99
|
+
if (has('description', attributes) || attributes.description === null) {
|
|
101
100
|
attributes.description = trim(body.description);
|
|
102
101
|
}
|
|
103
102
|
|
|
@@ -108,7 +107,7 @@ module.exports = {
|
|
|
108
107
|
return ctx.notFound('API Token not found');
|
|
109
108
|
}
|
|
110
109
|
|
|
111
|
-
if (has(
|
|
110
|
+
if (has('name', attributes)) {
|
|
112
111
|
const nameAlreadyTaken = await apiTokenService.getByName(attributes.name);
|
|
113
112
|
|
|
114
113
|
/**
|
|
@@ -7,6 +7,7 @@ module.exports = {
|
|
|
7
7
|
authentication: require('./authentication'),
|
|
8
8
|
permission: require('./permission'),
|
|
9
9
|
role: require('./role'),
|
|
10
|
+
transfer: require('./transfer'),
|
|
10
11
|
user: require('./user'),
|
|
11
12
|
webhooks: require('./webhooks'),
|
|
12
13
|
'content-api': require('./content-api'),
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const { mapKeys } = require('lodash/fp');
|
|
4
|
+
|
|
5
|
+
const runner = require('./runner');
|
|
6
|
+
const token = require('./token');
|
|
7
|
+
|
|
8
|
+
const prefixActionsName = (prefix, dict) => mapKeys((key) => `${prefix}-${key}`, dict);
|
|
9
|
+
|
|
10
|
+
module.exports = {
|
|
11
|
+
...prefixActionsName('runner', runner),
|
|
12
|
+
...prefixActionsName('token', token),
|
|
13
|
+
};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const { remote } = require('@strapi/data-transfer/lib/strapi');
|
|
4
|
+
const { UnauthorizedError } = require('@strapi/utils/lib/errors');
|
|
5
|
+
|
|
6
|
+
const dataTransferAuthStrategy = require('../../strategies/data-transfer');
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* @param {import('koa').Context} ctx
|
|
10
|
+
* @param {string} [scope]
|
|
11
|
+
*/
|
|
12
|
+
const verify = async (ctx, scope) => {
|
|
13
|
+
const { auth } = ctx.state;
|
|
14
|
+
|
|
15
|
+
if (!auth) {
|
|
16
|
+
throw new UnauthorizedError();
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
await dataTransferAuthStrategy.verify(auth, { scope });
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
module.exports = {
|
|
23
|
+
connect: remote.handlers.createTransferHandler({ verify }),
|
|
24
|
+
};
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const { trim, has } = require('lodash/fp');
|
|
4
|
+
const {
|
|
5
|
+
errors: { ApplicationError },
|
|
6
|
+
stringEquals,
|
|
7
|
+
} = require('@strapi/utils');
|
|
8
|
+
|
|
9
|
+
const {
|
|
10
|
+
token: { validateTransferTokenCreationInput, validateTransferTokenUpdateInput },
|
|
11
|
+
} = require('../../validation/transfer');
|
|
12
|
+
const { getService } = require('../../utils');
|
|
13
|
+
|
|
14
|
+
module.exports = {
|
|
15
|
+
async list(ctx) {
|
|
16
|
+
const transferService = getService('transfer');
|
|
17
|
+
const transferTokens = await transferService.token.list();
|
|
18
|
+
|
|
19
|
+
ctx.body = { data: transferTokens };
|
|
20
|
+
},
|
|
21
|
+
|
|
22
|
+
async getById(ctx) {
|
|
23
|
+
const { id } = ctx.params;
|
|
24
|
+
const tokenService = getService('transfer').token;
|
|
25
|
+
|
|
26
|
+
const transferToken = await tokenService.getById(id);
|
|
27
|
+
|
|
28
|
+
if (!transferToken) {
|
|
29
|
+
ctx.notFound('Transfer token not found');
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
ctx.body = { data: transferToken };
|
|
34
|
+
},
|
|
35
|
+
|
|
36
|
+
async create(ctx) {
|
|
37
|
+
const { body } = ctx.request;
|
|
38
|
+
const { token: tokenService } = getService('transfer');
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* We trim fields to avoid having issues with either:
|
|
42
|
+
* - having a space at the end or start of the value
|
|
43
|
+
* - having only spaces as value (so that an empty field can be caught in validation)
|
|
44
|
+
*/
|
|
45
|
+
const attributes = {
|
|
46
|
+
name: trim(body.name),
|
|
47
|
+
description: trim(body.description),
|
|
48
|
+
permissions: body.permissions,
|
|
49
|
+
lifespan: body.lifespan,
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
await validateTransferTokenCreationInput(attributes);
|
|
53
|
+
|
|
54
|
+
const alreadyExists = await tokenService.exists({ name: attributes.name });
|
|
55
|
+
if (alreadyExists) {
|
|
56
|
+
throw new ApplicationError('Name already taken');
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
const transferTokens = await tokenService.create(attributes);
|
|
60
|
+
|
|
61
|
+
ctx.created({ data: transferTokens });
|
|
62
|
+
},
|
|
63
|
+
|
|
64
|
+
async update(ctx) {
|
|
65
|
+
const { body } = ctx.request;
|
|
66
|
+
const { id } = ctx.params;
|
|
67
|
+
const { token: tokenService } = getService('transfer');
|
|
68
|
+
|
|
69
|
+
const attributes = body;
|
|
70
|
+
/**
|
|
71
|
+
* We trim fields to avoid having issues with either:
|
|
72
|
+
* - having a space at the end or start of the value
|
|
73
|
+
* - having only spaces as value (so that an empty field can be caught in validation)
|
|
74
|
+
*/
|
|
75
|
+
if (has('name', attributes)) {
|
|
76
|
+
attributes.name = trim(body.name);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
if (has('description', attributes) || attributes.description === null) {
|
|
80
|
+
attributes.description = trim(body.description);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
await validateTransferTokenUpdateInput(attributes);
|
|
84
|
+
|
|
85
|
+
const apiTokenExists = await tokenService.getById(id);
|
|
86
|
+
if (!apiTokenExists) {
|
|
87
|
+
return ctx.notFound('Transfer token not found');
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
if (has('name', attributes)) {
|
|
91
|
+
const nameAlreadyTaken = await tokenService.getByName(attributes.name);
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* We cast the ids as string as the one coming from the ctx isn't cast
|
|
95
|
+
* as a Number in case it is supposed to be an integer. It remains
|
|
96
|
+
* as a string. This way we avoid issues with integers in the db.
|
|
97
|
+
*/
|
|
98
|
+
if (!!nameAlreadyTaken && !stringEquals(nameAlreadyTaken.id, id)) {
|
|
99
|
+
throw new ApplicationError('Name already taken');
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
const apiToken = await tokenService.update(id, attributes);
|
|
104
|
+
|
|
105
|
+
ctx.body = { data: apiToken };
|
|
106
|
+
},
|
|
107
|
+
|
|
108
|
+
async revoke(ctx) {
|
|
109
|
+
const { id } = ctx.params;
|
|
110
|
+
const { token: tokenService } = getService('transfer');
|
|
111
|
+
|
|
112
|
+
const transferToken = await tokenService.revoke(id);
|
|
113
|
+
|
|
114
|
+
ctx.deleted({ data: transferToken });
|
|
115
|
+
},
|
|
116
|
+
|
|
117
|
+
async regenerate(ctx) {
|
|
118
|
+
const { id } = ctx.params;
|
|
119
|
+
const { token: tokenService } = getService('transfer');
|
|
120
|
+
|
|
121
|
+
const exists = await tokenService.getById(id);
|
|
122
|
+
if (!exists) {
|
|
123
|
+
ctx.notFound('Transfer token not found');
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
const accessToken = await tokenService.regenerate(id);
|
|
128
|
+
|
|
129
|
+
ctx.created({ data: accessToken });
|
|
130
|
+
},
|
|
131
|
+
};
|
package/server/register.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
// const { register: registerDataTransferRoute } = require('@strapi/data-transfer/lib/strapi');
|
|
4
|
-
|
|
5
3
|
const registerAdminPanelRoute = require('./routes/serve-admin-panel');
|
|
4
|
+
|
|
6
5
|
const adminAuthStrategy = require('./strategies/admin');
|
|
6
|
+
|
|
7
7
|
const apiTokenAuthStrategy = require('./strategies/api-token');
|
|
8
8
|
|
|
9
9
|
module.exports = ({ strapi }) => {
|
|
@@ -16,11 +16,4 @@ module.exports = ({ strapi }) => {
|
|
|
16
16
|
if (strapi.config.serveAdminPanel) {
|
|
17
17
|
registerAdminPanelRoute({ strapi });
|
|
18
18
|
}
|
|
19
|
-
|
|
20
|
-
// if (
|
|
21
|
-
// process.env.STRAPI_EXPERIMENTAL === 'true' &&
|
|
22
|
-
// process.env.STRAPI_DISABLE_REMOTE_DATA_TRANSFER !== 'true'
|
|
23
|
-
// ) {
|
|
24
|
-
// registerDataTransferRoute(strapi);
|
|
25
|
-
// }
|
|
26
19
|
};
|
package/server/routes/index.js
CHANGED
|
@@ -8,6 +8,7 @@ const roles = require('./roles');
|
|
|
8
8
|
const webhooks = require('./webhooks');
|
|
9
9
|
const apiTokens = require('./api-tokens');
|
|
10
10
|
const contentApi = require('./content-api');
|
|
11
|
+
const transfer = require('./transfer');
|
|
11
12
|
|
|
12
13
|
module.exports = [
|
|
13
14
|
...admin,
|
|
@@ -18,4 +19,5 @@ module.exports = [
|
|
|
18
19
|
...webhooks,
|
|
19
20
|
...apiTokens,
|
|
20
21
|
...contentApi,
|
|
22
|
+
...transfer,
|
|
21
23
|
];
|