@strapi/admin 4.6.0-beta.2 → 4.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/admin/src/components/ConfigurationsProvider/index.js +21 -18
- package/admin/src/components/ConfigurationsProvider/reducer.js +1 -0
- package/admin/src/components/LeftMenu/index.js +53 -50
- package/admin/src/components/UnauthenticatedLogo/index.js +1 -1
- package/admin/src/content-manager/components/Hint/index.js +4 -17
- package/admin/src/content-manager/components/InputUID/index.js +3 -14
- package/admin/src/content-manager/components/PreviewWysiwyg/Wrapper.js +22 -27
- package/admin/src/content-manager/components/Wysiwyg/EditorLayout.js +19 -28
- package/admin/src/content-manager/components/Wysiwyg/index.js +4 -8
- package/admin/src/content-manager/pages/App/LeftMenu/index.js +3 -8
- package/admin/src/content-manager/pages/App/LeftMenu/utils/index.js +1 -0
- package/admin/src/content-manager/pages/App/LeftMenu/utils/matchByTitle.js +24 -0
- package/admin/src/content-manager/pages/EditView/{Informations → Information}/index.js +55 -39
- package/admin/src/content-manager/pages/EditView/{Informations → Information}/utils/getUnits.js +0 -0
- package/admin/src/content-manager/pages/EditView/index.js +3 -3
- package/admin/src/core/store/configureStore.js +22 -4
- package/admin/src/core/utils/axiosInstance.js +4 -2
- package/admin/src/hooks/useSettingsMenu/init.js +2 -25
- package/admin/src/hooks/useSettingsMenu/utils/adminLinks.js +4 -0
- package/admin/src/hooks/useSettingsMenu/utils/customAdminLinks.js +1 -0
- package/admin/src/hooks/useSettingsMenu/utils/defaultAdminLinks.js +21 -0
- package/admin/src/index.js +3 -3
- package/admin/src/pages/App/index.js +6 -2
- package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/CustomizationInfos/index.js +142 -0
- package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/{Form → CustomizationInfos}/init.js +3 -0
- package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/{Form → CustomizationInfos}/reducer.js +20 -0
- package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoInput/index.js +21 -17
- package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/index.js +68 -42
- package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/utils/api.js +5 -1
- package/admin/src/pages/SettingsPage/pages/Webhooks/EditView/components/EventInput/index.js +1 -1
- package/admin/src/pages/SettingsPage/utils/defaultRoutes.js +0 -11
- package/admin/src/permissions/defaultPermissions.js +4 -0
- package/admin/src/translations/en.json +22 -16
- package/build/2607.ce06608e.chunk.js +66 -0
- package/build/{2743.692b1f21.chunk.js → 2743.dea372fb.chunk.js} +14 -14
- package/build/3075.03ebe93d.chunk.js +115 -0
- package/build/3632.963ac97d.chunk.js +138 -0
- package/build/{4318.87affaf2.chunk.js → 4318.8cb388a5.chunk.js} +1 -1
- package/build/4656.a0d43cca.chunk.js +159 -0
- package/build/{5015.f5e15fdb.chunk.js → 5015.8e3fe50b.chunk.js} +1 -1
- package/build/{3557.e7115160.chunk.js → 5910.a5374848.chunk.js} +130 -90
- package/build/{8633.6f546066.chunk.js → 8633.4af74a50.chunk.js} +1 -1
- package/build/9641.a311b612.chunk.js +276 -0
- package/build/9707.62831b4d.chunk.js +101 -0
- package/build/Admin-authenticatedApp.50dc27f9.chunk.js +75 -0
- package/build/Admin_homePage.79ab880c.chunk.js +77 -0
- package/build/Admin_marketplace.eabf21b2.chunk.js +26 -0
- package/build/{Admin_pluginsPage.d2a9a619.chunk.js → Admin_pluginsPage.953e796b.chunk.js} +1 -1
- package/build/{Admin_profilePage.5e830ceb.chunk.js → Admin_profilePage.5c2efda5.chunk.js} +1 -1
- package/build/Admin_settingsPage.19cfb9ca.chunk.js +178 -0
- package/build/{Upload_ConfigureTheView.9bdf41b5.chunk.js → Upload_ConfigureTheView.3f2b6e6a.chunk.js} +1 -1
- package/build/admin-app.34295b50.chunk.js +112 -0
- package/build/{admin-edit-roles-page.32bfe5ea.chunk.js → admin-edit-roles-page.d50d9654.chunk.js} +1 -1
- package/build/admin-edit-users.912b856d.chunk.js +10 -0
- package/build/admin-users.e36e7111.chunk.js +11 -0
- package/build/{api-tokens-list-page.a55e427c.chunk.js → api-tokens-list-page.1cd86136.chunk.js} +1 -1
- package/build/audit-logs-settings-page.308a6250.chunk.js +1 -0
- package/build/{content-manager.ad929a94.chunk.js → content-manager.851f40ce.chunk.js} +128 -132
- package/build/content-type-builder-list-view.4243b2b1.chunk.js +198 -0
- package/build/{content-type-builder-translation-de-json.29df67b8.chunk.js → content-type-builder-translation-de-json.0979cccb.chunk.js} +1 -1
- package/build/{content-type-builder-translation-dk-json.e22d2527.chunk.js → content-type-builder-translation-dk-json.e05583e9.chunk.js} +1 -1
- package/build/content-type-builder-translation-en-json.e577d595.chunk.js +1 -0
- package/build/{content-type-builder-translation-es-json.1044b252.chunk.js → content-type-builder-translation-es-json.fe4daad8.chunk.js} +1 -1
- package/build/{content-type-builder-translation-fr-json.2183e6b3.chunk.js → content-type-builder-translation-fr-json.b1eb52f6.chunk.js} +1 -1
- package/build/{content-type-builder-translation-id-json.ba3e8891.chunk.js → content-type-builder-translation-id-json.ee3b36bb.chunk.js} +1 -1
- package/build/{content-type-builder-translation-it-json.d4661201.chunk.js → content-type-builder-translation-it-json.13b3c26a.chunk.js} +1 -1
- package/build/{content-type-builder-translation-ko-json.57ff7f51.chunk.js → content-type-builder-translation-ko-json.8a274be5.chunk.js} +1 -1
- package/build/{content-type-builder-translation-pl-json.a057b51e.chunk.js → content-type-builder-translation-pl-json.24a34349.chunk.js} +1 -1
- package/build/{content-type-builder-translation-pt-BR-json.446df9da.chunk.js → content-type-builder-translation-pt-BR-json.97f71a9d.chunk.js} +1 -1
- package/build/{content-type-builder-translation-ru-json.8c51843e.chunk.js → content-type-builder-translation-ru-json.54d11230.chunk.js} +1 -1
- package/build/{content-type-builder-translation-sv-json.af6ecca1.chunk.js → content-type-builder-translation-sv-json.59f5e1e5.chunk.js} +1 -1
- package/build/{content-type-builder-translation-tr-json.da83a07e.chunk.js → content-type-builder-translation-tr-json.cea4d226.chunk.js} +1 -1
- package/build/{content-type-builder-translation-zh-json.42f94cb3.chunk.js → content-type-builder-translation-zh-json.faedd610.chunk.js} +1 -1
- package/build/content-type-builder.365b6bf4.chunk.js +125 -0
- package/build/email-settings-page.379552b1.chunk.js +15 -0
- package/build/en-json.38d182e5.chunk.js +1 -0
- package/build/i18n-settings-page.3ab28b1a.chunk.js +65 -0
- package/build/{i18n-translation-de-json.dc876c08.chunk.js → i18n-translation-de-json.362384a6.chunk.js} +1 -1
- package/build/{i18n-translation-dk-json.49aaf933.chunk.js → i18n-translation-dk-json.89401417.chunk.js} +1 -1
- package/build/{i18n-translation-en-json.ac9ebc1b.chunk.js → i18n-translation-en-json.60af6722.chunk.js} +1 -1
- package/build/{i18n-translation-es-json.57072ed3.chunk.js → i18n-translation-es-json.87b494d1.chunk.js} +1 -1
- package/build/{i18n-translation-fr-json.84733f34.chunk.js → i18n-translation-fr-json.57ddc77e.chunk.js} +1 -1
- package/build/{i18n-translation-ko-json.fc73fe20.chunk.js → i18n-translation-ko-json.ef4f9471.chunk.js} +1 -1
- package/build/{i18n-translation-pl-json.16e5df90.chunk.js → i18n-translation-pl-json.dfac513d.chunk.js} +1 -1
- package/build/{i18n-translation-tr-json.cb39c048.chunk.js → i18n-translation-tr-json.10f0600d.chunk.js} +1 -1
- package/build/{i18n-translation-zh-Hans-json.2cf82d2d.chunk.js → i18n-translation-zh-Hans-json.757ce62d.chunk.js} +1 -1
- package/build/{i18n-translation-zh-json.ed1d272e.chunk.js → i18n-translation-zh-json.bef2dc07.chunk.js} +1 -1
- package/build/index.html +1 -1
- package/build/main.9f31732e.js +4454 -0
- package/build/runtime~main.2b8e2318.js +2 -0
- package/build/sso-settings-page.b64a44e8.chunk.js +41 -0
- package/build/upload-settings.6c26ff37.chunk.js +89 -0
- package/build/upload.2c69d238.chunk.js +38 -0
- package/build/users-advanced-settings-page.c4270682.chunk.js +13 -0
- package/build/users-email-settings-page.60422a2f.chunk.js +28 -0
- package/build/users-providers-settings-page.e1834060.chunk.js +104 -0
- package/build/{users-roles-settings-page.ad28ab42.chunk.js → users-roles-settings-page.3ef35132.chunk.js} +1 -1
- package/build/webhook-edit-page.c0080dc1.chunk.js +75 -0
- package/build/webhook-list-page.f75ba3f2.chunk.js +42 -0
- package/ee/admin/hooks/useSettingsMenu/utils/customAdminLinks.js +17 -0
- package/{admin/src → ee/admin}/pages/SettingsPage/pages/AuditLogs/ListView/Modal/ActionBody.js +0 -0
- package/{admin/src → ee/admin}/pages/SettingsPage/pages/AuditLogs/ListView/Modal/ActionItem.js +0 -0
- package/{admin/src → ee/admin}/pages/SettingsPage/pages/AuditLogs/ListView/Modal/index.js +5 -1
- package/{admin/src → ee/admin}/pages/SettingsPage/pages/AuditLogs/ListView/PaginationFooter/index.js +0 -0
- package/{admin/src → ee/admin}/pages/SettingsPage/pages/AuditLogs/ListView/TableRows/index.js +0 -0
- package/{admin/src → ee/admin}/pages/SettingsPage/pages/AuditLogs/ListView/hooks/useFormatTimeStamp.js +0 -0
- package/{admin/src → ee/admin}/pages/SettingsPage/pages/AuditLogs/ListView/index.js +7 -7
- package/{admin/src → ee/admin}/pages/SettingsPage/pages/AuditLogs/ListView/utils/getActionTypesDefaultMessages.js +3 -0
- package/{admin/src → ee/admin}/pages/SettingsPage/pages/AuditLogs/ListView/utils/tableHeaders.js +0 -0
- package/{admin/src → ee/admin}/pages/SettingsPage/pages/AuditLogs/ProtectedListPage/index.js +1 -1
- package/ee/admin/pages/SettingsPage/{SingleSignOn → pages/SingleSignOn}/index.js +3 -3
- package/ee/admin/pages/SettingsPage/{SingleSignOn → pages/SingleSignOn}/utils/schema.js +0 -0
- package/ee/admin/pages/SettingsPage/utils/customRoutes.js +28 -16
- package/ee/server/bootstrap.js +2 -0
- package/ee/server/routes/index.js +94 -10
- package/ee/server/services/audit-logs.js +19 -1
- package/ee/server/services/passport/sso.js +13 -1
- package/ee/server/services/passport.js +1 -4
- package/package.json +11 -16
- package/server/controllers/admin.js +3 -2
- package/server/register.js +7 -7
- package/server/services/project-settings.js +10 -6
- package/server/services/user.js +3 -1
- package/server/validation/project-settings.js +19 -10
- package/strapi-server.js +1 -1
- package/admin/src/core/store/createReducer.js +0 -5
- package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/Form/index.js +0 -85
- package/build/2235.746d3cf7.chunk.js +0 -106
- package/build/2598.01c96bd5.chunk.js +0 -159
- package/build/4958.1979bbf5.chunk.js +0 -276
- package/build/5052.c2eacff2.chunk.js +0 -65
- package/build/7295.4e2dfbbb.chunk.js +0 -114
- package/build/805.da20168c.chunk.js +0 -138
- package/build/874.be41e4b3.chunk.js +0 -104
- package/build/9707.a07db355.chunk.js +0 -101
- package/build/Admin-authenticatedApp.9933974c.chunk.js +0 -75
- package/build/Admin_homePage.045bb0c8.chunk.js +0 -77
- package/build/Admin_marketplace.bf3ac090.chunk.js +0 -26
- package/build/Admin_settingsPage.53fa00a4.chunk.js +0 -178
- package/build/admin-app.8ed108ca.chunk.js +0 -112
- package/build/admin-audit-logs.68f833bf.chunk.js +0 -1
- package/build/admin-edit-users.795f155c.chunk.js +0 -10
- package/build/admin-users.cbd9bcf7.chunk.js +0 -11
- package/build/content-type-builder-list-view.3048854d.chunk.js +0 -198
- package/build/content-type-builder-translation-en-json.08e28f4e.chunk.js +0 -1
- package/build/content-type-builder.4edd1c22.chunk.js +0 -127
- package/build/email-settings-page.7c9e6c5e.chunk.js +0 -15
- package/build/en-json.d65a13ef.chunk.js +0 -1
- package/build/i18n-settings-page.fbccdf12.chunk.js +0 -1
- package/build/main.6bbf9950.js +0 -4417
- package/build/runtime~main.c2bf62af.js +0 -2
- package/build/sso-settings-page.4031de9e.chunk.js +0 -41
- package/build/upload-settings.657790fd.chunk.js +0 -89
- package/build/upload.608a9856.chunk.js +0 -38
- package/build/users-advanced-settings-page.e3ab865f.chunk.js +0 -13
- package/build/users-email-settings-page.57adf9b7.chunk.js +0 -28
- package/build/users-providers-settings-page.7d1fb45c.chunk.js +0 -1
- package/build/webhook-edit-page.1dd6d040.chunk.js +0 -75
- package/build/webhook-list-page.98afa3ea.chunk.js +0 -42
- package/ee/server/routes/features-routes.js +0 -66
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use strict";(self.webpackChunk_strapi_admin=self.webpackChunk_strapi_admin||[]).push([[5162],{41513:function(te,M,t){t.d(M,{Z:function(){return Fe}});var e=t(32735),n=t(88425),L=t(27649),P=t(84968),x=t(5141),E=t(67927),p=t(17247),ne=t(60216),d=t.n(ne),h=t(29439),k=t(66456),ce=t(74512);function ve(a){return(0,ce.jsx)("svg",{width:"1em",height:"1em",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",...a,children:(0,ce.jsx)("path",{d:"M4 20.252V3.748a1 1 0 011.507-.862l14.028 8.252a1 1 0 010 1.724L5.507 21.113A1 1 0 014 20.252z",fill:"#212134"})})}var be=t(28356),Re=t(17e3),ae=t(72850),ue=t(41415),W=t(27677),Q=t(10369),me=t(15335),D=t(5803),Z=t(83281),N=t(5636),Ce=t(76437),F=t(49372),ye=t(83292),Ie=t(44426),G=t(8284),ge=t(23940),i=t.n(ge);const C=({disabledEvents:a,name:r,events:o,inputValue:s,handleChange:c,handleChangeAll:O})=>{const u=o.filter(b=>!a.includes(b)),f=s.length===u.length,m=s.length>0,K=({target:{name:b}})=>{O({target:{name:b,value:!f}})};return e.createElement("tr",null,e.createElement("td",null,e.createElement(G.X,{indeterminate:m&&!f,"aria-label":"Select all entries",name:r,onChange:K,value:f},i()(r))),o.map(b=>e.createElement("td",{key:b},e.createElement(Ie.C,{disabled:a.includes(b),"aria-label":b,name:b,value:s.includes(b),onValueChange:S=>c({target:{name:b,value:S}})}))))};C.defaultProps={disabledEvents:[],events:[],inputValue:[],handleChange(){},handleChangeAll(){}},C.propTypes={disabledEvents:d().array,events:d().array,inputValue:d().array,handleChange:d().func,handleChangeAll:d().func,name:d().string.isRequired};var A=C,R=a=>a.reduce((r,o)=>{const s=o.split(".")[0];return r[s]||(r[s]=[]),r[s].push(o),r},{});const pe=ye.default.table`
|
|
2
|
+
td {
|
|
3
|
+
height: ${52/16}rem;
|
|
4
|
+
width: 10%;
|
|
5
|
+
vertical-align: middle;
|
|
6
|
+
text-align: center;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
tbody tr:nth-child(odd) {
|
|
10
|
+
background: ${({theme:a})=>a.colors.neutral100};
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
tbody tr td:first-child {
|
|
14
|
+
padding-left: ${({theme:a})=>a.spaces[7]};
|
|
15
|
+
}
|
|
16
|
+
`,re={headers:{default:[{id:"Settings.webhooks.events.create",defaultMessage:"Create"},{id:"Settings.webhooks.events.update",defaultMessage:"Update"},{id:"app.utils.delete",defaultMessage:"Delete"}],draftAndPublish:[{id:"Settings.webhooks.events.create",defaultMessage:"Create"},{id:"Settings.webhooks.events.update",defaultMessage:"Update"},{id:"app.utils.delete",defaultMessage:"Delete"},{id:"app.utils.publish",defaultMessage:"Publish"},{id:"app.utils.unpublish",defaultMessage:"Unpublish"}]},events:{default:{entry:["entry.create","entry.update","entry.delete"],media:["media.create","media.update","media.delete"]},draftAndPublish:{entry:["entry.create","entry.update","entry.delete","entry.publish","entry.unpublish"],media:["media.create","media.update","media.delete"]}}},fe=({isDraftAndPublish:a})=>{const r=a?re.headers.draftAndPublish:re.headers.default,o=a?re.events.draftAndPublish:re.events.default,{formatMessage:s}=(0,N.useIntl)(),{values:c,handleChange:O}=(0,Z.useFormikContext)(),u="events",f=c.events,m=[],K=R(f),b=({target:{name:v,value:ee}})=>{let l=new Set(f);ee?l.add(v):l.delete(v),O({target:{name:u,value:Array.from(l)}})},S=({target:{name:v,value:ee}})=>{let l=new Set(f);ee?o[v].forEach(g=>{m.includes(g)||l.add(g)}):o[v].forEach(g=>l.delete(g)),O({target:{name:u,value:Array.from(l)}})};return e.createElement(W.K,{spacing:1},e.createElement(Ce.Q,null,s({id:"Settings.webhooks.form.events",defaultMessage:"Events"})),e.createElement(pe,null,e.createElement("thead",null,e.createElement("tr",null,e.createElement("td",null),r.map(v=>v==="app.utils.publish"||v==="app.utils.unpublish"?e.createElement("td",{key:v.id,title:s({id:"Settings.webhooks.event.publish-tooltip",defaultMessage:"This event only exists for content with draft & publish enabled"})},e.createElement(F.Z,{variant:"sigma",textColor:"neutral600"},s(v))):e.createElement("td",{key:v.id},e.createElement(F.Z,{variant:"sigma",textColor:"neutral600"},s(v)))))),e.createElement("tbody",null,Object.keys(o).map(v=>e.createElement(A,{disabledEvents:m,key:v,name:v,events:o[v],inputValue:K[v],handleChange:b,handleChangeAll:S})))))};fe.propTypes={isDraftAndPublish:d().bool.isRequired};var J=fe,Te=t(19406),z=t(87933),Le=t(7563),Ae=t(21590),Me=t(90333),Pe=["A-IM","Accept","Accept-Charset","Accept-Encoding","Accept-Language","Accept-Datetime","Access-Control-Request-Method","Access-Control-Request-Headers","Authorization","Cache-Control","Connection","Content-Length","Content-Type","Cookie","Date","Expect","Forwarded","From","Host","If-Match","If-Modified-Since","If-None-Match","If-Range","If-Unmodified-Since","Max-Forwards","Origin","Pragma","Proxy-Authorization","Range","Referer","TE","User-Agent","Upgrade","Via","Warning"];const oe=({name:a,onChange:r,value:o,...s})=>{const[c,O]=(0,e.useState)(o?[...Pe,o]:Pe),u=m=>{r({target:{name:a,value:m}})},f=m=>{O(K=>[...K,m]),r({target:{name:a,value:m}})};return e.createElement(Ae.X,{...s,onChange:u,onCreateOption:f,placeholder:"",value:o},c.map(m=>e.createElement(Me.O,{value:m,key:m},m)))};oe.defaultProps={value:void 0},oe.propTypes={name:d().string.isRequired,onChange:d().func.isRequired,value:d().string};var De=oe,xe=()=>{const{formatMessage:a}=(0,N.useIntl)(),{values:r,errors:o}=(0,Z.useFormikContext)();return e.createElement(W.K,{spacing:1},e.createElement(Ce.Q,null,a({id:"Settings.webhooks.form.headers",defaultMessage:"Headers"})),e.createElement(ae.x,{padding:8,background:"neutral100",hasRadius:!0},e.createElement(Z.FieldArray,{validateOnChange:!1,name:"headers",render:({push:s,remove:c})=>e.createElement(me.r,{gap:4},r.headers?.map((O,u)=>e.createElement(e.Fragment,{key:u},e.createElement(D.P,{col:6},e.createElement(Z.Field,{as:De,name:`headers.${u}.key`,"aria-label":`row ${u+1} key`,label:a({id:"Settings.webhooks.key",defaultMessage:"Key"}),error:o.headers?.[u]?.key&&a({id:o.headers[u]?.key,defaultMessage:o.headers[u]?.key})})),e.createElement(D.P,{col:6},e.createElement(z.k,{alignItems:"flex-end"},e.createElement(ae.x,{style:{flex:1}},e.createElement(Z.Field,{as:Q.o,"aria-label":`row ${u+1} value`,label:a({id:"Settings.webhooks.value",defaultMessage:"Value"}),name:`headers.${u}.value`,error:o.headers?.[u]?.value&&a({id:o.headers[u]?.value,defaultMessage:o.headers[u]?.value})})),e.createElement(z.k,{paddingLeft:2,style:{alignSelf:"center"},paddingTop:o.headers?.[u]?.value?0:5},e.createElement(n.RemoveRoundedButton,{onClick:()=>r.headers.length!==1&&c(u),label:a({id:"Settings.webhooks.headers.remove",defaultMessage:"Remove header row {number}"},{number:u+1})})))))),e.createElement(D.P,{col:12},e.createElement(Le.A,{type:"button",onClick:()=>{s({key:"",value:""})},startIcon:e.createElement(Te.default,null)},a({id:"Settings.webhooks.create.header",defaultMessage:"Create new header"}))))})))},w=t(35331),$e=t(27169);const le=ye.default.svg(({theme:a,color:r})=>`
|
|
17
|
+
width: ${12/16}rem;
|
|
18
|
+
height: ${12/16}rem;
|
|
19
|
+
|
|
20
|
+
path {
|
|
21
|
+
fill: ${a.colors[r]};
|
|
22
|
+
}
|
|
23
|
+
`),y=({isPending:a,statusCode:r})=>{const{formatMessage:o}=(0,N.useIntl)();return a?e.createElement(W.K,{horizontal:!0,spacing:2,style:{alignItems:"center"}},e.createElement(le,{as:$e.Z}),e.createElement(F.Z,null,o({id:"Settings.webhooks.trigger.pending",defaultMessage:"pending"}))):r>=200&&r<300?e.createElement(W.K,{horizontal:!0,spacing:2,style:{alignItems:"center"}},e.createElement(le,{as:k.Z,color:"success700"}),e.createElement(F.Z,null,o({id:"Settings.webhooks.trigger.success",defaultMessage:"success"}))):r>=300?e.createElement(W.K,{horizontal:!0,spacing:2,style:{alignItems:"center"}},e.createElement(le,{as:w.default,color:"danger700"}),e.createElement(F.Z,null,o({id:"Settings.error",defaultMessage:"error"})," ",r)):null};y.propTypes={isPending:d().bool.isRequired,statusCode:d().number},y.defaultProps={statusCode:void 0};const se=({statusCode:a,message:r})=>{const{formatMessage:o}=(0,N.useIntl)();return a>=200&&a<300?e.createElement(z.k,{justifyContent:"flex-end"},e.createElement(F.Z,{textColor:"neutral600",ellipsis:!0},o({id:"Settings.webhooks.trigger.success.label",defaultMessage:"Trigger succeeded"}))):a>=300?e.createElement(z.k,{justifyContent:"flex-end"},e.createElement(z.k,{maxWidth:(0,n.pxToRem)(250),justifyContent:"flex-end",title:r},e.createElement(F.Z,{ellipsis:!0,textColor:"neutral600"},r))):null};se.propTypes={statusCode:d().number,message:d().string},se.defaultProps={statusCode:void 0,message:void 0};const Oe=({onCancel:a})=>{const{formatMessage:r}=(0,N.useIntl)();return e.createElement(z.k,{justifyContent:"flex-end"},e.createElement("button",{onClick:a,type:"button"},e.createElement(W.K,{horizontal:!0,spacing:2,style:{alignItems:"center"}},e.createElement(F.Z,{textColor:"neutral400"},r({id:"Settings.webhooks.trigger.cancel",defaultMessage:"cancel"})),e.createElement(le,{as:w.default,color:"neutral400"}))))};Oe.propTypes={onCancel:d().func.isRequired};const he=({isPending:a,onCancel:r,response:o})=>{const{statusCode:s,message:c}=o,{formatMessage:O}=(0,N.useIntl)();return e.createElement(ae.x,{background:"neutral0",padding:5,shadow:"filterShadow",hasRadius:!0},e.createElement(me.r,{gap:4,style:{alignItems:"center"}},e.createElement(D.P,{col:3},e.createElement(F.Z,null,O({id:"Settings.webhooks.trigger.test",defaultMessage:"Test-trigger"}))),e.createElement(D.P,{col:3},e.createElement(y,{isPending:a,statusCode:s})),e.createElement(D.P,{col:6},a?e.createElement(Oe,{onCancel:r}):e.createElement(se,{statusCode:s,message:c}))))};he.defaultProps={isPending:!1,onCancel(){},response:{}},he.propTypes={isPending:d().bool,onCancel:d().func,response:d().object};var $=he,B=t(5173);const H=/(^$)|(^[A-Za-z][_0-9A-Za-z ]*$)/,Be=/(^$)|((https?:\/\/.*)(d*)\/?(.*))/;var ie=B.Ry().shape({name:B.Z_(n.translatedErrors.string).required(n.translatedErrors.required).matches(H,n.translatedErrors.regex),url:B.Z_(n.translatedErrors.string).required(n.translatedErrors.required).matches(Be,n.translatedErrors.regex),headers:B.Vo(a=>{let r=B.IX();if(a.length===1){const{key:o,value:s}=a[0];if(!o&&!s)return r}return r.of(B.Ry().shape({key:B.Z_().required(n.translatedErrors.required),value:B.Z_().required(n.translatedErrors.required)}))}),events:B.IX()});const V=({handleSubmit:a,data:r,triggerWebhook:o,isCreating:s,isTriggering:c,triggerResponse:O,isDraftAndPublishEvents:u})=>{const{formatMessage:f}=(0,N.useIntl)(),[m,K]=(0,e.useState)(!1);return e.createElement(Z.Formik,{onSubmit:a,initialValues:{name:r?.name||"",url:r?.url||"",headers:Object.keys(r?.headers||[]).length?Object.entries(r.headers).map(([b,S])=>({key:b,value:S})):[{key:"",value:""}],events:r?.events||[]},validationSchema:ie,validateOnChange:!1,validateOnBlur:!1},({handleSubmit:b,errors:S})=>e.createElement(n.Form,{noValidate:!0},e.createElement(be.T,{primaryAction:e.createElement(W.K,{horizontal:!0,spacing:2},e.createElement(ue.z,{onClick:()=>{o(),K(!0)},variant:"tertiary",startIcon:e.createElement(ve,null),disabled:s||c,size:"L"},f({id:"Settings.webhooks.trigger",defaultMessage:"Trigger"})),e.createElement(ue.z,{startIcon:e.createElement(k.Z,null),onClick:b,type:"submit",size:"L"},f({id:"global.save",defaultMessage:"Save"}))),title:s?f({id:"Settings.webhooks.create",defaultMessage:"Create a webhook"}):r?.name,navigationAction:e.createElement(n.Link,{startIcon:e.createElement(h.Z,null),to:"/settings/webhooks"},f({id:"global.back",defaultMessage:"Back"}))}),e.createElement(Re.D,null,e.createElement(W.K,{spacing:4},m&&e.createElement("div",{className:"trigger-wrapper"},e.createElement($,{isPending:c,response:O,onCancel:()=>K(!1)})),e.createElement(ae.x,{background:"neutral0",padding:8,shadow:"filterShadow",hasRadius:!0},e.createElement(W.K,{spacing:6},e.createElement(me.r,{gap:6},e.createElement(D.P,{col:6},e.createElement(Z.Field,{as:Q.o,name:"name",error:S.name&&f({id:S.name}),label:f({id:"global.name",defaultMessage:"Name"}),required:!0})),e.createElement(D.P,{col:12},e.createElement(Z.Field,{as:Q.o,name:"url",error:S.url&&f({id:S.url}),label:f({id:"Settings.roles.form.input.url",defaultMessage:"Url"}),required:!0}))),e.createElement(xe,null),e.createElement(J,{isDraftAndPublish:u})))))))};V.propTypes={data:d().object,handleSubmit:d().func.isRequired,triggerWebhook:d().func.isRequired,isCreating:d().bool.isRequired,isDraftAndPublishEvents:d().bool.isRequired,isTriggering:d().bool.isRequired,triggerResponse:d().object},V.defaultProps={data:void 0,triggerResponse:void 0};var de=V,_=t(92891);const Se=a=>{const r={...a};return(0,_.set)(r,"headers",Ke(a.headers)),r},Ke=a=>a.reduce((r,o)=>{const{key:s,value:c}=o;return s!==""?{...r,[s]:c}:r},{});var Ee=Se,T=t(98399),Fe=()=>{const{params:{id:a}}=(0,x.useRouteMatch)("/settings/webhooks/:id"),{replace:r}=(0,x.useHistory)(),{lockApp:o,unlockApp:s}=(0,n.useOverlayBlocker)(),c=(0,n.useNotification)(),O=(0,P.useQueryClient)(),{isLoading:u,collectionTypes:f}=(0,E.bP)(),m=a==="create",K=(0,e.useCallback)(async j=>{const[X,{data:Ve}]=await(0,n.to)((0,n.request)(`/admin/webhooks/${j}`,{method:"GET"}));return X?(c({type:"warning",message:{id:"notification.error"}}),null):Ve},[c]),{isLoading:b,data:S}=(0,P.useQuery)(["get-webhook",a],()=>K(a),{enabled:!m}),{isLoading:v,data:ee,isIdle:l,mutate:g}=(0,P.useMutation)(()=>p.be.post(`/admin/webhooks/${a}/trigger`)),U=()=>g(null,{onError(){c({type:"warning",message:{id:"notification.error"}})}}),Y=(0,P.useMutation)(j=>(0,n.request)("/admin/webhooks",{method:"POST",body:j})),Ue=(0,P.useMutation)(({id:j,body:X})=>(0,n.request)(`/admin/webhooks/${j}`,{method:"PUT",body:X})),Ze=async j=>{m?(o(),Y.mutate(Ee(j),{onSuccess(X){c({type:"success",message:{id:"Settings.webhooks.created"}}),r(`/settings/webhooks/${X.data.id}`),s()},onError(X){c({type:"warning",message:{id:"notification.error"}}),T.log(X),s()}})):(o(),Ue.mutate({id:a,body:Ee(j)},{onSuccess(){O.invalidateQueries(["get-webhook",a]),c({type:"success",message:{id:"notification.form.success.fields"}}),s()},onError(X){c({type:"warning",message:{id:"notification.error"}}),T.log(X),s()}}))},ze=(0,e.useMemo)(()=>f.some(j=>j.options.draftAndPublish===!0),[f]);return b||u?e.createElement(n.LoadingIndicatorPage,null):e.createElement(L.o,null,e.createElement(n.SettingsPageTitle,{name:"Webhooks"}),e.createElement(de,{handleSubmit:Ze,data:S,triggerWebhook:U,isCreating:m,isTriggering:v,isTriggerIdle:l,triggerResponse:ee?.data.data,isDraftAndPublishEvents:ze}))}},33238:function(te,M,t){t.r(M);var e=t(32735),n=t(88425),L=t.n(n),P=t(83983),x=t(41513);const E=()=>e.createElement(n.CheckPagePermissions,{permissions:P.Z.settings.webhooks.create},e.createElement(x.Z,null));M.default=E},59021:function(te,M,t){t.r(M);var e=t(32735),n=t(88425),L=t.n(n),P=t(83983),x=t(41513);const E=()=>e.createElement(n.CheckPagePermissions,{permissions:P.Z.settings.webhooks.update},e.createElement(x.Z,null));M.default=E},21590:function(te,M,t){t.d(M,{h:function(){return G},X:function(){return ge}});var e=t(32735),n=t(60216),L=t(57269),P=t(59002),x=t(96892),E=t(94486);const p={Close:"Close",CloseSelect:"CloseSelect",First:"First",Last:"Last",Next:"Next",Open:"Open",PageDown:"PageDown",PageUp:"PageUp",Previous:"Previous",Select:"Select",Space:"Space",Type:"Type"},ne={Close:"Close",First:"First",Last:"Last",Next:"Next",Open:"Open",Previous:"Previous",Select:"Select",UpLevel:"UpLevel"};function d(i=[],C=null,A=[]){const q=String(C??"").toLowerCase();return q?i.filter(R=>R.props.children.toString().toLowerCase().includes(q)&&A.indexOf(R)<0):i}function h(i,C){if(!C&&i===E.y.DOWN)return p.Open;if(i===E.y.DOWN)return p.Next;if(i===E.y.UP)return p.Previous;if(i===E.y.HOME)return p.First;if(i===E.y.END)return p.Last;if(i===E.y.ESCAPE)return p.Close;if(i===E.y.ENTER)return p.CloseSelect;if(i===E.y.BACKSPACE||i===E.y.CLEAR||i.length===1)return p.Type}function k(i,C,A){switch(A){case p.First:return 0;case p.Last:return C;case p.Previous:return Math.max(0,i-1);case p.Next:return Math.min(C,i+1);default:return i}}function ce(i){x(i,{scrollMode:"if-needed",block:"nearest",inline:"nearest"}).forEach(({el:C,top:A,left:q})=>{C.scrollTop=A,C.scrollLeft=q})}var ve=t(87933),be=t(93958),Re=t(46406),ae=t(72850),ue=t(49372),W=t(97405),Q=t(91225),me=t(90333);const D=({options:i,activeOptionRef:C})=>((0,e.useEffect)(()=>{C.current&&ce(C.current)},[C]),i);D.defaultProps={activeOptionRef:void 0},D.propTypes={options:n.array.isRequired};var Z=t(87107),N=t(76437),Ce=t(67014),F=t(47851),ye=t(27677),Ie=t(3685);const G=({children:i,clearLabel:C,creatable:A,createMessage:q,disabled:R,error:pe,hasMoreItems:re,hint:fe,label:J,labelAction:Te,loading:z,loadingMessage:Le,noOptionsMessage:Ae,onChange:Me,onClear:ke,onCreateOption:Pe,onInputChange:oe,onLoadMore:De,placeholder:we,required:xe,value:w,...$e})=>{const le=()=>i.find(l=>l.props?.value.toLowerCase()===w.toLowerCase()).props?.children,[y,se]=(0,e.useState)(0),[Oe,he]=(0,e.useState)(null),[$,B]=(0,e.useState)(i),[H,Be]=(0,e.useState)(!1),[I,ie]=(0,e.useState)(""),V=(0,e.useRef)(),de=(0,e.useRef)(!1),_=(0,e.useRef)(),Se=(0,e.useRef)(),Ke=(0,e.useRef)(),Ee=(0,e.useRef)(!0),T=(0,P.M)("combobox"),We=`${T}-label`;if(!J&&!$e["aria-label"])throw new Error('The Combobox component needs a "label" or an "aria-label" props');(0,e.useEffect)(()=>{B(d(i,I))},[I,i]),(0,e.useEffect)(()=>{H&&V.current&&ce(V.current)},[y,H]),(0,e.useLayoutEffect)(()=>{Ee.current&&(Ee.current=!1)},[w]);const Fe=H?`${T}-${y}`:"",a=()=>{Me(null),ie("")},r=l=>{oe&&oe(l);const g=_.current.value;B(d(i,g)),se(0),he(null),I!==g&&ie(g),H||m(!0,!1)},o=l=>{const{key:g}=l,U=A&&I?$.length:$.length-1,Y=h(g,H);switch(w&&!I&&g===E.y.BACKSPACE&&a(),Y){case p.Next:{if(y===U){c(0);break}c(k(y,U,Y));break}case p.Previous:{if(y===0){c(U);break}c(k(y,U,Y));break}case p.Last:case p.First:{if(y===U){c(0);break}c(k(y,U,Y));break}case p.CloseSelect:l.preventDefault(),f(y);break;case p.Close:l.preventDefault(),m(!1);break;case p.Open:m(!0);break}},s=l=>{if(l.preventDefault(),w&&!de.current&&ie(""),de.current){de.current=!1;return}m(!1,!1)},c=l=>{se(l)},O=l=>{c(l),f(l)},u=()=>{de.current=!0},f=l=>{const g=$[l];if(ie(""),g){Me(g.props.value),m(!1);return}A&&(Pe(I),m(!1))},m=(l,g=!0)=>{Be(l),g&&_.current.focus()},K=e.Children.toArray($).map((l,g)=>{const U=y===g;return(0,e.cloneElement)(l,{id:`${T}-${g}`,"aria-selected":Oe===g,"aria-posinset":g+1,"aria-setsize":e.Children.toArray($).length,ref(Y){U&&(V.current=Y)},onClick:()=>O(g),onMouseDown:u,isSelected:U})}),b=()=>{_.current.focus(),ke&&ke(),a()},S=()=>{_.current.focus(),m(!0)},v=()=>{const l=$.findIndex(g=>g.props?.children===I);return I&&l===-1},ee=l=>{l.preventDefault(),m(l,!0)};return e.createElement(Z.g,{hint:fe,error:pe,id:T,required:xe},e.createElement(Ie.T,{"aria-live":"polite","aria-atomic":"false","aria-relevant":"additions text"},w),e.createElement(ye.K,{spacing:J||fe||pe?1:0},J&&e.createElement(N.Q,{action:Te},J),e.createElement(Q.d8,{ref:Se,$disabled:R,hasError:pe},e.createElement(Q.fv,{wrap:"wrap"},!I&&w&&e.createElement(Q.K7,{id:`${T}-selected-value`},e.createElement(ue.Z,null,le())),e.createElement(Q.II,{"aria-activedescendant":Fe,"aria-autocomplete":"list","aria-controls":`${T}-listbox`,"aria-disabled":R,"aria-expanded":H,"aria-haspopup":"listbox","aria-labelledby":J?We:void 0,autoComplete:"off",autoCorrect:"off",id:T,onBlur:R?void 0:s,onClick:R?void 0:ee,onInput:R?void 0:r,onKeyDown:R?void 0:o,placeholder:w?"":we,readOnly:R,ref:_,required:xe,role:"combobox",spellCheck:"off",type:"text",value:I})),e.createElement(ve.k,null,(w||I)&&e.createElement(be.zb,{id:`${T}-clear`,"aria-label":C,disabled:R,paddingLeft:3,as:"button",onClick:b,type:"button"},e.createElement(L.Cross,null)),e.createElement(be.AV,{disabled:R,paddingLeft:3,"aria-hidden":!0,as:"button",onClick:S,tabIndex:-1,type:"button"},e.createElement(L.CarretDown,null)))),e.createElement(Ce.J,null),e.createElement(F.c,null)),H&&e.createElement(Re.J,{id:`${T}-popover`,source:Se,spacing:4,fullWidth:!0,intersectionId:`${T}-listbox-popover-intersection`,onReachEnd:re&&!z?De:void 0},e.createElement("div",{role:"listbox",ref:Ke,id:`${T}-listbox`,"aria-labelledby":J?We:void 0},(Boolean($.length)||A)&&e.createElement(e.Fragment,null,e.createElement(D,{activeOptionRef:V,options:K}),v()&&A&&e.createElement(me.O,{isSelected:y===$.length,ref:l=>{y===$.length&&(V.current=l)},onMouseDown:u,onClick:()=>f(),taindex:0},q(I))),!$.length&&!A&&!z&&e.createElement(ae.x,{paddingLeft:4,paddingRight:4,paddingTop:2,paddingBottom:2,ref:V},e.createElement(ue.Z,{textColor:"neutral800"},Ae(I))),z&&e.createElement(ve.k,{justifyContent:"center",alignItems:"center",paddingTop:2,paddingBottom:2},e.createElement(W.a,{small:!0},Le)))))},ge=i=>e.createElement(G,{...i,creatable:!0});G.defaultProps={"aria-label":void 0,clearLabel:"clear",creatable:!1,createMessage:i=>`Create "${i}"`,disabled:!1,error:void 0,hasMoreItems:!1,hint:void 0,label:void 0,loading:!1,loadingMessage:"Loading content...",noOptionsMessage:()=>"No results found",onClear:void 0,onCreateOption:void 0,onInputChange:void 0,onLoadMore:void 0,placeholder:"Select or enter a value",value:void 0},ge.defaultProps=G.defaultProps,G.propTypes={"aria-label":n.string,children:n.oneOfType([n.arrayOf(n.node),n.node]),clearLabel:n.string,creatable:n.bool,createMessage:n.func,disabled:n.bool,error:n.string,hasMoreItems:n.bool,hint:n.oneOfType([n.string,n.node,n.arrayOf(n.node)]),label:n.string,labelAction:n.element,loading:n.bool,loadingMessage:n.string,noOptionsMessage:n.func,onChange:n.func.isRequired,onClear:n.func,onCreateOption:n.func,onInputChange:n.func,onLoadMore:n.func,placeholder:n.string,value:n.string},ge.propTypes={...G.propTypes,onCreateOption:n.func.isRequired}},90333:function(te,M,t){t.d(M,{O:function(){return x}});var e=t(32735),n=t(60216),L=t(49372),P=t(91225);const x=(0,e.forwardRef)(({isSelected:E,children:p,...ne},d)=>e.createElement(P.Zq,{hasRadius:!0,paddingLeft:4,paddingRight:4,paddingTop:2,paddingBottom:2,role:"option",background:"neutral0",isSelected:E,ref:d,...ne},e.createElement(L.Z,{textColor:E?"primary600":"neutral800",fontWeight:E?"bold":null},p)));x.defaultProps={isSelected:!1},x.propTypes={children:n.oneOfType([n.string,n.number]).isRequired,isSelected:n.bool},x.displayName="ComboboxOption"},91225:function(te,M,t){t.d(M,{II:function(){return ne},K7:function(){return E},Zq:function(){return d},d8:function(){return x},fv:function(){return p}});var e=t(83292),n=t(72850),L=t(87933),P=t(30350);const x=(0,e.default)(L.k)`
|
|
24
|
+
position: relative;
|
|
25
|
+
border: 1px solid ${({theme:h,hasError:k})=>k?h.colors.danger600:h.colors.neutral200};
|
|
26
|
+
padding-right: ${({theme:h})=>h.spaces[3]};
|
|
27
|
+
padding-left: ${({theme:h})=>h.spaces[3]};
|
|
28
|
+
border-radius: ${({theme:h})=>h.borderRadius};
|
|
29
|
+
background: ${({theme:h})=>h.colors.neutral0};
|
|
30
|
+
|
|
31
|
+
${({theme:h,$disabled:k})=>k?`
|
|
32
|
+
color: ${h.colors.neutral600};
|
|
33
|
+
background: ${h.colors.neutral150};
|
|
34
|
+
`:void 0}
|
|
35
|
+
|
|
36
|
+
${(0,P.k3)()}
|
|
37
|
+
`,E=e.default.div`
|
|
38
|
+
padding: 1px 2px;
|
|
39
|
+
grid-area: 1 / 1 / 2 / 3;
|
|
40
|
+
`,p=(0,e.default)(L.k)`
|
|
41
|
+
display: grid;
|
|
42
|
+
flex: 1 1 0%;
|
|
43
|
+
position: relative;
|
|
44
|
+
`,ne=e.default.input`
|
|
45
|
+
display: inline-grid;
|
|
46
|
+
grid-area: 1 / 1 / 2 / 3;
|
|
47
|
+
grid-template-columns: 0px min-content;
|
|
48
|
+
background: transparent;
|
|
49
|
+
min-height: ${40/16}rem;
|
|
50
|
+
border: none;
|
|
51
|
+
flex: 1;
|
|
52
|
+
font-size: ${14/16}rem;
|
|
53
|
+
color: ${({theme:h})=>h.colors.neutral800};
|
|
54
|
+
outline: none;
|
|
55
|
+
&:focus-visible {
|
|
56
|
+
outline: none;
|
|
57
|
+
box-shadow: none;
|
|
58
|
+
outline-offset: 0;
|
|
59
|
+
}
|
|
60
|
+
&[aria-disabled='true'] {
|
|
61
|
+
background: inherit;
|
|
62
|
+
color: inherit;
|
|
63
|
+
cursor: not-allowed;
|
|
64
|
+
}
|
|
65
|
+
`,d=(0,e.default)(n.x)`
|
|
66
|
+
width: 100%;
|
|
67
|
+
border: none;
|
|
68
|
+
text-align: left;
|
|
69
|
+
outline-offset: -3px;
|
|
70
|
+
${({isSelected:h,theme:k})=>h&&`background: ${k.colors.primary100};`}
|
|
71
|
+
|
|
72
|
+
&:hover {
|
|
73
|
+
background: ${({theme:h})=>h.colors.primary100};
|
|
74
|
+
}
|
|
75
|
+
`},27169:function(te,M,t){t.d(M,{Z:function(){return n}});var e=t(74512);function n(L){return(0,e.jsx)("svg",{width:"1em",height:"1em",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",...L,children:(0,e.jsx)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M12.057 18c.552 0 1 .451 1 .997v4.006a1 1 0 01-.941.995l-.059.002c-.552 0-1-.451-1-.997v-4.006a1 1 0 01.941-.995l.06-.002zm-3.06-.736l.055.03c.478.276.64.89.367 1.364l-2.002 3.468a1 1 0 01-1.31.394l-.055-.03a1.002 1.002 0 01-.368-1.363l2.003-3.469a1 1 0 011.31-.394zm7.42.394l2.002 3.468a1 1 0 01-.314 1.331l-.053.033a1.002 1.002 0 01-1.365-.363l-2.003-3.469a1 1 0 01.314-1.33l.054-.034a1.002 1.002 0 011.364.364zm-9.548-2.66l.033.054c.276.478.11 1.091-.364 1.364L3.07 18.42a1 1 0 01-1.331-.314l-.033-.053a1.001 1.001 0 01.364-1.365l3.468-2.003a1 1 0 011.33.314zm11.79-.313l3.468 2.002a1 1 0 01.393 1.31l-.03.055c-.276.478-.89.64-1.363.367l-3.469-2.003a1 1 0 01-.394-1.309l.03-.055c.276-.479.89-.64 1.364-.367zm4.344-3.628a1 1 0 01.995.941l.002.06c0 .551-.451 1-.997 1h-4.006a1 1 0 01-.995-.942L18 12.057c0-.552.451-1 .997-1h4.006zm-18 0a1 1 0 01.995.941l.002.06c0 .551-.451 1-.998 1H.998a1 1 0 01-.996-.942L0 12.057c0-.552.451-1 .998-1h4.004zm17.454-5.059l.033.054c.277.478.11 1.091-.363 1.365l-3.469 2.002a1 1 0 01-1.33-.314l-.034-.053a1.002 1.002 0 01.364-1.365l3.468-2.003a1 1 0 011.331.314zM3.07 5.684l3.468 2.003a1 1 0 01.394 1.31l-.03.055c-.276.478-.89.64-1.364.367L2.07 7.417a1 1 0 01-.394-1.31l.03-.055c.276-.479.89-.64 1.364-.368zm14.926-4.008l.056.03c.478.276.64.89.367 1.364l-2.003 3.468a1 1 0 01-1.309.394l-.055-.03a1.002 1.002 0 01-.367-1.364l2.002-3.468a1 1 0 011.31-.394zm-10.58.394L9.42 5.538a1 1 0 01-.314 1.33l-.053.034a1.002 1.002 0 01-1.365-.364L5.684 3.07a1 1 0 01.314-1.331l.054-.033a1.002 1.002 0 011.365.364zM12.058 0c.552 0 1 .451 1 .998v4.004a1 1 0 01-.941.996L12.057 6c-.552 0-1-.451-1-.998V.998a1 1 0 01.941-.996l.06-.002z",fill:"#212134"})})}}}]);
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";(self.webpackChunk_strapi_admin=self.webpackChunk_strapi_admin||[]).push([[4121],{74767:function(We,S,t){t.r(S),t.d(S,{default:function(){return ge}});var e=t(32735),s=t(88425),W=t(83983),B=t(5141),U=t(5636),F=t(96709),X=t(28356),j=t(99223),J=t(17e3),Q=t(9695),M=t(87933),Y=t(27677),A=t(50563),x=t(44426),q=t(94745),_=t(73269),ee=t(76330),$=t(29005),d=t(66735),te=t(3594),g=t(49372),H=t(41415),ne=t(3685),b=t(60216),P=t(83292),K=t(72850);const y=P.default.div`
|
|
2
|
+
background: ${({theme:a})=>a.colors.danger500};
|
|
3
|
+
border: none;
|
|
4
|
+
border-radius: 16px;
|
|
5
|
+
position: relative;
|
|
6
|
+
height: ${24/16}rem;
|
|
7
|
+
width: ${40/16}rem;
|
|
8
|
+
|
|
9
|
+
& span {
|
|
10
|
+
font-size: ${({visibleLabels:a})=>a?"1rem":0};
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
&:before {
|
|
14
|
+
content: '';
|
|
15
|
+
background: ${({theme:a})=>a.colors.neutral0};
|
|
16
|
+
width: 1rem;
|
|
17
|
+
height: 1rem;
|
|
18
|
+
border-radius: 50%;
|
|
19
|
+
position: absolute;
|
|
20
|
+
transition: all 0.5s;
|
|
21
|
+
left: ${({theme:a})=>a.spaces[1]};
|
|
22
|
+
top: ${({theme:a})=>a.spaces[1]};
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
@media (prefers-reduced-motion: reduce) {
|
|
26
|
+
&:before {
|
|
27
|
+
transition: none;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
`,ae=P.default.button`
|
|
31
|
+
background: transparent;
|
|
32
|
+
padding: 0;
|
|
33
|
+
border: none;
|
|
34
|
+
|
|
35
|
+
&[aria-checked='true'] ${y} {
|
|
36
|
+
background: ${({theme:a})=>a.colors.success500};
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
&[aria-checked='true'] ${y}:before {
|
|
40
|
+
transform: translateX(1rem);
|
|
41
|
+
}
|
|
42
|
+
`,T=e.forwardRef(({label:a,onChange:i,onLabel:o,offLabel:r,selected:h,visibleLabels:m,...u},l)=>e.createElement(ae,{ref:l,role:"switch","aria-checked":h,"aria-label":a,onClick:i,visibleLabels:m,type:"button",...u},e.createElement(M.k,null,e.createElement(y,null,e.createElement("span",null,o),e.createElement("span",null,r)),m&&e.createElement(K.x,{as:"span","aria-hidden":!0,paddingLeft:2,color:h?"success600":"danger600"},h?o:r))));T.defaultProps={onLabel:"On",offLabel:"Off",visibleLabels:!1},T.propTypes={label:b.string.isRequired,offLabel:b.string,onChange:b.func.isRequired,onLabel:b.string,selected:b.bool.isRequired,visibleLabels:b.bool},T.displayName="Switch";var le=t(27649),oe=t(94638),C=t(19406),se=t(68625),G=t(4038),ie=t(54725),re=t(97889),de=t(3040),ce=t.n(de);const ue={webhooks:[],webhooksToDelete:[],webhookToDelete:null,loadingWebhooks:!0};var Ee=(a,i)=>(0,re.default)(a,o=>{switch(i.type){case"GET_DATA_SUCCEEDED":{o.webhooks=i.data,o.loadingWebhooks=!1;break}case"TOGGLE_LOADING":{o.loadingWebhooks=!a.loadingWebhooks;break}case"SET_WEBHOOK_ENABLED":{ce()(o,["webhooks",...i.keys],i.value);break}case"SET_WEBHOOK_TO_DELETE":{o.webhookToDelete=i.id;break}case"SET_WEBHOOKS_TO_DELETE":{i.value?o.webhooksToDelete.push(i.id):o.webhooksToDelete=a.webhooksToDelete.filter(r=>r!==i.id);break}case"SET_ALL_WEBHOOKS_TO_DELETE":{a.webhooksToDelete.length===0?o.webhooksToDelete=a.webhooks.map(r=>r.id):o.webhooksToDelete=[];break}case"WEBHOOKS_DELETED":{o.webhooks=a.webhooks.filter(r=>!a.webhooksToDelete.includes(r.id)),o.webhooksToDelete=[];break}case"WEBHOOK_DELETED":{o.webhooks=a.webhooks.filter((r,h)=>h!==i.index),o.webhookToDelete=null;break}default:return o}}),he=t(98399),me=()=>{const{isLoading:a,allowedActions:{canCreate:i,canRead:o,canUpdate:r,canDelete:h}}=(0,s.useRBAC)(W.Z.settings.webhooks),m=(0,s.useNotification)(),u=(0,e.useRef)(!0),{formatMessage:l}=(0,U.useIntl)(),[be,v]=(0,e.useState)(!1),[{webhooks:L,webhooksToDelete:O,webhookToDelete:p,loadingWebhooks:w},E]=(0,e.useReducer)(Ee,ue),{notifyStatus:fe}=(0,oe.G)();(0,s.useFocusWhenNavigate)();const{push:Te}=(0,B.useHistory)(),{pathname:N}=(0,B.useLocation)(),D=L.length,f=O.length,I=n=>L.findIndex(c=>c.id===n);(0,e.useEffect)(()=>(u.current=!0,()=>{u.current=!1}),[]),(0,e.useEffect)(()=>{o&&ve()},[o]);const ve=async()=>{try{const{data:n}=await(0,s.request)("/admin/webhooks",{method:"GET"});u.current&&(E({type:"GET_DATA_SUCCEEDED",data:n}),fe("webhooks have been loaded"))}catch(n){he.log(n),u.current&&(n.code!==20&&m({type:"warning",message:{id:"notification.error"}}),E({type:"TOGGLE_LOADING"}))}},Le=()=>{v(n=>!n)},De=()=>{p?ke():ye()},ke=async()=>{try{await(0,s.request)(`/admin/webhooks/${p}`,{method:"DELETE"}),E({type:"WEBHOOK_DELETED",index:I(p)})}catch(n){n.code!==20&&m({type:"warning",message:{id:"notification.error"}})}v(!1)},ye=async()=>{const n={ids:O};try{await(0,s.request)("/admin/webhooks/batch-delete",{method:"POST",body:n}),u.current&&E({type:"WEBHOOKS_DELETED"})}catch(c){u.current&&c.code!==20&&m({type:"warning",message:{id:"notification.error"}})}v(!1)},R=n=>{v(!0),n!=="all"&&E({type:"SET_WEBHOOK_TO_DELETE",id:n})},Ce=async(n,c)=>{const V=I(c),we=L[V],Z=[V,"isEnabled"],z={...we,isEnabled:n};delete z.id;try{E({type:"SET_WEBHOOK_ENABLED",keys:Z,value:n}),await(0,s.request)(`/admin/webhooks/${c}`,{method:"PUT",body:z})}catch(Se){u.current&&(E({type:"SET_WEBHOOK_ENABLED",keys:Z,value:!n}),Se.code!==20&&m({type:"warning",message:{id:"notification.error"}}))}},Oe=()=>{E({type:"SET_ALL_WEBHOOKS_TO_DELETE"})},pe=(n,c)=>{E({type:"SET_WEBHOOKS_TO_DELETE",value:n,id:c})},k=n=>{Te(`${N}/${n}`)};return e.createElement(F.A,null,e.createElement(s.SettingsPageTitle,{name:"Webhooks"}),e.createElement(le.o,{"aria-busy":a||w},e.createElement(X.T,{title:l({id:"Settings.webhooks.title",defaultMessage:"Webhooks"}),subtitle:l({id:"Settings.webhooks.list.description",defaultMessage:"Get POST changes notifications"}),primaryAction:i&&!w&&e.createElement(s.LinkButton,{startIcon:e.createElement(C.default,null),variant:"default",to:`${N}/create`,size:"S"},l({id:"Settings.webhooks.list.button.add",defaultMessage:"Create new webhook"}))}),f>0&&h&&e.createElement(j.Z,{startActions:e.createElement(e.Fragment,null,e.createElement(g.Z,{variant:"epsilon",textColor:"neutral600"},l({id:"Settings.webhooks.to.delete",defaultMessage:"{webhooksToDeleteLength, plural, one {# asset} other {# assets}} selected"},{webhooksToDeleteLength:f})),e.createElement(H.z,{onClick:()=>R("all"),startIcon:e.createElement(G.default,null),size:"L",variant:"danger-light"},l({id:"global.delete",defaultMessage:"Delete"})))}),e.createElement(J.D,null,a||w?e.createElement(K.x,{background:"neutral0",padding:6,shadow:"filterShadow",hasRadius:!0},e.createElement(s.LoadingIndicatorPage,null)):e.createElement(e.Fragment,null,D>0?e.createElement(q.i,{colCount:5,rowCount:D+1,footer:e.createElement(_.c,{onClick:()=>i?k("create"):{},icon:e.createElement(C.default,null)},l({id:"Settings.webhooks.list.button.add",defaultMessage:"Create new webhook"}))},e.createElement(ee.h,null,e.createElement($.Tr,null,e.createElement(d.Th,null,e.createElement(x.C,{"aria-label":l({id:"global.select-all-entries",defaultMessage:"Select all entries"}),indeterminate:f>0&&f<D,value:f===D,onValueChange:Oe})),e.createElement(d.Th,{width:"20%"},e.createElement(g.Z,{variant:"sigma",textColor:"neutral600"},l({id:"global.name",defaultMessage:"Name"}))),e.createElement(d.Th,{width:"60%"},e.createElement(g.Z,{variant:"sigma",textColor:"neutral600"},l({id:"Settings.webhooks.form.url",defaultMessage:"URL"}))),e.createElement(d.Th,{width:"20%"},e.createElement(g.Z,{variant:"sigma",textColor:"neutral600"},l({id:"Settings.webhooks.list.th.status",defaultMessage:"Status"}))),e.createElement(d.Th,null,e.createElement(ne.T,null,l({id:"Settings.webhooks.list.th.actions",defaultMessage:"Actions"}))))),e.createElement(te.p,null,L.map(n=>e.createElement($.Tr,{key:n.id,...(0,s.onRowClick)({fn:()=>k(n.id),condition:r})},e.createElement(d.Td,{...s.stopPropagation},e.createElement(x.C,{"aria-label":`${l({id:"global.select",defaultMessage:"Select"})} ${n.name}`,value:O?.includes(n.id),onValueChange:c=>pe(c,n.id),id:"select",name:"select"})),e.createElement(d.Td,null,e.createElement(g.Z,{fontWeight:"semiBold",textColor:"neutral800"},n.name)),e.createElement(d.Td,null,e.createElement(g.Z,{textColor:"neutral800"},n.url)),e.createElement(d.Td,null,e.createElement(M.k,{...s.stopPropagation},e.createElement(T,{onLabel:l({id:"global.enabled",defaultMessage:"Enabled"}),offLabel:l({id:"global.disabled",defaultMessage:"Disabled"}),label:`${n.name} ${l({id:"Settings.webhooks.list.th.status",defaultMessage:"Status"})}`,selected:n.isEnabled,onChange:()=>Ce(!n.isEnabled,n.id),visibleLabels:!0}))),e.createElement(d.Td,null,e.createElement(Y.K,{horizontal:!0,spacing:1,...s.stopPropagation},r&&e.createElement(A.h,{onClick:()=>{k(n.id)},label:l({id:"Settings.webhooks.events.update",defaultMessage:"Update"}),icon:e.createElement(se.Z,null),noBorder:!0}),h&&e.createElement(A.h,{onClick:()=>R(n.id),label:l({id:"global.delete",defaultMessage:"Delete"}),icon:e.createElement(G.default,null),noBorder:!0,id:`delete-${n.id}`}))))))):e.createElement(Q.x,{icon:e.createElement(ie.default,{width:"160px"}),content:l({id:"Settings.webhooks.list.empty.description",defaultMessage:"No webhooks found"}),action:e.createElement(H.z,{variant:"secondary",startIcon:e.createElement(C.default,null),onClick:()=>i?k("create"):{}},l({id:"Settings.webhooks.list.button.add",defaultMessage:"Create new webhook"}))})))),e.createElement(s.ConfirmDialog,{isOpen:be,onToggleDialog:Le,onConfirm:De}))},ge=()=>e.createElement(s.CheckPagePermissions,{permissions:W.Z.settings.webhooks.main},e.createElement(me,null))}}]);
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import adminPermissions from '../../../../../admin/src/permissions';
|
|
2
|
+
|
|
3
|
+
const auditLogsRoutes = strapi.features.isEnabled(strapi.features.AUDIT_LOGS)
|
|
4
|
+
? [
|
|
5
|
+
{
|
|
6
|
+
intlLabel: { id: 'global.auditLogs', defaultMessage: 'Audit Logs' },
|
|
7
|
+
to: '/settings/audit-logs?pageSize=50&page=1&sort=date:DESC',
|
|
8
|
+
id: 'auditLogs',
|
|
9
|
+
isDisplayed: false,
|
|
10
|
+
permissions: adminPermissions.settings.auditLogs.main,
|
|
11
|
+
},
|
|
12
|
+
]
|
|
13
|
+
: [];
|
|
14
|
+
|
|
15
|
+
const customAdminLinks = [...auditLogsRoutes];
|
|
16
|
+
|
|
17
|
+
export default customAdminLinks;
|
package/{admin/src → ee/admin}/pages/SettingsPage/pages/AuditLogs/ListView/Modal/ActionBody.js
RENAMED
|
File without changes
|
package/{admin/src → ee/admin}/pages/SettingsPage/pages/AuditLogs/ListView/Modal/ActionItem.js
RENAMED
|
File without changes
|
|
@@ -14,6 +14,10 @@ const Modal = ({ handleClose, logId }) => {
|
|
|
14
14
|
const fetchAuditLog = async (id) => {
|
|
15
15
|
const { data } = await get(`/admin/audit-logs/${id}`);
|
|
16
16
|
|
|
17
|
+
if (!data) {
|
|
18
|
+
throw new Error('Audit log not found');
|
|
19
|
+
}
|
|
20
|
+
|
|
17
21
|
return data;
|
|
18
22
|
};
|
|
19
23
|
|
|
@@ -46,7 +50,7 @@ const Modal = ({ handleClose, logId }) => {
|
|
|
46
50
|
|
|
47
51
|
Modal.propTypes = {
|
|
48
52
|
handleClose: PropTypes.func.isRequired,
|
|
49
|
-
logId: PropTypes.
|
|
53
|
+
logId: PropTypes.string.isRequired,
|
|
50
54
|
};
|
|
51
55
|
|
|
52
56
|
export default Modal;
|
package/{admin/src → ee/admin}/pages/SettingsPage/pages/AuditLogs/ListView/PaginationFooter/index.js
RENAMED
|
File without changes
|
package/{admin/src → ee/admin}/pages/SettingsPage/pages/AuditLogs/ListView/TableRows/index.js
RENAMED
|
File without changes
|
|
File without changes
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import React
|
|
1
|
+
import React from 'react';
|
|
2
2
|
import { useIntl } from 'react-intl';
|
|
3
3
|
import {
|
|
4
4
|
SettingsPageTitle,
|
|
@@ -7,12 +7,13 @@ import {
|
|
|
7
7
|
useNotification,
|
|
8
8
|
useFocusWhenNavigate,
|
|
9
9
|
useFetchClient,
|
|
10
|
+
useQueryParams,
|
|
10
11
|
} from '@strapi/helper-plugin';
|
|
11
12
|
import { HeaderLayout, ContentLayout } from '@strapi/design-system/Layout';
|
|
12
13
|
import { Main } from '@strapi/design-system/Main';
|
|
13
14
|
import { useLocation } from 'react-router-dom';
|
|
14
15
|
import { useQuery } from 'react-query';
|
|
15
|
-
import adminPermissions from '
|
|
16
|
+
import adminPermissions from '../../../../../../../admin/src/permissions';
|
|
16
17
|
import TableRows from './TableRows';
|
|
17
18
|
import tableHeaders from './utils/tableHeaders';
|
|
18
19
|
import PaginationFooter from './PaginationFooter';
|
|
@@ -26,6 +27,7 @@ const ListView = () => {
|
|
|
26
27
|
} = useRBAC(adminPermissions.settings.auditLogs);
|
|
27
28
|
const { get } = useFetchClient();
|
|
28
29
|
const { search } = useLocation();
|
|
30
|
+
const [{ query }, setQuery] = useQueryParams();
|
|
29
31
|
|
|
30
32
|
useFocusWhenNavigate();
|
|
31
33
|
|
|
@@ -40,7 +42,7 @@ const ListView = () => {
|
|
|
40
42
|
enabled: canRead,
|
|
41
43
|
keepPreviousData: true,
|
|
42
44
|
retry: false,
|
|
43
|
-
staleTime: 1000 *
|
|
45
|
+
staleTime: 1000 * 10,
|
|
44
46
|
onError() {
|
|
45
47
|
toggleNotification({
|
|
46
48
|
type: 'warning',
|
|
@@ -62,8 +64,6 @@ const ListView = () => {
|
|
|
62
64
|
},
|
|
63
65
|
}));
|
|
64
66
|
|
|
65
|
-
const [modalLogId, setModalLogId] = useState(null);
|
|
66
|
-
|
|
67
67
|
return (
|
|
68
68
|
<Main aria-busy={isLoading}>
|
|
69
69
|
<SettingsPageTitle name={title} />
|
|
@@ -85,12 +85,12 @@ const ListView = () => {
|
|
|
85
85
|
<TableRows
|
|
86
86
|
headers={headers}
|
|
87
87
|
rows={data?.results || []}
|
|
88
|
-
onOpenModal={(id) =>
|
|
88
|
+
onOpenModal={(id) => setQuery({ id })}
|
|
89
89
|
/>
|
|
90
90
|
</DynamicTable>
|
|
91
91
|
<PaginationFooter pagination={data?.pagination} />
|
|
92
92
|
</ContentLayout>
|
|
93
|
-
{
|
|
93
|
+
{query?.id && <Modal handleClose={() => setQuery({ id: null }, 'remove')} logId={query.id} />}
|
|
94
94
|
</Main>
|
|
95
95
|
);
|
|
96
96
|
};
|
|
@@ -7,6 +7,9 @@ const actionTypes = {
|
|
|
7
7
|
'media.create': 'Create media',
|
|
8
8
|
'media.update': 'Update media',
|
|
9
9
|
'media.delete': 'Delete media',
|
|
10
|
+
'media-folder.create': 'Create media folder',
|
|
11
|
+
'media-folder.update': 'Update media folder',
|
|
12
|
+
'media-folder.delete': 'Delete media folder',
|
|
10
13
|
'user.create': 'Create user',
|
|
11
14
|
'user.update': 'Update user',
|
|
12
15
|
'user.delete': 'Delete user',
|
package/{admin/src → ee/admin}/pages/SettingsPage/pages/AuditLogs/ListView/utils/tableHeaders.js
RENAMED
|
File without changes
|
package/{admin/src → ee/admin}/pages/SettingsPage/pages/AuditLogs/ProtectedListPage/index.js
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { CheckPagePermissions } from '@strapi/helper-plugin';
|
|
3
|
-
import adminPermissions from '
|
|
3
|
+
import adminPermissions from '../../../../../../../admin/src/permissions';
|
|
4
4
|
import ListView from '../ListView';
|
|
5
5
|
|
|
6
6
|
const ProtectedListPage = () => (
|
|
@@ -17,9 +17,9 @@ import { Select, Option } from '@strapi/design-system/Select';
|
|
|
17
17
|
import { Grid, GridItem } from '@strapi/design-system/Grid';
|
|
18
18
|
import { useIntl } from 'react-intl';
|
|
19
19
|
import isEqual from 'lodash/isEqual';
|
|
20
|
-
import { getRequestUrl } from '
|
|
21
|
-
import { useRolesList, useSettingsForm } from '
|
|
22
|
-
import adminPermissions from '
|
|
20
|
+
import { getRequestUrl } from '../../../../../../admin/src/utils';
|
|
21
|
+
import { useRolesList, useSettingsForm } from '../../../../../../admin/src/hooks';
|
|
22
|
+
import adminPermissions from '../../../../../../admin/src/permissions';
|
|
23
23
|
import schema from './utils/schema';
|
|
24
24
|
|
|
25
25
|
const ssoPermissions = {
|
|
File without changes
|
|
@@ -1,19 +1,31 @@
|
|
|
1
|
-
const
|
|
2
|
-
? [
|
|
3
|
-
{
|
|
4
|
-
async Component() {
|
|
5
|
-
const component = await import(
|
|
6
|
-
/* webpackChunkName: "sso-settings-page" */ '../SingleSignOn'
|
|
7
|
-
);
|
|
1
|
+
const routes = [];
|
|
8
2
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
: [];
|
|
3
|
+
if (strapi.features.isEnabled(strapi.features.SSO)) {
|
|
4
|
+
routes.push({
|
|
5
|
+
async Component() {
|
|
6
|
+
const component = await import(
|
|
7
|
+
/* webpackChunkName: "sso-settings-page" */ '../pages/SingleSignOn'
|
|
8
|
+
);
|
|
16
9
|
|
|
17
|
-
|
|
10
|
+
return component;
|
|
11
|
+
},
|
|
12
|
+
to: '/settings/single-sign-on',
|
|
13
|
+
exact: true,
|
|
14
|
+
});
|
|
15
|
+
}
|
|
18
16
|
|
|
19
|
-
|
|
17
|
+
if (strapi.features.isEnabled(strapi.features.AUDIT_LOGS)) {
|
|
18
|
+
routes.push({
|
|
19
|
+
async Component() {
|
|
20
|
+
const component = await import(
|
|
21
|
+
/* webpackChunkName: "audit-logs-settings-page" */ '../pages/AuditLogs/ProtectedListPage'
|
|
22
|
+
);
|
|
23
|
+
|
|
24
|
+
return component;
|
|
25
|
+
},
|
|
26
|
+
to: '/settings/audit-logs',
|
|
27
|
+
exact: true,
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export default routes;
|
package/ee/server/bootstrap.js
CHANGED
|
@@ -1,17 +1,13 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
// eslint-disable-next-line node/no-extraneous-require
|
|
4
3
|
const { features } = require('@strapi/strapi/lib/utils/ee');
|
|
5
|
-
const featuresRoutes = require('./features-routes');
|
|
6
4
|
|
|
7
|
-
const
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
}
|
|
5
|
+
const enableFeatureMiddleware = (featureName) => (ctx, next) => {
|
|
6
|
+
if (features.isEnabled(featureName)) {
|
|
7
|
+
return next();
|
|
8
|
+
}
|
|
12
9
|
|
|
13
|
-
|
|
14
|
-
});
|
|
10
|
+
ctx.status = 404;
|
|
15
11
|
};
|
|
16
12
|
|
|
17
13
|
module.exports = [
|
|
@@ -63,5 +59,93 @@ module.exports = [
|
|
|
63
59
|
],
|
|
64
60
|
},
|
|
65
61
|
},
|
|
66
|
-
|
|
62
|
+
|
|
63
|
+
// SSO
|
|
64
|
+
{
|
|
65
|
+
method: 'GET',
|
|
66
|
+
path: '/providers',
|
|
67
|
+
handler: 'authentication.getProviders',
|
|
68
|
+
config: {
|
|
69
|
+
middlewares: [enableFeatureMiddleware('sso')],
|
|
70
|
+
auth: false,
|
|
71
|
+
},
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
method: 'GET',
|
|
75
|
+
path: '/connect/:provider',
|
|
76
|
+
handler: 'authentication.providerLogin',
|
|
77
|
+
config: {
|
|
78
|
+
middlewares: [enableFeatureMiddleware('sso')],
|
|
79
|
+
auth: false,
|
|
80
|
+
},
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
method: 'POST',
|
|
84
|
+
path: '/connect/:provider',
|
|
85
|
+
handler: 'authentication.providerLogin',
|
|
86
|
+
config: {
|
|
87
|
+
middlewares: [enableFeatureMiddleware('sso')],
|
|
88
|
+
auth: false,
|
|
89
|
+
},
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
method: 'GET',
|
|
93
|
+
path: '/providers/options',
|
|
94
|
+
handler: 'authentication.getProviderLoginOptions',
|
|
95
|
+
config: {
|
|
96
|
+
middlewares: [enableFeatureMiddleware('sso')],
|
|
97
|
+
policies: [
|
|
98
|
+
'admin::isAuthenticatedAdmin',
|
|
99
|
+
{ name: 'admin::hasPermissions', config: { actions: ['admin::provider-login.read'] } },
|
|
100
|
+
],
|
|
101
|
+
},
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
method: 'PUT',
|
|
105
|
+
path: '/providers/options',
|
|
106
|
+
handler: 'authentication.updateProviderLoginOptions',
|
|
107
|
+
config: {
|
|
108
|
+
middlewares: [enableFeatureMiddleware('sso')],
|
|
109
|
+
policies: [
|
|
110
|
+
'admin::isAuthenticatedAdmin',
|
|
111
|
+
{ name: 'admin::hasPermissions', config: { actions: ['admin::provider-login.update'] } },
|
|
112
|
+
],
|
|
113
|
+
},
|
|
114
|
+
},
|
|
115
|
+
|
|
116
|
+
// Audit logs
|
|
117
|
+
{
|
|
118
|
+
method: 'GET',
|
|
119
|
+
path: '/audit-logs',
|
|
120
|
+
handler: 'auditLogs.findMany',
|
|
121
|
+
config: {
|
|
122
|
+
middlewares: [enableFeatureMiddleware('audit-logs')],
|
|
123
|
+
policies: [
|
|
124
|
+
'admin::isAuthenticatedAdmin',
|
|
125
|
+
{
|
|
126
|
+
name: 'admin::hasPermissions',
|
|
127
|
+
config: {
|
|
128
|
+
actions: ['admin::audit-logs.read'],
|
|
129
|
+
},
|
|
130
|
+
},
|
|
131
|
+
],
|
|
132
|
+
},
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
method: 'GET',
|
|
136
|
+
path: '/audit-logs/:id',
|
|
137
|
+
handler: 'auditLogs.findOne',
|
|
138
|
+
config: {
|
|
139
|
+
middlewares: [enableFeatureMiddleware('audit-logs')],
|
|
140
|
+
policies: [
|
|
141
|
+
'admin::isAuthenticatedAdmin',
|
|
142
|
+
{
|
|
143
|
+
name: 'admin::hasPermissions',
|
|
144
|
+
config: {
|
|
145
|
+
actions: ['admin::audit-logs.read'],
|
|
146
|
+
},
|
|
147
|
+
},
|
|
148
|
+
],
|
|
149
|
+
},
|
|
150
|
+
},
|
|
67
151
|
];
|
|
@@ -2,6 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
const localProvider = require('@strapi/provider-audit-logs-local');
|
|
4
4
|
const { scheduleJob } = require('node-schedule');
|
|
5
|
+
const { features } = require('@strapi/strapi/lib/utils/ee');
|
|
6
|
+
|
|
7
|
+
const DEFAULT_RETENTION_DAYS = 90;
|
|
5
8
|
|
|
6
9
|
const defaultEvents = [
|
|
7
10
|
'entry.create',
|
|
@@ -12,6 +15,9 @@ const defaultEvents = [
|
|
|
12
15
|
'media.create',
|
|
13
16
|
'media.update',
|
|
14
17
|
'media.delete',
|
|
18
|
+
'media-folder.create',
|
|
19
|
+
'media-folder.update',
|
|
20
|
+
'media-folder.delete',
|
|
15
21
|
'user.create',
|
|
16
22
|
'user.update',
|
|
17
23
|
'user.delete',
|
|
@@ -59,6 +65,12 @@ const createAuditLogsService = (strapi) => {
|
|
|
59
65
|
return null;
|
|
60
66
|
}
|
|
61
67
|
|
|
68
|
+
// Ignore some events based on payload
|
|
69
|
+
const ignoredUids = ['plugin::upload.file', 'plugin::upload.folder'];
|
|
70
|
+
if (ignoredUids.includes(args[0]?.uid)) {
|
|
71
|
+
return null;
|
|
72
|
+
}
|
|
73
|
+
|
|
62
74
|
return {
|
|
63
75
|
action: name,
|
|
64
76
|
date: new Date().toISOString(),
|
|
@@ -77,9 +89,15 @@ const createAuditLogsService = (strapi) => {
|
|
|
77
89
|
|
|
78
90
|
return {
|
|
79
91
|
async register() {
|
|
92
|
+
const retentionDays =
|
|
93
|
+
features.get('audit-logs')?.options.retentionDays ?? DEFAULT_RETENTION_DAYS;
|
|
80
94
|
this._provider = await localProvider.register({ strapi });
|
|
81
95
|
this._eventHubUnsubscribe = strapi.eventHub.subscribe(handleEvent.bind(this));
|
|
82
|
-
this._deleteExpiredJob = scheduleJob('0 0 * * *',
|
|
96
|
+
this._deleteExpiredJob = scheduleJob('0 0 * * *', () => {
|
|
97
|
+
const expirationDate = new Date(Date.now() - retentionDays * 24 * 60 * 60 * 1000);
|
|
98
|
+
this._provider.deleteExpiredEvents(expirationDate);
|
|
99
|
+
});
|
|
100
|
+
|
|
83
101
|
return this;
|
|
84
102
|
},
|
|
85
103
|
|
|
@@ -1,13 +1,25 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
const ee = require('@strapi/strapi/ee');
|
|
3
4
|
const { authEventsMapper } = require('../../../../server/services/passport');
|
|
4
5
|
const createProviderRegistry = require('./provider-registry');
|
|
5
6
|
|
|
6
7
|
const providerRegistry = createProviderRegistry();
|
|
8
|
+
const errorMessage = 'SSO is disabled. Its functionnalities cannot be accessed.';
|
|
7
9
|
|
|
8
|
-
const getStrategyCallbackURL = (providerName) =>
|
|
10
|
+
const getStrategyCallbackURL = (providerName) => {
|
|
11
|
+
if (!ee.features.isEnabled('sso')) {
|
|
12
|
+
throw new Error(errorMessage);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
return `/admin/connect/${providerName}`;
|
|
16
|
+
};
|
|
9
17
|
|
|
10
18
|
const syncProviderRegistryWithConfig = () => {
|
|
19
|
+
if (!ee.features.isEnabled('sso')) {
|
|
20
|
+
throw new Error(errorMessage);
|
|
21
|
+
}
|
|
22
|
+
|
|
11
23
|
const { providers = [] } = strapi.config.get('admin.auth', {});
|
|
12
24
|
|
|
13
25
|
providerRegistry.registerMany(providers);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@strapi/admin",
|
|
3
|
-
"version": "4.6.0
|
|
3
|
+
"version": "4.6.0",
|
|
4
4
|
"description": "Strapi Admin",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -45,21 +45,16 @@
|
|
|
45
45
|
"@babel/runtime": "7.18.9",
|
|
46
46
|
"@casl/ability": "^5.4.3",
|
|
47
47
|
"@fingerprintjs/fingerprintjs": "3.3.6",
|
|
48
|
-
"@fortawesome/fontawesome-free": "^5.15.3",
|
|
49
|
-
"@fortawesome/fontawesome-svg-core": "6.2.0",
|
|
50
|
-
"@fortawesome/free-brands-svg-icons": "^5.15.3",
|
|
51
|
-
"@fortawesome/free-solid-svg-icons": "^5.15.3",
|
|
52
|
-
"@fortawesome/react-fontawesome": "^0.2.0",
|
|
53
48
|
"@pmmmwh/react-refresh-webpack-plugin": "0.5.10",
|
|
54
|
-
"@strapi/babel-plugin-switch-ee-ce": "4.6.0
|
|
55
|
-
"@strapi/data-transfer": "4.6.0
|
|
56
|
-
"@strapi/design-system": "
|
|
57
|
-
"@strapi/helper-plugin": "4.6.0
|
|
58
|
-
"@strapi/icons": "1.
|
|
59
|
-
"@strapi/permissions": "4.6.0
|
|
60
|
-
"@strapi/provider-audit-logs-local": "4.6.0
|
|
61
|
-
"@strapi/typescript-utils": "4.6.0
|
|
62
|
-
"@strapi/utils": "4.6.0
|
|
49
|
+
"@strapi/babel-plugin-switch-ee-ce": "4.6.0",
|
|
50
|
+
"@strapi/data-transfer": "4.6.0",
|
|
51
|
+
"@strapi/design-system": "1.6.1",
|
|
52
|
+
"@strapi/helper-plugin": "4.6.0",
|
|
53
|
+
"@strapi/icons": "1.6.1",
|
|
54
|
+
"@strapi/permissions": "4.6.0",
|
|
55
|
+
"@strapi/provider-audit-logs-local": "4.6.0",
|
|
56
|
+
"@strapi/typescript-utils": "4.6.0",
|
|
57
|
+
"@strapi/utils": "4.6.0",
|
|
63
58
|
"axios": "1.2.2",
|
|
64
59
|
"babel-loader": "8.2.5",
|
|
65
60
|
"babel-plugin-styled-components": "2.0.2",
|
|
@@ -170,5 +165,5 @@
|
|
|
170
165
|
}
|
|
171
166
|
}
|
|
172
167
|
},
|
|
173
|
-
"gitHead": "
|
|
168
|
+
"gitHead": "a9e55435c489f3379d88565bf3f729deb29bfb45"
|
|
174
169
|
}
|