@strapi/admin 4.1.10-beta.0 → 4.1.10
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/homepage-logo.png +0 -0
- package/admin/src/components/AutoReloadOverlayBlockerProvider/Blocker.js +2 -6
- package/admin/src/components/GuidedTour/Homepage/index.js +1 -2
- package/admin/src/components/GuidedTour/Modal/components/Stepper.js +1 -2
- package/admin/src/components/LeftMenu/index.js +9 -9
- package/admin/src/components/Notifications/Notification/index.js +2 -2
- package/admin/src/components/Providers/index.js +4 -8
- package/admin/src/components/UnauthenticatedLogo/index.js +2 -4
- package/admin/src/components/UpgradePlanModal/index.js +6 -2
- package/admin/src/content-manager/components/SelectMany/ListItem.js +1 -2
- package/admin/src/content-manager/components/SelectWrapper/index.js +8 -7
- package/admin/src/content-manager/components/SingleTypeFormWrapper/index.js +2 -2
- package/admin/src/content-manager/components/Wysiwyg/Editor.js +2 -0
- package/admin/src/content-manager/pages/App/LeftMenu/index.js +8 -7
- package/admin/src/content-manager/pages/EditSettingsView/components/ComponentFieldList.js +1 -1
- package/admin/src/content-manager/pages/EditSettingsView/components/LinkToCTB.js +1 -2
- package/admin/src/content-manager/pages/EditSettingsView/index.js +1 -2
- package/admin/src/content-manager/pages/EditView/Header/index.js +3 -3
- package/admin/src/content-manager/pages/EditView/index.js +1 -4
- package/admin/src/content-manager/pages/ListSettingsView/index.js +1 -2
- package/admin/src/content-manager/pages/ListView/index.js +1 -1
- package/admin/src/content-manager/pages/NoContentType/index.js +1 -2
- package/admin/src/pages/App/index.js +2 -7
- package/admin/src/pages/AuthPage/components/ForgotPassword/index.js +1 -2
- package/admin/src/pages/AuthPage/components/ForgotPasswordSuccess/index.js +1 -1
- package/admin/src/pages/AuthPage/components/Login/BaseLogin.js +1 -2
- package/admin/src/pages/AuthPage/components/Oops/index.js +1 -2
- package/admin/src/pages/AuthPage/components/Register/index.js +12 -12
- package/admin/src/pages/AuthPage/components/ResetPassword/index.js +3 -4
- package/admin/src/pages/HomePage/HomeHeader.js +2 -2
- package/admin/src/pages/HomePage/SocialLinks.js +4 -3
- package/admin/src/pages/InternalErrorPage/index.js +1 -2
- package/admin/src/pages/MarketplacePage/components/PageHeader/index.js +2 -1
- package/admin/src/pages/MarketplacePage/components/PluginCard/index.js +4 -3
- package/admin/src/pages/NotFoundPage/index.js +1 -2
- package/admin/src/pages/SettingsPage/components/SettingsNav/index.js +5 -4
- package/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/index.js +1 -1
- package/admin/src/pages/SettingsPage/pages/ApiTokens/ListView/DynamicTable/UpdateButton/index.js +1 -1
- package/admin/src/pages/SettingsPage/pages/ApiTokens/ListView/index.js +1 -1
- package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/index.js +94 -150
- package/admin/src/pages/SettingsPage/pages/Roles/EditPage/index.js +1 -1
- package/admin/src/pages/SettingsPage/pages/Users/EditPage/index.js +1 -1
- package/admin/src/pages/SettingsPage/pages/Webhooks/EditView/components/WebhookForm/index.js +1 -2
- package/admin/src/pages/SettingsPage/pages/Webhooks/ListView/index.js +1 -1
- package/admin/src/translations/ca.json +699 -0
- package/admin/src/translations/en.json +0 -25
- package/admin/src/translations/languageNativeNames.js +1 -0
- package/admin/src/translations/ru.json +34 -0
- package/build/2077.51485bfb.chunk.js +194 -0
- package/build/6706.7f57cb76.chunk.js +113 -0
- package/build/7589.95466f9a.chunk.js +194 -0
- package/build/{5289.0341db2d.chunk.js → 7757.6d20cfe0.chunk.js} +89 -87
- package/build/8681.96961454.chunk.js +163 -0
- package/build/9066.118ecccd.chunk.js +101 -0
- package/build/9115.abdf4e3b.chunk.js +1 -0
- package/build/9158.60fcd720.chunk.js +503 -0
- package/build/{9298.f97fcef0.chunk.js → 9298.5b5c6ea1.chunk.js} +2 -2
- package/build/9420.cb0b75e8.chunk.js +508 -0
- package/build/Admin-authenticatedApp.ec0f0834.chunk.js +80 -0
- package/build/Admin_homePage.e6d4d977.chunk.js +71 -0
- package/build/Admin_marketplace.25133b64.chunk.js +11 -0
- package/build/Admin_settingsPage.e1dfbb1d.chunk.js +172 -0
- package/build/admin-edit-roles-page.e77a2acc.chunk.js +1 -0
- package/build/admin-edit-users.4c49fe98.chunk.js +11 -0
- package/build/api-tokens-create-page.618b3e40.chunk.js +1 -0
- package/build/api-tokens-edit-page.8d19dfe1.chunk.js +1 -0
- package/build/api-tokens-list-page.274e1c80.chunk.js +15 -0
- package/build/ca-json.0097e443.chunk.js +1 -0
- package/build/content-manager.d6449678.chunk.js +1204 -0
- package/build/{content-type-builder.0d8729ad.chunk.js → content-type-builder.a9554707.chunk.js} +8 -8
- package/build/en-json.3e1a222e.chunk.js +1 -0
- package/build/fb376b132d18bf4522ca.png +0 -0
- package/build/index.html +1 -1
- package/build/main.6dad6108.js +8404 -0
- package/build/ru-json.28147733.chunk.js +1 -0
- package/build/runtime~main.26528011.js +2 -0
- package/build/users-roles-settings-page.28bf6bdc.chunk.js +30 -0
- package/build/{webhook-edit-page.2e6727ab.chunk.js → webhook-edit-page.ca670f8d.chunk.js} +3 -3
- package/build/webhook-list-page.ce1fa92f.chunk.js +133 -0
- package/ee/admin/pages/AuthPage/components/Providers/index.js +1 -1
- package/ee/admin/pages/SettingsPage/pages/Roles/CreatePage/index.js +1 -1
- package/package.json +5 -5
- package/server/config/admin-actions.js +0 -14
- package/server/controllers/admin.js +1 -33
- package/server/routes/admin.js +0 -28
- package/server/services/index.js +0 -1
- package/server/services/permission/permissions-manager/sanitize.js +22 -0
- package/server/services/user.js +1 -1
- package/server/utils/index.d.ts +0 -2
- package/admin/src/components/ConfigurationsProvider/index.js +0 -51
- package/admin/src/components/ConfigurationsProvider/reducer.js +0 -28
- package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/Form/index.js +0 -85
- package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/Form/init.js +0 -13
- package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/Form/reducer.js +0 -43
- package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoInput/index.js +0 -116
- package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoInput/reducer.js +0 -28
- package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoInput/stepper.js +0 -25
- package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoModalStepper/AddLogoDialog.js +0 -67
- package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoModalStepper/FromComputerForm.js +0 -176
- package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoModalStepper/FromUrlForm.js +0 -82
- package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoModalStepper/ImageCardAsset.js +0 -51
- package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoModalStepper/PendingLogoDialog.js +0 -97
- package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoModalStepper/index.js +0 -85
- package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoModalStepper/reducer.js +0 -28
- package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/utils/api.js +0 -16
- package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/utils/constants.js +0 -3
- package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/utils/getFormData.js +0 -17
- package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/utils/parseFileMetadatas.js +0 -76
- package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/utils/prefixAllUrls.js +0 -17
- package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/utils/urlToFile.js +0 -21
- package/build/2481.7ba28142.chunk.js +0 -184
- package/build/2a9e9ef5c4c775bb7c7b.png +0 -0
- package/build/372.3720845e.chunk.js +0 -899
- package/build/497.fbd75558.chunk.js +0 -284
- package/build/6404.80bf5858.chunk.js +0 -506
- package/build/7197.959bbe97.chunk.js +0 -113
- package/build/7589.f3b26345.chunk.js +0 -194
- package/build/9115.318a6841.chunk.js +0 -1
- package/build/9853.d96fbc67.chunk.js +0 -356
- package/build/Admin-authenticatedApp.d8767873.chunk.js +0 -80
- package/build/Admin_homePage.50b6c129.chunk.js +0 -71
- package/build/Admin_marketplace.514ace37.chunk.js +0 -11
- package/build/Admin_settingsPage.0d94a598.chunk.js +0 -180
- package/build/admin-edit-roles-page.06f3d288.chunk.js +0 -1
- package/build/admin-edit-users.6a325cca.chunk.js +0 -11
- package/build/api-tokens-create-page.635e20c8.chunk.js +0 -1
- package/build/api-tokens-edit-page.db07253e.chunk.js +0 -1
- package/build/api-tokens-list-page.346c2149.chunk.js +0 -15
- package/build/content-manager.78e3f35c.chunk.js +0 -1204
- package/build/en-json.ca572384.chunk.js +0 -1
- package/build/main.06f66609.js +0 -7909
- package/build/ru-json.4560906c.chunk.js +0 -1
- package/build/runtime~main.dc1c7ef6.js +0 -2
- package/build/users-roles-settings-page.97d7092d.chunk.js +0 -30
- package/build/webhook-list-page.927257b5.chunk.js +0 -133
- package/server/services/project-settings.js +0 -173
- package/server/validation/project-settings.js +0 -39
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
(self.webpackChunk_strapi_admin=self.webpackChunk_strapi_admin||[]).push([[4121],{55470:(F,K,d)=>{"use strict";F.exports=d(17173)},17173:function(F,K,d){(function(s,O){F.exports=O(d(32735),d(19615))})(this,function(s,O){return function(r){var h={};function n(i){if(h[i])return h[i].exports;var a=h[i]={i,l:!1,exports:{}};return r[i].call(a.exports,a,a.exports,n),a.l=!0,a.exports}return n.m=r,n.c=h,n.d=function(i,a,c){n.o(i,a)||Object.defineProperty(i,a,{enumerable:!0,get:c})},n.r=function(i){typeof Symbol!="undefined"&&Symbol.toStringTag&&Object.defineProperty(i,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(i,"__esModule",{value:!0})},n.t=function(i,a){if(1&a&&(i=n(i)),8&a||4&a&&typeof i=="object"&&i&&i.__esModule)return i;var c=Object.create(null);if(n.r(c),Object.defineProperty(c,"default",{enumerable:!0,value:i}),2&a&&typeof i!="string")for(var l in i)n.d(c,l,function(o){return i[o]}.bind(null,l));return c},n.n=function(i){var a=i&&i.__esModule?function(){return i.default}:function(){return i};return n.d(a,"a",a),a},n.o=function(i,a){return Object.prototype.hasOwnProperty.call(i,a)},n.p="",n(n.s=121)}({0:function(r,h,n){r.exports=n(19)()},1:function(r,h){r.exports=s},10:function(r,h,n){var i=n(25),a=n(26),c=n(22),l=n(27);r.exports=function(o,b){return i(o)||a(o,b)||c(o,b)||l()},r.exports.default=r.exports,r.exports.__esModule=!0},121:function(r,h,n){"use strict";n.r(h),n.d(h,"Switch",function(){return j});var i,a,c=n(5),l=n.n(c),o=n(4),b=n.n(o),p=n(3),g=n.n(p),S=n(1),x=n.n(S),e=n(0),t=n.n(e),u=n(2),w=n.n(u),B=n(9),I=n(6),J=["label","onChange","onLabel","offLabel","selected","visibleLabels"],R=w.a.div(i||(i=g()([`
|
|
2
|
+
background: `,`;
|
|
3
|
+
border: none;
|
|
4
|
+
border-radius: 16px;
|
|
5
|
+
position: relative;
|
|
6
|
+
height: `,`rem;
|
|
7
|
+
width: `,`rem;
|
|
8
|
+
|
|
9
|
+
& span {
|
|
10
|
+
font-size: `,`;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
&:before {
|
|
14
|
+
content: '';
|
|
15
|
+
background: `,`;
|
|
16
|
+
width: 1rem;
|
|
17
|
+
height: 1rem;
|
|
18
|
+
border-radius: 50%;
|
|
19
|
+
position: absolute;
|
|
20
|
+
transition: all 0.5s;
|
|
21
|
+
left: `,`;
|
|
22
|
+
top: `,`;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
@media (prefers-reduced-motion: reduce) {
|
|
26
|
+
&:before {
|
|
27
|
+
transition: none;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
`])),function(T){return T.theme.colors.danger500},1.5,2.5,function(T){return T.visibleLabels?"1rem":0},function(T){return T.theme.colors.neutral0},function(T){return T.theme.spaces[1]},function(T){return T.theme.spaces[1]}),q=w.a.button(a||(a=g()([`
|
|
31
|
+
background: transparent;
|
|
32
|
+
padding: 0;
|
|
33
|
+
border: none;
|
|
34
|
+
|
|
35
|
+
&[aria-checked='true'] `,` {
|
|
36
|
+
background: `,`;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
&[aria-checked='true'] `,`:before {
|
|
40
|
+
transform: translateX(1rem);
|
|
41
|
+
}
|
|
42
|
+
`])),R,function(T){return T.theme.colors.success500},R),j=x.a.forwardRef(function(T,_){var ee=T.label,ne=T.onChange,V=T.onLabel,z=T.offLabel,G=T.selected,$=T.visibleLabels,te=b()(T,J);return x.a.createElement(q,l()({ref:_,role:"switch","aria-checked":G,"aria-label":ee,onClick:ne,visibleLabels:$,type:"button"},te),x.a.createElement(B.Flex,null,x.a.createElement(R,null,x.a.createElement("span",null,V),x.a.createElement("span",null,z)),$&&x.a.createElement(I.Box,{as:"span","aria-hidden":!0,paddingLeft:2,color:G?"success600":"danger600"},G?V:z)))});j.defaultProps={onLabel:"On",offLabel:"Off",visibleLabels:!1},j.propTypes={label:t.a.string.isRequired,offLabel:t.a.string,onChange:t.a.func.isRequired,onLabel:t.a.string,selected:t.a.bool.isRequired,visibleLabels:t.a.bool},j.displayName="Switch"},13:function(r,h){function n(i){return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?(r.exports=n=function(a){return typeof a},r.exports.default=r.exports,r.exports.__esModule=!0):(r.exports=n=function(a){return a&&typeof Symbol=="function"&&a.constructor===Symbol&&a!==Symbol.prototype?"symbol":typeof a},r.exports.default=r.exports,r.exports.__esModule=!0),n(i)}r.exports=n,r.exports.default=r.exports,r.exports.__esModule=!0},19:function(r,h,n){"use strict";var i=n(20);function a(){}function c(){}c.resetWarningCache=a,r.exports=function(){function l(p,g,S,x,e,t){if(t!==i){var u=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw u.name="Invariant Violation",u}}function o(){return l}l.isRequired=l;var b={array:l,bool:l,func:l,number:l,object:l,string:l,symbol:l,any:l,arrayOf:o,element:l,elementType:l,instanceOf:o,node:l,objectOf:o,oneOf:o,oneOfType:o,shape:o,exact:o,checkPropTypes:c,resetWarningCache:a};return b.PropTypes=b,b}},2:function(r,h){r.exports=O},20:function(r,h,n){"use strict";r.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},21:function(r,h){r.exports=function(n,i){(i==null||i>n.length)&&(i=n.length);for(var a=0,c=new Array(i);a<i;a++)c[a]=n[a];return c},r.exports.default=r.exports,r.exports.__esModule=!0},22:function(r,h,n){var i=n(21);r.exports=function(a,c){if(a){if(typeof a=="string")return i(a,c);var l=Object.prototype.toString.call(a).slice(8,-1);return l==="Object"&&a.constructor&&(l=a.constructor.name),l==="Map"||l==="Set"?Array.from(a):l==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(l)?i(a,c):void 0}},r.exports.default=r.exports,r.exports.__esModule=!0},24:function(r,h){r.exports=function(n,i){if(n==null)return{};var a,c,l={},o=Object.keys(n);for(c=0;c<o.length;c++)a=o[c],i.indexOf(a)>=0||(l[a]=n[a]);return l},r.exports.default=r.exports,r.exports.__esModule=!0},25:function(r,h){r.exports=function(n){if(Array.isArray(n))return n},r.exports.default=r.exports,r.exports.__esModule=!0},26:function(r,h){r.exports=function(n,i){var a=n==null?null:typeof Symbol!="undefined"&&n[Symbol.iterator]||n["@@iterator"];if(a!=null){var c,l,o=[],b=!0,p=!1;try{for(a=a.call(n);!(b=(c=a.next()).done)&&(o.push(c.value),!i||o.length!==i);b=!0);}catch(g){p=!0,l=g}finally{try{b||a.return==null||a.return()}finally{if(p)throw l}}return o}},r.exports.default=r.exports,r.exports.__esModule=!0},27:function(r,h){r.exports=function(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
|
|
43
|
+
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)},r.exports.default=r.exports,r.exports.__esModule=!0},3:function(r,h){r.exports=function(n,i){return i||(i=n.slice(0)),Object.freeze(Object.defineProperties(n,{raw:{value:Object.freeze(i)}}))},r.exports.default=r.exports,r.exports.__esModule=!0},4:function(r,h,n){var i=n(24);r.exports=function(a,c){if(a==null)return{};var l,o,b=i(a,c);if(Object.getOwnPropertySymbols){var p=Object.getOwnPropertySymbols(a);for(o=0;o<p.length;o++)l=p[o],c.indexOf(l)>=0||Object.prototype.propertyIsEnumerable.call(a,l)&&(b[l]=a[l])}return b},r.exports.default=r.exports,r.exports.__esModule=!0},5:function(r,h){function n(){return r.exports=n=Object.assign||function(i){for(var a=1;a<arguments.length;a++){var c=arguments[a];for(var l in c)Object.prototype.hasOwnProperty.call(c,l)&&(i[l]=c[l])}return i},r.exports.default=r.exports,r.exports.__esModule=!0,n.apply(this,arguments)}r.exports=n,r.exports.default=r.exports,r.exports.__esModule=!0},6:function(r,h,n){"use strict";n.r(h),n.d(h,"Box",function(){return x});var i,a=n(3),c=n.n(a),l=n(0),o=n.n(l),b=n(2),p=n.n(b),g=n(7),S={color:!0},x=p.a.div.withConfig({shouldForwardProp:function(e,t){return!S[e]&&t(e)}})(i||(i=c()([`
|
|
44
|
+
// Font
|
|
45
|
+
font-size: `,`;
|
|
46
|
+
|
|
47
|
+
// Colors
|
|
48
|
+
background: `,`;
|
|
49
|
+
color: `,`;
|
|
50
|
+
|
|
51
|
+
// Spaces
|
|
52
|
+
`,`
|
|
53
|
+
`,`
|
|
54
|
+
`,`
|
|
55
|
+
`,`
|
|
56
|
+
`,`
|
|
57
|
+
`,`
|
|
58
|
+
`,`
|
|
59
|
+
`,`
|
|
60
|
+
`,`
|
|
61
|
+
|
|
62
|
+
// Responsive hiding
|
|
63
|
+
`,`
|
|
64
|
+
`,`
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
// Borders
|
|
68
|
+
border-radius: `,`;
|
|
69
|
+
border-style: `,`;
|
|
70
|
+
border-width: `,`;
|
|
71
|
+
border-color: `,`;
|
|
72
|
+
border: `,`;
|
|
73
|
+
|
|
74
|
+
// Shadows
|
|
75
|
+
box-shadow: `,`;
|
|
76
|
+
|
|
77
|
+
// Handlers
|
|
78
|
+
pointer-events: `,`;
|
|
79
|
+
&:hover {
|
|
80
|
+
`,`
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
// Display
|
|
84
|
+
display: `,`;
|
|
85
|
+
|
|
86
|
+
// Position
|
|
87
|
+
position: `,`;
|
|
88
|
+
left: `,`;
|
|
89
|
+
right: `,`;
|
|
90
|
+
top: `,`;
|
|
91
|
+
bottom: `,`;
|
|
92
|
+
z-index: `,`;
|
|
93
|
+
overflow: `,`;
|
|
94
|
+
cursor: `,`;
|
|
95
|
+
|
|
96
|
+
// Size
|
|
97
|
+
width: `,`;
|
|
98
|
+
max-width: `,`;
|
|
99
|
+
min-width: `,`;
|
|
100
|
+
height: `,`;
|
|
101
|
+
max-height: `,`;
|
|
102
|
+
min-height: `,`;
|
|
103
|
+
|
|
104
|
+
// Animation
|
|
105
|
+
transition: `,`;
|
|
106
|
+
transform: `,`;
|
|
107
|
+
animation: `,`;
|
|
108
|
+
|
|
109
|
+
//Flexbox children props
|
|
110
|
+
flex-shrink: `,`;
|
|
111
|
+
flex-grow: `,`;
|
|
112
|
+
flex-basis: `,`;
|
|
113
|
+
flex: `,`;
|
|
114
|
+
|
|
115
|
+
// Text
|
|
116
|
+
text-align: `,`;
|
|
117
|
+
text-transform: `,`;
|
|
118
|
+
line-height: `,`;
|
|
119
|
+
|
|
120
|
+
// Cursor
|
|
121
|
+
cursor: `,`;
|
|
122
|
+
`])),function(e){var t=e.fontSize;return e.theme.fontSizes[t]||t},function(e){var t=e.theme,u=e.background;return t.colors[u]},function(e){var t=e.theme,u=e.color;return t.colors[u]},function(e){var t=e.theme,u=e.padding;return Object(g.a)("padding",u,t)},function(e){var t=e.theme,u=e.paddingTop;return Object(g.a)("padding-top",u,t)},function(e){var t=e.theme,u=e.paddingRight;return Object(g.a)("padding-right",u,t)},function(e){var t=e.theme,u=e.paddingBottom;return Object(g.a)("padding-bottom",u,t)},function(e){var t=e.theme,u=e.paddingLeft;return Object(g.a)("padding-left",u,t)},function(e){var t=e.theme,u=e.marginLeft;return Object(g.a)("margin-left",u,t)},function(e){var t=e.theme,u=e.marginRight;return Object(g.a)("margin-right",u,t)},function(e){var t=e.theme,u=e.marginTop;return Object(g.a)("margin-top",u,t)},function(e){var t=e.theme,u=e.marginBottom;return Object(g.a)("margin-bottom",u,t)},function(e){var t=e.theme;return e.hiddenS?"".concat(t.mediaQueries.tablet," { display: none; }"):void 0},function(e){var t=e.theme;return e.hiddenXS?"".concat(t.mediaQueries.mobile," { display: none; }"):void 0},function(e){var t=e.theme,u=e.hasRadius,w=e.borderRadius;return u?t.borderRadius:w},function(e){return e.borderStyle},function(e){return e.borderWidth},function(e){var t=e.borderColor;return e.theme.colors[t]},function(e){var t=e.theme,u=e.borderColor,w=e.borderStyle,B=e.borderWidth;if(u&&!w&&!B)return"1px solid ".concat(t.colors[u])},function(e){var t=e.theme,u=e.shadow;return t.shadows[u]},function(e){return e.pointerEvents},function(e){var t=e._hover,u=e.theme;return t?t(u):void 0},function(e){return e.display},function(e){return e.position},function(e){var t=e.left;return e.theme.spaces[t]||t},function(e){var t=e.right;return e.theme.spaces[t]||t},function(e){var t=e.top;return e.theme.spaces[t]||t},function(e){var t=e.bottom;return e.theme.spaces[t]||t},function(e){return e.zIndex},function(e){return e.overflow},function(e){return e.cursor},function(e){var t=e.width;return e.theme.spaces[t]||t},function(e){var t=e.maxWidth;return e.theme.spaces[t]||t},function(e){var t=e.minWidth;return e.theme.spaces[t]||t},function(e){var t=e.height;return e.theme.spaces[t]||t},function(e){var t=e.maxHeight;return e.theme.spaces[t]||t},function(e){var t=e.minHeight;return e.theme.spaces[t]||t},function(e){return e.transition},function(e){return e.transform},function(e){return e.animation},function(e){return e.shrink},function(e){return e.grow},function(e){return e.basis},function(e){return e.flex},function(e){return e.textAlign},function(e){return e.textTransform},function(e){return e.lineHeight},function(e){return e.cursor});x.displayName="Box",x.defaultProps={background:void 0,borderColor:void 0,color:void 0,hiddenS:!1,hiddenXS:!1,padding:void 0,paddingTop:void 0,paddingRight:void 0,paddingBottom:void 0,paddingLeft:void 0,hasRadius:!1,shadow:void 0,children:null,shrink:void 0,grow:void 0,basis:void 0,flex:void 0,_hover:function(){}},x.propTypes={_hover:o.a.func,background:o.a.string,basis:o.a.oneOfType([o.a.string,o.a.string]),borderColor:o.a.string,children:o.a.oneOfType([o.a.node,o.a.string]),color:o.a.string,flex:o.a.oneOfType([o.a.string,o.a.string]),grow:o.a.oneOfType([o.a.string,o.a.string]),hasRadius:o.a.bool,hiddenS:o.a.bool,hiddenXS:o.a.bool,padding:o.a.oneOfType([o.a.number,o.a.arrayOf(o.a.number)]),paddingBottom:o.a.oneOfType([o.a.number,o.a.arrayOf(o.a.number)]),paddingLeft:o.a.oneOfType([o.a.number,o.a.arrayOf(o.a.number)]),paddingRight:o.a.oneOfType([o.a.number,o.a.arrayOf(o.a.number)]),paddingTop:o.a.oneOfType([o.a.number,o.a.arrayOf(o.a.number)]),shadow:o.a.string,shrink:o.a.oneOfType([o.a.string,o.a.string])}},7:function(r,h,n){"use strict";var i=n(10),a=n.n(i),c=n(13),l=n.n(c);h.a=function(o,b,p){var g=b;if(Array.isArray(b)||l()(b)!=="object"||(g=[b==null?void 0:b.desktop,b==null?void 0:b.tablet,b==null?void 0:b.mobile]),g!==void 0){if(Array.isArray(g)){var S=g,x=a()(S,3),e=x[0],t=x[1],u=x[2],w="".concat(o,": ").concat(p.spaces[e],";");return t!==void 0&&(w+="".concat(p.mediaQueries.tablet,`{
|
|
123
|
+
`).concat(o,": ").concat(p.spaces[t],`;
|
|
124
|
+
}`)),u!==void 0&&(w+="".concat(p.mediaQueries.mobile,`{
|
|
125
|
+
`).concat(o,": ").concat(p.spaces[u],`;
|
|
126
|
+
}`)),w}var B=p.spaces[g]||g;return"".concat(o,": ").concat(B,";")}}},9:function(r,h,n){"use strict";n.r(h),n.d(h,"Flex",function(){return e});var i,a=n(3),c=n.n(a),l=n(0),o=n.n(l),b=n(2),p=n.n(b),g=n(6),S=n(7),x={direction:!0},e=p()(g.Box).withConfig({shouldForwardProp:function(t,u){return!x[t]&&u(t)}})(i||(i=c()([`
|
|
127
|
+
align-items: `,`;
|
|
128
|
+
display: `,`;
|
|
129
|
+
flex-direction: `,`;
|
|
130
|
+
flex-wrap: `,`;
|
|
131
|
+
`,`};
|
|
132
|
+
justify-content: `,`;
|
|
133
|
+
`])),function(t){return t.alignItems},function(t){return t.inline?"inline-flex":"flex"},function(t){return t.direction},function(t){return t.wrap},function(t){var u=t.gap,w=t.theme;return Object(S.a)("gap",u,w)},function(t){return t.justifyContent});e.defaultProps={alignItems:"center",basis:void 0,direction:"row",gap:void 0,inline:!1,justifyContent:void 0,reverse:!1,wrap:void 0},e.propTypes={alignItems:o.a.string,basis:o.a.oneOfType([o.a.string,o.a.number]),direction:o.a.string,gap:o.a.oneOfType([o.a.shape({desktop:o.a.number,mobile:o.a.number,tablet:o.a.number}),o.a.number,o.a.arrayOf(o.a.number),o.a.string]),inline:o.a.bool,justifyContent:o.a.string,reverse:o.a.bool,wrap:o.a.string}}})})},17542:(F,K,d)=>{"use strict";d.r(K),d.d(K,{default:()=>Ee});var s=d(32735),O=d(10938),r=d(79613),h=d(5141),n=d(5636),i=d(11856),a=d(64354),c=d(19192),l=d(90662),o=d(20763),b=d(35980),p=d(53214),g=d(95602),S=d(44526),x=d(28004),e=d(55470),t=d(16540),u=d(29270),w=d(9808),B=d(59290),I=d.n(B),J=d(95717),R=d.n(J),q=d(76470),j=d.n(q),T=d(97042),_=d.n(T),ee=d(49415),ne=d(3040),V=d.n(ne);const z={webhooks:[],webhooksToDelete:[],webhookToDelete:null,loadingWebhooks:!0},$=(v,y)=>(0,ee.default)(v,m=>{switch(y.type){case"GET_DATA_SUCCEEDED":{m.webhooks=y.data,m.loadingWebhooks=!1;break}case"TOGGLE_LOADING":{m.loadingWebhooks=!v.loadingWebhooks;break}case"SET_WEBHOOK_ENABLED":{V()(m,["webhooks",...y.keys],y.value);break}case"SET_WEBHOOK_TO_DELETE":{m.webhookToDelete=y.id;break}case"SET_WEBHOOKS_TO_DELETE":{y.value?m.webhooksToDelete.push(y.id):m.webhooksToDelete=v.webhooksToDelete.filter(k=>k!==y.id);break}case"SET_ALL_WEBHOOKS_TO_DELETE":{v.webhooksToDelete.length===0?m.webhooksToDelete=v.webhooks.map(k=>k.id):m.webhooksToDelete=[];break}case"WEBHOOKS_DELETED":{m.webhooks=v.webhooks.filter(k=>!v.webhooksToDelete.includes(k.id)),m.webhooksToDelete=[];break}case"WEBHOOK_DELETED":{m.webhooks=v.webhooks.filter((k,W)=>W!==y.index),m.webhookToDelete=null;break}default:return m}});var te=d(98399),pe=Object.defineProperty,he=Object.defineProperties,me=Object.getOwnPropertyDescriptors,ae=Object.getOwnPropertySymbols,be=Object.prototype.hasOwnProperty,ge=Object.prototype.propertyIsEnumerable,ie=(v,y,m)=>y in v?pe(v,y,{enumerable:!0,configurable:!0,writable:!0,value:m}):v[y]=m,H=(v,y)=>{for(var m in y||(y={}))be.call(y,m)&&ie(v,m,y[m]);if(ae)for(var m of ae(y))ge.call(y,m)&&ie(v,m,y[m]);return v},ye=(v,y)=>he(v,me(y)),U=(v,y,m)=>new Promise((k,W)=>{var A=D=>{try{E(m.next(D))}catch(M){W(M)}},C=D=>{try{E(m.throw(D))}catch(M){W(M)}},E=D=>D.done?k(D.value):Promise.resolve(D.value).then(A,C);E((m=m.apply(v,y)).next())});const ve=()=>{const{isLoading:v,allowedActions:{canCreate:y,canRead:m,canUpdate:k,canDelete:W}}=(0,O.useRBAC)(r.Z.settings.webhooks),A=(0,O.useNotification)(),C=(0,s.useRef)(!0),{formatMessage:E}=(0,n.useIntl)(),[D,M]=(0,s.useState)(!1),[{webhooks:Q,webhooksToDelete:X,webhookToDelete:oe,loadingWebhooks:re},P]=(0,s.useReducer)($,z),{notifyStatus:xe}=(0,u.useNotifyAT)();(0,O.useFocusWhenNavigate)();const{push:Te}=(0,h.useHistory)(),{pathname:se}=(0,h.useLocation)(),Z=Q.length,N=X.length,le=f=>Q.findIndex(L=>L.id===f);(0,s.useEffect)(()=>(C.current=!0,()=>{C.current=!1}),[]),(0,s.useEffect)(()=>{m&&Oe()},[m]);const Oe=()=>U(void 0,null,function*(){try{const{data:f}=yield(0,O.request)("/admin/webhooks",{method:"GET"});C.current&&(P({type:"GET_DATA_SUCCEEDED",data:f}),xe("webhooks have been loaded"))}catch(f){te.log(f),C.current&&(f.code!==20&&A({type:"warning",message:{id:"notification.error"}}),P({type:"TOGGLE_LOADING"}))}}),we=()=>{M(f=>!f)},Se=()=>{oe?ke():Le()},ke=()=>U(void 0,null,function*(){try{yield(0,O.request)(`/admin/webhooks/${oe}`,{method:"DELETE"}),P({type:"WEBHOOK_DELETED",index:le(oe)})}catch(f){f.code!==20&&A({type:"warning",message:{id:"notification.error"}})}M(!1)}),Le=()=>U(void 0,null,function*(){const f={ids:X};try{yield(0,O.request)("/admin/webhooks/batch-delete",{method:"POST",body:f}),C.current&&P({type:"WEBHOOKS_DELETED"})}catch(L){C.current&&L.code!==20&&A({type:"warning",message:{id:"notification.error"}})}M(!1)}),ue=f=>{M(!0),f!=="all"&&P({type:"SET_WEBHOOK_TO_DELETE",id:f})},Ce=(f,L)=>U(void 0,null,function*(){const ce=le(L),Me=Q[ce],de=[ce,"isEnabled"],fe=ye(H({},Me),{isEnabled:f});delete fe.id;try{P({type:"SET_WEBHOOK_ENABLED",keys:de,value:f}),yield(0,O.request)(`/admin/webhooks/${L}`,{method:"PUT",body:fe})}catch(Be){C.current&&(P({type:"SET_WEBHOOK_ENABLED",keys:de,value:!f}),Be.code!==20&&A({type:"warning",message:{id:"notification.error"}}))}}),De=()=>{P({type:"SET_ALL_WEBHOOKS_TO_DELETE"})},Pe=(f,L)=>{P({type:"SET_WEBHOOKS_TO_DELETE",value:f,id:L})},Y=f=>{Te(`${se}/${f}`)};return s.createElement(i.Layout,null,s.createElement(O.SettingsPageTitle,{name:"Webhooks"}),s.createElement(t.Main,{"aria-busy":v||re},s.createElement(i.HeaderLayout,{title:E({id:"Settings.webhooks.title",defaultMessage:"Webhooks"}),subtitle:E({id:"Settings.webhooks.list.description",defaultMessage:"Get POST changes notifications"}),primaryAction:y&&!re&&s.createElement(O.LinkButton,{startIcon:s.createElement(I(),null),variant:"default",to:`${se}/create`,size:"L"},E({id:"Settings.webhooks.list.button.add",defaultMessage:"Create new webhook"}))}),N>0&&W&&s.createElement(i.ActionLayout,{startActions:s.createElement(s.Fragment,null,s.createElement(g.Typography,{variant:"epsilon",textColor:"neutral600"},E({id:"Settings.webhooks.to.delete",defaultMessage:"{webhooksToDeleteLength, plural, one {# asset} other {# assets}} selected"},{webhooksToDeleteLength:N})),s.createElement(S.Button,{onClick:()=>ue("all"),startIcon:s.createElement(j(),null),size:"L",variant:"danger-light"},E({id:"global.delete",defaultMessage:"Delete"})))}),s.createElement(i.ContentLayout,null,v||re?s.createElement(w.Box,{background:"neutral0",padding:6,shadow:"filterShadow",hasRadius:!0},s.createElement(O.LoadingIndicatorPage,null)):s.createElement(s.Fragment,null,Z>0?s.createElement(p.Table,{colCount:5,rowCount:Z+1,footer:s.createElement(p.TFooter,{onClick:()=>y?Y("create"):{},icon:s.createElement(I(),null)},E({id:"Settings.webhooks.list.button.add",defaultMessage:"Create new webhook"}))},s.createElement(p.Thead,null,s.createElement(p.Tr,null,s.createElement(p.Th,null,s.createElement(b.BaseCheckbox,{"aria-label":E({id:"global.select-all-entries",defaultMessage:"Select all entries"}),indeterminate:N>0&&N<Z,value:N===Z,onValueChange:De})),s.createElement(p.Th,{width:"20%"},s.createElement(g.Typography,{variant:"sigma",textColor:"neutral600"},E({id:"global.name",defaultMessage:"Name"}))),s.createElement(p.Th,{width:"60%"},s.createElement(g.Typography,{variant:"sigma",textColor:"neutral600"},E({id:"Settings.webhooks.form.url",defaultMessage:"URL"}))),s.createElement(p.Th,{width:"20%"},s.createElement(g.Typography,{variant:"sigma",textColor:"neutral600"},E({id:"Settings.webhooks.list.th.status",defaultMessage:"Status"}))),s.createElement(p.Th,null,s.createElement(x.VisuallyHidden,null,E({id:"Settings.webhooks.list.th.actions",defaultMessage:"Actions"}))))),s.createElement(p.Tbody,null,Q.map(f=>s.createElement(p.Tr,H({key:f.id},(0,O.onRowClick)({fn:()=>Y(f.id),condition:k})),s.createElement(p.Td,H({},O.stopPropagation),s.createElement(b.BaseCheckbox,{"aria-label":`${E({id:"global.select",defaultMessage:"Select"})} ${f.name}`,value:X==null?void 0:X.includes(f.id),onValueChange:L=>Pe(L,f.id),id:"select",name:"select"})),s.createElement(p.Td,null,s.createElement(g.Typography,{fontWeight:"semiBold",textColor:"neutral800"},f.name)),s.createElement(p.Td,null,s.createElement(g.Typography,{textColor:"neutral800"},f.url)),s.createElement(p.Td,null,s.createElement(c.Flex,H({},O.stopPropagation),s.createElement(e.Switch,{onLabel:E({id:"global.enabled",defaultMessage:"Enabled"}),offLabel:E({id:"global.disabled",defaultMessage:"Disabled"}),label:`${f.name} ${E({id:"Settings.webhooks.list.th.status",defaultMessage:"Status"})}`,selected:f.isEnabled,onChange:()=>Ce(!f.isEnabled,f.id),visibleLabels:!0}))),s.createElement(p.Td,null,s.createElement(l.Stack,H({horizontal:!0,spacing:1},O.stopPropagation),k&&s.createElement(o.IconButton,{onClick:()=>{Y(f.id)},label:E({id:"Settings.webhooks.events.update",defaultMessage:"Update"}),icon:s.createElement(R(),null),noBorder:!0}),W&&s.createElement(o.IconButton,{onClick:()=>ue(f.id),label:E({id:"global.delete",defaultMessage:"Delete"}),icon:s.createElement(j(),null),noBorder:!0,id:`delete-${f.id}`}))))))):s.createElement(a.EmptyStateLayout,{icon:s.createElement(_(),{width:"160px"}),content:E({id:"Settings.webhooks.list.empty.description",defaultMessage:"No webhooks found"}),action:s.createElement(S.Button,{variant:"secondary",startIcon:s.createElement(I(),null),onClick:()=>y?Y("create"):{}},E({id:"Settings.webhooks.list.button.add",defaultMessage:"Create new webhook"}))})))),s.createElement(O.ConfirmDialog,{isOpen:D,onToggleDialog:we,onConfirm:Se}))},Ee=()=>s.createElement(O.CheckPagePermissions,{permissions:r.Z.settings.webhooks.main},s.createElement(ve,null))}}]);
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { Redirect, useHistory } from 'react-router-dom';
|
|
3
3
|
import styled from 'styled-components';
|
|
4
|
+
import { Link } from '@strapi/helper-plugin';
|
|
4
5
|
import { Divider } from '@strapi/design-system/Divider';
|
|
5
6
|
import { Stack } from '@strapi/design-system/Stack';
|
|
6
7
|
import { Flex } from '@strapi/design-system/Flex';
|
|
7
8
|
import { Box } from '@strapi/design-system/Box';
|
|
8
9
|
import { Button } from '@strapi/design-system/Button';
|
|
9
|
-
import { Link } from '@strapi/design-system/Link';
|
|
10
10
|
import { Loader } from '@strapi/design-system/Loader';
|
|
11
11
|
import { Typography } from '@strapi/design-system/Typography';
|
|
12
12
|
import { Main } from '@strapi/design-system/Main';
|
|
@@ -9,13 +9,13 @@ import {
|
|
|
9
9
|
useNotification,
|
|
10
10
|
useOverlayBlocker,
|
|
11
11
|
useTracking,
|
|
12
|
+
Link,
|
|
12
13
|
} from '@strapi/helper-plugin';
|
|
13
14
|
import { Box } from '@strapi/design-system/Box';
|
|
14
15
|
import { Button } from '@strapi/design-system/Button';
|
|
15
16
|
import { ContentLayout, HeaderLayout } from '@strapi/design-system/Layout';
|
|
16
17
|
import { Grid, GridItem } from '@strapi/design-system/Grid';
|
|
17
18
|
import { Main } from '@strapi/design-system/Main';
|
|
18
|
-
import { Link } from '@strapi/design-system/Link';
|
|
19
19
|
import { Flex } from '@strapi/design-system/Flex';
|
|
20
20
|
import { Stack } from '@strapi/design-system/Stack';
|
|
21
21
|
import { Typography } from '@strapi/design-system/Typography';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@strapi/admin",
|
|
3
|
-
"version": "4.1.10
|
|
3
|
+
"version": "4.1.10",
|
|
4
4
|
"description": "Strapi Admin",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -49,11 +49,11 @@
|
|
|
49
49
|
"@fortawesome/free-brands-svg-icons": "^5.15.3",
|
|
50
50
|
"@fortawesome/free-solid-svg-icons": "^5.15.3",
|
|
51
51
|
"@fortawesome/react-fontawesome": "^0.1.14",
|
|
52
|
-
"@strapi/babel-plugin-switch-ee-ce": "4.1.10
|
|
52
|
+
"@strapi/babel-plugin-switch-ee-ce": "4.1.10",
|
|
53
53
|
"@strapi/design-system": "1.1.0",
|
|
54
|
-
"@strapi/helper-plugin": "4.1.10
|
|
54
|
+
"@strapi/helper-plugin": "4.1.10",
|
|
55
55
|
"@strapi/icons": "1.1.0",
|
|
56
|
-
"@strapi/utils": "4.1.10
|
|
56
|
+
"@strapi/utils": "4.1.10",
|
|
57
57
|
"axios": "0.24.0",
|
|
58
58
|
"babel-loader": "8.2.3",
|
|
59
59
|
"babel-plugin-styled-components": "2.0.2",
|
|
@@ -140,5 +140,5 @@
|
|
|
140
140
|
"node": ">=12.22.0 <=16.x.x",
|
|
141
141
|
"npm": ">=6.0.0"
|
|
142
142
|
},
|
|
143
|
-
"gitHead": "
|
|
143
|
+
"gitHead": "06abcda86ab96fc560b3ff5e3d72c4d5c1c5d42c"
|
|
144
144
|
}
|
|
@@ -146,19 +146,5 @@ module.exports = {
|
|
|
146
146
|
section: 'settings',
|
|
147
147
|
category: 'api tokens',
|
|
148
148
|
},
|
|
149
|
-
{
|
|
150
|
-
uid: 'project-settings.update',
|
|
151
|
-
displayName: 'Update the project level settings',
|
|
152
|
-
pluginName: 'admin',
|
|
153
|
-
section: 'settings',
|
|
154
|
-
category: 'project',
|
|
155
|
-
},
|
|
156
|
-
{
|
|
157
|
-
uid: 'project-settings.read',
|
|
158
|
-
displayName: 'Read the project level settings',
|
|
159
|
-
pluginName: 'admin',
|
|
160
|
-
section: 'settings',
|
|
161
|
-
category: 'project',
|
|
162
|
-
},
|
|
163
149
|
],
|
|
164
150
|
};
|
|
@@ -8,11 +8,6 @@ const { ValidationError } = require('@strapi/utils').errors;
|
|
|
8
8
|
// eslint-disable-next-line node/no-extraneous-require
|
|
9
9
|
const ee = require('@strapi/strapi/lib/utils/ee');
|
|
10
10
|
|
|
11
|
-
const {
|
|
12
|
-
validateUpdateProjectSettings,
|
|
13
|
-
validateUpdateProjectSettingsFiles,
|
|
14
|
-
validateUpdateProjectSettingsImagesDimensions,
|
|
15
|
-
} = require('../validation/project-settings');
|
|
16
11
|
const { getService } = require('../utils');
|
|
17
12
|
|
|
18
13
|
const PLUGIN_NAME_REGEX = /^[A-Za-z][A-Za-z0-9-_]+$/;
|
|
@@ -44,7 +39,6 @@ module.exports = {
|
|
|
44
39
|
async init() {
|
|
45
40
|
let uuid = strapi.config.get('uuid', false);
|
|
46
41
|
const hasAdmin = await getService('user').exists();
|
|
47
|
-
const { menuLogo } = await getService('project-settings').getProjectSettings();
|
|
48
42
|
// set to null if telemetryDisabled flag not avaialble in package.json
|
|
49
43
|
const telemetryDisabled = strapi.config.get('packageJsonStrapi.telemetryDisabled', null);
|
|
50
44
|
|
|
@@ -52,33 +46,7 @@ module.exports = {
|
|
|
52
46
|
uuid = false;
|
|
53
47
|
}
|
|
54
48
|
|
|
55
|
-
return {
|
|
56
|
-
data: {
|
|
57
|
-
uuid,
|
|
58
|
-
hasAdmin,
|
|
59
|
-
menuLogo: menuLogo ? menuLogo.url : null,
|
|
60
|
-
},
|
|
61
|
-
};
|
|
62
|
-
},
|
|
63
|
-
|
|
64
|
-
async getProjectSettings() {
|
|
65
|
-
return getService('project-settings').getProjectSettings();
|
|
66
|
-
},
|
|
67
|
-
|
|
68
|
-
async updateProjectSettings(ctx) {
|
|
69
|
-
const projectSettingsService = getService('project-settings');
|
|
70
|
-
|
|
71
|
-
const {
|
|
72
|
-
request: { files, body },
|
|
73
|
-
} = ctx;
|
|
74
|
-
|
|
75
|
-
await validateUpdateProjectSettings(body);
|
|
76
|
-
await validateUpdateProjectSettingsFiles(files);
|
|
77
|
-
|
|
78
|
-
const formatedFiles = await projectSettingsService.parseFilesData(files);
|
|
79
|
-
await validateUpdateProjectSettingsImagesDimensions(formatedFiles);
|
|
80
|
-
|
|
81
|
-
return projectSettingsService.updateProjectSettings({ ...body, ...formatedFiles });
|
|
49
|
+
return { data: { uuid, hasAdmin } };
|
|
82
50
|
},
|
|
83
51
|
|
|
84
52
|
async information() {
|
package/server/routes/admin.js
CHANGED
|
@@ -7,34 +7,6 @@ module.exports = [
|
|
|
7
7
|
handler: 'admin.init',
|
|
8
8
|
config: { auth: false },
|
|
9
9
|
},
|
|
10
|
-
{
|
|
11
|
-
method: 'GET',
|
|
12
|
-
path: '/project-settings',
|
|
13
|
-
handler: 'admin.getProjectSettings',
|
|
14
|
-
config: {
|
|
15
|
-
policies: [
|
|
16
|
-
'admin::isAuthenticatedAdmin',
|
|
17
|
-
{
|
|
18
|
-
name: 'admin::hasPermissions',
|
|
19
|
-
config: { actions: ['admin::project-settings.read'] },
|
|
20
|
-
},
|
|
21
|
-
],
|
|
22
|
-
},
|
|
23
|
-
},
|
|
24
|
-
{
|
|
25
|
-
method: 'POST',
|
|
26
|
-
path: '/project-settings',
|
|
27
|
-
handler: 'admin.updateProjectSettings',
|
|
28
|
-
config: {
|
|
29
|
-
policies: [
|
|
30
|
-
'admin::isAuthenticatedAdmin',
|
|
31
|
-
{
|
|
32
|
-
name: 'admin::hasPermissions',
|
|
33
|
-
config: { actions: ['admin::project-settings.update'] },
|
|
34
|
-
},
|
|
35
|
-
],
|
|
36
|
-
},
|
|
37
|
-
},
|
|
38
10
|
{
|
|
39
11
|
method: 'GET',
|
|
40
12
|
path: '/project-type',
|
package/server/services/index.js
CHANGED
|
@@ -14,6 +14,7 @@ const {
|
|
|
14
14
|
uniq,
|
|
15
15
|
intersection,
|
|
16
16
|
pick,
|
|
17
|
+
getOr,
|
|
17
18
|
} = require('lodash/fp');
|
|
18
19
|
|
|
19
20
|
const { contentTypes, traverseEntity, sanitize, pipeAsync } = require('@strapi/utils');
|
|
@@ -46,6 +47,8 @@ module.exports = ({ action, ability, model }) => {
|
|
|
46
47
|
const permittedFields = fields.shouldIncludeAll ? null : getOutputFields(fields.permitted);
|
|
47
48
|
|
|
48
49
|
return pipeAsync(
|
|
50
|
+
// Remove fields hidden from the admin
|
|
51
|
+
traverseEntity(omitHiddenFields, { schema }),
|
|
49
52
|
// Remove unallowed fields from admin::user relations
|
|
50
53
|
traverseEntity(pickAllowedAdminUserFields, { schema }),
|
|
51
54
|
// Remove not allowed fields (RBAC)
|
|
@@ -61,6 +64,8 @@ module.exports = ({ action, ability, model }) => {
|
|
|
61
64
|
const permittedFields = fields.shouldIncludeAll ? null : getInputFields(fields.permitted);
|
|
62
65
|
|
|
63
66
|
return pipeAsync(
|
|
67
|
+
// Remove fields hidden from the admin
|
|
68
|
+
traverseEntity(omitHiddenFields, { schema }),
|
|
64
69
|
// Remove not allowed fields (RBAC)
|
|
65
70
|
traverseEntity(allowedFields(permittedFields), { schema }),
|
|
66
71
|
// Remove roles from createdBy & updateBy fields
|
|
@@ -107,8 +112,25 @@ module.exports = ({ action, ability, model }) => {
|
|
|
107
112
|
return defaults({ subject: asSubject(model, data), action }, options);
|
|
108
113
|
};
|
|
109
114
|
|
|
115
|
+
/**
|
|
116
|
+
* Omit creator fields' (createdBy & updatedBy) roles from the admin API responses
|
|
117
|
+
*/
|
|
110
118
|
const omitCreatorRoles = omit([`${CREATED_BY_ATTRIBUTE}.roles`, `${UPDATED_BY_ATTRIBUTE}.roles`]);
|
|
111
119
|
|
|
120
|
+
/**
|
|
121
|
+
* Visitor used to remove hidden fields from the admin API responses
|
|
122
|
+
*/
|
|
123
|
+
const omitHiddenFields = ({ key, schema }, { remove }) => {
|
|
124
|
+
const isHidden = getOr(false, ['config', 'attributes', key, 'hidden'], schema);
|
|
125
|
+
|
|
126
|
+
if (isHidden) {
|
|
127
|
+
remove(key);
|
|
128
|
+
}
|
|
129
|
+
};
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
* Visitor used to only select needed fields from the admin users entities & avoid leaking sensitive information
|
|
133
|
+
*/
|
|
112
134
|
const pickAllowedAdminUserFields = ({ attribute, key, value }, { set }) => {
|
|
113
135
|
const pickAllowedFields = pick(['id', 'firstname', 'lastname', 'username']);
|
|
114
136
|
|
package/server/services/user.js
CHANGED
|
@@ -17,7 +17,7 @@ const sanitizeUserRoles = role => _.pick(role, ['id', 'name', 'description', 'co
|
|
|
17
17
|
*/
|
|
18
18
|
const sanitizeUser = user => {
|
|
19
19
|
return {
|
|
20
|
-
..._.omit(user, ['password', 'resetPasswordToken', 'roles']),
|
|
20
|
+
..._.omit(user, ['password', 'resetPasswordToken', 'registrationToken', 'roles']),
|
|
21
21
|
roles: user.roles && user.roles.map(sanitizeUserRoles),
|
|
22
22
|
};
|
|
23
23
|
};
|
package/server/utils/index.d.ts
CHANGED
|
@@ -6,7 +6,6 @@ import * as metrics from '../services/metrics';
|
|
|
6
6
|
import * as token from '../services/token';
|
|
7
7
|
import * as auth from '../services/auth';
|
|
8
8
|
import * as apiToken from '../services/api-token';
|
|
9
|
-
import * as projectSettings from '../services/project-settings';
|
|
10
9
|
|
|
11
10
|
type S = {
|
|
12
11
|
role: typeof role;
|
|
@@ -17,7 +16,6 @@ type S = {
|
|
|
17
16
|
auth: typeof auth;
|
|
18
17
|
metrics: typeof metrics;
|
|
19
18
|
'api-token': typeof apiToken;
|
|
20
|
-
'project-settings': typeof projectSettings;
|
|
21
19
|
};
|
|
22
20
|
|
|
23
21
|
export function getService<T extends keyof S>(name: T): S[T];
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
import React, { useReducer, useRef } from 'react';
|
|
2
|
-
import PropTypes from 'prop-types';
|
|
3
|
-
import { ConfigurationsContext } from '../../contexts';
|
|
4
|
-
import reducer, { initialState } from './reducer';
|
|
5
|
-
|
|
6
|
-
const ConfigurationsProvider = ({
|
|
7
|
-
children,
|
|
8
|
-
authLogo,
|
|
9
|
-
menuLogo: defaultMenuLogo,
|
|
10
|
-
showReleaseNotification,
|
|
11
|
-
showTutorials,
|
|
12
|
-
}) => {
|
|
13
|
-
const [{ menuLogo }, dispatch] = useReducer(reducer, initialState);
|
|
14
|
-
|
|
15
|
-
const updateProjectSettings = ({ menuLogo }) => {
|
|
16
|
-
return dispatch({
|
|
17
|
-
type: 'UPDATE_PROJECT_SETTINGS',
|
|
18
|
-
values: {
|
|
19
|
-
menuLogo: menuLogo || defaultMenuLogo,
|
|
20
|
-
},
|
|
21
|
-
});
|
|
22
|
-
};
|
|
23
|
-
|
|
24
|
-
const updateProjectSettingsRef = useRef(updateProjectSettings);
|
|
25
|
-
|
|
26
|
-
return (
|
|
27
|
-
<ConfigurationsContext.Provider
|
|
28
|
-
value={{
|
|
29
|
-
logos: {
|
|
30
|
-
menu: { custom: menuLogo, default: defaultMenuLogo },
|
|
31
|
-
auth: { custom: null, default: authLogo },
|
|
32
|
-
},
|
|
33
|
-
updateProjectSettings: updateProjectSettingsRef.current,
|
|
34
|
-
showReleaseNotification,
|
|
35
|
-
showTutorials,
|
|
36
|
-
}}
|
|
37
|
-
>
|
|
38
|
-
{children}
|
|
39
|
-
</ConfigurationsContext.Provider>
|
|
40
|
-
);
|
|
41
|
-
};
|
|
42
|
-
|
|
43
|
-
ConfigurationsProvider.propTypes = {
|
|
44
|
-
authLogo: PropTypes.string.isRequired,
|
|
45
|
-
children: PropTypes.element.isRequired,
|
|
46
|
-
menuLogo: PropTypes.string.isRequired,
|
|
47
|
-
showReleaseNotification: PropTypes.bool.isRequired,
|
|
48
|
-
showTutorials: PropTypes.bool.isRequired,
|
|
49
|
-
};
|
|
50
|
-
|
|
51
|
-
export default ConfigurationsProvider;
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
/* eslint-disable consistent-return */
|
|
2
|
-
/*
|
|
3
|
-
*
|
|
4
|
-
* ConfigurationsProvider reducer
|
|
5
|
-
*
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
import produce from 'immer';
|
|
9
|
-
|
|
10
|
-
const initialState = {
|
|
11
|
-
menuLogo: null,
|
|
12
|
-
};
|
|
13
|
-
|
|
14
|
-
const reducer = (state = initialState, action) =>
|
|
15
|
-
produce(state, draftState => {
|
|
16
|
-
switch (action.type) {
|
|
17
|
-
case 'UPDATE_PROJECT_SETTINGS': {
|
|
18
|
-
Object.assign(draftState, action.values);
|
|
19
|
-
break;
|
|
20
|
-
}
|
|
21
|
-
default: {
|
|
22
|
-
return draftState;
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
});
|
|
26
|
-
|
|
27
|
-
export default reducer;
|
|
28
|
-
export { initialState };
|
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
import React, { useReducer, forwardRef, useImperativeHandle } from 'react';
|
|
2
|
-
import PropTypes from 'prop-types';
|
|
3
|
-
import { useIntl } from 'react-intl';
|
|
4
|
-
import { useTracking } from '@strapi/helper-plugin';
|
|
5
|
-
import { Grid, GridItem } from '@strapi/design-system/Grid';
|
|
6
|
-
import { Box } from '@strapi/design-system/Box';
|
|
7
|
-
import { Typography } from '@strapi/design-system/Typography';
|
|
8
|
-
import LogoInput from '../LogoInput';
|
|
9
|
-
import { useConfigurations } from '../../../../../../hooks';
|
|
10
|
-
import reducer, { initialState } from './reducer';
|
|
11
|
-
import init from './init';
|
|
12
|
-
|
|
13
|
-
const Form = forwardRef(({ projectSettingsStored }, ref) => {
|
|
14
|
-
const { formatMessage } = useIntl();
|
|
15
|
-
const { trackUsage } = useTracking();
|
|
16
|
-
const {
|
|
17
|
-
logos: { menu },
|
|
18
|
-
} = useConfigurations();
|
|
19
|
-
const [{ menuLogo }, dispatch] = useReducer(reducer, initialState, () =>
|
|
20
|
-
init(initialState, projectSettingsStored)
|
|
21
|
-
);
|
|
22
|
-
|
|
23
|
-
const handleChangeMenuLogo = asset => {
|
|
24
|
-
dispatch({
|
|
25
|
-
type: 'SET_CUSTOM_MENU_LOGO',
|
|
26
|
-
value: asset,
|
|
27
|
-
});
|
|
28
|
-
};
|
|
29
|
-
|
|
30
|
-
const handleResetMenuLogo = () => {
|
|
31
|
-
trackUsage('didClickResetLogo');
|
|
32
|
-
|
|
33
|
-
dispatch({
|
|
34
|
-
type: 'RESET_CUSTOM_MENU_LOGO',
|
|
35
|
-
});
|
|
36
|
-
};
|
|
37
|
-
|
|
38
|
-
useImperativeHandle(ref, () => ({
|
|
39
|
-
getValues: () => ({ menuLogo: menuLogo.submit }),
|
|
40
|
-
}));
|
|
41
|
-
|
|
42
|
-
return (
|
|
43
|
-
<Box
|
|
44
|
-
hasRadius
|
|
45
|
-
background="neutral0"
|
|
46
|
-
shadow="tableShadow"
|
|
47
|
-
paddingTop={6}
|
|
48
|
-
paddingBottom={6}
|
|
49
|
-
paddingRight={7}
|
|
50
|
-
paddingLeft={7}
|
|
51
|
-
>
|
|
52
|
-
<Typography variant="delta" as="h3">
|
|
53
|
-
{formatMessage({
|
|
54
|
-
id: 'Settings.application.customization',
|
|
55
|
-
defaultMessage: 'Customization',
|
|
56
|
-
})}
|
|
57
|
-
</Typography>
|
|
58
|
-
<Grid paddingTop={4}>
|
|
59
|
-
<GridItem col={6} s={12}>
|
|
60
|
-
<LogoInput
|
|
61
|
-
onChangeLogo={handleChangeMenuLogo}
|
|
62
|
-
customLogo={menuLogo.display}
|
|
63
|
-
defaultLogo={menu.default}
|
|
64
|
-
onResetMenuLogo={handleResetMenuLogo}
|
|
65
|
-
/>
|
|
66
|
-
</GridItem>
|
|
67
|
-
</Grid>
|
|
68
|
-
</Box>
|
|
69
|
-
);
|
|
70
|
-
});
|
|
71
|
-
|
|
72
|
-
Form.defaultProps = {
|
|
73
|
-
projectSettingsStored: null,
|
|
74
|
-
};
|
|
75
|
-
|
|
76
|
-
Form.propTypes = {
|
|
77
|
-
projectSettingsStored: PropTypes.shape({
|
|
78
|
-
menuLogo: PropTypes.shape({
|
|
79
|
-
url: PropTypes.string,
|
|
80
|
-
name: PropTypes.string,
|
|
81
|
-
}),
|
|
82
|
-
}),
|
|
83
|
-
};
|
|
84
|
-
|
|
85
|
-
export default Form;
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import merge from 'lodash/merge';
|
|
2
|
-
|
|
3
|
-
const init = (initialState, projectSettingsStored) => {
|
|
4
|
-
const copyInitialState = merge(initialState, {
|
|
5
|
-
menuLogo: {
|
|
6
|
-
display: projectSettingsStored.menuLogo,
|
|
7
|
-
},
|
|
8
|
-
});
|
|
9
|
-
|
|
10
|
-
return copyInitialState;
|
|
11
|
-
};
|
|
12
|
-
|
|
13
|
-
export default init;
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
/* eslint-disable consistent-return */
|
|
2
|
-
/*
|
|
3
|
-
*
|
|
4
|
-
* ApplicationInfosPage Form reducer
|
|
5
|
-
*
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
import produce from 'immer';
|
|
9
|
-
|
|
10
|
-
const initialState = {
|
|
11
|
-
menuLogo: {
|
|
12
|
-
display: null,
|
|
13
|
-
submit: {
|
|
14
|
-
rawFile: null,
|
|
15
|
-
isReset: false,
|
|
16
|
-
},
|
|
17
|
-
},
|
|
18
|
-
};
|
|
19
|
-
|
|
20
|
-
const reducer = (state = initialState, action) =>
|
|
21
|
-
produce(state, draftState => {
|
|
22
|
-
switch (action.type) {
|
|
23
|
-
case 'SET_CUSTOM_MENU_LOGO': {
|
|
24
|
-
draftState.menuLogo.display = action.value;
|
|
25
|
-
draftState.menuLogo.submit.rawFile = action.value.rawFile;
|
|
26
|
-
break;
|
|
27
|
-
}
|
|
28
|
-
case 'RESET_CUSTOM_MENU_LOGO': {
|
|
29
|
-
draftState.menuLogo.display = null;
|
|
30
|
-
draftState.menuLogo.submit = {
|
|
31
|
-
rawFile: null,
|
|
32
|
-
isReset: true,
|
|
33
|
-
};
|
|
34
|
-
break;
|
|
35
|
-
}
|
|
36
|
-
default: {
|
|
37
|
-
return draftState;
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
});
|
|
41
|
-
|
|
42
|
-
export default reducer;
|
|
43
|
-
export { initialState };
|