@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.
Files changed (137) hide show
  1. package/admin/src/assets/images/homepage-logo.png +0 -0
  2. package/admin/src/components/AutoReloadOverlayBlockerProvider/Blocker.js +2 -6
  3. package/admin/src/components/GuidedTour/Homepage/index.js +1 -2
  4. package/admin/src/components/GuidedTour/Modal/components/Stepper.js +1 -2
  5. package/admin/src/components/LeftMenu/index.js +9 -9
  6. package/admin/src/components/Notifications/Notification/index.js +2 -2
  7. package/admin/src/components/Providers/index.js +4 -8
  8. package/admin/src/components/UnauthenticatedLogo/index.js +2 -4
  9. package/admin/src/components/UpgradePlanModal/index.js +6 -2
  10. package/admin/src/content-manager/components/SelectMany/ListItem.js +1 -2
  11. package/admin/src/content-manager/components/SelectWrapper/index.js +8 -7
  12. package/admin/src/content-manager/components/SingleTypeFormWrapper/index.js +2 -2
  13. package/admin/src/content-manager/components/Wysiwyg/Editor.js +2 -0
  14. package/admin/src/content-manager/pages/App/LeftMenu/index.js +8 -7
  15. package/admin/src/content-manager/pages/EditSettingsView/components/ComponentFieldList.js +1 -1
  16. package/admin/src/content-manager/pages/EditSettingsView/components/LinkToCTB.js +1 -2
  17. package/admin/src/content-manager/pages/EditSettingsView/index.js +1 -2
  18. package/admin/src/content-manager/pages/EditView/Header/index.js +3 -3
  19. package/admin/src/content-manager/pages/EditView/index.js +1 -4
  20. package/admin/src/content-manager/pages/ListSettingsView/index.js +1 -2
  21. package/admin/src/content-manager/pages/ListView/index.js +1 -1
  22. package/admin/src/content-manager/pages/NoContentType/index.js +1 -2
  23. package/admin/src/pages/App/index.js +2 -7
  24. package/admin/src/pages/AuthPage/components/ForgotPassword/index.js +1 -2
  25. package/admin/src/pages/AuthPage/components/ForgotPasswordSuccess/index.js +1 -1
  26. package/admin/src/pages/AuthPage/components/Login/BaseLogin.js +1 -2
  27. package/admin/src/pages/AuthPage/components/Oops/index.js +1 -2
  28. package/admin/src/pages/AuthPage/components/Register/index.js +12 -12
  29. package/admin/src/pages/AuthPage/components/ResetPassword/index.js +3 -4
  30. package/admin/src/pages/HomePage/HomeHeader.js +2 -2
  31. package/admin/src/pages/HomePage/SocialLinks.js +4 -3
  32. package/admin/src/pages/InternalErrorPage/index.js +1 -2
  33. package/admin/src/pages/MarketplacePage/components/PageHeader/index.js +2 -1
  34. package/admin/src/pages/MarketplacePage/components/PluginCard/index.js +4 -3
  35. package/admin/src/pages/NotFoundPage/index.js +1 -2
  36. package/admin/src/pages/SettingsPage/components/SettingsNav/index.js +5 -4
  37. package/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/index.js +1 -1
  38. package/admin/src/pages/SettingsPage/pages/ApiTokens/ListView/DynamicTable/UpdateButton/index.js +1 -1
  39. package/admin/src/pages/SettingsPage/pages/ApiTokens/ListView/index.js +1 -1
  40. package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/index.js +94 -150
  41. package/admin/src/pages/SettingsPage/pages/Roles/EditPage/index.js +1 -1
  42. package/admin/src/pages/SettingsPage/pages/Users/EditPage/index.js +1 -1
  43. package/admin/src/pages/SettingsPage/pages/Webhooks/EditView/components/WebhookForm/index.js +1 -2
  44. package/admin/src/pages/SettingsPage/pages/Webhooks/ListView/index.js +1 -1
  45. package/admin/src/translations/ca.json +699 -0
  46. package/admin/src/translations/en.json +0 -25
  47. package/admin/src/translations/languageNativeNames.js +1 -0
  48. package/admin/src/translations/ru.json +34 -0
  49. package/build/2077.51485bfb.chunk.js +194 -0
  50. package/build/6706.7f57cb76.chunk.js +113 -0
  51. package/build/7589.95466f9a.chunk.js +194 -0
  52. package/build/{5289.0341db2d.chunk.js → 7757.6d20cfe0.chunk.js} +89 -87
  53. package/build/8681.96961454.chunk.js +163 -0
  54. package/build/9066.118ecccd.chunk.js +101 -0
  55. package/build/9115.abdf4e3b.chunk.js +1 -0
  56. package/build/9158.60fcd720.chunk.js +503 -0
  57. package/build/{9298.f97fcef0.chunk.js → 9298.5b5c6ea1.chunk.js} +2 -2
  58. package/build/9420.cb0b75e8.chunk.js +508 -0
  59. package/build/Admin-authenticatedApp.ec0f0834.chunk.js +80 -0
  60. package/build/Admin_homePage.e6d4d977.chunk.js +71 -0
  61. package/build/Admin_marketplace.25133b64.chunk.js +11 -0
  62. package/build/Admin_settingsPage.e1dfbb1d.chunk.js +172 -0
  63. package/build/admin-edit-roles-page.e77a2acc.chunk.js +1 -0
  64. package/build/admin-edit-users.4c49fe98.chunk.js +11 -0
  65. package/build/api-tokens-create-page.618b3e40.chunk.js +1 -0
  66. package/build/api-tokens-edit-page.8d19dfe1.chunk.js +1 -0
  67. package/build/api-tokens-list-page.274e1c80.chunk.js +15 -0
  68. package/build/ca-json.0097e443.chunk.js +1 -0
  69. package/build/content-manager.d6449678.chunk.js +1204 -0
  70. package/build/{content-type-builder.0d8729ad.chunk.js → content-type-builder.a9554707.chunk.js} +8 -8
  71. package/build/en-json.3e1a222e.chunk.js +1 -0
  72. package/build/fb376b132d18bf4522ca.png +0 -0
  73. package/build/index.html +1 -1
  74. package/build/main.6dad6108.js +8404 -0
  75. package/build/ru-json.28147733.chunk.js +1 -0
  76. package/build/runtime~main.26528011.js +2 -0
  77. package/build/users-roles-settings-page.28bf6bdc.chunk.js +30 -0
  78. package/build/{webhook-edit-page.2e6727ab.chunk.js → webhook-edit-page.ca670f8d.chunk.js} +3 -3
  79. package/build/webhook-list-page.ce1fa92f.chunk.js +133 -0
  80. package/ee/admin/pages/AuthPage/components/Providers/index.js +1 -1
  81. package/ee/admin/pages/SettingsPage/pages/Roles/CreatePage/index.js +1 -1
  82. package/package.json +5 -5
  83. package/server/config/admin-actions.js +0 -14
  84. package/server/controllers/admin.js +1 -33
  85. package/server/routes/admin.js +0 -28
  86. package/server/services/index.js +0 -1
  87. package/server/services/permission/permissions-manager/sanitize.js +22 -0
  88. package/server/services/user.js +1 -1
  89. package/server/utils/index.d.ts +0 -2
  90. package/admin/src/components/ConfigurationsProvider/index.js +0 -51
  91. package/admin/src/components/ConfigurationsProvider/reducer.js +0 -28
  92. package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/Form/index.js +0 -85
  93. package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/Form/init.js +0 -13
  94. package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/Form/reducer.js +0 -43
  95. package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoInput/index.js +0 -116
  96. package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoInput/reducer.js +0 -28
  97. package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoInput/stepper.js +0 -25
  98. package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoModalStepper/AddLogoDialog.js +0 -67
  99. package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoModalStepper/FromComputerForm.js +0 -176
  100. package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoModalStepper/FromUrlForm.js +0 -82
  101. package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoModalStepper/ImageCardAsset.js +0 -51
  102. package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoModalStepper/PendingLogoDialog.js +0 -97
  103. package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoModalStepper/index.js +0 -85
  104. package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoModalStepper/reducer.js +0 -28
  105. package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/utils/api.js +0 -16
  106. package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/utils/constants.js +0 -3
  107. package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/utils/getFormData.js +0 -17
  108. package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/utils/parseFileMetadatas.js +0 -76
  109. package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/utils/prefixAllUrls.js +0 -17
  110. package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/utils/urlToFile.js +0 -21
  111. package/build/2481.7ba28142.chunk.js +0 -184
  112. package/build/2a9e9ef5c4c775bb7c7b.png +0 -0
  113. package/build/372.3720845e.chunk.js +0 -899
  114. package/build/497.fbd75558.chunk.js +0 -284
  115. package/build/6404.80bf5858.chunk.js +0 -506
  116. package/build/7197.959bbe97.chunk.js +0 -113
  117. package/build/7589.f3b26345.chunk.js +0 -194
  118. package/build/9115.318a6841.chunk.js +0 -1
  119. package/build/9853.d96fbc67.chunk.js +0 -356
  120. package/build/Admin-authenticatedApp.d8767873.chunk.js +0 -80
  121. package/build/Admin_homePage.50b6c129.chunk.js +0 -71
  122. package/build/Admin_marketplace.514ace37.chunk.js +0 -11
  123. package/build/Admin_settingsPage.0d94a598.chunk.js +0 -180
  124. package/build/admin-edit-roles-page.06f3d288.chunk.js +0 -1
  125. package/build/admin-edit-users.6a325cca.chunk.js +0 -11
  126. package/build/api-tokens-create-page.635e20c8.chunk.js +0 -1
  127. package/build/api-tokens-edit-page.db07253e.chunk.js +0 -1
  128. package/build/api-tokens-list-page.346c2149.chunk.js +0 -15
  129. package/build/content-manager.78e3f35c.chunk.js +0 -1204
  130. package/build/en-json.ca572384.chunk.js +0 -1
  131. package/build/main.06f66609.js +0 -7909
  132. package/build/ru-json.4560906c.chunk.js +0 -1
  133. package/build/runtime~main.dc1c7ef6.js +0 -2
  134. package/build/users-roles-settings-page.97d7092d.chunk.js +0 -30
  135. package/build/webhook-list-page.927257b5.chunk.js +0 -133
  136. package/server/services/project-settings.js +0 -173
  137. 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-beta.0",
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-beta.0",
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-beta.0",
54
+ "@strapi/helper-plugin": "4.1.10",
55
55
  "@strapi/icons": "1.1.0",
56
- "@strapi/utils": "4.1.10-beta.0",
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": "a9082d9a3b26bf0abeb8e45d4507d5329e9ae733"
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() {
@@ -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',
@@ -13,5 +13,4 @@ module.exports = {
13
13
  auth: require('./auth'),
14
14
  action: require('./action'),
15
15
  'api-token': require('./api-token'),
16
- 'project-settings': require('./project-settings'),
17
16
  };
@@ -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
 
@@ -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
  };
@@ -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 };