modoboa 2.4.9__py3-none-any.whl → 2.4.10__py3-none-any.whl
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.
- modoboa/admin/api/v1/serializers.py +7 -1
- modoboa/admin/api/v2/serializers.py +4 -2
- modoboa/core/api/v2/serializers.py +34 -15
- modoboa/core/app_settings.py +1 -1
- modoboa/core/management/commands/load_initial_data.py +7 -15
- modoboa/core/migrations/0025_rename_user_email_is_active_core_user_email_c0c03f_idx.py +5 -5
- modoboa/frontend_dist/assets/{AccountAliasForm-DO4IpT1M.js → AccountAliasForm-DVXatAhB.js} +1 -1
- modoboa/frontend_dist/assets/{AccountEditView-BLA0CnKd.js → AccountEditView-DmvQjxpx.js} +1 -1
- modoboa/frontend_dist/assets/AccountLayout-OGtZvlHR.js +1 -0
- modoboa/frontend_dist/assets/{AccountPasswordSubForm-D9xU4Or7.js → AccountPasswordSubForm-g3IEGrgM.js} +1 -1
- modoboa/frontend_dist/assets/{AccountView-DegeD2uG.js → AccountView-DsxYqr3k.js} +1 -1
- modoboa/frontend_dist/assets/{AddressBook-CJM-ajGg.js → AddressBook-3RoKiKon.js} +1 -1
- modoboa/frontend_dist/assets/{AdminLayout-CTbzqJSq.js → AdminLayout-CWfn8zaQ.js} +1 -1
- modoboa/frontend_dist/assets/{AlarmsView-CpIExehE.js → AlarmsView-D3Mh8ntf.js} +1 -1
- modoboa/frontend_dist/assets/{AliasEditView-Bu0rnLCQ.js → AliasEditView-C15eUZ11.js} +1 -1
- modoboa/frontend_dist/assets/{AliasRecipientForm-CGuaOz6K.js → AliasRecipientForm-DVZXWaUX.js} +1 -1
- modoboa/frontend_dist/assets/{AliasView-Cdwd7AvE.js → AliasView-Cyvc5vMb.js} +1 -1
- modoboa/frontend_dist/assets/{AuditTrailView-Dn1B2S23.js → AuditTrailView-LI2XuLLn.js} +1 -1
- modoboa/frontend_dist/assets/{CalendarView-CV-DAWtd.js → CalendarView-BpOlPh3f.js} +1 -1
- modoboa/frontend_dist/assets/{ChoiceField-BS45Bjds.js → ChoiceField-7eU7c_rI.js} +1 -1
- modoboa/frontend_dist/assets/{ComposeEmailForm-22JKKl9M.js → ComposeEmailForm-CNfI7ept.js} +1 -1
- modoboa/frontend_dist/assets/ComposeEmailView-B866Xsrc.js +1 -0
- modoboa/frontend_dist/assets/{ConfirmDialog-BLu1kBWp.js → ConfirmDialog-BvqxQsD1.js} +1 -1
- modoboa/frontend_dist/assets/ConnectedLayout-BQ3ug6Jh.js +1 -0
- modoboa/frontend_dist/assets/{ConnectedLayout-AhwwAZvE.css → ConnectedLayout-BaJZ3BeR.css} +1 -1
- modoboa/frontend_dist/assets/CreationForm-C9Kh05ax.js +1 -0
- modoboa/frontend_dist/assets/CreationForm-HaiQhqwK.css +1 -0
- modoboa/frontend_dist/assets/{DashboardView-CubvMqxt.js → DashboardView-Cw-gIcuB.js} +1 -1
- modoboa/frontend_dist/assets/{DomainAdminList-B0z8fRmf.js → DomainAdminList-CsWUNKVk.js} +1 -1
- modoboa/frontend_dist/assets/DomainEditView-DocxeOeW.js +1 -0
- modoboa/frontend_dist/assets/DomainTransportForm-DPnPGBOp.js +1 -0
- modoboa/frontend_dist/assets/{DomainView-DCfSLvj-.css → DomainView-BDKoBFYr.css} +1 -1
- modoboa/frontend_dist/assets/DomainView-Djc_0PsF.js +5 -0
- modoboa/frontend_dist/assets/DomainsView-B-Lxru7P.js +1 -0
- modoboa/frontend_dist/assets/{DomainsView-BUgJLN9o.css → DomainsView-DasJ0NdZ.css} +1 -1
- modoboa/frontend_dist/assets/{EmailField-phdi2rhQ.js → EmailField-BEKxuYni.js} +1 -1
- modoboa/frontend_dist/assets/{EmailView-B8eqs4jh.js → EmailView-BsR1Wes5.js} +1 -1
- modoboa/frontend_dist/assets/EmptyLayout-BzPFOeLU.js +1 -0
- modoboa/frontend_dist/assets/{FiltersView-Dq_lXOZQ.js → FiltersView-5rmpC5cC.js} +1 -1
- modoboa/frontend_dist/assets/ForwardEmailView-D7MbetcT.js +1 -0
- modoboa/frontend_dist/assets/{HtmlEditor-KH0pmxrK.js → HtmlEditor-uM4AtIGi.js} +1 -1
- modoboa/frontend_dist/assets/IdentitiesView-BqjD9Lue.js +1 -0
- modoboa/frontend_dist/assets/IdentitiesView-jmuItyMZ.css +1 -0
- modoboa/frontend_dist/assets/{InformationView-DlwtlpvG.js → InformationView-CghcvPn2.js} +1 -1
- modoboa/frontend_dist/assets/{LoadingData-BYDZn1pb.js → LoadingData-CVD2Aen8.js} +1 -1
- modoboa/frontend_dist/assets/{LoginCallbackView-xSv3LV4_.js → LoginCallbackView-sWzBke1g.js} +1 -1
- modoboa/frontend_dist/assets/{LoginView-R5FtOIzW.js → LoginView-wmN73W0f.js} +1 -1
- modoboa/frontend_dist/assets/{MailboxView-esEw0ueS.js → MailboxView-T_p-_ZtJ.js} +1 -1
- modoboa/frontend_dist/assets/{MenuItems-Bck8ixGf.js → MenuItems-kHCMzR5E.js} +1 -1
- modoboa/frontend_dist/assets/{MessagesView-Dyg8Y4bi.js → MessagesView-Cerv3xsy.js} +1 -1
- modoboa/frontend_dist/assets/{MigrationsView-BHTt1qeH.js → MigrationsView-7kjqPyYU.js} +1 -1
- modoboa/frontend_dist/assets/Modoboa_RVB-BLEU-SANS-pKrnjsR_.png +0 -0
- modoboa/frontend_dist/assets/{ParametersForm-Bx5J7UU0.js → ParametersForm-BCeQljir.js} +1 -1
- modoboa/frontend_dist/assets/ParametersView-DspBxVMV.js +1 -0
- modoboa/frontend_dist/assets/ParametersView-Dy0H5ep1.js +1 -0
- modoboa/frontend_dist/assets/{ProviderEditView-d2fBym_r.js → ProviderEditView-DDLMOylC.js} +1 -1
- modoboa/frontend_dist/assets/{ProviderGeneralForm-C9jkYxB7.js → ProviderGeneralForm-BwOSKNHK.js} +1 -1
- modoboa/frontend_dist/assets/{ProvidersView-CjKsqSYV.js → ProvidersView-C99UD0WB.js} +1 -1
- modoboa/frontend_dist/assets/ReplyEmailView-DAPBHldd.js +1 -0
- modoboa/frontend_dist/assets/{ResourcesForm-RZNnt_x1.js → ResourcesForm-D87PHeH0.js} +1 -1
- modoboa/frontend_dist/assets/{SettingsView-TStQqZWd.js → SettingsView-OxDo9wNd.js} +1 -1
- modoboa/frontend_dist/assets/{StatisticsView-CABa0tgU.js → StatisticsView-CM__Eqku.js} +1 -1
- modoboa/frontend_dist/assets/{TimeSerieChart-BjM9PGIT.js → TimeSerieChart-C6j0uYR_.js} +1 -1
- modoboa/frontend_dist/assets/UserLayout-CckCGnPS.js +1 -0
- modoboa/frontend_dist/assets/{VAlert-DSMD0lqo.js → VAlert-B7mzOJIO.js} +1 -1
- modoboa/frontend_dist/assets/{VApp-D2FuKvLN.js → VApp-BKxnjOoi.js} +1 -1
- modoboa/frontend_dist/assets/{VAutocomplete-CQ5LL_Nk.js → VAutocomplete-Cc4_tcl1.js} +1 -1
- modoboa/frontend_dist/assets/{VAvatar-DbAmPjyA.js → VAvatar-BAgTUIvX.js} +1 -1
- modoboa/frontend_dist/assets/{VCard-BGXTuaE-.js → VCard-DFWiFORP.js} +1 -1
- modoboa/frontend_dist/assets/{VCheckbox-BM1QzY5m.js → VCheckbox-CKsH_vq3.js} +1 -1
- modoboa/frontend_dist/assets/{VCheckboxBtn-DdHQE-gt.js → VCheckboxBtn-j7di4leN.js} +1 -1
- modoboa/frontend_dist/assets/{VChip-Bm7znPZ6.js → VChip-nZ0uhY7t.js} +1 -1
- modoboa/frontend_dist/assets/{VColorPicker-CYCnVu_Z.js → VColorPicker-Os2aeP6J.js} +1 -1
- modoboa/frontend_dist/assets/{VContainer-B8HjqhNU.js → VContainer-Btam4lk2.js} +1 -1
- modoboa/frontend_dist/assets/{VDataTable-Etpc99CI.js → VDataTable-D_0_xJTl.js} +1 -1
- modoboa/frontend_dist/assets/{VDataTableServer-BNNG6dBx.js → VDataTableServer-BWTt4Mzi.js} +1 -1
- modoboa/frontend_dist/assets/{VDataTableVirtual-D9Km3t6e.js → VDataTableVirtual-BwVmkt4u.js} +1 -1
- modoboa/frontend_dist/assets/{VDialog-0NvxFg1X.js → VDialog-CZqM2Ofu.js} +1 -1
- modoboa/frontend_dist/assets/{VExpansionPanels-eED_hKBs.js → VExpansionPanels-B5D6GOa3.js} +1 -1
- modoboa/frontend_dist/assets/{VFileInput-COIdDRxq.js → VFileInput-Cv9DIPki.js} +1 -1
- modoboa/frontend_dist/assets/{VForm-DwwrfSN8.js → VForm-CpoZf60D.js} +1 -1
- modoboa/frontend_dist/assets/{VMenu-CTyyRlRb.js → VMenu-B_dVqOmo.js} +1 -1
- modoboa/frontend_dist/assets/{VPicker-3NOHH3h1.js → VPicker-CXkIGEze.js} +1 -1
- modoboa/frontend_dist/assets/{VProgressCircular-1VQzh5PK.js → VProgressCircular-CrEXxs7k.js} +1 -1
- modoboa/frontend_dist/assets/{VRadioGroup-CnRLqIcd.js → VRadioGroup-D8ypjYOO.js} +1 -1
- modoboa/frontend_dist/assets/{VRow-DgX40uiD.js → VRow-C_Ydf6yr.js} +1 -1
- modoboa/frontend_dist/assets/{VSelect-CeY-emKK.js → VSelect-CS51PDEt.js} +1 -1
- modoboa/frontend_dist/assets/{VSelectionControl-BYdVI5Q9.js → VSelectionControl-DiOqtY38.js} +1 -1
- modoboa/frontend_dist/assets/{VSheet-C8P69LA8.js → VSheet-5VVWtHvs.js} +1 -1
- modoboa/frontend_dist/assets/VSpacer-C6PZ3X24.js +1 -0
- modoboa/frontend_dist/assets/{VSwitch-BSifpScd.js → VSwitch-Chg5o-Cp.js} +1 -1
- modoboa/frontend_dist/assets/{VTable-BeyU0Uhj.js → VTable-KsiZ3cBz.js} +1 -1
- modoboa/frontend_dist/assets/{VTabs-Dzq8prKm.js → VTabs-tNrJIYO0.js} +1 -1
- modoboa/frontend_dist/assets/{VTextField-FBM5XwC5.js → VTextField-CLwRV0Cb.js} +1 -1
- modoboa/frontend_dist/assets/{VTextarea-BwkVlXPS.js → VTextarea-Di8jbl8m.js} +1 -1
- modoboa/frontend_dist/assets/{VToolbar-AQXTYlxS.js → VToolbar-CGwhgdmI.js} +1 -1
- modoboa/frontend_dist/assets/{VWindowItem-p9SJ1V9Y.js → VWindowItem-wWSFAGI-.js} +1 -1
- modoboa/frontend_dist/assets/{WebmailLayout-E3DJFEW2.js → WebmailLayout-DsYThBrz.js} +1 -1
- modoboa/frontend_dist/assets/{admin-B0fFM9gW.js → admin-CJVLMHh9.js} +1 -1
- modoboa/frontend_dist/assets/{aliases-C-hC9If-.js → aliases-c3n-dCV_.js} +1 -1
- modoboa/frontend_dist/assets/{contacts-DZDbAN4o.js → contacts-Bqckz8sr.js} +1 -1
- modoboa/frontend_dist/assets/{domains-CWdc-ODs.js → domains-nBMR-fRf.js} +1 -1
- modoboa/frontend_dist/assets/{domains.store-B6sc48r9.js → domains.store-ChZgLcqP.js} +1 -1
- modoboa/frontend_dist/assets/{filter-BSw3r225.js → filter-D7NrAf6a.js} +1 -1
- modoboa/frontend_dist/assets/{forwardRefs-Cn7kyt_f.js → forwardRefs-Cpc3YYl6.js} +1 -1
- modoboa/frontend_dist/assets/{global.store-IwCGIFoO.js → global.store-DUP26-A5.js} +1 -1
- modoboa/frontend_dist/assets/importExport-Dn9vYw7T.js +1 -0
- modoboa/frontend_dist/assets/{index-BCUdq-Zu.js → index-DV9Li2cg.js} +2 -2
- modoboa/frontend_dist/assets/{index-CJ87ZZG1.js → index-DzL89N4E.js} +1 -1
- modoboa/frontend_dist/assets/{layout-CLqGxWz4.js → layout-CHO37cA6.js} +1 -1
- modoboa/frontend_dist/assets/{layout.store-CSmWF8Cf.js → layout.store-BxBoBlgf.js} +1 -1
- modoboa/frontend_dist/assets/{logs-DIXCC1C0.js → logs-DrTzylW7.js} +1 -1
- modoboa/frontend_dist/assets/{parameters-u6VE5cq8.js → parameters-Lgiqp7aw.js} +1 -1
- modoboa/frontend_dist/assets/{parameters.store-D4x8W7LS.js → parameters.store-C9k9DuTj.js} +1 -1
- modoboa/frontend_dist/assets/{permissions-C7XVO62l.js → permissions-mL5hLHcW.js} +1 -1
- modoboa/frontend_dist/assets/{ssrBoot-B-x5LB2_.js → ssrBoot-BsxW6uW4.js} +1 -1
- modoboa/frontend_dist/assets/{tag-DCSJ2lri.js → tag-CFK9dzMJ.js} +1 -1
- modoboa/frontend_dist/assets/transports-TO08iTXJ.js +1 -0
- modoboa/frontend_dist/assets/{webmail-D2rioayn.js → webmail-KrD8ZhNM.js} +1 -1
- modoboa/frontend_dist/config.json +1 -3
- modoboa/frontend_dist/index.html +1 -1
- modoboa/maillog/management/commands/logparser.py +1 -0
- modoboa/pdfcredentials/api/v2/serializers.py +17 -5
- modoboa/pdfcredentials/api/v2/tests.py +28 -0
- modoboa/pdfcredentials/app_settings.py +1 -1
- {modoboa-2.4.9.dist-info → modoboa-2.4.10.dist-info}/METADATA +2 -2
- {modoboa-2.4.9.dist-info → modoboa-2.4.10.dist-info}/RECORD +132 -130
- modoboa/frontend_dist/assets/AccountLayout-DMwguvdC.js +0 -1
- modoboa/frontend_dist/assets/ComposeEmailView-B6Tbw3MS.js +0 -1
- modoboa/frontend_dist/assets/ConnectedLayout-CNzvhsb9.js +0 -1
- modoboa/frontend_dist/assets/CreationForm-ChgnxngD.js +0 -1
- modoboa/frontend_dist/assets/CreationForm-DLumMdUy.css +0 -1
- modoboa/frontend_dist/assets/DomainEditView-DrZ9__pt.js +0 -1
- modoboa/frontend_dist/assets/DomainTransportForm-DEsm5zOa.js +0 -1
- modoboa/frontend_dist/assets/DomainView-RmJalGk7.js +0 -5
- modoboa/frontend_dist/assets/DomainsView-DzL9wtff.js +0 -1
- modoboa/frontend_dist/assets/EmptyLayout-FS-cJHKI.js +0 -1
- modoboa/frontend_dist/assets/ForwardEmailView-Lpw9sqB4.js +0 -1
- modoboa/frontend_dist/assets/IdentitiesView-7nHABB9n.js +0 -1
- modoboa/frontend_dist/assets/IdentitiesView-cvIq8q24.css +0 -1
- modoboa/frontend_dist/assets/ParametersView-Bkw5_CyJ.js +0 -1
- modoboa/frontend_dist/assets/ParametersView-CyAAGtfU.js +0 -1
- modoboa/frontend_dist/assets/ReplyEmailView-DcUkD2HR.js +0 -1
- modoboa/frontend_dist/assets/UserLayout-C6_Zjp6P.js +0 -1
- modoboa/frontend_dist/assets/VSpacer-pLqQLLwB.js +0 -1
- modoboa/frontend_dist/assets/importExport-B7mBfHxZ.js +0 -1
- {modoboa-2.4.9.data → modoboa-2.4.10.data}/scripts/modoboa-admin.py +0 -0
- {modoboa-2.4.9.dist-info → modoboa-2.4.10.dist-info}/WHEEL +0 -0
- {modoboa-2.4.9.dist-info → modoboa-2.4.10.dist-info}/entry_points.txt +0 -0
- {modoboa-2.4.9.dist-info → modoboa-2.4.10.dist-info}/licenses/LICENSE +0 -0
- {modoboa-2.4.9.dist-info → modoboa-2.4.10.dist-info}/top_level.txt +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
import{bK as h}from"./index-
|
|
1
|
+
import{bK as h}from"./index-DV9Li2cg.js";var u={exports:{}},g;function x(){if(g)return u.exports;g=1;function l(s,i=100,c={}){if(typeof s!="function")throw new TypeError(`Expected the first parameter to be a function, got \`${typeof s}\`.`);if(i<0)throw new RangeError("`wait` must not be negative.");const{immediate:p}=typeof c=="boolean"?{immediate:c}:c;let o,f,e,m,n;function d(){const r=o,a=f;return o=void 0,f=void 0,n=s.apply(r,a),n}function b(){const r=Date.now()-m;r<i&&r>=0?e=setTimeout(b,i-r):(e=void 0,p||(n=d()))}const t=function(...r){if(o&&this!==o&&Object.getPrototypeOf(this)===Object.getPrototypeOf(o))throw new Error("Debounced method called with different contexts of the same prototype.");o=this,f=r,m=Date.now();const a=p&&!e;return e||(e=setTimeout(b,i)),a&&(n=d()),n};return Object.defineProperty(t,"isPending",{get(){return e!==void 0}}),t.clear=()=>{e&&(clearTimeout(e),e=void 0)},t.flush=()=>{e&&t.trigger()},t.trigger=()=>{n=d(),t.clear()},t}return u.exports.debounce=l,u.exports=l,u.exports}var y=x();const D=h(y);export{D as d};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{d as ne}from"./tag-
|
|
1
|
+
import{d as ne}from"./tag-CFK9dzMJ.js";import{x as D,S as j,h as v,g as ae,b8 as $,ad as V,a8 as R,aE as U,ac as X,d as se,al as ue,b9 as le,ba as ie,aA as re,aj as q,bb as ce}from"./index-DV9Li2cg.js";const M=Symbol.for("vuetify:layout"),F=Symbol.for("vuetify:layout-item"),k=1e3,pe=D({overlaps:{type:Array,default:()=>[]},fullHeight:Boolean},"layout"),me=D({name:{type:String},order:{type:[Number,String],default:0},absolute:Boolean},"layout-item");function ge(){const s=j(M);if(!s)throw new Error("[Vuetify] Could not find injected layout");return{getLayoutItem:s.getLayoutItem,mainRect:s.mainRect,mainStyles:s.mainStyles}}function be(s){const u=j(M);if(!u)throw new Error("[Vuetify] Could not find injected layout");const d=s.id??`layout-item-${ue()}`,i=U("useLayoutItem");q(F,{id:d});const n=X(!1);le(()=>n.value=!0),ie(()=>n.value=!1);const{layoutItemStyles:r,layoutItemScrimStyles:c}=u.register(i,{...s,active:v(()=>n.value?!1:s.active.value),id:d});return re(()=>u.unregister(d)),{layoutItemStyles:r,layoutRect:u.layoutRect,layoutItemScrimStyles:c}}const ve=(s,u,d,i)=>{let n={top:0,left:0,right:0,bottom:0};const r=[{id:"",layer:{...n}}];for(const c of s){const m=u.get(c),g=d.get(c),z=i.get(c);if(!m||!g||!z)continue;const b={...n,[m.value]:parseInt(n[m.value],10)+(z.value?parseInt(g.value,10):0)};r.push({id:c,layer:b}),n=b}return r};function he(s){const u=j(M,null),d=v(()=>u?u.rootZIndex.value-100:k),i=ae([]),n=$(new Map),r=$(new Map),c=$(new Map),m=$(new Map),g=$(new Map),{resizeRef:z,contentRect:b}=ne(),W=v(()=>{const t=new Map,l=s.overlaps??[];for(const e of l.filter(a=>a.includes(":"))){const[a,o]=e.split(":");if(!i.value.includes(a)||!i.value.includes(o))continue;const f=n.get(a),p=n.get(o),S=r.get(a),w=r.get(o);!f||!p||!S||!w||(t.set(o,{position:f.value,amount:parseInt(S.value,10)}),t.set(a,{position:p.value,amount:-parseInt(w.value,10)}))}return t}),h=v(()=>{const t=[...new Set([...c.values()].map(e=>e.value))].sort((e,a)=>e-a),l=[];for(const e of t){const a=i.value.filter(o=>{var f;return((f=c.get(o))==null?void 0:f.value)===e});l.push(...a)}return ve(l,n,r,m)}),H=v(()=>!Array.from(g.values()).some(t=>t.value)),I=v(()=>h.value[h.value.length-1].layer),Y=V(()=>({"--v-layout-left":R(I.value.left),"--v-layout-right":R(I.value.right),"--v-layout-top":R(I.value.top),"--v-layout-bottom":R(I.value.bottom),...H.value?void 0:{transition:"none"}})),x=v(()=>h.value.slice(1).map((t,l)=>{let{id:e}=t;const{layer:a}=h.value[l],o=r.get(e),f=n.get(e);return{id:e,...a,size:Number(o.value),position:f.value}})),T=t=>x.value.find(l=>l.id===t),A=U("createLayout"),B=X(!1);se(()=>{B.value=!0}),q(M,{register:(t,l)=>{let{id:e,order:a,position:o,layoutSize:f,elementSize:p,active:S,disableTransitions:w,absolute:J}=l;c.set(e,a),n.set(e,o),r.set(e,f),m.set(e,S),w&&g.set(e,w);const K=ce(F,A==null?void 0:A.vnode).indexOf(t);K>-1?i.value.splice(K,0,e):i.value.push(e);const N=v(()=>x.value.findIndex(L=>L.id===e)),O=v(()=>d.value+h.value.length*2-N.value*2),Q=v(()=>{const L=o.value==="left"||o.value==="right",C=o.value==="right",te=o.value==="bottom",E=p.value??f.value,oe=E===0?"%":"px",Z={[o.value]:0,zIndex:O.value,transform:`translate${L?"X":"Y"}(${(S.value?0:-(E===0?100:E))*(C||te?-1:1)}${oe})`,position:J.value||d.value!==k?"absolute":"fixed",...H.value?void 0:{transition:"none"}};if(!B.value)return Z;const y=x.value[N.value];if(!y)throw new Error(`[Vuetify] Could not find layout item "${e}"`);const P=W.value.get(e);return P&&(y[P.position]+=P.amount),{...Z,height:L?`calc(100% - ${y.top}px - ${y.bottom}px)`:p.value?`${p.value}px`:void 0,left:C?void 0:`${y.left}px`,right:C?`${y.right}px`:void 0,top:o.value!=="bottom"?`${y.top}px`:void 0,bottom:o.value!=="top"?`${y.bottom}px`:void 0,width:L?p.value?`${p.value}px`:void 0:`calc(100% - ${y.left}px - ${y.right}px)`}}),ee=v(()=>({zIndex:O.value-1}));return{layoutItemStyles:Q,layoutItemScrimStyles:ee,zIndex:O}},unregister:t=>{c.delete(t),n.delete(t),r.delete(t),m.delete(t),g.delete(t),i.value=i.value.filter(l=>l!==t)},mainRect:I,mainStyles:Y,getLayoutItem:T,items:x,layoutRect:b,rootZIndex:d});const _=V(()=>["v-layout",{"v-layout--full-height":s.fullHeight}]),G=V(()=>({zIndex:u?d.value:void 0,position:u?"relative":void 0,overflow:u?"hidden":void 0}));return{layoutClasses:_,layoutStyles:G,getLayoutItem:T,items:x,layoutRect:b,layoutRef:z}}export{M as V,me as a,ge as b,he as c,pe as m,be as u};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{O as a,g as s}from"./index-
|
|
1
|
+
import{O as a,g as s}from"./index-DV9Li2cg.js";const r=a("layout",()=>{const e=s([]),t=s(!1);function n(u){e.value=u}async function o(){e.value=[],t.value=!1}return{leftMenuItems:e,compactLeftMenu:t,setLeftMenuItems:n,$reset:o}});export{r as u};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{_ as e}from"./index-
|
|
1
|
+
import{_ as e}from"./index-DV9Li2cg.js";const t="logs",o={getAuditTrail(s){return e.get(`/${t}/audit-trail/`,{params:s})},getMessages(s){return e.get(`/${t}/messages/`,{params:s})}};export{o as l};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{_ as e}from"./index-
|
|
1
|
+
import{_ as e}from"./index-DV9Li2cg.js";const r="parameters",l={getGlobalApplications(){return e.get(`/${r}/global/applications/`)},getGlobalApplication(t){return e.get(`/${r}/global/${t}/`)},getGlobalApplicationStructure(t){return e.get(`/${r}/global/structure/?app=${t}`)},saveGlobalApplication(t,p){return e.put(`/${r}/global/${t}/`,p)},getUserApplications(){return e.get(`/${r}/user/applications/`)},getUserApplication(t){return e.get(`/${r}/user/${t}/`)},getUserApplicationStructure(t){return e.get(`/${r}/user/structure/?app=${t}`)},saveUserApplication(t,p){return e.put(`/${r}/user/${t}/`,p)}};export{l as p};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{O as a,g as t}from"./index-
|
|
1
|
+
import{O as a,g as t}from"./index-DV9Li2cg.js";const s=a("parameters",()=>{const e=t(null);async function r(){e.value=null}return{imapMigrationEnabled:e,$reset:r}});export{s as u};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{u as r,h as s,i as t}from"./index-
|
|
1
|
+
import{u as r,h as s,i as t}from"./index-DV9Li2cg.js";function a(){const e=r(),n=s(()=>[t.RESELLER,t.SUPER_ADMIN].includes(e.authUser.role)),o=s(()=>[t.RESELLER,t.SUPER_ADMIN].includes(e.authUser.role));return{canSetRole:n,canAddDomain:o}}export{a as u};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{ac as t,d as e,ad as s,b5 as n}from"./index-
|
|
1
|
+
import{ac as t,d as e,ad as s,b5 as n}from"./index-DV9Li2cg.js";function i(){const o=t(!1);return e(()=>{window.requestAnimationFrame(()=>{o.value=!0})}),{ssrBootStyles:s(()=>o.value?void 0:{transition:"none !important"}),isBooted:n(o)}}export{i as u};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{x as m,aE as h,ah as c,g as d,as as f,aA as l,L as b,b5 as R,h as S,a8 as r}from"./index-
|
|
1
|
+
import{x as m,aE as h,ah as c,g as d,as as f,aA as l,L as b,b5 as R,h as S,a8 as r}from"./index-DV9Li2cg.js";const x=m({class:[String,Array,Object],style:{type:[String,Array,Object],default:null}},"component");function y(t){const a=h("useRender");a.render=t}function W(t){let a=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"content";const e=c(),i=d();if(f){const s=new ResizeObserver(n=>{t==null||t(n,s),n.length&&(a==="content"?i.value=n[0].contentRect:i.value=n[0].target.getBoundingClientRect())});l(()=>{s.disconnect()}),b(()=>e.el,(n,o)=>{o&&(s.unobserve(o),i.value=void 0),n&&s.observe(n)},{flush:"post"})}return{resizeRef:e,contentRect:R(i)}}const H=m({height:[Number,String],maxHeight:[Number,String],maxWidth:[Number,String],minHeight:[Number,String],minWidth:[Number,String],width:[Number,String]},"dimension");function N(t){return{dimensionStyles:S(()=>{const e={},i=r(t.height),s=r(t.maxHeight),n=r(t.maxWidth),o=r(t.minHeight),u=r(t.minWidth),g=r(t.width);return i!=null&&(e.height=i),s!=null&&(e.maxHeight=s),n!=null&&(e.maxWidth=n),o!=null&&(e.minHeight=o),u!=null&&(e.minWidth=u),g!=null&&(e.width=g),e})}}const O=m({tag:{type:[String,Object,Function],default:"div"}},"tag");export{x as a,N as b,H as c,W as d,O as m,y as u};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{_ as t}from"./index-DV9Li2cg.js";const r="transports",s={getAll(){return t.get(`/${r}/`)}};export{s as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{_ as t}from"./index-
|
|
1
|
+
import{_ as t}from"./index-DV9Li2cg.js";const r={getUserMailboxes(e){const s={};return e&&(s.mailbox=e),t.get("/webmail/mailboxes/",{params:s})},getUserMailboxQuota(e){const s={mailbox:e};return t.get("/webmail/mailboxes/quota/",{params:s})},getUserMailboxUnseen(e){const s={mailbox:e};return t.get("webmail/mailboxes/unseen/",{params:s})},createUserMailbox(e){return t.post("/webmail/mailboxes/",e)},renameUserMailbox(e){return t.post("/webmail/mailboxes/rename/",e)},compressUserMailbox(e){return t.post("/webmail/mailboxes/compress/",e)},deleteUserMailbox(e){return t.post("/webmail/mailboxes/delete/",e)},emptyUserMailbox(e){const s={name:e};return t.post("/webmail/mailboxes/empty/",s)},getMailboxEmails(e,s){const a={mailbox:e,...s};return t.get("/webmail/emails/",{params:a})},getEmailContent(e,s,a){const o={mailbox:e,mailid:s,...a};return t.get("/webmail/emails/content/",{params:o})},getEmailSource(e,s){const a={mailbox:e,mailid:s};return t.get("/webmail/emails/source/",{params:a})},getEmailAttachment(e,s,a){const o={mailbox:e,mailid:s,partnum:a};return t.get("/webmail/emails/attachment/",{params:o,responseType:"blob"})},deleteSelection(e,s){const a={mailbox:e,selection:s};return t.post("/webmail/emails/delete/",a)},markSelectionAsJunk(e,s){const a={mailbox:e,selection:s};return t.post("/webmail/emails/mark_as_junk/",a)},markSelectionAsNotJunk(e,s){const a={mailbox:e,selection:s};return t.post("/webmail/emails/mark_as_not_junk/",a)},flagSelection(e,s,a){const o={mailbox:e,selection:s,status:a};return t.post("/webmail/emails/flag/",o)},sendEmailFromComposeSession(e,s){return t.post(`/webmail/compose-sessions/${e}/send/`,s)},getComposeSession(e){return t.get(`/webmail/compose-sessions/${e}/`)},createComposeSession(){return t.post("/webmail/compose-sessions/")},getAllowedSenders(){return t.get("/webmail/compose-sessions/allowed_senders/")},uploadAttachment(e,s){return t.post(`/webmail/compose-sessions/${e}/attachments/`,s,{headers:{"Content-Type":"multipart/form-data"}})},removeAttachment(e,s){return t.delete(`/webmail/compose-sessions/${e}/attachments/${s}/`)}};export{r as a};
|
|
@@ -5,7 +5,5 @@
|
|
|
5
5
|
"OAUTH_CLIENT_ID": "LVQbfIIX3khWR3nDvix1u9yEGHZUxcx53bhJ7FlD",
|
|
6
6
|
"OAUTH_REDIRECT_URI": "/login/logged",
|
|
7
7
|
"OAUTH_POST_REDIRECT_URI": "/",
|
|
8
|
-
"HTML_PAGE_TITLE": "Test title"
|
|
9
|
-
"MENU_LOGO_PATH": "/src/assets/Modoboa_RVB-BLANC-SANS.png",
|
|
10
|
-
"CREATION_FORM_LOGO_PATH": "/src/assets/Modoboa_RVB-BLEU-SANS.png"
|
|
8
|
+
"HTML_PAGE_TITLE": "Test title"
|
|
11
9
|
}
|
modoboa/frontend_dist/index.html
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
<link rel="icon" href="/favicon.ico" />
|
|
13
13
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
14
14
|
<title>Welcome to Modoboa</title>
|
|
15
|
-
<script type="module" crossorigin src="/assets/index-
|
|
15
|
+
<script type="module" crossorigin src="/assets/index-DV9Li2cg.js"></script>
|
|
16
16
|
<link rel="stylesheet" crossorigin href="/assets/index-B1bJH8Ti.css">
|
|
17
17
|
</head>
|
|
18
18
|
|
|
@@ -78,6 +78,7 @@ class LogParser:
|
|
|
78
78
|
# set up regular expression
|
|
79
79
|
self._date_expressions = [
|
|
80
80
|
r"(?P<month>\w+)\s+(?P<day>\d+)\s+(?P<hour>\d+):(?P<min>\d+):(?P<sec>\d+)(?P<eol>.*)", # noqa
|
|
81
|
+
r"(?P<year>\d+)-(?P<month>\d+)-(?P<day>\d+)T(?P<hour>\d+):(?P<min>\d+):(?P<sec>\d+)[\+\-]\d+:\d+(?P<eol>.*)", # noqa
|
|
81
82
|
r"(?P<year>\d+)-(?P<month>\d+)-(?P<day>\d+)T(?P<hour>\d+):(?P<min>\d+):(?P<sec>\d+)\.\d+[\+\-]\d+:\d+(?P<eol>.*)", # noqa
|
|
82
83
|
]
|
|
83
84
|
self._date_expressions = [re.compile(v) for v in self._date_expressions]
|
|
@@ -38,12 +38,16 @@ class PDFCredentialsSettingsSerializer(serializers.Serializer):
|
|
|
38
38
|
required=False, allow_blank=True, allow_null=True
|
|
39
39
|
)
|
|
40
40
|
include_connection_settings = serializers.BooleanField(default=False)
|
|
41
|
-
smtp_server_address = serializers.CharField(
|
|
41
|
+
smtp_server_address = serializers.CharField(
|
|
42
|
+
required=False, allow_blank=True, allow_null=True
|
|
43
|
+
)
|
|
42
44
|
smtp_server_port = serializers.IntegerField(default=587)
|
|
43
45
|
smtp_connection_security = serializers.ChoiceField(
|
|
44
46
|
choices=CONNECTION_SECURITY_MODES, default="starttls"
|
|
45
47
|
)
|
|
46
|
-
imap_server_address = serializers.CharField(
|
|
48
|
+
imap_server_address = serializers.CharField(
|
|
49
|
+
required=False, allow_blank=True, allow_null=True
|
|
50
|
+
)
|
|
47
51
|
imap_server_port = serializers.IntegerField(default=143)
|
|
48
52
|
imap_connection_security = serializers.ChoiceField(
|
|
49
53
|
choices=CONNECTION_SECURITY_MODES, default="starttls"
|
|
@@ -72,13 +76,21 @@ class PDFCredentialsSettingsSerializer(serializers.Serializer):
|
|
|
72
76
|
enabled_pdfcredentials is None
|
|
73
77
|
and param_tools.get_global_parameter("enabled_pdfcredentials")
|
|
74
78
|
)
|
|
79
|
+
errors = {}
|
|
75
80
|
if condition:
|
|
76
81
|
storage_dir = data.get("storage_dir", None)
|
|
77
82
|
if storage_dir is not None:
|
|
78
83
|
if not os.path.isdir(storage_dir):
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
84
|
+
errors["storage_dir"] = _("Directory not found.")
|
|
85
|
+
elif not os.access(storage_dir, os.W_OK):
|
|
86
|
+
errors["storage_dir"] = _("Directory is not writable")
|
|
87
|
+
include_connection_settings = data.get("include_connection_settings")
|
|
88
|
+
if include_connection_settings:
|
|
89
|
+
for field in ["smtp_server_address", "imap_server_address"]:
|
|
90
|
+
if not data.get(field):
|
|
91
|
+
errors[field] = _("This field is required.")
|
|
92
|
+
if errors:
|
|
93
|
+
raise serializers.ValidationError(errors)
|
|
82
94
|
return data
|
|
83
95
|
|
|
84
96
|
|
|
@@ -190,3 +190,31 @@ class PDFCredentialViewTestCase(ModoAPITestCase):
|
|
|
190
190
|
data["enabled_pdfcredentials"] = False
|
|
191
191
|
resp = self.client.put(url, data, format="json")
|
|
192
192
|
self.assertEqual(resp.status_code, 200)
|
|
193
|
+
|
|
194
|
+
def test_optional_settings(self):
|
|
195
|
+
url = reverse("v2:parameter-global-detail", args=["pdfcredentials"])
|
|
196
|
+
path = f"{self.workdir}/credentials"
|
|
197
|
+
os.makedirs(path)
|
|
198
|
+
data = {
|
|
199
|
+
"enabled_pdfcredentials": True,
|
|
200
|
+
"storage_dir": path,
|
|
201
|
+
"webpanel_url": "http://localhost",
|
|
202
|
+
}
|
|
203
|
+
resp = self.client.put(url, data, format="json")
|
|
204
|
+
self.assertEqual(resp.status_code, 200)
|
|
205
|
+
|
|
206
|
+
data["include_connection_settings"] = True
|
|
207
|
+
resp = self.client.put(url, data, format="json")
|
|
208
|
+
self.assertEqual(resp.status_code, 400)
|
|
209
|
+
errors = resp.json()
|
|
210
|
+
self.assertEqual(errors["smtp_server_address"][0], "This field is required.")
|
|
211
|
+
self.assertEqual(errors["imap_server_address"][0], "This field is required.")
|
|
212
|
+
|
|
213
|
+
data.update(
|
|
214
|
+
{
|
|
215
|
+
"smtp_server_address": "mail.localhost",
|
|
216
|
+
"imap_server_address": "mail.localhost",
|
|
217
|
+
}
|
|
218
|
+
)
|
|
219
|
+
resp = self.client.put(url, data, format="json")
|
|
220
|
+
self.assertEqual(resp.status_code, 200)
|
|
@@ -121,7 +121,7 @@ PDF_CREDENTIALS_PARAMETERS_STRUCT = collections.OrderedDict(
|
|
|
121
121
|
"smtp_server_address",
|
|
122
122
|
{
|
|
123
123
|
"label": _("SMTP server address"),
|
|
124
|
-
"display": "include_connection_settings=
|
|
124
|
+
"display": "include_connection_settings=true",
|
|
125
125
|
"help_text": _(
|
|
126
126
|
"Address of the SMTP server (hostname or IP)"
|
|
127
127
|
),
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: modoboa
|
|
3
|
-
Version: 2.4.
|
|
3
|
+
Version: 2.4.10
|
|
4
4
|
Summary: Mail hosting made simple
|
|
5
5
|
Author-email: Antoine Nguyen <tonio@ngyn.org>
|
|
6
6
|
License: ISC License
|
|
@@ -40,7 +40,7 @@ Classifier: Topic :: Internet :: WWW/HTTP
|
|
|
40
40
|
Requires-Python: >=3.10
|
|
41
41
|
Description-Content-Type: text/x-rst
|
|
42
42
|
License-File: LICENSE
|
|
43
|
-
Requires-Dist: django==5.2.
|
|
43
|
+
Requires-Dist: django==5.2.5
|
|
44
44
|
Requires-Dist: django-phonenumber-field[phonenumbers]==8.1.0
|
|
45
45
|
Requires-Dist: django-reversion==5.1.0
|
|
46
46
|
Requires-Dist: django-xforwardedfor-middleware==2.0
|