1import{ad as We,ag as a,A as o,w as e,b7 as x,a$ as we,a as b,am as g,ar as n,y as d,b0 as h,G as p,H as ue,b6 as H,av as Q,a8 as j,ba as W,a_ as he,b8 as _e,ak as i,x as Xe,aa as Ye}from"./index-Bjy5XtNX.js";import{_ as X}from"./Badge.vue_vue_type_script_setup_true_lang-DPlTgLIq.js";const Ze={class:"p-6 max-w-6xl mx-auto"},et={class:"flex items-center justify-between mb-4"},tt=["value"],st={key:0,class:"mb-3 text-sm rounded-md bg-blue-50 text-blue-700 px-3 py-2"},lt={key:1,class:"mb-3 text-sm rounded-md bg-red-50 text-red-700 px-3 py-2"},at={class:"flex gap-1 border-b mb-4 text-sm"},ot=["onClick"],nt={key:2},it={class:"rounded-lg border bg-gray-50 p-3 mb-4 grid grid-cols-1 sm:grid-cols-4 gap-2 items-end"},dt={class:"sm:col-span-2"},rt={class:"mb-3 flex items-center gap-2 text-sm rounded-md border bg-gray-50 px-3 py-2"},ut={class:"text-gray-600"},ct={class:"font-mono"},mt=["value"],pt={key:0,class:"text-sm text-gray-400"},vt={key:1,class:"w-full text-sm"},xt={class:"py-2 font-mono"},yt={class:"text-gray-600"},bt={class:"text-gray-600"},gt={class:"text-right space-x-2"},ft=["onClick"],wt=["onClick"],ht=["onClick"],_t=["onClick"],kt={key:0},Ct={key:3},St={class:"rounded-lg border bg-gray-50 p-3 mb-4 grid grid-cols-1 sm:grid-cols-4 gap-2 items-end"},Tt={class:"sm:col-span-2"},At={class:"w-full text-sm"},Pt={class:"py-2 font-mono"},It={class:"text-gray-600"},$t={class:"text-right"},Et=["onClick"],Ut={key:0},jt={key:4},Ot={class:"mt-3 flex items-center gap-3"},zt={key:0,class:"text-green-600 text-sm"},Rt={key:5},Nt={key:0,class:"text-sm text-gray-400"},Mt={key:1},Vt={class:"flex gap-3 mb-4"},Lt={class:"rounded-lg border p-3 flex-1"},Bt={class:"rounded-lg border p-3 flex-1"},Jt={class:"rounded-lg border p-3 flex-1"},qt={class:"text-lg font-semibold"},Dt={class:"text-xs text-gray-400 mb-2"},Ft={class:"w-full text-sm"},Gt={class:"py-2 font-mono"},Kt={class:"text-gray-600"},Ht={class:"text-gray-500 text-xs"},Qt={key:6},Wt={key:0,class:"text-sm text-gray-400"},Xt={key:1},Yt={class:"rounded-lg border p-3 mb-4"},Zt={class:"w-full text-sm"},es={class:"py-1.5 capitalize"},ts={class:"font-mono"},ss={key:0,class:"text-xs text-gray-400"},ls={class:"text-right space-x-1"},as={class:"rounded-lg border p-3 mb-4"},os={class:"flex flex-wrap gap-2"},ns=["onClick"],is={key:0,class:"text-xs text-gray-400"},ds={class:"flex items-center justify-between mb-2"},rs={class:"font-semibold text-sm"},us={class:"w-full text-sm"},cs={class:"py-1.5 font-mono"},ms={key:0,class:"text-xs text-gray-400 ml-1"},ps={class:"text-right"},vs=["onClick"],xs={key:7},ys={class:"w-full text-sm mb-8"},bs={class:"py-1"},gs={class:"text-gray-500"},fs={class:"flex gap-2 items-end mb-3"},ws={key:0,class:"bg-gray-50 border rounded p-3 mb-3 text-sm"},hs={class:"font-mono font-bold text-base select-all"},_s={class:"text-xs mt-2"},ks={key:1,class:"text-sm"},Cs=["onClick"],Ss={key:8},Ts={class:"grid grid-cols-2 sm:grid-cols-4 gap-3 mb-4"},As={class:"rounded-lg border p-3"},Ps={class:"text-2xl font-semibold"},Is={class:"rounded-lg border p-3"},$s={class:"text-2xl font-semibold"},Es={class:"rounded-lg border p-3"},Us={class:"text-2xl font-semibold"},js={class:"rounded-lg border p-3"},Os={class:"text-2xl font-semibold"},zs={class:"rounded-lg border p-4 mb-4"},Rs={class:"flex flex-wrap items-center gap-3 text-sm"},Ns={class:"flex items-center gap-2"},Ms={key:0,class:"text-xs text-gray-400"},Vs={class:"w-full text-sm"},Ls={class:"py-2 font-mono"},Bs={class:"text-gray-600"},Js={class:"text-gray-600"},qs={key:0,class:"flex items-center gap-2"},Ds={class:"h-1.5 w-24 rounded bg-gray-200 overflow-hidden"},Fs={class:"text-xs text-gray-500"},Gs={key:1,class:"text-xs text-gray-400"},Ks={key:0}
1,Hs={class:"bg-white rounded-xl p-5 w-full max-w-md shadow-xl"},Qs={class:"text-xs text-gray-500 mb-4"},Ws={class:"space-y-3"},Xs={class:"flex items-center gap-2 text-sm cursor-pointer"},Ys={class:"flex items-center gap-2 text-sm cursor-pointer"},Zs={key:0,class:"ml-5 space-y-1"},el={key:0,class:"text-xs text-gray-400"},tl={key:1,class:"text-xs text-red-600"},sl={key:2,class:"text-xs text-green-600"},ll={class:"mt-5 flex justify-end gap-2"},al=["disabled"],ol={class:"bg-white rounded-xl p-5 w-full max-w-md shadow-xl"},nl={class:"font-semibold mb-1"},il={class:"flex gap-2 mb-3"},dl=["disabled"],rl={class:"border rounded-md divide-y max-h-64 overflow-auto"},ul={class:"font-mono"},cl=["onClick"],ml={key:0,class:"px-3 py-4 text-center text-gray-400 text-sm"},pl={class:"mt-4 flex justify-end"},vl={class:"bg-white rounded-xl p-5 w-full max-w-md shadow-xl"},xl={class:"font-semibold mb-1"},yl={class:"rounded-md bg-gray-50 border p-3 text-sm space-y-1 font-mono"},bl={class:"font-semibold"},gl={key:0},fl={key:1},wl={class:"mt-4 pt-3 border-t"},hl={class:"flex gap-2"},_l=["disabled"],kl={class:"mt-4 flex justify-between"},Pl={__name:"Mail",setup(Cl){const w=i("accounts"),B=i([]),_=i(""),C=i(""),J=i(""),q=i([]),Y=i(!1),I=i({email:"",quota_mb:5120,display_name:""}),y=i(null),$=i(null),r=i({manual:!1,value:"",checking:!1,pwned:null}),O=i(""),Z=i([]),T=i({email:"",members:""}),f=i(null),z=i(""),ke=i(null),V=i(""),R=i({subject:"",body:""}),ee=i(!1),S=i(null),te=i(!1),E=i(null),ce=i(null),se=i([]),le=i(!1),v=i(null),k=i(null),D=i(!1),ae=i(!1),me=i([]),pe=i(!1),A=i(""),oe=i("outlook"),U=i(null),F=i([]);function u(l){J.value=l,setTimeout(()=>J.value="",3500)}async function c(l,t){const s=await fetch("/api/email"+l,t);let m={};try{m=await s.json()}catch{}return m}async function P(l,t){const s=await fetch("/api/mailsec"+l,t);let m={};try{m=await s.json()}catch{}return m}async function N(){le.value=!0;try{E.value=await P("/blocklist"),ce.value=(await P("/ban-policy")).policy,se.value=(await P("/allowlist")).allowed||[]}finally{le.value=!1}}async function Ce(l){const t=await P("/auto-heal",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({dry_run:!1})});t.ok?(u(`Sbloccati ${t.healed_count} IP legittimi, tenuti ${t.kept_banned} attaccanti`),N()):C.value=t.error||"errore"}async function Se(l){const t=await P("/unban",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({ips:[l]})});t.ok?(u("Sbloccato "+l),N()):C.value=t.error||"errore"}async function ne(l,t){if(!t)return;const s=await P("/ban-policy",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({kind:l,value:t})});s.ok?(u(`Policy ${l} = ${t}`),N()):C.value=s.error||"errore"}async function Te(){const l=(prompt("IP o rete da allowlistare (es. 10.10.0.0/24 o 167.233.35.84):")||"").trim();if(!l)return;const t=await P("/allowlist",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({ip:l})});t.ok?(u("Allowlist + "+l),N()):C.value=t.error||"errore"}async function Ae(l){const t=await P("/allowlist/"+encodeURIComponent(l),{method:"DELETE"});t.ok?(u("Rimosso "+l),N()):C.value=t.error||"errore"}async function Pe(){const l=await c("/domains");B.value=l.domains||[],!_.value&&B.value.length&&(_.value=B.value[0].name)}async function L(){Y.value=!0,C.value="";try{const l=await c("/accounts?domain="+encodeURIComponent(_.value||""));q.value=l.accounts||[],ie(),l.error&&(C.value=l.error)}finally{Y.value=!1}}async function Ie(){if(!I.value.email.includes("@")){u("Email non valida");return}const l=await c("/accounts",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(I.value)});l.ok?(y.value=l,O.value="",I.value={email:"",quota_mb:5120,display_name:""},L()):u(l.error||"Errore creazione")}function $e(l){$.value=l,r.value={manual:!1,value:"",checking:!1,pwned:null}}let ve=null;async function Ee(l){clearTimeout(ve),r.value.pwned=null,!(!l||l.length<8)&&(ve=setTimeout(async()=>{r.value.checking=!0;try{const t=await crypto.subtle.digest("SHA-1",new TextEncoder().encode(l)),s=Array.from(new Uint8Array(t)).map(re=>re.toString(16).padStart(2,"0")).join("").toUpperCase(),m=s.slice(0,5),M=s.slice(5),fe=(await(await fetch(`https://api.pwnedpasswords.com/range/${m}`,{headers:{"Add-Padding":"true"}})).text()).split(`\r 2`).find(re=>re.startsWith(M));r.value.pwned=fe?parseInt(fe.split(":")[1]):0}catch{r.value.pwned=null}finally{r.value.checking=!1}},600))}async function Ue(){const l=$.value;if(!l)return;const t=r.value.manual&&r.value.value?JSON.stringify({password:r.value.value}):"{}",s=await c(`/accounts/${encodeURIComponent(l.email)}/password`,{method:"POST",headers:{"Content-Type":"application/json"},body:t});s.ok?(y.value={email:l.email,password:s.password,reset:!0},O.value="",$.value=null):u(s.error||"Errore reset")}async function je(l){if(!confirm(`Eliminare definitivamente la casella ${l.email}? Operazione irreversibile.`))return;const t=await c(`/accounts/${encodeURIComponent(l.email)}`,{method:"DELETE"});t.ok?L():u(t.error||"Errore eliminazione")}async function Oe(){const l=y.value;if(!l)return;const t=await c(`/accounts/${encodeURIComponent(l.email)}/welcome`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({password:l.password})});t.ok?u("Email di benvenuto inviata a "+t.sent_to):u(t.error||"Invio non riuscito")}async function xe(){const l=y.value;if(!l)return;const t=O.value.trim();
2if(!t.includes("@")){u("Inserisci una mail di recupero valida");return}const s=await c(`/accounts/${encodeURIComponent(l.email)}/welcome`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({password:l.password,to:t})});s.ok?u("Credenziali inviate alla mail di recupero "+s.sent_to):u(s.error||"Invio non riuscito")}async function ie(){const l=await c("/catchall?domain="+encodeURIComponent(_.value||""));ke.value=l.catchall||null,V.value=l.catchall||""}async function ze(){if(!V.value){const t=await c("/catchall/"+encodeURIComponent(_.value),{method:"DELETE"});t.ok?(u("Catch-all rimosso"),ie()):u(t.error||"Errore");return}const l=await c("/catchall",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({domain:_.value,email:V.value})});l.ok?(u("Catch-all: "+l.catchall),ie()):u(l.error||"Errore catch-all")}async function Re(l){f.value={email:l.email,aliases:[]},z.value="";const t=await c(`/accounts/${encodeURIComponent(l.email)}/aliases`);f.value={email:l.email,aliases:t.aliases||[]}}async function ye(){const l=f.value;if(!l)return;const t=(z.value||"").trim().toLowerCase();if(!t.includes("@")){u("Alias non valido");return}const s=await c(`/accounts/${encodeURIComponent(l.email)}/aliases`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({alias:t})});s.ok?(f.value={email:l.email,aliases:s.aliases||[]},z.value=""):u(s.error||"Errore alias")}async function Ne(l){const t=f.value;if(!t)return;const s=await c(`/accounts/${encodeURIComponent(t.email)}/aliases/${encodeURIComponent(l)}`,{method:"DELETE"});s.ok?f.value={email:t.email,aliases:s.aliases||[]}:u(s.error||"Errore rimozione alias")}async function G(){const l=await c("/lists?domain="+encodeURIComponent(_.value||""));Z.value=l.lists||[]}async function Me(){if(!T.value.email.includes("@")){u("Email lista non valida");return}const l=T.value.members.split(/[\s,;]+/).filter(Boolean),t=await c("/lists",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:T.value.email,members:l})});t.ok?(T.value={email:"",members:""},G()):u(t.error||"Errore lista")}async function Ve(l){if(!confirm(`Eliminare la lista ${l.email}?`))return;const t=await c(`/lists/${encodeURIComponent(l.email)}`,{method:"DELETE"});t.ok?G():u(t.error||"Errore")}async function Le(){const l=await c("/template");R.value={subject:l.subject||"",body:l.body||""}}async function Be(){const l=await c("/template",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(R.value)});l.ok?(ee.value=!0,setTimeout(()=>ee.value=!1,2e3)):u(l.error||"Errore salvataggio")}async function Je(){te.value=!0;try{S.value=await c("/security")}finally{te.value=!1}}function be(l){return l?l>=1073741824?(l/1073741824).toFixed(2)+" GB":l>=1048576?(l/1048576).toFixed(1)+" MB":l>=1024?(l/1024).toFixed(0)+" KB":l+" B":"0"}async function qe(){v.value=await c("/stats"),k.value=await c("/admin")}async function De(){try{await navigator.clipboard.writeText(k.value&&k.value.password||""),ae.value=!0,setTimeout(()=>ae.value=!1,1500)}catch{}}async function de(){pe.value=!0;try{const l=await c("/sync_status");me.value=l.rows||[]}finally{pe.value=!1}}async function Fe(){await c("/sync_heal",{method:"POST"}),u("Riallineamento eseguito"),de()}async function K(){if(!A.value){F.value=[];return}const l=await c("/app_password/list?mailbox="+encodeURIComponent(A.value));F.value=l.labels||[]}async function Ge(){if(!A.value){u("Inserisci la casella");return}const l=await c("/app_password",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({mailbox:A.value,label:oe.value})});l.ok?(U.value=l,K()):u(l.error||"Errore")}async function Ke(l){confirm('Revocare "'+l+'"?')&&(await c("/app_password/revoke",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({mailbox:A.value,label:l})}),K())}function He(l){A.value=l.email,ge("sync"),U.value=null,K()}function ge(l){w.value=l,l==="accounts"?L():l==="lists"?G():l==="templates"?Le():l==="security"?Je():l==="antiban"?N():l==="overview"?qe():l==="sync"&&de()}async function Qe(){w.value==="accounts"?L():w.value==="lists"&&G()}return We(async()=>{await Pe(),L()}),(l,t)=>(a(),o("div",Ze,[e("div",et,[t[27]||(t[27]=e("div",null,[e("h1",{class:"text-xl font-semibold"},"Mail"),e("p",{class:"text-sm text-gray-500"},"Gestione caselle, liste, template e sicurezza â Stalwart (mailmx)")],-1)),x(e("select",{"onUpdate:modelValue":t[0]||(t[0]=s=>_.value=s),onChange:Qe,class:"border rounded-md px-3 py-1.5 text-sm bg-white"},[(a(!0),o(b,null,g(B.value,s=>(a(),o("option",{key:s.id,value:s.name},n(s.name),9,tt))),128))],544),[[we,_.value]])]),J.value?(a(),o("div",st,n(J.value),1)):d("",!0),C.value?(a(),o("div",lt,n(C.value),1)):d("",!0),e("div",at,[(a(),o(b,null,g([["accounts","Account"],["lists","Liste & alias"],["templates","Template welcome"],["security","Sicurezza"],["antiban","Accessi & anti-ban"],["overview","Panoramica"],["sync","Sincronia"]],s=>e("button",{key:s[0],onClick:m=>ge(s[0]),class:j(["px-3 py-2 -mb-px border-b-2",w.value===s[0]?"border-indigo-500 text-indigo-600 font-medium":"border-transparent text-gray-500"])},n(s[1]),11,ot)),64))]),w.value==="accounts"?(a(),o("div",nt,[e("div",it,[e("div",dt,[t[28]||(t[28]=e("label",{class:"text-xs text-gray-500"},"Nuova casella",-1)),x(e("input",{"onUpdate:modelValue":t[1]||(t[1]=s=>I.value.email=s),placeholder:"nome@dominio",class:"w-full border rounded-md px-2 py-1.5 text-sm"},null,512),[[h,I.value.email]])]),e("div",null,[t[29]||(t[29]=e("label",{class:"text-xs text-gray-500"},"Quota (MB)",-1)),x(e("input",{"onUpdate:modelValue":t[2]||(t[2]=s=>I.value.quota_mb=s),type:"number",class:"w-full border rounded-md px-2 py-1.5 text-sm"},null,512),[[h,I.value.quota_mb,void 0,{number:!0}]])]),e("button",{onClick:Ie,class:"bg-indigo-600 text-white rounded-md px-3 py-1.5 text-sm"}
2,"Crea")]),e("div",rt,[e("span",ut,[t[30]||(t[30]=p("Catch-all dominio ",-1)),e("span",ct,n(_.value),1),t[31]||(t[31]=p(":",-1))]),x(e("select",{"onUpdate:modelValue":t[3]||(t[3]=s=>V.value=s),class:"border rounded-md px-2 py-1 text-sm"},[t[32]||(t[32]=e("option",{value:""},"â nessuna â",-1)),(a(!0),o(b,null,g(q.value,s=>(a(),o("option",{key:s.id,value:s.email},n(s.email),9,mt))),128))],512),[[we,V.value]]),e("button",{onClick:ze,class:"bg-indigo-600 text-white rounded-md px-3 py-1 text-sm"},"Salva"),t[33]||(t[33]=e("span",{class:"text-xs text-gray-400 ml-auto"},"raccoglie tutta la posta del dominio non indirizzata a una casella esistente",-1))]),Y.value?(a(),o("div",pt,"Caricamentoâ¦")):(a(),o("table",vt,[t[35]||(t[35]=e("thead",{class:"text-left text-gray-500 border-b"},[e("tr",null,[e("th",{class:"py-2"},"Indirizzo"),e("th",null,"Nome"),e("th",null,"Quota"),e("th",{class:"text-right"},"Azioni")])],-1)),e("tbody",null,[(a(!0),o(b,null,g(q.value,s=>(a(),o("tr",{key:s.id,class:"border-b hover:bg-gray-50"},[e("td",xt,n(s.email),1),e("td",yt,n(s.description),1),e("td",bt,n(s.quota?(s.quota/1024/1024).toFixed(0)+" MB":"â"),1),e("td",gt,[e("button",{onClick:m=>$e(s),class:"text-indigo-600 hover:underline"},"Reset pw",8,ft),e("button",{onClick:m=>He(s),class:"text-indigo-600 hover:underline"},"App-pw",8,wt),e("button",{onClick:m=>Re(s),class:"text-indigo-600 hover:underline"},"Alias",8,ht),e("button",{onClick:m=>je(s),class:"text-red-600 hover:underline"},"Elimina",8,_t)])]))),128)),q.value.length?d("",!0):(a(),o("tr",kt,[...t[34]||(t[34]=[e("td",{colspan:"4",class:"py-6 text-center text-gray-400"},"Nessuna casella per questo dominio",-1)])]))])]))])):d("",!0),w.value==="lists"?(a(),o("div",Ct,[e("div",St,[e("div",null,[t[36]||(t[36]=e("label",{class:"text-xs text-gray-500"},"Indirizzo lista",-1)),x(e("input",{"onUpdate:modelValue":t[4]||(t[4]=s=>T.value.email=s),placeholder:"team@dominio",class:"w-full border rounded-md px-2 py-1.5 text-sm"},null,512),[[h,T.value.email]])]),e("div",Tt,[t[37]||(t[37]=e("label",{class:"text-xs text-gray-500"},"Membri (separati da virgola/spazio)",-1)),x(e("input",{"onUpdate:modelValue":t[5]||(t[5]=s=>T.value.members=s),placeholder:"[email protected], [email protected]",class:"w-full border rounded-md px-2 py-1.5 text-sm"},null,512),[[h,T.value.members]])]),e("button",{onClick:Me,class:"bg-indigo-600 text-white rounded-md px-3 py-1.5 text-sm"},"Crea lista")]),e("table",At,[t[39]||(t[39]=e("thead",{class:"text-left text-gray-500 border-b"},[e("tr",null,[e("th",{class:"py-2"},"Lista"),e("th",null,"Membri"),e("th",{class:"text-right"},"Azioni")])],-1)),e("tbody",null,[(a(!0),o(b,null,g(Z.value,s=>(a(),o("tr",{key:s.id,class:"border-b hover:bg-gray-50"},[e("td",Pt,n(s.email),1),e("td",It,n((s.members||[]).join(", ")||"â"),1),e("td",$t,[e("button",{onClick:m=>Ve(s),class:"text-red-600 hover:underline"},"Elimina",8,Et)])]))),128)),Z.value.length?d("",!0):(a(),o("tr",Ut,[...t[38]||(t[38]=[e("td",{colspan:"3",class:"py-6 text-center text-gray-400"},"Nessuna lista",-1)])]))])])])):d("",!0),w.value==="templates"?(a(),o("div",jt,[t[40]||(t[40]=e("p",{class:"text-xs text-gray-500 mb-2"},[p("Variabili: "),e("code",null,"{name} {email} {password} {domain} {webmail} {imap} {smtp}")],-1)),t[41]||(t[41]=e("label",{class:"text-xs text-gray-500"},"Oggetto",-1)),x(e("input",{"onUpdate:modelValue":t[6]||(t[6]=s=>R.value.subject=s),class:"w-full border rounded-md px-2 py-1.5 text-sm mb-3"},null,512),[[h,R.value.subject]]),t[42]||(t[42]=e("label",{class:"text-xs text-gray-500"},"Corpo",-1)),x(e("textarea",{"onUpdate:modelValue":t[7]||(t[7]=s=>R.value.body=s),rows:"14",class:"w-full border rounded-md px-2 py-2 text-sm font-mono"},null,512),[[h,R.value.body]]),e("div",Ot,[e("button",{onClick:Be,class:"bg-indigo-600 text-white rounded-md px-4 py-1.5 text-sm"},"Salva template"),ee.value?(a(),o("span",zt,"Salvato â")):d("",!0)])])):d("",!0),w.value==="security"?(a(),o("div",Rt,[te.value?(a(),o("div",Nt,"Analisiâ¦")):S.value?(a(),o("div",Mt,[e("div",Vt,[e("div",Lt,[t[43]||(t[43]=e("div",{class:"text-xs text-gray-500"},"Verdetto",-1)),ue(Q(X),{theme:S.value.external_successful_logins?"red":"green"},{default:H(()=>[p(n(S.value.verdict),1)]),_:1},8,["theme"])]),e("div",Bt,[t[44]||(t[44]=e("div",{class:"text-xs text-gray-500"},"Login esterni riusciti",-1)),e("div",{class:j(["text-lg font-semibold",S.value.external_successful_logins?"text-red-600":"text-green-600"])}
2,n(S.value.external_successful_logins),3)]),e("div",Jt,[t[45]||(t[45]=e("div",{class:"text-xs text-gray-500"},"Tentativi bloccati",-1)),e("div",qt,n(S.value.blocked_attempts),1)])]),e("p",Dt,"Finestra: "+n(S.value.window),1),e("table",Ft,[t[47]||(t[47]=e("thead",{class:"text-left text-gray-500 border-b"},[e("tr",null,[e("th",{class:"py-2"},"Account"),e("th",null,"Login"),e("th",null,"IP sorgenti"),e("th",null,"Ultimo")])],-1)),e("tbody",null,[(a(!0),o(b,null,g(S.value.accounts,s=>(a(),o("tr",{key:s.account,class:j(["border-b",s.external?"bg-red-50":""])},[e("td",Gt,[p(n(s.account)+" ",1),s.external?(a(),Xe(Q(X),{key:0,theme:"red",class:"ml-1"},{default:H(()=>[...t[46]||(t[46]=[p("esterno!",-1)])]),_:1})):d("",!0)]),e("td",null,n(s.logins),1),e("td",Kt,n(s.ips.map(m=>m.ip+"Ã"+m.count).join(", ")),1),e("td",Ht,n(s.last),1)],2))),128))])])])):d("",!0)])):d("",!0),w.value==="antiban"?(a(),o("div",Qt,[le.value?(a(),o("div",Wt,"Caricamentoâ¦")):(a(),o("div",Xt,[t[51]||(t[51]=e("p",{class:"text-sm text-gray-500 mb-3"},[p(" Controllo source-aware: gli IP con login riusciti (utenti legittimi
2) o interni sono "),e("b",null,"collaterali"),p(" e vanno sbloccati; gli IP con soli fallimenti sono attaccanti e restano bannati. ")],-1)),e("div",Yt,[t[48]||(t[48]=e("div",{class:"flex items-center justify-between mb-2"},[e("h3",{class:"font-semibold text-sm"},"Policy auto-ban (per IP)")],-1)),e("table",Zt,[e("tbody",null,[(a(!0),o(b,null,g(ce.value,(s,m)=>(a(),o("tr",{key:m,class:"border-b last:border-0"},[e("td",es,n(m),1),e("td",ts,[p(n(s.value)+" ",1),s.set?d("",!0):(a(),o("span",ss,"(default)"))]),e("td",ls,[m==="auth"?(a(),o("button",{key:0,onClick:t[8]||(t[8]=M=>ne("auth","false")),class:"text-xs px-2 py-1 rounded bg-amber-50 text-amber-700"},"Disabilita IP-ban")):d("",!0),m==="auth"?(a(),o("button",{key:1,onClick:t[9]||(t[9]=M=>ne("auth","2000/1d")),class:"text-xs px-2 py-1 rounded bg-gray-100"},"Soglia 2000/1d")):d("",!0),m==="auth"?(a(),o("button",{key:2,onClick:t[10]||(t[10]=M=>ne("auth","100/1d")),class:"text-xs px-2 py-1 rounded bg-gray-100"},"Default 100/1d")):d("",!0)])]))),128))])])]),e("div",as,[e("div",{class:"flex items-center justify-between mb-2"},[t[49]||(t[49]=e("h3",{class:"font-semibold text-sm"},"Allowlist â sorgenti immuni dai ban",-1)),e("button",{onClick:Te,class:"text-xs px-2 py-1 rounded bg-indigo-50 text-indigo-700"},"+ Aggiungi")]),e("div",os,[(a(!0),o(b,null,g(se.value,s=>(a(),o("span",{key:s,class:"text-xs font-mono bg-gray-100 rounded px-2 py-1"},[p(n(s)+" ",1),e("button",{onClick:m=>Ae(s),class:"text-red-500 ml-1"},"Ã",8,ns)]))),128)),se.value.length?d("",!0):(a(),o("span",is,"nessuna"))])]),e("div",ds,[e("h3",rs,[p("Blocklist â "+n(E.value&&E.value.total)+" IP ",1),ue(Q(X),{theme:"amber",class:"ml-1"},{default:H(()=>[p(n(E.value&&E.value.legit_collateral)+" legittimi collaterali",1)]),_:1})]),e("button",{onClick:t[11]||(t[11]=s=>Ce()),class:"text-sm px-3 py-1.5 rounded-md bg-green-600 text-white"},"Auto-sblocco legittimi")]),e("table",us,[t[50]||(t[50]=e("thead",{class:"text-left text-gray-500 border-b"},[e("tr",null,[e("th",{class:"py-2"},"IP"),e("th",null,"Verdetto"),e("th")])],-1)),e("tbody",null,[(a(!0),o(b,null,g(E.value?E.value.items:[],s=>(a(),o("tr",{key:s.ip,class:j(["border-b",s.verdict==="legittimo-collaterale"?"bg-amber-50":""])},[e("td",cs,n(s.ip),1),e("td",null,[ue(Q(X),{theme:s.verdict==="legittimo-collaterale"?"amber":"gray"},{default:H(()=>[p(n(s.verdict),1)]),_:2},1032,["theme"]),s.internal?(a(),o("span",ms,"interno")):d("",!0)]),e("td",ps,[e("button",{onClick:m=>Se(s.ip),class:"text-xs px-2 py-1 rounded bg-gray-100"},"Sblocca",8,vs)])],2))),128))])])]))])):d("",!0),w.value==="sync"?(a(),o("div",xs,[e("div",{class:"flex justify-between items-center mb-3"},[t[52]||(t[52]=e("h3",{class:"font-medium"},"Stato sincronia caselle",-1)),e("div",{class:"space-x-2"},[e("button",{onClick:de,class:"text-sm px-3 py-1.5 rounded-md bg-gray-100"},"Aggiorna"),e("button",{onClick:Fe,class:"text-sm px-3 py-1.5 rounded-md bg-green-600 text-white"},"Riallinea")])]),e("table",ys,[t[53]||(t[53]=e("thead",null,[e("tr",{class:"text-left text-gray-500"},[e("th",null,"Casella"),e("th",null,"Uso"),e("th",null,"Vault"),e("th",null,"Email Account"),e("th",null,"SSO"),e("th",null,"Auth"),e("th",null,"Stato")])],-1)),e("tbody",null,[(a(!0),o(b,null,g(me.value,s=>(a(),o("tr",{key:s.mailbox,class:"border-t"},[e("td",bs,n(s.mailbox),1),e("td",gs,n(s.uso),1),e("td",null,n(s.in_vault?"â":"â"),1),e("td",null,n(s.email_account!=="-"?s.ea_in_sync?"â":"â ":"â"),1),e("td",null,n(s.webmail_sso?"â":"â"),1),e("td",null,n(s.auth_ok?"â":"â"),1),e("td",null,[e("span",{class:j(s.verdict==="OK"?"text-green-600":s.verdict==="BROKEN"?"text-red-600 font-semibold":s.verdict==="DRIFT"?"text-amber-600":"text-gray-400")},n(s.verdict),3)])]))),128))])]),t[61]||(t[61]=e("h3",{class:"font-medium mb-2"},"App-password per client esterni (Outlook)",-1)),t[62]||(t[62]=e("p",{class:"text-xs text-gray-500 mb-3"},"Credenziale dedicata e revocabile, separata dalla password principale.",-1)),e("div",fs,[e("div",null,[t[54]||(t[54]=e("label",{class:"block text-xs text-gray-500"},"Casella",-1)),x(e("input",{"onUpdate:modelValue":t[12]||(t[12]=s=>A.value=s),onChange:K,placeholder:"[email protected]",class:"border rounded px-2 py-1 text-sm"},null,544),[[h,A.value]])]),e("div",null,[t[55]||(t[55]=e("label",{class:"block text-xs text-gray-500"},"Etichetta",-1)),x(e("input",{"onUpdate:modelValue":t[13]||(t[13]=s=>oe.value=s),placeholder:"outlook",class:"border rounded px-2 py-1 text-sm"},null,512),[[h,oe.value]])]),e("button",{onClick:Ge,class:"bg-indigo-600 text-white rounded-md px-3 py-1.5 text-sm"},"Genera")]),U.value?(a(),o("div",ws,[t[59]||(t[59]=e("div",{class:"text-gray-500 text-xs mb-1"},"App-password (copiala ora, non sara' piu' mostrata):",-1)),e("div",hs,n(U.value.app_password),1),e("div",_s,[t[56]||(t[56]=e("b",null,"IMAP",-1)),p(": "+n(U.value.imap)+" \\u00b7 utente "+n(U.value.mailbox),1),t[57]||(t[57]=e("br",null,null,-1)),t[58]||(t[58]=e("b",null,"SMTP",-1)),p(": "+n(U.value.smtp),1)])])):d("",!0),F.value.length?(a(),o("div",ks,[t[60]||(t[60]=e("span",{class:"text-gray-500 text-xs"},"Attive:",-1)),(a(!0),o(b,null,g(F.value,s=>(a(),o("span",{key:s,class:"inline-block bg-gray-100 rounded-full px-3 py-1 ml-1"},[p("\\ud83d\\udd11 "+n(s)+" ",1),e("a",{href:"#",onClick:W(m=>Ke(s),["prevent"]),class:"text-red-600 ml-1"},"revoca",8,Cs)]))),128))])):d("",!0)])):d("",!0),w.value==="overview"?(a(),o("div",Ss,[e("div",Ts,[e("div",As,[e("div",Ps,n(v.value&&v.value.counts?v.value.counts.domain:"-"),1),t[63]||(t[63]=e("div",{class:"text-xs text-gray-500"},"Domini",-1))]),e("div",Is,[e("div",$s,n(v.value&&v.value.counts?v.value.counts.individual:"-"),1),t[64]||(t[64]=e("div",{class:"text-xs text-gray-500"},"Caselle",-1))]),e("div",Es,[e("div",Us,n(v.value&&v.value.counts?v.value.counts.alias:"-"),1),t[65]||(t[65]=e("div",{class:"text-xs text-gray-500"},"Alias",-1))]),e("div",js,[e("div",Os,n(v.value&&v.value.counts?v.value.counts.list:"-"),1),t[66]||(t[66]=e("div",{class:"text-xs text-gray-500"},"Liste",-1))])]),e("div",zs,[t[70]||(t[70]=e("h3",{class:"font-semibold text-sm mb-2"},"Credenziali admin Stalwart",-1)),e("div",Rs,[e("div",null,[t[67]||(t[67]=e("span",{class:"text-gray-500"},"User:",-1)),t[68]||(t[68]=p()),e("code",null,n(k.value&&k.value.user||"-"),1)]),e("div",Ns,[t[69]||(t[69]=e("span",{class:"text-gray-500"},"Password:",-1)),e("code",null,n(D.value?k.value&&k.value.password||"-":"************"),1),e("button",{onClick:t[14]||(t[14]=s=>
2D.value=!D.value),class:"text-xs px-2 py-1 rounded bg-gray-100"},n(D.value?"Nascondi":"Mostra"),1),e("button",{onClick:De,class:"text-xs px-2 py-1 rounded bg-indigo-50 text-indigo-700"},n(ae.value?"Copiato!":"Copia"),1)]),k.value&&k.value.url?(a(),o("code",Ms,n(k.value.url),1)):d("",!0)]),t[71]||(t[71]=e("p",{class:"text-xs text-gray-400 mt-2"},"Fallback-admin Stalwart (dal vault). Visibile solo agli amministratori.",-1))]),t[74]||(t[74]=e("h3",{class:"font-semibold text-sm mb-2"},"Caselle per spazio usato",-1)),e("table",Vs,[t[73]||(t[73]=e("thead",{class:"text-left text-gray-500 border-b"},[e("tr",null,[e("th",{class:"py-2"},"Casella"),e("th",null,"Usato"),e("th",null,"Quota"),e("th",null,"% uso")])],-1)),e("tbody",null,[(a(!0),o(b,null,g(v.value?v.value.accounts:[],s=>(a(),o("tr",{key:s.email,class:"border-b hover:bg-gray-50"},[e("td",Ls,n(s.email),1),e("td",Bs,n(be(s.used)),1),e("td",Js,n(s.quota?be(s.quota):"illimitata"),1),e("td",null,[s.quota?(a(),o("span",qs,[e("span",Ds,[e("span",{class:j(["block h-full",s.used/s.quota*100>80?"bg-red-500":"bg-indigo-500"]),style:Ye({width:Math.min(Math.round(s.used/s.quota*100),100)+"%"})},null,6)]),e("span",Fs,n(Math.round(s.used/s.quota*100))+"%",1)])):(a(),o("span",Gs,"-"))])]))),128)),v.value&&!(v.value.accounts&&v.value.accounts.length)?(a(),o("tr",Ks,[...t[72]||(t[72]=[e("td",{colspan:"4",class:"py-6 text-center text-gray-400"},"Nessuna casella",-1)])])):d("",!0)])])])):d("",!0),$.value?(a(),o("div",{key:9,class:"fixed inset-0 bg-black/40 flex items-center justify-center z-50",onClick:t[20]||(t[20]=W(s=>$.value=null,["self"]))},[e("div",Hs,[t[77]||(t[77]=e("h3",{class:"font-semibold mb-1"},"Reimposta password",-1)),e("p",Qs,n($.value.email)+" â le app-password restano valide.",1),e("div",Ws,[e("label",Xs,[x(e("input",{type:"radio",value:!1,"onUpdate:modelValue":t[15]||(t[15]=s=>r.value.manual=s),class:"accent-indigo-600"},null,512),[[he,r.value.manual]]),t[75]||(t[75]=p(" Genera automaticamente (password sicura) ",-1))]),e("label",Ys,[x(e("input",{type:"radio",value:!0,"onUpdate:modelValue":t[16]||(t[16]=s=>r.value.manual=s),class:"accent-indigo-600"},null,512),[[he,r.value.manual]]),t[76]||(t[76]=p(" Scegli password manualmente ",-1))]),r.value.manual?(a(),o("div",Zs,[x(e("input",{"onUpdate:modelValue":t[17]||(t[17]=s=>r.value.value=s),type:"password",placeholder:"Nuova password (min 8 caratteri)",onInput:t[18]||(t[18]=s=>Ee(r.value.value)),class:j(["w-full border rounded-md px-2 py-1.5 text-sm",r.value.pwned>0?"border-red-400 bg-red-50":""])},null,34),[[h,r.value.value]]),r.value.checking?(a(),o("p",el,"Controllo HIBPâ¦")):r.value.pwned>0?(a(),o("p",tl," â Trovata in "+n(r.value.pwned.toLocaleString())+" data breach â scegli un'altra. ",1)):r.value.pwned===0&&r.value.value.length>=8?(a(),o("p",sl," â Non trovata in breach noti ")):d("",!0)])):d("",!0)]),e("div",ll,[e("button",{onClick:t[19]||(t[19]=s=>$.value=null),class:"px-3 py-1.5 text-sm text-gray-600 hover:text-gray-900"},"Annulla"),e("button",{onClick:Ue,disabled:r.value.manual&&(!r.value.value||r.value.value.length<8||r.value.pwned>0||r.value.checking),class:"bg-indigo-600 text-white rounded-md px-4 py-1.5 text-sm disabled:opacity-40 disabled:cursor-not-allowed"}," Reimposta ",8,al)])])])):d("",!0),f.value?(a(),o("div",{key:10,class:"fixed inset-0 bg-black/40 flex items-center justify-center z-50",onClick:t[23]||(t[23]=W(s=>f.value=null,["self"]))},[e("div",ol,[e("h3",nl,"Alias di "+n(f.value.email),1),t[78]||(t[78]=e("p",{class:"text-xs text-gray-500 mb-3"},"Gli alias consegnano nella stessa casella: un solo account Outlook riceve tutti gli indirizzi.",-1)),e("div",il,[x(e("input",{"onUpdate:modelValue":t[21]||(t[21]=s=>z.value=s),onKeyup:_e(ye,["enter"]),type:"email",placeholder:"alias@dominio",class:"flex-1 border rounded-md px-2 py-1.5 text-sm"},null,544),[[h,z.value]]),e("button",{onClick:ye,disabled:!z.value.includes("@"),class:"bg-indigo-600 text-white rounded-md px-3 py-1.5 text-sm disabled:opacity-40 disabled:cursor-not-allowed"},"Aggiungi",8,dl)]),e("div",rl,[(a(!0),o(b,null,g(f.value.aliases,s=>(a(),o("div",{key:s,class:"flex items-center justify-between px-3 py-1.5 text-sm"},[e("span",ul,n(s),1),e("button",{onClick:m=>Ne(s),class:"text-red-600 hover:underline text-xs"},"Rimuovi",8,cl)]))),128)),f.value.aliases.length?d("",!0):(a(),o("div",ml,"Nessun alias"))]),e("div",pl,[e("button",{onClick:t[22]||(t[22]=s=>f.value=null),class:"bg-gray-800 text-white rounded-md px-4 py-1.5 text-sm"},"Chiudi")])])])):d("",!0),y.value?(a(),o("div",{key:11,class:"fixed inset-0 bg-black/40 flex items-center justify-center z-50",onClick:t[26]||(t[26]=W(s=>y.value=null,["self"]))},[e("div",vl,[e("h3",xl,n(y.value.reset?"Password reimpostata":"Casella creata"),1),t[81]||(t[81]=e("p",{class:"text-xs text-gray-500 mb-3"},"Copia ora la password: non sarà più visibile.",-1)),e("div",yl,[e("div",null,"Indirizzo: "+n(y.value.email),1),e("div",null,[t[79]||(t[79]=p("Password: ",-1)),e("span",bl,n(y.value.password),1)]),y.value.imap?(a(),o("div",gl,"IMAP: "+n(y.value.imap),1)):d("",!0),y.value.smtp?(a(),o("div",fl,"SMTP: "+n(y.value.smtp),1)):d("",!0)]),e("div",wl,[t[80]||(t[80]=e("label",{class:"block text-xs text-gray-500 mb-1"}
2,"Invia le credenziali a una mail di recupero",-1)),e("div",hl,[x(e("input",{"onUpdate:modelValue":t[24]||(t[24]=s=>O.value=s),type:"email",placeholder:"[email protected]",onKeyup:_e(xe,["enter"]),class:"flex-1 border rounded-md px-2 py-1.5 text-sm"},null,544),[[h,O.value]]),e("button",{onClick:xe,disabled:!O.value.includes("@"),class:"bg-indigo-600 text-white rounded-md px-3 py-1.5 text-sm whitespace-nowrap disabled:opacity-40 disabled:cursor-not-allowed"}," Invia ",8,_l)])]),e("div",kl,[e("button",{onClick:Oe,class:"text-indigo-600 text-sm hover:underline"},"Invia email di benvenuto"),e("button",{onClick:t[25]||(t[25]=s=>y.value=null),class:"bg-gray-800 text-white rounded-md px-4 py-1.5 text-sm"},"Chiudi")])])])):d("",!0)]))}};export{Pl as default};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.