+ v-for="key in ['Jc', 'Jmin', 'Jmax', 'S1', 'S2', 'S3', 'S4', 'H1', 'H2', 'H3', 'H4', 'I1', 'I2', 'I3', 'I4', 'I5', 'J1', 'J2', 'J3', 'Itime']">
o?r:o}},mounted(){this.$emit("lang",this.languages[0][0]),this.$emit("content",this.content),this.$emit("textarea",this.$refs.textarea),this.resizer()},updated(){this.insertTab&&(this.$refs.textarea.setSelectionRange(this.cursorPosition,this.cursorPosition),this.insertTab=!1),this.lineNums&&(this.scrolling?this.scrolling=!1:this.getLineNum())}},ke=["theme"],Ce=["readOnly","autofocus","value"];function Se(d,r,t,f,o,g){const u=Q("Dropdown"),x=X("highlight");return v(),h("div",{theme:t.theme,class:B(["code-editor",{"hide-header":!t.header,scroll:g.scroll,"read-only":t.readOnly,wrap:t.wrap}]),style:D({width:t.width,height:t.height,zIndex:t.zIndex,maxWidth:t.maxWidth,minWidth:t.minWidth,maxHeight:t.maxHeight,minHeight:t.minHeight})},[e("div",{class:"hljs",style:D({borderRadius:t.borderRadius})},[t.header?(v(),h("div",{key:0,class:B(["header",{border:o.showLineNums}]),style:D({borderRadius:t.borderRadius+" "+t.borderRadius+" 0 0"})},[t.displayLanguage?(v(),R(u,{key:0,width:t.langListWidth,title:o.languageTitle,disabled:t.languages.length<=1,defaultDisplay:t.langListDisplay},null,8,["width","title","disabled","defaultDisplay"])):N("",!0)],6)):N("",!0),e("div",{class:"code-area",style:D({borderRadius:t.header?"0 0 "+t.borderRadius+" "+t.borderRadius:t.borderRadius})},[o.showLineNums?(v(),h("div",{key:0,ref:"lineNums",class:"line-nums hljs",style:D({fontSize:t.fontSize,paddingTop:t.header?"10px":t.padding,paddingBottom:t.padding,top:o.top+"px"})},[r[3]||(r[3]=e("div",null,"1",-1)),(v(!0),h(I,null,K(o.lineNum,c=>(v(),h("div",null,P(c+1),1))),256)),r[4]||(r[4]=e("div",null," ",-1))],4)):N("",!0),e("textarea",{title:"textarea",readOnly:t.readOnly,style:D({fontSize:t.fontSize,padding:t.header?t.lineNums?"10px "+t.padding+" "+t.padding:"0 "+t.padding+" "+t.padding:t.padding,marginLeft:o.showLineNums?o.lineNumsWidth+"px":"0",width:o.showLineNums?"calc(100% - "+o.lineNumsWidth+"px)":"100%"}),ref:"textarea",autofocus:t.autofocus,spellcheck:"false",onKeydown:r[0]||(r[0]=ee(te((...c)=>g.tab&&g.tab(...c),["prevent","stop"]),["tab"])),onScroll:r[1]||(r[1]=(...c)=>g.calcScrollDistance&&g.calcScrollDistance(...c)),value:t.modelValue==null?o.content:t.modelValue,onInput:r[2]||(r[2]=(...c)=>g.updateValue&&g.updateValue(...c))},null,44,Ce),e("pre",{style:D({paddingRight:o.scrollBarWidth+"px",paddingBottom:o.scrollBarHeight+"px",marginLeft:o.showLineNums?o.lineNumsWidth+"px":"0",width:o.showLineNums?"calc(100% - "+o.lineNumsWidth+"px)":"100%"})},[r[6]||(r[6]=V(" ",-1)),C((v(),h("code",{ref:"code",class:B(o.languageClass),style:D({top:o.top+"px",left:o.left+"px",fontSize:t.fontSize,padding:t.header?t.lineNums?"10px "+t.padding+" "+t.padding:"0 "+t.padding+" "+t.padding:t.padding})},[...r[5]||(r[5]=[V(`
`,-1)])],6)),[[x,g.contentValue]]),r[7]||(r[7]=V(`
- `,-1))],4)],4)],4)],14,ke)}const $e=M(we,[["render",Se]]),Ne={class:"peerSettingContainer w-100 h-100 position-absolute top-0 start-0 overflow-y-scroll"},Pe={class:"container d-flex h-100 w-100"},Be={class:"m-auto modal-dialog-centered dashboardModal",style:{width:"1000px"}},Re={class:"card rounded-3 shadow flex-grow-1",id:"deleteConfigurationContainer"},De={class:"card-header bg-transparent d-flex align-items-center gap-2 border-0 p-4 pb-0"},Le={class:"mb-0"},We={class:"card-body px-4 d-flex flex-column gap-3"},Ie={key:0,class:"alert alert-danger rounded-3 mb-0"},Ve={class:"mb-2"},Oe={class:"bg-body w-100 p-2 rounded-3"},Me={class:"d-flex gap-2"},He=["disabled"],Ke=["disabled"],Te={__name:"editRawConfigurationFile",emits:["close"],async setup(d,{emit:r}){let t,f;const o=r,g=A(),u=y(""),x=y(""),c=y(!1),a=y(""),b=async()=>{await O("/api/getWireguardConfigurationRawFile",{configurationName:g.params.id},m=>{u.value=m.data.content,x.value=m.data.path})};[t,f]=se(()=>b()),await t,f();const _=H(),w=y(!1),S=async()=>{w.value=!0,await L("/api/updateWireguardConfigurationRawFile",{configurationName:g.params.id,rawConfiguration:u.value},m=>{m.status?(c.value=!1,_.newMessage("Server","Configuration saved","success")):(c.value=!0,a.value=m.message),w.value=!1})};return(m,i)=>(v(),h("div",Ne,[e("div",Pe,[e("div",Be,[e("div",Re,[e("div",De,[e("h5",Le,[s(n,{t:"Edit Raw Configuration File"})]),e("button",{type:"button",class:"btn-close ms-auto",onClick:i[0]||(i[0]=k=>o("close"))})]),e("div",We,[c.value?(v(),h("div",Ie,[e("div",Ve,[e("strong",null,[s(n,{t:"Failed to save configuration. Please see the following error message:"})])]),e("div",Oe,[e("pre",null,P(a.value),1)])])):N("",!0),s($e,{disabled:!0,"read-only":w.value,modelValue:u.value,"onUpdate:modelValue":i[1]||(i[1]=k=>u.value=k),theme:T(_).Configuration.Server.dashboard_theme==="dark"?"github-dark":"github",languages:[["ini",x.value]],width:"100%",height:"600px"},null,8,["read-only","modelValue","theme","languages"]),e("div",Me,[e("button",{class:"btn bg-secondary-subtle border-secondary-subtle text-secondary-emphasis rounded-3 shadow ms-auto px-3 py-2",disabled:w.value,onClick:i[2]||(i[2]=k=>b())},[i[4]||(i[4]=e("i",{class:"bi bi-arrow-clockwise me-2"},null,-1)),s(n,{t:"Reset"})],8,He),e("button",{onClick:i[3]||(i[3]=k=>S()),disabled:w.value,class:"btn bg-danger-subtle border-danger-subtle text-danger-emphasis rounded-3 px-3 py-2 shadow"},[i[5]||(i[5]=e("i",{class:"bi bi-save-fill me-2"},null,-1)),w.value?(v(),R(n,{key:1,t:"Saving..."})):(v(),R(n,{key:0,t:"Save"}))],8,Ke)])])])])])]))}},Ue={class:"peerSettingContainer w-100 h-100 position-absolute top-0 start-0 overflow-y-scroll"},ze={class:"container d-flex h-100 w-100"},Ae={class:"m-auto modal-dialog-centered dashboardModal",style:{width:"700px"}},Ee={class:"card rounded-3 shadow flex-grow-1 bg-danger-subtle border-danger-subtle",id:"deleteConfigurationContainer"},Fe={class:"card-header bg-transparent d-flex align-items-center gap-2 border-0 p-4 pb-0"},Je={class:"mb-0"},je={class:"card-body px-4 text-muted"},Ye={class:"mb-0"},qe={key:0},Ge={key:1},Ze={key:2,class:"d-flex align-items-center gap-2"},Qe=["placeholder"],Xe=["disabled"],et={__name:"deleteConfiguration",emits:["backup","close"],setup(d,{emit:r}){const f=A().params.id,o=y(""),g=G(),u=H(),x=y(!1),c=()=>{clearInterval(u.Peers.RefreshInterval),x.value=!0,L("/api/deleteWireguardConfiguration",{ConfigurationName:f},S=>{S.status?(g.push("/"),u.newMessage("Server","Configuration deleted","success")):x.value=!1})},a=y(!0),b=y([]),_=()=>{a.value=!0,O("/api/getWireguardConfigurationBackup",{configurationName:f},S=>{b.value=S.data,a.value=!1})};z(()=>{_()});const w=r;return(S,m)=>(v(),h("div",Ue,[e("div",ze,[e("div",Ae,[e("div",Ee,[e("div",Fe,[e("h5",Je,[s(n,{t:"Are you sure to delete this configuration?"})]),e("button",{type:"button",class:"btn-close ms-auto",onClick:m[0]||(m[0]=i=>w("close"))})]),e("div",je,[e("p",Ye,[s(n,{t:"Once you deleted this configuration:"})]),e("ul",null,[e("li",null,[s(n,{t:"All connected peers will get disconnected"})]),e("li",null,[s(n,{t:"Both configuration file (.conf) and database table related to this configuration will get deleted"})])]),e("div",{class:B(["alert",[a.value?"alert-secondary":b.value.length>0?"alert-success":"alert-danger"]])},[a.value?(v(),h("div",qe,[m[5]||(m[5]=e("i",{class:"bi bi-search me-2"},null,-1)),s(n,{t:"Checking backups..."})])):b.value.length>0?(v(),h("div",Ge,[m[6]||(m[6]=e("i",{class:"bi bi-check-circle-fill me-2"},null,-1)),s(n,{t:"This configuration has "+b.value.length+" backups"},null,8,["t"])])):(v(),h("div",Ze,[m[9]||(m[9]=e("i",{class:"bi bi-x-circle-fill me-2"},null,-1)),s(n,{t:"This configuration has no backup"}),e("a",{role:"button",onClick:m[1]||(m[1]=i=>w("backup")),class:"ms-auto btn btn-sm btn-primary rounded-3"},[m[7]||(m[7]=e("i",{class:"bi bi-clock-history me-2"},null,-1)),s(n,{t:"Backup"})]),e("a",{role:"button",onClick:m[2]||(m[2]=i=>_()),class:"btn btn-sm btn-primary rounded-3"},[...m[8]||(m[8]=[e("i",{class:"bi bi-arrow-clockwise"},null,-1)])])]))],2),m[11]||(m[11]=e("hr",null,null,-1)),e("p",null,[s(n,{t:"If you're sure, please type in the configuration name below and click Delete"})]),C(e("input",{class:"form-control rounded-3 mb-3",placeholder:T(f),"onUpdate:modelValue":m[3]||(m[3]=i=>o.value=i),type:"text"},null,8,Qe),[[$,o.value]]),e("button",{class:"btn btn-danger w-100",onClick:m[4]||(m[4]=i=>c()),disabled:o.value!==T(f)||x.value},[m[10]||(m[10]=e("i",{class:"bi bi-trash-fill me-2 rounded-3"},null,-1)),x.value?(v(),R(n,{key:1,t:"Deleting..."})):(v(),R(n,{key:0,t:"Delete"}))],8,Xe)])])])])]))}},tt={class:"card my-0 rounded-3"},st={class:"card-body position-relative"},nt={key:0,class:"position-absolute w-100 h-100 confirmationContainer start-0 top-0 rounded-3 d-flex p-2"},ot={class:"m-auto"},lt={class:"d-flex gap-2 align-items-center justify-content-center"},it=["disabled"],at=["disabled"],dt={key:0,class:"position-absolute w-100 h-100 confirmationContainer start-0 top-0 rounded-3 d-flex p-2"},rt={class:"m-auto"},ut={class:"d-flex gap-2 align-items-center justify-content-center"},ct=["disabled"],mt=["disabled"],ft={class:"d-flex gap-3"},gt={class:"d-flex flex-column"},bt={class:"text-muted"},vt={class:"d-flex flex-column"},pt={class:"text-muted"},ht={class:"d-flex gap-2 align-items-center ms-auto"},yt={class:"card rounded-3"},xt={key:0,class:"card-body"},_t=["value"],wt={class:"d-flex"},kt={__name:"backup",props:["b","delay"],emits:["refresh","refreshPeersList"],setup(d,{emit:r}){ne(m=>({v2dd0b691:w.value}));const t=d,f=y(!1),o=y(!1),g=A(),u=r,x=H(),c=y(!1),a=()=>{c.value=!0,L("/api/deleteWireguardConfigurationBackup",{ConfigurationName:g.params.id,BackupFileName:t.b.filename},m=>{c.value=!1,m.status?(u("refresh"),x.newMessage("Server","Backup deleted","success")):x.newMessage("Server","Backup failed to delete","danger")})},b=()=>{c.value=!0,L("/api/restoreWireguardConfigurationBackup",{ConfigurationName:g.params.id,BackupFileName:t.b.filename},m=>{c.value=!1,o.value=!1,m.status?(u("refreshPeersList"),x.newMessage("Server","Backup restored with "+t.b.filename,"success")):x.newMessage("Server","Backup failed to restore","danger")})},_=()=>{O("/api/downloadWireguardConfigurationBackup",{configurationName:g.params.id,backupFileName:t.b.filename},m=>{m.status&&window.open(oe(`/fileDownload?file=${m.data}`),"_blank")})},w=le(()=>t.delay+"s"),S=y(!1);return(m,i)=>(v(),h("div",tt,[e("div",st,[s(j,{name:"zoomReversed"},{default:U(()=>[f.value?(v(),h("div",nt,[e("div",ot,[e("h5",null,[s(n,{t:"Are you sure to delete this backup?"})]),e("div",lt,[e("button",{class:"btn btn-danger rounded-3",disabled:c.value,onClick:i[0]||(i[0]=k=>a())},[s(n,{t:"Yes"})],8,it),e("button",{onClick:i[1]||(i[1]=k=>f.value=!1),disabled:c.value,class:"btn bg-secondary-subtle text-secondary-emphasis border-secondary-subtle rounded-3"},[s(n,{t:"No"})],8,at)])])])):N("",!0)]),_:1}),s(j,{name:"zoomReversed"},{default:U(()=>[o.value?(v(),h("div",dt,[e("div",rt,[e("h5",null,[s(n,{t:"Are you sure to restore this backup?"})]),e("div",ut,[e("button",{disabled:c.value,onClick:i[2]||(i[2]=k=>b()),class:"btn btn-success rounded-3"},[s(n,{t:"Yes"})],8,ct),e("button",{onClick:i[3]||(i[3]=k=>o.value=!1),disabled:c.value,class:"btn bg-secondary-subtle text-secondary-emphasis border-secondary-subtle rounded-3"},[s(n,{t:"No"})],8,mt)])])])):N("",!0)]),_:1}),e("div",ft,[e("div",gt,[e("small",bt,[s(n,{t:"Backup"})]),e("samp",null,P(d.b.filename),1)]),e("div",vt,[e("small",pt,[s(n,{t:"Backup Date"})]),V(" "+P(T(de)(d.b.backupDate,"YYYYMMDDHHmmss").format("YYYY-MM-DD HH:mm:ss")),1)]),e("div",ht,[e("button",{onClick:i[4]||(i[4]=k=>_()),class:"btn bg-primary-subtle text-primary-emphasis border-primary-subtle rounded-3 btn-sm"},[...i[8]||(i[8]=[e("i",{class:"bi bi-download"},null,-1)])]),e("button",{onClick:i[5]||(i[5]=k=>o.value=!0),class:"btn bg-warning-subtle text-warning-emphasis border-warning-subtle rounded-3 btn-sm"},[...i[9]||(i[9]=[e("i",{class:"bi bi-clock-history"},null,-1)])]),e("button",{onClick:i[6]||(i[6]=k=>f.value=!0),class:"btn bg-danger-subtle text-danger-emphasis border-danger-subtle rounded-3 btn-sm"},[...i[10]||(i[10]=[e("i",{class:"bi bi-trash-fill"},null,-1)])])])]),i[14]||(i[14]=e("hr",null,null,-1)),e("div",yt,[e("a",{role:"button",class:B(["card-header d-flex text-decoration-none align-items-center",{"border-bottom-0":!S.value}]),style:{cursor:"pointer"},onClick:i[7]||(i[7]=k=>S.value=!S.value)},[e("small",null,[i[11]||(i[11]=V(".conf ",-1)),s(n,{t:"File"})]),i[12]||(i[12]=e("i",{class:"bi bi-chevron-down ms-auto"},null,-1))],2),S.value?(v(),h("div",xt,[e("textarea",{class:"form-control rounded-3",value:d.b.content,disabled:"",style:{height:"300px","font-family":"var(--bs-font-monospace),sans-serif !important"}},null,8,_t)])):N("",!0)]),i[15]||(i[15]=e("hr",null,null,-1)),e("div",wt,[e("span",null,[i[13]||(i[13]=e("i",{class:"bi bi-database me-1"},null,-1)),s(n,{t:"Database File"})]),e("i",{class:B(["bi ms-auto",[d.b.database?"text-success bi-check-circle-fill":"text-danger bi-x-circle-fill"]])},null,2)])])]))}},Ct=M(kt,[["__scopeId","data-v-c65cdc10"]]),St={class:"peerSettingContainer w-100 h-100 position-absolute top-0 start-0 overflow-y-scroll",ref:"editConfigurationContainer"},$t={class:"d-flex h-100 w-100"},Nt={class:"modal-dialog-centered dashboardModal w-100 h-100 overflow-x-scroll flex-column gap-3 mx-3"},Pt={class:"my-5 d-flex gap-3 flex-column position-relative"},Bt={class:"title"},Rt={class:"d-flex mb-3"},Dt={class:"mb-0"},Lt={class:"position-relative d-flex flex-column gap-3"},Wt={class:"text-center title",key:"spinner"},It={class:"card my-0 rounded-3",key:"noBackups"},Vt={class:"card-body text-center text-muted"},Ot={__name:"configurationBackupRestore",emits:["close","refreshPeersList"],setup(d,{emit:r}){const t=A(),f=y([]),o=y(!0),g=r;z(()=>{u()});const u=()=>{o.value=!0,O("/api/getWireguardConfigurationBackup",{configurationName:t.params.id},c=>{f.value=c.data,o.value=!1})},x=()=>{O("/api/createWireguardConfigurationBackup",{configurationName:t.params.id},c=>{f.value=c.data,o.value=!1})};return(c,a)=>(v(),h("div",St,[e("div",$t,[e("div",Nt,[e("div",Pt,[e("div",Bt,[e("div",Rt,[e("h4",Dt,[s(n,{t:"Backup & Restore"})]),e("button",{type:"button",class:"btn-close ms-auto",onClick:a[0]||(a[0]=b=>c.$emit("close"))})]),e("button",{onClick:a[1]||(a[1]=b=>x()),class:"btn bg-primary-subtle text-primary-emphasis border-primary-subtle rounded-3 w-100"},[a[4]||(a[4]=e("i",{class:"bi bi-plus-circle-fill me-2"},null,-1)),s(n,{t:"Create Backup"})])]),e("div",Lt,[s(Z,{name:"list1"},{default:U(()=>[o.value&&f.value.length===0?(v(),h("div",Wt,[...a[5]||(a[5]=[e("div",{class:"spinner-border"},null,-1)])])):!o.value&&f.value.length===0?(v(),h("div",It,[e("div",Vt,[a[6]||(a[6]=e("i",{class:"bi bi-x-circle-fill me-2"},null,-1)),s(n,{t:"No backup yet, click the button above to create backup."})])])):N("",!0),(v(!0),h(I,null,K(f.value,b=>(v(),R(Ct,{onRefresh:a[2]||(a[2]=_=>u()),onRefreshPeersList:a[3]||(a[3]=_=>g("refreshPeersList")),b,key:b.filename},null,8,["b"]))),128))]),_:1})])])])])],512))}},Mt=M(Ot,[["__scopeId","data-v-1f718118"]]),Ht={id:"editPeerSettingsOverride"},Kt={class:"mb-0"},Tt={class:"mb-3 text-muted"},Ut={class:"d-flex gap-2 flex-column"},zt={for:"override_DNS",class:"form-label"},At={class:"text-muted"},Et=["disabled"],Ft={class:"invalid-feedback"},Jt={for:"override_EndpointAllowedIPs",class:"form-label"},jt={class:"text-muted"},Yt=["disabled"],qt={class:"invalid-feedback"},Gt={for:"override_ListenPort",class:"form-label"},Zt={class:"text-muted"},Qt=["disabled"],Xt={class:"invalid-feedback"},es={for:"override_MTU",class:"form-label"},ts={class:"text-muted"},ss=["disabled"],ns={class:"invalid-feedback"},os={for:"override_PeerRemoteEndpoint",class:"form-label"},ls={class:"text-muted"},is=["disabled"],as={for:"override_persistent_keepalive",class:"form-label"},ds={class:"text-muted"},rs=["disabled"],us={class:"invalid-feedback"},cs={class:"d-flex mt-1 gap-2"},ms=ie({__name:"editPeerSettingsOverride",props:["configuration"],setup(d){const r=d,t=y(!1),f=y({...r.configuration.Info.OverridePeerSettings}),o=y(!1),g=y("");z(()=>{document.querySelectorAll("#editPeerSettingsOverride input").forEach(c=>c.addEventListener("change",()=>{o.value=!0}))});const u=()=>{f.value=r.configuration.Info.OverridePeerSettings,o.value=!1},x=async()=>{document.querySelectorAll("#editPeerSettingsOverride input").forEach(c=>c.classList.remove("is-invalid","is-valid")),await L("/api/updateWireguardConfigurationInfo",{Name:r.configuration.Name,Key:"OverridePeerSettings",Value:f.value},c=>{c.status?(o.value=!1,r.configuration.Info.OverridePeerSettings=f.value,document.querySelectorAll("#editPeerSettingsOverride input").forEach(a=>a.classList.add("is-valid"))):(g.value=c.message,document.querySelector(`#override_${c.data}`).classList.add("is-invalid"))})};return(c,a)=>(v(),h("div",Ht,[e("h5",Kt,[s(n,{t:"Override Peer Settings"})]),e("h6",Tt,[e("small",null,[s(n,{t:"Only apply to peers in this configuration"})])]),e("div",Ut,[e("div",null,[e("label",zt,[e("small",At,[s(n,{t:"DNS"})])]),C(e("input",{type:"text",class:"form-control form-control-sm rounded-3",disabled:t.value,"onUpdate:modelValue":a[0]||(a[0]=b=>f.value.DNS=b),id:"override_DNS"},null,8,Et),[[$,f.value.DNS]]),e("div",Ft,P(g.value),1)]),e("div",null,[e("label",Jt,[e("small",jt,[s(n,{t:"Endpoint Allowed IPs"})])]),C(e("input",{type:"text",class:"form-control form-control-sm rounded-3",disabled:t.value,"onUpdate:modelValue":a[1]||(a[1]=b=>f.value.EndpointAllowedIPs=b),id:"override_EndpointAllowedIPs"},null,8,Yt),[[$,f.value.EndpointAllowedIPs]]),e("div",qt,P(g.value),1)]),e("div",null,[e("label",Gt,[e("small",Zt,[s(n,{t:"Listen Port"})])]),C(e("input",{type:"text",class:"form-control form-control-sm rounded-3",disabled:t.value,"onUpdate:modelValue":a[2]||(a[2]=b=>f.value.ListenPort=b),id:"override_ListenPort"},null,8,Qt),[[$,f.value.ListenPort]]),e("div",Xt,P(g.value),1)]),e("div",null,[e("label",es,[e("small",ts,[s(n,{t:"MTU"})])]),C(e("input",{type:"text",class:"form-control form-control-sm rounded-3",disabled:t.value,"onUpdate:modelValue":a[3]||(a[3]=b=>f.value.MTU=b),id:"override_MTU"},null,8,ss),[[$,f.value.MTU]]),e("div",ns,P(g.value),1)]),e("div",null,[e("label",os,[e("small",ls,[s(n,{t:"Peer Remote Endpoint"})])]),C(e("input",{type:"text",class:"form-control form-control-sm rounded-3",disabled:t.value,"onUpdate:modelValue":a[4]||(a[4]=b=>f.value.PeerRemoteEndpoint=b),id:"override_PeerRemoteEndpoint"},null,8,is),[[$,f.value.PeerRemoteEndpoint]])]),e("div",null,[e("label",as,[e("small",ds,[s(n,{t:"Persistent Keepalive"})])]),C(e("input",{type:"text",class:"form-control form-control-sm rounded-3",disabled:t.value,"onUpdate:modelValue":a[5]||(a[5]=b=>f.value.PersistentKeepalive=b),id:"override_PersistentKeepalive"},null,8,rs),[[$,f.value.PersistentKeepalive]]),e("div",us,P(g.value),1)]),e("div",cs,[e("button",{class:B([{disabled:!o.value},"btn btn-sm bg-secondary-subtle border-secondary-subtle text-secondary-emphasis rounded-3 shadow ms-auto"]),onClick:a[6]||(a[6]=b=>u())},[a[8]||(a[8]=e("i",{class:"bi bi-arrow-clockwise me-2"},null,-1)),s(n,{t:"Reset"})],2),e("button",{class:B([{disabled:!o.value},"btn btn-sm bg-primary-subtle border-primary-subtle text-primary-emphasis rounded-3 shadow"]),onClick:a[7]||(a[7]=b=>x())},[a[9]||(a[9]=e("i",{class:"bi bi-save-fill me-2"},null,-1)),s(n,{t:"Save"})],2)])])]))}}),fs={class:"peerSettingContainer w-100 h-100 position-absolute top-0 start-0",ref:"editConfigurationContainer"},gs={class:"w-100 h-100 overflow-y-scroll"},bs={class:"container d-flex h-100 w-100"},vs={class:"m-auto modal-dialog-centered dashboardModal",style:{width:"700px"}},ps={class:"card rounded-3 shadow flex-grow-1"},hs={class:"card-header bg-transparent d-flex align-items-center gap-2 border-0 p-4"},ys={class:"mb-0"},xs={class:"card-body px-4 pb-4"},_s={class:"d-flex gap-2 flex-column"},ws={key:0,class:"d-flex align-items-center gap-3"},ks={class:"text-muted"},Cs={class:"d-flex align-items-center gap-3"},Ss={class:"text-muted",style:{"word-break":"keep-all"}},$s={class:"ms-auto",style:{"word-break":"break-all"}},Ns={class:"d-flex"},Ps={for:"configuration_private_key",class:"form-label"},Bs={class:"text-muted d-block"},Rs={class:"form-check form-switch ms-auto"},Ds=["disabled"],Ls={for:"configuration_ipaddress_cidr",class:"form-label"},Ws={class:"text-muted"},Is=["disabled"],Vs={for:"configuration_listen_port",class:"form-label"},Os={class:"text-muted"},Ms=["disabled"],Hs={class:"accordion mt-2",id:"editConfigurationOptionalAccordion"},Ks={class:"accordion-item"},Ts={class:"accordion-header"},Us={class:"accordion-button collapsed px-3 py-2",type:"button","data-bs-toggle":"collapse","data-bs-target":"#editOptionalAccordionCollapse"},zs={class:"text-muted"},As={id:"editOptionalAccordionCollapse",class:"accordion-collapse collapse","data-bs-parent":"#editConfigurationOptionalAccordion"},Es={class:"accordion-body d-flex flex-column gap-3"},Fs=["for"],Js={class:"text-muted"},js=["disabled","onUpdate:modelValue","id"],Ys=["for"],qs={class:"text-muted"},Gs=["disabled","onUpdate:modelValue","id"],Zs={class:"d-flex align-items-center gap-2 mt-1"},Qs=["disabled"],Xs=["disabled"],en={class:"mb-3"},tn={class:"d-flex gap-2 flex-column"},ln={__name:"editConfiguration",props:{configurationInfo:Object},emits:["changed","close","refresh","dataChanged"],setup(d,{emit:r}){const t=d,f=Y(),o=H(),g=y(!1),u=J(JSON.parse(JSON.stringify(t.configurationInfo))),x=y(!1),c=y(!1),a=J({PrivateKey:!0,IPAddress:!0,ListenPort:!0}),b=()=>{f.checkWGKeyLength(u.PrivateKey)?(a.PrivateKey=!0,u.PublicKey=window.wireguard.generatePublicKey(u.PrivateKey)):a.PrivateKey=!1},_=()=>{c.value=!1,Object.assign(u,JSON.parse(JSON.stringify(t.configurationInfo)))},w=r,S=()=>{g.value=!0,L("/api/updateWireguardConfiguration",u,W=>{g.value=!1,W.status?(o.newMessage("Server","Configuration saved","success"),c.value=!1,w("dataChanged",W.data)):o.newMessage("Server",W.message,"danger")})},m=y(!1);q(u,()=>{c.value=JSON.stringify(u)!==JSON.stringify(t.configurationInfo)},{deep:!0});const i=y(!1),k=y(!1),E=y(!1);return(W,l)=>(v(),h("div",fs,[e("div",gs,[s(Z,{name:"zoom"},{default:U(()=>[i.value?(v(),R(Te,{key:0,name:"EditRawConfigurationFile",onClose:l[0]||(l[0]=p=>i.value=!1)})):N("",!0),E.value?(v(),R(et,{key:"DeleteConfiguration",onBackup:l[1]||(l[1]=p=>k.value=!0),onClose:l[2]||(l[2]=p=>E.value=!1)})):N("",!0),k.value?(v(),R(Mt,{key:2,onClose:l[3]||(l[3]=p=>k.value=!1),onRefreshPeersList:l[4]||(l[4]=p=>w("refresh"))})):N("",!0)]),_:1}),e("div",bs,[e("div",vs,[e("div",ps,[e("div",hs,[e("h4",ys,[s(n,{t:"Configuration Settings"})]),e("button",{type:"button",class:"btn-close ms-auto",onClick:l[5]||(l[5]=p=>W.$emit("close"))})]),e("div",xs,[e("div",_s,[m.value?N("",!0):(v(),h("div",ws,[e("small",ks,[s(n,{t:"Name"})]),e("small",null,P(u.Name),1),e("button",{onClick:l[6]||(l[6]=p=>m.value=!0),class:"btn btn-sm bg-danger-subtle border-danger-subtle text-danger-emphasis rounded-3 ms-auto"},[s(n,{t:"Update Name"})])])),m.value?(v(),R(pe,{key:1,onClose:l[7]||(l[7]=p=>m.value=!1),"configuration-name":u.Name},null,8,["configuration-name"])):(v(),h(I,{key:2},[l[24]||(l[24]=e("hr",null,null,-1)),e("div",Cs,[e("small",Ss,[s(n,{t:"Public Key"})]),e("small",$s,P(u.PublicKey),1)]),l[25]||(l[25]=e("hr",null,null,-1)),e("div",null,[e("div",Ns,[e("label",Ps,[e("small",Bs,[s(n,{t:"Private Key"})])]),e("div",Rs,[C(e("input",{class:"form-check-input",type:"checkbox",role:"switch",id:"editPrivateKeySwitch","onUpdate:modelValue":l[8]||(l[8]=p=>x.value=p)},null,512),[[ae,x.value]]),l[18]||(l[18]=e("label",{class:"form-check-label",for:"editPrivateKeySwitch"},[e("small",null,"Edit")],-1))])]),C(e("input",{type:"text",class:B(["form-control form-control-sm rounded-3",{"is-invalid":!a.PrivateKey}]),disabled:g.value||!x.value,onKeyup:l[9]||(l[9]=p=>b()),"onUpdate:modelValue":l[10]||(l[10]=p=>u.PrivateKey=p),id:"configuration_private_key"},null,42,Ds),[[$,u.PrivateKey]])]),e("div",null,[e("label",Ls,[e("small",Ws,[s(n,{t:"IP Address/CIDR"})])]),C(e("input",{type:"text",class:"form-control form-control-sm rounded-3",disabled:g.value,"onUpdate:modelValue":l[11]||(l[11]=p=>u.Address=p),id:"configuration_ipaddress_cidr"},null,8,Is),[[$,u.Address]])]),e("div",null,[e("label",Vs,[e("small",Os,[s(n,{t:"Listen Port"})])]),C(e("input",{type:"number",class:"form-control form-control-sm rounded-3",disabled:g.value,"onUpdate:modelValue":l[12]||(l[12]=p=>u.ListenPort=p),id:"configuration_listen_port"},null,8,Ms),[[$,u.ListenPort]])]),e("div",Hs,[e("div",Ks,[e("h2",Ts,[e("button",Us,[e("small",zs,[s(n,{t:"Optional Settings"})])])]),e("div",As,[e("div",Es,[(v(),h(I,null,K(["Table","PreUp","PreDown","PostUp","PostDown"],p=>e("div",null,[e("label",{for:"configuration_"+p,class:"form-label"},[e("small",Js,[s(n,{t:p},null,8,["t"])])],8,Fs),C(e("input",{type:"text",class:"form-control form-control-sm rounded-3",disabled:g.value,"onUpdate:modelValue":F=>u[p]=F,id:"configuration_"+p},null,8,js),[[$,u[p]]])])),64)),d.configurationInfo.Protocol==="awg"?(v(),h(I,{key:0},K(["Jc","Jmin","Jmax","S1","S2","S3","S4","H1","H2","H3","H4","I1","I2","I3","I4","I5"],p=>e("div",null,[e("label",{for:"configuration_"+p,class:"form-label"},[e("small",qs,[s(n,{t:p},null,8,["t"])])],8,Ys),C(e("input",{type:"text",class:"form-control form-control-sm rounded-3",disabled:g.value,"onUpdate:modelValue":F=>u[p]=F,id:"configuration_"+p},null,8,Gs),[[$,u[p]]])])),64)):N("",!0)])])])]),e("div",Zs,[e("button",{class:"btn btn-sm bg-secondary-subtle border-secondary-subtle text-secondary-emphasis rounded-3 shadow ms-auto",onClick:l[13]||(l[13]=p=>_()),disabled:!c.value||g.value},[l[19]||(l[19]=e("i",{class:"bi bi-arrow-clockwise me-2"},null,-1)),s(n,{t:"Reset"})],8,Qs),e("button",{class:"btn btn-sm bg-primary-subtle border-primary-subtle text-primary-emphasis rounded-3 shadow",disabled:!c.value||g.value,onClick:l[14]||(l[14]=p=>S())},[l[20]||(l[20]=e("i",{class:"bi bi-save-fill me-2"},null,-1)),s(n,{t:"Save"})],8,Xs)]),l[26]||(l[26]=e("hr",null,null,-1)),s(ms,{configuration:d.configurationInfo},null,8,["configuration"]),l[27]||(l[27]=e("hr",null,null,-1)),e("h5",en,[s(n,{t:"Danger Zone"})]),e("div",tn,[e("button",{onClick:l[15]||(l[15]=p=>k.value=!0),class:"btn bg-warning-subtle border-warning-subtle text-warning-emphasis rounded-3 text-start d-flex"},[l[21]||(l[21]=e("i",{class:"bi bi-copy me-auto"},null,-1)),s(n,{t:"Backup & Restore"})]),e("button",{onClick:l[16]||(l[16]=p=>i.value=!0),class:"btn bg-warning-subtle border-warning-subtle text-warning-emphasis rounded-3 d-flex"},[l[22]||(l[22]=e("i",{class:"bi bi-pen me-auto"},null,-1)),s(n,{t:"Edit Raw Configuration File"})]),e("button",{onClick:l[17]||(l[17]=p=>E.value=!0),class:"btn bg-danger-subtle border-danger-subtle text-danger-emphasis rounded-3 d-flex mt-4"},[l[23]||(l[23]=e("i",{class:"bi bi-trash-fill me-auto"},null,-1)),s(n,{t:"Delete Configuration"})])])],64))])])])])])])],512))}};export{ln as default};
+ `,-1))],4)],4)],4)],14,ke)}const $e=M(we,[["render",Se]]),Ne={class:"peerSettingContainer w-100 h-100 position-absolute top-0 start-0 overflow-y-scroll"},Pe={class:"container d-flex h-100 w-100"},Be={class:"m-auto modal-dialog-centered dashboardModal",style:{width:"1000px"}},Re={class:"card rounded-3 shadow flex-grow-1",id:"deleteConfigurationContainer"},De={class:"card-header bg-transparent d-flex align-items-center gap-2 border-0 p-4 pb-0"},Le={class:"mb-0"},We={class:"card-body px-4 d-flex flex-column gap-3"},Ie={key:0,class:"alert alert-danger rounded-3 mb-0"},Ve={class:"mb-2"},Oe={class:"bg-body w-100 p-2 rounded-3"},Me={class:"d-flex gap-2"},He=["disabled"],Ke=["disabled"],Te={__name:"editRawConfigurationFile",emits:["close"],async setup(d,{emit:r}){let t,f;const o=r,g=A(),u=y(""),x=y(""),c=y(!1),a=y(""),b=async()=>{await O("/api/getWireguardConfigurationRawFile",{configurationName:g.params.id},m=>{u.value=m.data.content,x.value=m.data.path})};[t,f]=se(()=>b()),await t,f();const _=H(),w=y(!1),S=async()=>{w.value=!0,await L("/api/updateWireguardConfigurationRawFile",{configurationName:g.params.id,rawConfiguration:u.value},m=>{m.status?(c.value=!1,_.newMessage("Server","Configuration saved","success")):(c.value=!0,a.value=m.message),w.value=!1})};return(m,i)=>(v(),h("div",Ne,[e("div",Pe,[e("div",Be,[e("div",Re,[e("div",De,[e("h5",Le,[s(n,{t:"Edit Raw Configuration File"})]),e("button",{type:"button",class:"btn-close ms-auto",onClick:i[0]||(i[0]=k=>o("close"))})]),e("div",We,[c.value?(v(),h("div",Ie,[e("div",Ve,[e("strong",null,[s(n,{t:"Failed to save configuration. Please see the following error message:"})])]),e("div",Oe,[e("pre",null,P(a.value),1)])])):N("",!0),s($e,{disabled:!0,"read-only":w.value,modelValue:u.value,"onUpdate:modelValue":i[1]||(i[1]=k=>u.value=k),theme:T(_).Configuration.Server.dashboard_theme==="dark"?"github-dark":"github",languages:[["ini",x.value]],width:"100%",height:"600px"},null,8,["read-only","modelValue","theme","languages"]),e("div",Me,[e("button",{class:"btn bg-secondary-subtle border-secondary-subtle text-secondary-emphasis rounded-3 shadow ms-auto px-3 py-2",disabled:w.value,onClick:i[2]||(i[2]=k=>b())},[i[4]||(i[4]=e("i",{class:"bi bi-arrow-clockwise me-2"},null,-1)),s(n,{t:"Reset"})],8,He),e("button",{onClick:i[3]||(i[3]=k=>S()),disabled:w.value,class:"btn bg-danger-subtle border-danger-subtle text-danger-emphasis rounded-3 px-3 py-2 shadow"},[i[5]||(i[5]=e("i",{class:"bi bi-save-fill me-2"},null,-1)),w.value?(v(),R(n,{key:1,t:"Saving..."})):(v(),R(n,{key:0,t:"Save"}))],8,Ke)])])])])])]))}},Ue={class:"peerSettingContainer w-100 h-100 position-absolute top-0 start-0 overflow-y-scroll"},ze={class:"container d-flex h-100 w-100"},Ae={class:"m-auto modal-dialog-centered dashboardModal",style:{width:"700px"}},Ee={class:"card rounded-3 shadow flex-grow-1 bg-danger-subtle border-danger-subtle",id:"deleteConfigurationContainer"},Fe={class:"card-header bg-transparent d-flex align-items-center gap-2 border-0 p-4 pb-0"},Je={class:"mb-0"},je={class:"card-body px-4 text-muted"},Ye={class:"mb-0"},qe={key:0},Ge={key:1},Ze={key:2,class:"d-flex align-items-center gap-2"},Qe=["placeholder"],Xe=["disabled"],et={__name:"deleteConfiguration",emits:["backup","close"],setup(d,{emit:r}){const f=A().params.id,o=y(""),g=G(),u=H(),x=y(!1),c=()=>{clearInterval(u.Peers.RefreshInterval),x.value=!0,L("/api/deleteWireguardConfiguration",{ConfigurationName:f},S=>{S.status?(g.push("/"),u.newMessage("Server","Configuration deleted","success")):x.value=!1})},a=y(!0),b=y([]),_=()=>{a.value=!0,O("/api/getWireguardConfigurationBackup",{configurationName:f},S=>{b.value=S.data,a.value=!1})};z(()=>{_()});const w=r;return(S,m)=>(v(),h("div",Ue,[e("div",ze,[e("div",Ae,[e("div",Ee,[e("div",Fe,[e("h5",Je,[s(n,{t:"Are you sure to delete this configuration?"})]),e("button",{type:"button",class:"btn-close ms-auto",onClick:m[0]||(m[0]=i=>w("close"))})]),e("div",je,[e("p",Ye,[s(n,{t:"Once you deleted this configuration:"})]),e("ul",null,[e("li",null,[s(n,{t:"All connected peers will get disconnected"})]),e("li",null,[s(n,{t:"Both configuration file (.conf) and database table related to this configuration will get deleted"})])]),e("div",{class:B(["alert",[a.value?"alert-secondary":b.value.length>0?"alert-success":"alert-danger"]])},[a.value?(v(),h("div",qe,[m[5]||(m[5]=e("i",{class:"bi bi-search me-2"},null,-1)),s(n,{t:"Checking backups..."})])):b.value.length>0?(v(),h("div",Ge,[m[6]||(m[6]=e("i",{class:"bi bi-check-circle-fill me-2"},null,-1)),s(n,{t:"This configuration has "+b.value.length+" backups"},null,8,["t"])])):(v(),h("div",Ze,[m[9]||(m[9]=e("i",{class:"bi bi-x-circle-fill me-2"},null,-1)),s(n,{t:"This configuration has no backup"}),e("a",{role:"button",onClick:m[1]||(m[1]=i=>w("backup")),class:"ms-auto btn btn-sm btn-primary rounded-3"},[m[7]||(m[7]=e("i",{class:"bi bi-clock-history me-2"},null,-1)),s(n,{t:"Backup"})]),e("a",{role:"button",onClick:m[2]||(m[2]=i=>_()),class:"btn btn-sm btn-primary rounded-3"},[...m[8]||(m[8]=[e("i",{class:"bi bi-arrow-clockwise"},null,-1)])])]))],2),m[11]||(m[11]=e("hr",null,null,-1)),e("p",null,[s(n,{t:"If you're sure, please type in the configuration name below and click Delete"})]),C(e("input",{class:"form-control rounded-3 mb-3",placeholder:T(f),"onUpdate:modelValue":m[3]||(m[3]=i=>o.value=i),type:"text"},null,8,Qe),[[$,o.value]]),e("button",{class:"btn btn-danger w-100",onClick:m[4]||(m[4]=i=>c()),disabled:o.value!==T(f)||x.value},[m[10]||(m[10]=e("i",{class:"bi bi-trash-fill me-2 rounded-3"},null,-1)),x.value?(v(),R(n,{key:1,t:"Deleting..."})):(v(),R(n,{key:0,t:"Delete"}))],8,Xe)])])])])]))}},tt={class:"card my-0 rounded-3"},st={class:"card-body position-relative"},nt={key:0,class:"position-absolute w-100 h-100 confirmationContainer start-0 top-0 rounded-3 d-flex p-2"},ot={class:"m-auto"},lt={class:"d-flex gap-2 align-items-center justify-content-center"},it=["disabled"],at=["disabled"],dt={key:0,class:"position-absolute w-100 h-100 confirmationContainer start-0 top-0 rounded-3 d-flex p-2"},rt={class:"m-auto"},ut={class:"d-flex gap-2 align-items-center justify-content-center"},ct=["disabled"],mt=["disabled"],ft={class:"d-flex gap-3"},gt={class:"d-flex flex-column"},bt={class:"text-muted"},vt={class:"d-flex flex-column"},pt={class:"text-muted"},ht={class:"d-flex gap-2 align-items-center ms-auto"},yt={class:"card rounded-3"},xt={key:0,class:"card-body"},_t=["value"],wt={class:"d-flex"},kt={__name:"backup",props:["b","delay"],emits:["refresh","refreshPeersList"],setup(d,{emit:r}){ne(m=>({v2dd0b691:w.value}));const t=d,f=y(!1),o=y(!1),g=A(),u=r,x=H(),c=y(!1),a=()=>{c.value=!0,L("/api/deleteWireguardConfigurationBackup",{ConfigurationName:g.params.id,BackupFileName:t.b.filename},m=>{c.value=!1,m.status?(u("refresh"),x.newMessage("Server","Backup deleted","success")):x.newMessage("Server","Backup failed to delete","danger")})},b=()=>{c.value=!0,L("/api/restoreWireguardConfigurationBackup",{ConfigurationName:g.params.id,BackupFileName:t.b.filename},m=>{c.value=!1,o.value=!1,m.status?(u("refreshPeersList"),x.newMessage("Server","Backup restored with "+t.b.filename,"success")):x.newMessage("Server","Backup failed to restore","danger")})},_=()=>{O("/api/downloadWireguardConfigurationBackup",{configurationName:g.params.id,backupFileName:t.b.filename},m=>{m.status&&window.open(oe(`/fileDownload?file=${m.data}`),"_blank")})},w=le(()=>t.delay+"s"),S=y(!1);return(m,i)=>(v(),h("div",tt,[e("div",st,[s(j,{name:"zoomReversed"},{default:U(()=>[f.value?(v(),h("div",nt,[e("div",ot,[e("h5",null,[s(n,{t:"Are you sure to delete this backup?"})]),e("div",lt,[e("button",{class:"btn btn-danger rounded-3",disabled:c.value,onClick:i[0]||(i[0]=k=>a())},[s(n,{t:"Yes"})],8,it),e("button",{onClick:i[1]||(i[1]=k=>f.value=!1),disabled:c.value,class:"btn bg-secondary-subtle text-secondary-emphasis border-secondary-subtle rounded-3"},[s(n,{t:"No"})],8,at)])])])):N("",!0)]),_:1}),s(j,{name:"zoomReversed"},{default:U(()=>[o.value?(v(),h("div",dt,[e("div",rt,[e("h5",null,[s(n,{t:"Are you sure to restore this backup?"})]),e("div",ut,[e("button",{disabled:c.value,onClick:i[2]||(i[2]=k=>b()),class:"btn btn-success rounded-3"},[s(n,{t:"Yes"})],8,ct),e("button",{onClick:i[3]||(i[3]=k=>o.value=!1),disabled:c.value,class:"btn bg-secondary-subtle text-secondary-emphasis border-secondary-subtle rounded-3"},[s(n,{t:"No"})],8,mt)])])])):N("",!0)]),_:1}),e("div",ft,[e("div",gt,[e("small",bt,[s(n,{t:"Backup"})]),e("samp",null,P(d.b.filename),1)]),e("div",vt,[e("small",pt,[s(n,{t:"Backup Date"})]),V(" "+P(T(de)(d.b.backupDate,"YYYYMMDDHHmmss").format("YYYY-MM-DD HH:mm:ss")),1)]),e("div",ht,[e("button",{onClick:i[4]||(i[4]=k=>_()),class:"btn bg-primary-subtle text-primary-emphasis border-primary-subtle rounded-3 btn-sm"},[...i[8]||(i[8]=[e("i",{class:"bi bi-download"},null,-1)])]),e("button",{onClick:i[5]||(i[5]=k=>o.value=!0),class:"btn bg-warning-subtle text-warning-emphasis border-warning-subtle rounded-3 btn-sm"},[...i[9]||(i[9]=[e("i",{class:"bi bi-clock-history"},null,-1)])]),e("button",{onClick:i[6]||(i[6]=k=>f.value=!0),class:"btn bg-danger-subtle text-danger-emphasis border-danger-subtle rounded-3 btn-sm"},[...i[10]||(i[10]=[e("i",{class:"bi bi-trash-fill"},null,-1)])])])]),i[14]||(i[14]=e("hr",null,null,-1)),e("div",yt,[e("a",{role:"button",class:B(["card-header d-flex text-decoration-none align-items-center",{"border-bottom-0":!S.value}]),style:{cursor:"pointer"},onClick:i[7]||(i[7]=k=>S.value=!S.value)},[e("small",null,[i[11]||(i[11]=V(".conf ",-1)),s(n,{t:"File"})]),i[12]||(i[12]=e("i",{class:"bi bi-chevron-down ms-auto"},null,-1))],2),S.value?(v(),h("div",xt,[e("textarea",{class:"form-control rounded-3",value:d.b.content,disabled:"",style:{height:"300px","font-family":"var(--bs-font-monospace),sans-serif !important"}},null,8,_t)])):N("",!0)]),i[15]||(i[15]=e("hr",null,null,-1)),e("div",wt,[e("span",null,[i[13]||(i[13]=e("i",{class:"bi bi-database me-1"},null,-1)),s(n,{t:"Database File"})]),e("i",{class:B(["bi ms-auto",[d.b.database?"text-success bi-check-circle-fill":"text-danger bi-x-circle-fill"]])},null,2)])])]))}},Ct=M(kt,[["__scopeId","data-v-c65cdc10"]]),St={class:"peerSettingContainer w-100 h-100 position-absolute top-0 start-0 overflow-y-scroll",ref:"editConfigurationContainer"},$t={class:"d-flex h-100 w-100"},Nt={class:"modal-dialog-centered dashboardModal w-100 h-100 overflow-x-scroll flex-column gap-3 mx-3"},Pt={class:"my-5 d-flex gap-3 flex-column position-relative"},Bt={class:"title"},Rt={class:"d-flex mb-3"},Dt={class:"mb-0"},Lt={class:"position-relative d-flex flex-column gap-3"},Wt={class:"text-center title",key:"spinner"},It={class:"card my-0 rounded-3",key:"noBackups"},Vt={class:"card-body text-center text-muted"},Ot={__name:"configurationBackupRestore",emits:["close","refreshPeersList"],setup(d,{emit:r}){const t=A(),f=y([]),o=y(!0),g=r;z(()=>{u()});const u=()=>{o.value=!0,O("/api/getWireguardConfigurationBackup",{configurationName:t.params.id},c=>{f.value=c.data,o.value=!1})},x=()=>{O("/api/createWireguardConfigurationBackup",{configurationName:t.params.id},c=>{f.value=c.data,o.value=!1})};return(c,a)=>(v(),h("div",St,[e("div",$t,[e("div",Nt,[e("div",Pt,[e("div",Bt,[e("div",Rt,[e("h4",Dt,[s(n,{t:"Backup & Restore"})]),e("button",{type:"button",class:"btn-close ms-auto",onClick:a[0]||(a[0]=b=>c.$emit("close"))})]),e("button",{onClick:a[1]||(a[1]=b=>x()),class:"btn bg-primary-subtle text-primary-emphasis border-primary-subtle rounded-3 w-100"},[a[4]||(a[4]=e("i",{class:"bi bi-plus-circle-fill me-2"},null,-1)),s(n,{t:"Create Backup"})])]),e("div",Lt,[s(Z,{name:"list1"},{default:U(()=>[o.value&&f.value.length===0?(v(),h("div",Wt,[...a[5]||(a[5]=[e("div",{class:"spinner-border"},null,-1)])])):!o.value&&f.value.length===0?(v(),h("div",It,[e("div",Vt,[a[6]||(a[6]=e("i",{class:"bi bi-x-circle-fill me-2"},null,-1)),s(n,{t:"No backup yet, click the button above to create backup."})])])):N("",!0),(v(!0),h(I,null,K(f.value,b=>(v(),R(Ct,{onRefresh:a[2]||(a[2]=_=>u()),onRefreshPeersList:a[3]||(a[3]=_=>g("refreshPeersList")),b,key:b.filename},null,8,["b"]))),128))]),_:1})])])])])],512))}},Mt=M(Ot,[["__scopeId","data-v-1f718118"]]),Ht={id:"editPeerSettingsOverride"},Kt={class:"mb-0"},Tt={class:"mb-3 text-muted"},Ut={class:"d-flex gap-2 flex-column"},zt={for:"override_DNS",class:"form-label"},At={class:"text-muted"},Et=["disabled"],Ft={class:"invalid-feedback"},Jt={for:"override_EndpointAllowedIPs",class:"form-label"},jt={class:"text-muted"},Yt=["disabled"],qt={class:"invalid-feedback"},Gt={for:"override_ListenPort",class:"form-label"},Zt={class:"text-muted"},Qt=["disabled"],Xt={class:"invalid-feedback"},es={for:"override_MTU",class:"form-label"},ts={class:"text-muted"},ss=["disabled"],ns={class:"invalid-feedback"},os={for:"override_PeerRemoteEndpoint",class:"form-label"},ls={class:"text-muted"},is=["disabled"],as={for:"override_persistent_keepalive",class:"form-label"},ds={class:"text-muted"},rs=["disabled"],us={class:"invalid-feedback"},cs={class:"d-flex mt-1 gap-2"},ms=ie({__name:"editPeerSettingsOverride",props:["configuration"],setup(d){const r=d,t=y(!1),f=y({...r.configuration.Info.OverridePeerSettings}),o=y(!1),g=y("");z(()=>{document.querySelectorAll("#editPeerSettingsOverride input").forEach(c=>c.addEventListener("change",()=>{o.value=!0}))});const u=()=>{f.value=r.configuration.Info.OverridePeerSettings,o.value=!1},x=async()=>{document.querySelectorAll("#editPeerSettingsOverride input").forEach(c=>c.classList.remove("is-invalid","is-valid")),await L("/api/updateWireguardConfigurationInfo",{Name:r.configuration.Name,Key:"OverridePeerSettings",Value:f.value},c=>{c.status?(o.value=!1,r.configuration.Info.OverridePeerSettings=f.value,document.querySelectorAll("#editPeerSettingsOverride input").forEach(a=>a.classList.add("is-valid"))):(g.value=c.message,document.querySelector(`#override_${c.data}`).classList.add("is-invalid"))})};return(c,a)=>(v(),h("div",Ht,[e("h5",Kt,[s(n,{t:"Override Peer Settings"})]),e("h6",Tt,[e("small",null,[s(n,{t:"Only apply to peers in this configuration"})])]),e("div",Ut,[e("div",null,[e("label",zt,[e("small",At,[s(n,{t:"DNS"})])]),C(e("input",{type:"text",class:"form-control form-control-sm rounded-3",disabled:t.value,"onUpdate:modelValue":a[0]||(a[0]=b=>f.value.DNS=b),id:"override_DNS"},null,8,Et),[[$,f.value.DNS]]),e("div",Ft,P(g.value),1)]),e("div",null,[e("label",Jt,[e("small",jt,[s(n,{t:"Endpoint Allowed IPs"})])]),C(e("input",{type:"text",class:"form-control form-control-sm rounded-3",disabled:t.value,"onUpdate:modelValue":a[1]||(a[1]=b=>f.value.EndpointAllowedIPs=b),id:"override_EndpointAllowedIPs"},null,8,Yt),[[$,f.value.EndpointAllowedIPs]]),e("div",qt,P(g.value),1)]),e("div",null,[e("label",Gt,[e("small",Zt,[s(n,{t:"Listen Port"})])]),C(e("input",{type:"text",class:"form-control form-control-sm rounded-3",disabled:t.value,"onUpdate:modelValue":a[2]||(a[2]=b=>f.value.ListenPort=b),id:"override_ListenPort"},null,8,Qt),[[$,f.value.ListenPort]]),e("div",Xt,P(g.value),1)]),e("div",null,[e("label",es,[e("small",ts,[s(n,{t:"MTU"})])]),C(e("input",{type:"text",class:"form-control form-control-sm rounded-3",disabled:t.value,"onUpdate:modelValue":a[3]||(a[3]=b=>f.value.MTU=b),id:"override_MTU"},null,8,ss),[[$,f.value.MTU]]),e("div",ns,P(g.value),1)]),e("div",null,[e("label",os,[e("small",ls,[s(n,{t:"Peer Remote Endpoint"})])]),C(e("input",{type:"text",class:"form-control form-control-sm rounded-3",disabled:t.value,"onUpdate:modelValue":a[4]||(a[4]=b=>f.value.PeerRemoteEndpoint=b),id:"override_PeerRemoteEndpoint"},null,8,is),[[$,f.value.PeerRemoteEndpoint]])]),e("div",null,[e("label",as,[e("small",ds,[s(n,{t:"Persistent Keepalive"})])]),C(e("input",{type:"text",class:"form-control form-control-sm rounded-3",disabled:t.value,"onUpdate:modelValue":a[5]||(a[5]=b=>f.value.PersistentKeepalive=b),id:"override_PersistentKeepalive"},null,8,rs),[[$,f.value.PersistentKeepalive]]),e("div",us,P(g.value),1)]),e("div",cs,[e("button",{class:B([{disabled:!o.value},"btn btn-sm bg-secondary-subtle border-secondary-subtle text-secondary-emphasis rounded-3 shadow ms-auto"]),onClick:a[6]||(a[6]=b=>u())},[a[8]||(a[8]=e("i",{class:"bi bi-arrow-clockwise me-2"},null,-1)),s(n,{t:"Reset"})],2),e("button",{class:B([{disabled:!o.value},"btn btn-sm bg-primary-subtle border-primary-subtle text-primary-emphasis rounded-3 shadow"]),onClick:a[7]||(a[7]=b=>x())},[a[9]||(a[9]=e("i",{class:"bi bi-save-fill me-2"},null,-1)),s(n,{t:"Save"})],2)])])]))}}),fs={class:"peerSettingContainer w-100 h-100 position-absolute top-0 start-0",ref:"editConfigurationContainer"},gs={class:"w-100 h-100 overflow-y-scroll"},bs={class:"container d-flex h-100 w-100"},vs={class:"m-auto modal-dialog-centered dashboardModal",style:{width:"700px"}},ps={class:"card rounded-3 shadow flex-grow-1"},hs={class:"card-header bg-transparent d-flex align-items-center gap-2 border-0 p-4"},ys={class:"mb-0"},xs={class:"card-body px-4 pb-4"},_s={class:"d-flex gap-2 flex-column"},ws={key:0,class:"d-flex align-items-center gap-3"},ks={class:"text-muted"},Cs={class:"d-flex align-items-center gap-3"},Ss={class:"text-muted",style:{"word-break":"keep-all"}},$s={class:"ms-auto",style:{"word-break":"break-all"}},Ns={class:"d-flex"},Ps={for:"configuration_private_key",class:"form-label"},Bs={class:"text-muted d-block"},Rs={class:"form-check form-switch ms-auto"},Ds=["disabled"],Ls={for:"configuration_ipaddress_cidr",class:"form-label"},Ws={class:"text-muted"},Is=["disabled"],Vs={for:"configuration_listen_port",class:"form-label"},Os={class:"text-muted"},Ms=["disabled"],Hs={class:"accordion mt-2",id:"editConfigurationOptionalAccordion"},Ks={class:"accordion-item"},Ts={class:"accordion-header"},Us={class:"accordion-button collapsed px-3 py-2",type:"button","data-bs-toggle":"collapse","data-bs-target":"#editOptionalAccordionCollapse"},zs={class:"text-muted"},As={id:"editOptionalAccordionCollapse",class:"accordion-collapse collapse","data-bs-parent":"#editConfigurationOptionalAccordion"},Es={class:"accordion-body d-flex flex-column gap-3"},Fs=["for"],Js={class:"text-muted"},js=["disabled","onUpdate:modelValue","id"],Ys=["for"],qs={class:"text-muted"},Gs=["disabled","onUpdate:modelValue","id"],Zs={class:"d-flex align-items-center gap-2 mt-1"},Qs=["disabled"],Xs=["disabled"],en={class:"mb-3"},tn={class:"d-flex gap-2 flex-column"},ln={__name:"editConfiguration",props:{configurationInfo:Object},emits:["changed","close","refresh","dataChanged"],setup(d,{emit:r}){const t=d,f=Y(),o=H(),g=y(!1),u=J(JSON.parse(JSON.stringify(t.configurationInfo))),x=y(!1),c=y(!1),a=J({PrivateKey:!0,IPAddress:!0,ListenPort:!0}),b=()=>{f.checkWGKeyLength(u.PrivateKey)?(a.PrivateKey=!0,u.PublicKey=window.wireguard.generatePublicKey(u.PrivateKey)):a.PrivateKey=!1},_=()=>{c.value=!1,Object.assign(u,JSON.parse(JSON.stringify(t.configurationInfo)))},w=r,S=()=>{g.value=!0,L("/api/updateWireguardConfiguration",u,W=>{g.value=!1,W.status?(o.newMessage("Server","Configuration saved","success"),c.value=!1,w("dataChanged",W.data)):o.newMessage("Server",W.message,"danger")})},m=y(!1);q(u,()=>{c.value=JSON.stringify(u)!==JSON.stringify(t.configurationInfo)},{deep:!0});const i=y(!1),k=y(!1),E=y(!1);return(W,l)=>(v(),h("div",fs,[e("div",gs,[s(Z,{name:"zoom"},{default:U(()=>[i.value?(v(),R(Te,{key:0,name:"EditRawConfigurationFile",onClose:l[0]||(l[0]=p=>i.value=!1)})):N("",!0),E.value?(v(),R(et,{key:"DeleteConfiguration",onBackup:l[1]||(l[1]=p=>k.value=!0),onClose:l[2]||(l[2]=p=>E.value=!1)})):N("",!0),k.value?(v(),R(Mt,{key:2,onClose:l[3]||(l[3]=p=>k.value=!1),onRefreshPeersList:l[4]||(l[4]=p=>w("refresh"))})):N("",!0)]),_:1}),e("div",bs,[e("div",vs,[e("div",ps,[e("div",hs,[e("h4",ys,[s(n,{t:"Configuration Settings"})]),e("button",{type:"button",class:"btn-close ms-auto",onClick:l[5]||(l[5]=p=>W.$emit("close"))})]),e("div",xs,[e("div",_s,[m.value?N("",!0):(v(),h("div",ws,[e("small",ks,[s(n,{t:"Name"})]),e("small",null,P(u.Name),1),e("button",{onClick:l[6]||(l[6]=p=>m.value=!0),class:"btn btn-sm bg-danger-subtle border-danger-subtle text-danger-emphasis rounded-3 ms-auto"},[s(n,{t:"Update Name"})])])),m.value?(v(),R(pe,{key:1,onClose:l[7]||(l[7]=p=>m.value=!1),"configuration-name":u.Name},null,8,["configuration-name"])):(v(),h(I,{key:2},[l[24]||(l[24]=e("hr",null,null,-1)),e("div",Cs,[e("small",Ss,[s(n,{t:"Public Key"})]),e("small",$s,P(u.PublicKey),1)]),l[25]||(l[25]=e("hr",null,null,-1)),e("div",null,[e("div",Ns,[e("label",Ps,[e("small",Bs,[s(n,{t:"Private Key"})])]),e("div",Rs,[C(e("input",{class:"form-check-input",type:"checkbox",role:"switch",id:"editPrivateKeySwitch","onUpdate:modelValue":l[8]||(l[8]=p=>x.value=p)},null,512),[[ae,x.value]]),l[18]||(l[18]=e("label",{class:"form-check-label",for:"editPrivateKeySwitch"},[e("small",null,"Edit")],-1))])]),C(e("input",{type:"text",class:B(["form-control form-control-sm rounded-3",{"is-invalid":!a.PrivateKey}]),disabled:g.value||!x.value,onKeyup:l[9]||(l[9]=p=>b()),"onUpdate:modelValue":l[10]||(l[10]=p=>u.PrivateKey=p),id:"configuration_private_key"},null,42,Ds),[[$,u.PrivateKey]])]),e("div",null,[e("label",Ls,[e("small",Ws,[s(n,{t:"IP Address/CIDR"})])]),C(e("input",{type:"text",class:"form-control form-control-sm rounded-3",disabled:g.value,"onUpdate:modelValue":l[11]||(l[11]=p=>u.Address=p),id:"configuration_ipaddress_cidr"},null,8,Is),[[$,u.Address]])]),e("div",null,[e("label",Vs,[e("small",Os,[s(n,{t:"Listen Port"})])]),C(e("input",{type:"number",class:"form-control form-control-sm rounded-3",disabled:g.value,"onUpdate:modelValue":l[12]||(l[12]=p=>u.ListenPort=p),id:"configuration_listen_port"},null,8,Ms),[[$,u.ListenPort]])]),e("div",Hs,[e("div",Ks,[e("h2",Ts,[e("button",Us,[e("small",zs,[s(n,{t:"Optional Settings"})])])]),e("div",As,[e("div",Es,[(v(),h(I,null,K(["Table","PreUp","PreDown","PostUp","PostDown"],p=>e("div",null,[e("label",{for:"configuration_"+p,class:"form-label"},[e("small",Js,[s(n,{t:p},null,8,["t"])])],8,Fs),C(e("input",{type:"text",class:"form-control form-control-sm rounded-3",disabled:g.value,"onUpdate:modelValue":F=>u[p]=F,id:"configuration_"+p},null,8,js),[[$,u[p]]])])),64)),d.configurationInfo.Protocol==="awg"?(v(),h(I,{key:0},K(["Jc","Jmin","Jmax","S1","S2","S3","S4","H1","H2","H3","H4","I1","I2","I3","I4","I5","J1","J2","J3","Itime"],p=>e("div",null,[e("label",{for:"configuration_"+p,class:"form-label"},[e("small",qs,[s(n,{t:p},null,8,["t"])])],8,Ys),C(e("input",{type:"text",class:"form-control form-control-sm rounded-3",disabled:g.value,"onUpdate:modelValue":F=>u[p]=F,id:"configuration_"+p},null,8,Gs),[[$,u[p]]])])),64)):N("",!0)])])])]),e("div",Zs,[e("button",{class:"btn btn-sm bg-secondary-subtle border-secondary-subtle text-secondary-emphasis rounded-3 shadow ms-auto",onClick:l[13]||(l[13]=p=>_()),disabled:!c.value||g.value},[l[19]||(l[19]=e("i",{class:"bi bi-arrow-clockwise me-2"},null,-1)),s(n,{t:"Reset"})],8,Qs),e("button",{class:"btn btn-sm bg-primary-subtle border-primary-subtle text-primary-emphasis rounded-3 shadow",disabled:!c.value||g.value,onClick:l[14]||(l[14]=p=>S())},[l[20]||(l[20]=e("i",{class:"bi bi-save-fill me-2"},null,-1)),s(n,{t:"Save"})],8,Xs)]),l[26]||(l[26]=e("hr",null,null,-1)),s(ms,{configuration:d.configurationInfo},null,8,["configuration"]),l[27]||(l[27]=e("hr",null,null,-1)),e("h5",en,[s(n,{t:"Danger Zone"})]),e("div",tn,[e("button",{onClick:l[15]||(l[15]=p=>k.value=!0),class:"btn bg-warning-subtle border-warning-subtle text-warning-emphasis rounded-3 text-start d-flex"},[l[21]||(l[21]=e("i",{class:"bi bi-copy me-auto"},null,-1)),s(n,{t:"Backup & Restore"})]),e("button",{onClick:l[16]||(l[16]=p=>i.value=!0),class:"btn bg-warning-subtle border-warning-subtle text-warning-emphasis rounded-3 d-flex"},[l[22]||(l[22]=e("i",{class:"bi bi-pen me-auto"},null,-1)),s(n,{t:"Edit Raw Configuration File"})]),e("button",{onClick:l[17]||(l[17]=p=>E.value=!0),class:"btn bg-danger-subtle border-danger-subtle text-danger-emphasis rounded-3 d-flex mt-4"},[l[23]||(l[23]=e("i",{class:"bi bi-trash-fill me-auto"},null,-1)),s(n,{t:"Delete Configuration"})])])],64))])])])])])])],512))}};export{ln as default};
diff --git a/src/static/dist/WGDashboardAdmin/assets/newConfiguration-iH_lEFoa.js b/src/static/dist/WGDashboardAdmin/assets/newConfiguration-iH_lEFoa.js
index 774df9b8..d0d3024b 100644
--- a/src/static/dist/WGDashboardAdmin/assets/newConfiguration-iH_lEFoa.js
+++ b/src/static/dist/WGDashboardAdmin/assets/newConfiguration-iH_lEFoa.js
@@ -1,3 +1,3 @@
import{e as V,c as W,m as z,p as F}from"./index-Bno8fcdN.js";import{B as G,W as B,r as P,o as J,H as N,c as a,f as n,a as e,d as I,m as h,b as r,t as w,y as C,C as H,F as T,i as A,e as U,n as D,q as j,z as E,E as Z,g as q,j as Q,_ as X,w as Y,h as O,D as ee}from"./index-BCgxBvDt.js";import{L as g}from"./localeText-ZTaDi7ZY.js";import{r as te}from"./galois-field-I2lBzzs-.js";const se=o=>{const t=o.split(`
`),s={};for(let f of t){if(f==="[Peer]")break;if(f.length>0){let l=f.replace(" = ","=");l.indexOf("=")>-1&&(l=[l.slice(0,l.indexOf("=")),l.slice(l.indexOf("=")+1)],l[0]==="ListenPort"?s[l[0]]=parseInt(l[1]):s[l[0]]=l[1])}}return s},oe=o=>{const t=o.split(`
-`),s=[];let f=-1;const l=t.indexOf("[Peer]");if(l===-1)return!1;for(let d=l;d-1&&(b=[b.slice(0,b.indexOf("=")),b.slice(b.indexOf("=")+1)],s[f][b[0]]=b[1])}return s};te();const ne={class:"card rounded-3"},ie={class:"card-body"},ae={class:"row"},le={class:"col-sm"},re={class:"d-flex flex-column gap-2"},de={class:"d-flex align-items-center"},ue={class:"text-muted"},ce={key:0,class:"mb-0 ms-auto"},pe={key:0,class:"d-flex gap-2 flex-column"},me={class:"text-muted d-flex align-items-center gap-1",style:{"white-space":"nowrap"}},fe={class:"badge rounded-pill text-bg-success ms-auto"},be={value:void 0,disabled:""},ve=["value"],ge={class:"col-sm"},he={class:"d-flex flex-column gap-2 h-100"},ye={class:"d-flex align-items-center"},we={class:"text-muted"},_e={key:0,class:"mb-0 ms-auto"},Ce={key:1,class:"d-flex ms-auto align-items-center"},Pe={key:0,class:"d-flex gap-2 flex-column mt-auto"},xe={class:"text-muted d-flex align-items-center gap-1",style:{"white-space":"nowrap"}},Se={class:"badge rounded-pill text-bg-success ms-auto"},$e={value:void 0,disabled:""},Le=["value"],ke={key:0,class:"d-flex gap-2"},Ie={key:1,class:"d-flex gap-2"},M=G({__name:"newConfigurationTemplate",props:["template","edit","isNew","peersCount"],emits:["subnet","port","update","remove"],setup(o,{emit:t}){const s=o,f=B(),l=P(!1);s.edit&&(l.value=!0);const d=P({...s.template}),b=P([]),u=t,S=P(void 0),i=P(void 0),x=P([]),$=()=>{if(b.value=[],s.template.Subnet){let v=new Set([...V(s.template.Subnet)]);if(s.peersCount&&s.peersCount>0){for(let k of f.Configurations){let K=k.Address.replace(" ","").split(",");for(let R of K)W(s.template.Subnet,R)&&(v=v.difference(new Set([...V(R)])))}let c=Math.floor(v.size/s.peersCount),p=0;v=Array.from(v);for(let k=0;k<(c>10?10:c);k++)b.value.push(z(v.slice(p,p+s.peersCount))),p+=s.peersCount}}},m=()=>{if(s.template.ListenPortStart&&s.template.ListenPortEnd){let v=s.template.ListenPortStart,c=s.template.ListenPortEnd;v>c&&(v=s.template.ListenPortEnd,c=s.template.ListenPortStart);let p=new Set(Array.from({length:c-v+1},(k,K)=>v+K));x.value=[...p.difference(new Set(f.Configurations.map(k=>Number(k.ListenPort))))]}};J(()=>{s.isNew||($(),m())}),N(()=>s.peersCount,()=>{$()}),N(S,()=>{u("subnet",S.value)}),N(i,()=>{u("port",i.value)}),N(()=>s.template,()=>{$(),m()},{deep:!0});const y=j(()=>{try{const{start:v,end:c}=F(d.value.Subnet);if(c-v>=1000000n)throw new Error("Too many IPs");return d.value.Subnet&&d.value.ListenPortStart&&d.value.ListenPortEnd&&d.value.ListenPortEnd>=d.value.ListenPortStart}catch{return!1}}),L=async()=>{await E("/api/newConfigurationTemplates/updateTemplate",{Template:d.value},v=>{v.status&&(u("update",d.value),l.value=!1)})},_=async()=>{await E("/api/newConfigurationTemplates/deleteTemplate",{Template:d.value},v=>{v.status&&u("remove",d)})};return(v,c)=>(n(),a("div",ne,[e("div",ie,[e("div",ae,[e("div",le,[e("div",re,[e("div",de,[e("label",ue,[e("small",null,[r(g,{t:"Subnet"})])]),l.value?h((n(),a("input",{key:1,class:"form-control-sm form-control rounded-3 w-auto ms-auto","onUpdate:modelValue":c[0]||(c[0]=p=>d.value.Subnet=p)},null,512)),[[C,d.value.Subnet]]):(n(),a("p",ce,[e("small",null,w(o.template.Subnet),1)]))]),l.value?I("",!0):(n(),a("div",pe,[e("label",me,[e("small",null,[r(g,{t:"Available Subnets"})]),e("span",fe,w(b.value.length),1)]),h(e("select",{"onUpdate:modelValue":c[1]||(c[1]=p=>S.value=p),class:"form-select form-select-sm rounded-3 w-100 ms-auto"},[e("option",be,[r(g,{t:"Select..."})]),(n(!0),a(T,null,A(b.value,p=>(n(),a("option",{value:p.join(", ")},w(p.join(", ")),9,ve))),256))],512),[[H,S.value]])]))])]),e("div",ge,[e("div",he,[e("div",ye,[e("label",we,[e("small",null,[r(g,{t:"Listen Port Range"})])]),l.value?(n(),a("div",Ce,[h(e("input",{class:"form-control-sm form-control rounded-3 ms-auto",style:{width:"80px"},"onUpdate:modelValue":c[2]||(c[2]=p=>d.value.ListenPortStart=p),type:"number"},null,512),[[C,d.value.ListenPortStart]]),c[10]||(c[10]=e("i",{class:"bi bi-arrow-right mx-2"},null,-1)),h(e("input",{class:"form-control-sm form-control rounded-3 ms-auto",style:{width:"80px"},"onUpdate:modelValue":c[3]||(c[3]=p=>d.value.ListenPortEnd=p),type:"number"},null,512),[[C,d.value.ListenPortEnd]])])):(n(),a("p",_e,[e("small",null,[U(w(o.template.ListenPortStart),1),c[9]||(c[9]=e("i",{class:"bi bi-arrow-right mx-2"},null,-1)),U(" "+w(o.template.ListenPortEnd),1)])]))]),l.value?I("",!0):(n(),a("div",Pe,[e("label",xe,[e("small",null,[r(g,{t:"Available Ports"})]),e("span",Se,w(x.value.length),1)]),h(e("select",{"onUpdate:modelValue":c[4]||(c[4]=p=>i.value=p),class:"form-select form-select-sm rounded-3 w-100 ms-auto"},[e("option",$e,[r(g,{t:"Select..."})]),(n(!0),a(T,null,A([...x.value],p=>(n(),a("option",{value:p},w(p),9,Le))),256))],512),[[H,i.value]])]))])])]),c[11]||(c[11]=e("hr",null,null,-1)),l.value?(n(),a("div",Ie,[e("button",{type:"button",onClick:c[7]||(c[7]=p=>o.isNew?u("remove"):l.value=!1),class:"ms-auto btn btn-sm border-secondary-subtle bg-secondary-subtle text-secondary-emphasis rounded-3"},[r(g,{t:"Cancel"})]),e("button",{type:"button",onClick:c[8]||(c[8]=p=>L()),class:D([{disabled:!y.value},"btn btn-sm border-primary-subtle bg-primary-subtle text-primary-emphasis rounded-3"])},[r(g,{t:"Save"})],2)])):(n(),a("div",ke,[e("button",{type:"button",onClick:c[5]||(c[5]=p=>{l.value=!0,d.value={...s.template}}),class:"ms-auto btn btn-sm border-primary-subtle bg-primary-subtle text-primary-emphasis rounded-3"},[r(g,{t:"Edit"})]),e("button",{type:"button",onClick:c[6]||(c[6]=p=>_()),class:"btn btn-sm border-danger-subtle bg-danger-subtle text-danger-emphasis rounded-3"},[r(g,{t:"Delete"})])]))])]))}}),Te={class:"card rounded-3"},Ae={class:"card-header"},Ne={class:"d-flex align-items-center"},Ue={class:"text-muted"},Ke={class:"card-body"},Oe={key:0,class:"d-flex gap-2 align-items-center mb-2"},De={class:"text-muted",style:{"white-space":"nowrap"}},Ee={class:"row g-2"},qe={key:0,class:"col-12"},Re={class:"text-center text-muted m-0"},Ve={class:"col-12"},He={class:"col-12"},Me=G({__name:"newConfigurationTemplates",emits:["subnet","port"],async setup(o,{emit:t}){let s,f;const l=t,d=P([]),b=async()=>{await q("/api/newConfigurationTemplates",{},$=>{d.value=$.data})};[s,f]=Z(()=>b()),await s,f();const u=P([]),S=async()=>{await q("/api/newConfigurationTemplates/createTemplate",{},$=>{u.value.push($.data)})},i=P(256),x=P(256);return($,m)=>(n(),a("div",Te,[e("div",Ae,[e("div",Ne,[r(g,{t:"Subnets & Listen Ports Templates"}),e("button",{type:"button",onClick:m[0]||(m[0]=y=>S()),class:"btn btn-sm bg-success-subtle text-success-emphasis border-success-subtle rounded-3 ms-auto"},[m[9]||(m[9]=e("i",{class:"bi bi-plus-circle me-2"},null,-1)),r(g,{t:"Add Template"})])]),e("small",Ue,[r(g,{t:"Create templates to keep track a list of available Subnets & Listen Ports"})])]),e("div",Ke,[d.value.length>0?(n(),a("div",Oe,[e("label",De,[e("small",null,[r(g,{t:"No. of IP Address / Subnet"})])]),h(e("input",{type:"number","onUpdate:modelValue":m[1]||(m[1]=y=>i.value=y),onChange:m[2]||(m[2]=y=>x.value=i.value),class:"form-control form-control-sm rounded-3 w-100 ms-auto"},null,544),[[C,i.value]])])):I("",!0),e("div",Ee,[u.value.length===0&&d.value.length===0?(n(),a("div",qe,[e("p",Re,[r(g,{t:"No Templates"})])])):I("",!0),(n(!0),a(T,null,A(u.value,y=>(n(),a("div",Ve,[r(M,{edit:!0,isNew:!0,onRemove:L=>u.value=u.value.filter(_=>_.TemplateID!==y.TemplateID),onUpdate:L=>{u.value=u.value.filter(_=>_.TemplateID!==y.TemplateID),b()},onSubnet:m[3]||(m[3]=L=>l("subnet",L)),onPort:m[4]||(m[4]=L=>l("port",L)),template:y},null,8,["onRemove","onUpdate","template"])]))),256)),(n(!0),a(T,null,A(d.value,(y,L)=>(n(),a("div",He,[(n(),Q(M,{key:y.TemplateID,peersCount:x.value,onRemove:m[5]||(m[5]=_=>b()),onUpdate:m[6]||(m[6]=_=>b()),onSubnet:m[7]||(m[7]=_=>l("subnet",_)),onPort:m[8]||(m[8]=_=>l("port",_)),template:y},null,8,["peersCount","template"]))]))),256))])])]))}}),Fe={name:"newConfiguration",components:{NewConfigurationTemplates:Me,LocaleText:g},async setup(){const o=B(),t=P([]);await q("/api/protocolsEnabled",{},f=>{t.value=f.data});const s=ee();return{store:o,protocols:t,dashboardStore:s}},data(){return{newConfiguration:{ConfigurationName:"",Address:"",ListenPort:"",PrivateKey:"",PublicKey:"",PresharedKey:"",PreUp:"",PreDown:"",PostUp:"",PostDown:"",Table:"",Protocol:"wg",Jc:5,Jmin:49,Jmax:998,S1:17,S2:110,S3:1,S4:2,H1:0,H2:0,H3:0,H4:0,I1:"0",I2:"0",I3:"0",I4:"0",I5:"0"},numberOfAvailableIPs:"0",error:!1,errorMessage:"",success:!1,loading:!1,parseInterfaceResult:void 0,parsePeersResult:void 0}},created(){this.wireguardGenerateKeypair(),["H1","H2","H3","H4"].forEach(o=>{this.newConfiguration[o]=this.rand(1,2**31)}),["I1","I2","I3","I4","I5"].forEach(o=>{this.newConfiguration[o]="0"})},methods:{rand(o,t){return Math.floor(Math.random()*(t-o)+o)},wireguardGenerateKeypair(){const o=window.wireguard.generateKeypair();this.newConfiguration.PrivateKey=o.privateKey,this.newConfiguration.PublicKey=o.publicKey,this.newConfiguration.PresharedKey=o.presharedKey},async saveNewConfiguration(){this.goodToSubmit&&(this.loading=!0,await E("/api/addWireguardConfiguration",this.newConfiguration,async o=>{o.status?(this.success=!0,await this.store.getConfigurations(),this.$router.push(`/configuration/${this.newConfiguration.ConfigurationName}/peers`)):(this.error=!0,this.errorMessage=o.message,document.querySelector(`#${o.data}`).classList.remove("is-valid"),document.querySelector(`#${o.data}`).classList.add("is-invalid"),this.loading=!1)}))},openFileUpload(){document.querySelector("#fileUpload").click()},readFile(o){const t=o.target.files[0];if(!t)return!1;const s=new FileReader;s.onload=f=>{this.parseInterfaceResult=se(f.target.result),this.parsePeersResult=oe(f.target.result);let l=0;if(this.parseInterfaceResult){this.newConfiguration.ConfigurationName=t.name.replace(".conf","");for(let d of Object.keys(this.parseInterfaceResult))Object.keys(this.newConfiguration).includes(d)&&(this.newConfiguration[d]=this.parseInterfaceResult[d],l+=1)}l>0?this.dashboardStore.newMessage("WGDashboard",`Parse successful! Updated ${l} field(s)`,"success"):this.dashboardStore.newMessage("WGDashboard","Parse failed","danger")},s.readAsText(t)}},computed:{goodToSubmit(){let o=["ConfigurationName","Address","ListenPort","PrivateKey"],t=[...document.querySelectorAll("input[required]")];return o.find(s=>this.newConfiguration[s].length===0)===void 0&&t.find(s=>s.classList.contains("is-invalid"))===void 0}},watch:{"newConfiguration.Address"(o){let t=document.querySelector("#Address");if(t){t.classList.remove("is-invalid","is-valid");try{this.numberOfAvailableIPs=0,o.replace(" ","").split(",").forEach(s=>{let f=F(s),l=Number(f.end-f.start);this.numberOfAvailableIPs+=l+1}),t.classList.add("is-valid")}catch(s){console.log(s),this.numberOfAvailableIPs="0",t.classList.add("is-invalid")}}},"newConfiguration.ListenPort"(o){let t=document.querySelector("#ListenPort");t&&(t.classList.remove("is-invalid","is-valid"),o<0||o>65353||!Number.isInteger(o)?t.classList.add("is-invalid"):t.classList.add("is-valid"))},"newConfiguration.ConfigurationName"(o){let t=document.querySelector("#ConfigurationName");t&&(t.classList.remove("is-invalid","is-valid"),!/^[a-zA-Z0-9_=+.-]{1,15}$/.test(o)||o.length===0||this.store.Configurations.find(s=>s.Name===o)?t.classList.add("is-invalid"):t.classList.add("is-valid"))},"newConfiguration.PrivateKey"(o){let t=document.querySelector("#PrivateKey");if(t){t.classList.remove("is-invalid","is-valid");try{wireguard.generatePublicKey(o),t.classList.add("is-valid")}catch{t.classList.add("is-invalid")}}}},mounted(){document.querySelector("#fileUpload").addEventListener("change",this.readFile,!1)}},Ge={class:"mt-md-5 mt-3 text-body"},Be={class:"container mb-4"},We={class:"mb-4 d-flex align-items-center gap-4 align-items-center"},ze={class:"mb-0"},Je={class:"d-flex gap-2 ms-auto"},je={class:"card rounded-3 shadow"},Ze={class:"card-header"},Qe={class:"card-body d-flex gap-2 protocolBtnGroup"},Xe={key:0,class:"bi bi-check-circle-fill me-2"},Ye={key:1,class:"bi bi-circle me-2"},et={key:0,class:"bi bi-check-circle-fill me-2"},tt={key:1,class:"bi bi-circle me-2"},st={class:"card rounded-3 shadow"},ot={class:"card-header"},nt={class:"card-body"},it=["disabled"],at={class:"invalid-feedback"},lt={key:0},rt={key:1},dt={class:"mb-0"},ut={class:"card rounded-3 shadow"},ct={class:"card-header"},pt={class:"card-body",style:{"font-family":"var(--bs-font-monospace)"}},mt={class:"mb-2"},ft={class:"text-muted fw-bold mb-1"},bt={class:"input-group"},vt=["disabled"],gt={class:"text-muted fw-bold mb-1"},ht={class:"card rounded-3 shadow"},yt={class:"card-header"},wt={class:"card-body"},_t=["disabled"],Ct={class:"invalid-feedback"},Pt={key:0},xt={key:1},St={class:"card rounded-3 shadow"},$t={class:"card-header d-flex align-items-center"},Lt={class:"badge rounded-pill text-bg-success ms-auto"},kt={class:"card-body"},It=["disabled"],Tt={class:"invalid-feedback"},At={key:0},Nt={key:1},Ut={class:"accordion",id:"newConfigurationOptionalAccordion"},Kt={class:"accordion-item"},Ot={class:"accordion-header"},Dt={class:"accordion-button collapsed",type:"button","data-bs-toggle":"collapse","data-bs-target":"#newConfigurationOptionalAccordionCollapse"},Et={id:"newConfigurationOptionalAccordionCollapse",class:"accordion-collapse collapse","data-bs-parent":"#newConfigurationOptionalAccordion"},qt={class:"accordion-body d-flex flex-column gap-3"},Rt={class:"card rounded-3"},Vt={class:"card-header"},Ht={class:"card-body"},Mt=["id","onUpdate:modelValue"],Ft={class:"card rounded-3"},Gt={class:"card-header"},Bt={class:"card-body"},Wt=["id","onUpdate:modelValue"],zt=["disabled"],Jt={key:0,class:"d-flex w-100"},jt={key:1,class:"d-flex w-100"},Zt={key:2,class:"d-flex w-100 align-items-center"};function Qt(o,t,s,f,l,d){const b=O("RouterLink"),u=O("LocaleText"),S=O("NewConfigurationTemplates");return n(),a("div",Ge,[e("div",Be,[e("div",We,[r(b,{to:"/",class:"btn btn-dark btn-brand p-2 shadow",style:{"border-radius":"100%"}},{default:Y(()=>[...t[12]||(t[12]=[e("h2",{class:"mb-0",style:{"line-height":"0"}},[e("i",{class:"bi bi-arrow-left-circle"})],-1)])]),_:1}),e("h2",ze,[r(u,{t:"New Configuration"})]),e("div",Je,[e("button",{class:"titleBtn py-2 text-decoration-none btn text-primary-emphasis bg-primary-subtle rounded-3 border-1 border-primary-subtle",onClick:t[0]||(t[0]=i=>d.openFileUpload()),type:"button","aria-expanded":"false"},[t[13]||(t[13]=e("i",{class:"bi bi-upload me-2"},null,-1)),r(u,{t:"Open File"})]),t[14]||(t[14]=e("input",{type:"file",id:"fileUpload",multiple:"",class:"d-none",accept:"text/plain"},null,-1))])]),e("form",{class:"text-body d-flex flex-column gap-3",onSubmit:t[11]||(t[11]=i=>{i.preventDefault(),this.saveNewConfiguration()})},[e("div",je,[e("div",Ze,[r(u,{t:"Protocol"})]),e("div",Qe,[this.protocols.includes("wg")?(n(),a("a",{key:0,onClick:t[1]||(t[1]=i=>this.newConfiguration.Protocol="wg"),class:D([{"opacity-50":this.newConfiguration.Protocol!=="wg"},"btn btn-primary wireguardBg border-0"]),style:{"flex-basis":"100%"}},[this.newConfiguration.Protocol==="wg"?(n(),a("i",Xe)):(n(),a("i",Ye)),t[15]||(t[15]=e("strong",null," WireGuard ",-1))],2)):I("",!0),this.protocols.includes("awg")?(n(),a("a",{key:1,onClick:t[2]||(t[2]=i=>this.newConfiguration.Protocol="awg"),class:D([{"opacity-50":this.newConfiguration.Protocol!=="awg"},"btn btn-primary amneziawgBg border-0"]),style:{"flex-basis":"100%"}},[this.newConfiguration.Protocol==="awg"?(n(),a("i",et)):(n(),a("i",tt)),t[16]||(t[16]=e("strong",null," AmneziaWG ",-1))],2)):I("",!0)])]),e("div",st,[e("div",ot,[r(u,{t:"Configuration Name"})]),e("div",nt,[h(e("input",{type:"text",class:"form-control",placeholder:"ex. wg1",id:"ConfigurationName","onUpdate:modelValue":t[3]||(t[3]=i=>this.newConfiguration.ConfigurationName=i),disabled:this.loading,required:""},null,8,it),[[C,this.newConfiguration.ConfigurationName]]),e("div",at,[this.error?(n(),a("div",lt,w(this.errorMessage),1)):(n(),a("div",rt,[r(u,{t:"Configuration name is invalid. Possible reasons:"}),e("ul",dt,[e("li",null,[r(u,{t:"Configuration name already exist."})]),e("li",null,[r(u,{t:"Configuration name can only contain 15 lower/uppercase alphabet, numbers, underscore, equal sign, plus sign, period and hyphen."})])])]))])])]),e("div",ut,[e("div",ct,[r(u,{t:"Private Key"}),t[17]||(t[17]=U(" & ",-1)),r(u,{t:"Public Key"})]),e("div",pt,[e("div",mt,[e("label",ft,[e("small",null,[r(u,{t:"Private Key"})])]),e("div",bt,[h(e("input",{type:"text",class:"form-control",id:"PrivateKey",required:"",disabled:this.loading,"onUpdate:modelValue":t[4]||(t[4]=i=>this.newConfiguration.PrivateKey=i)},null,8,vt),[[C,this.newConfiguration.PrivateKey]]),e("button",{class:"btn btn-outline-primary",type:"button",title:"Regenerate Private Key",onClick:t[5]||(t[5]=i=>d.wireguardGenerateKeypair())},[...t[18]||(t[18]=[e("i",{class:"bi bi-arrow-repeat"},null,-1)])])])]),e("div",null,[e("label",gt,[e("small",null,[r(u,{t:"Public Key"})])]),h(e("input",{type:"text",class:"form-control",id:"PublicKey","onUpdate:modelValue":t[6]||(t[6]=i=>this.newConfiguration.PublicKey=i),disabled:""},null,512),[[C,this.newConfiguration.PublicKey]])])])]),r(S,{onSubnet:t[7]||(t[7]=i=>this.newConfiguration.Address=i),onPort:t[8]||(t[8]=i=>this.newConfiguration.ListenPort=i)}),e("div",ht,[e("div",yt,[r(u,{t:"Listen Port"})]),e("div",wt,[h(e("input",{type:"number",class:"form-control",placeholder:"0-65353",id:"ListenPort",min:"1",max:"65353","onUpdate:modelValue":t[9]||(t[9]=i=>this.newConfiguration.ListenPort=i),disabled:this.loading,required:""},null,8,_t),[[C,this.newConfiguration.ListenPort]]),e("div",Ct,[this.error?(n(),a("div",Pt,w(this.errorMessage),1)):(n(),a("div",xt,[r(u,{t:"Invalid port"})]))])])]),e("div",St,[e("div",$t,[r(u,{t:"IP Address/CIDR"}),e("span",Lt,[r(u,{t:l.numberOfAvailableIPs+" Available IP Address"},null,8,["t"])])]),e("div",kt,[h(e("input",{type:"text",class:"form-control",placeholder:"Ex: 10.0.0.1/24",id:"Address","onUpdate:modelValue":t[10]||(t[10]=i=>this.newConfiguration.Address=i),disabled:this.loading,required:""},null,8,It),[[C,this.newConfiguration.Address]]),e("div",Tt,[this.error?(n(),a("div",At,w(this.errorMessage),1)):(n(),a("div",Nt," IP Address/CIDR is invalid "))])])]),t[23]||(t[23]=e("hr",null,null,-1)),e("div",Ut,[e("div",Kt,[e("h2",Ot,[e("button",Dt,[r(u,{t:"Optional Settings"})])]),e("div",Et,[e("div",qt,[(n(),a(T,null,A(["Table","PreUp","PreDown","PostUp","PostDown"],i=>e("div",Rt,[e("div",Vt,w(i),1),e("div",Ht,[h(e("input",{type:"text",class:"form-control font-monospace",id:i,"onUpdate:modelValue":x=>this.newConfiguration[i]=x},null,8,Mt),[[C,this.newConfiguration[i]]])])])),64)),this.newConfiguration.Protocol==="awg"?(n(),a(T,{key:0},A(["Jc","Jmin","Jmax","S1","S2","S3","S4","H1","H2","H3","H4","I1","I2","I3","I4","I5"],i=>e("div",Ft,[e("div",Gt,w(i),1),e("div",Bt,[h(e("input",{type:"text",class:"form-control font-monospace",id:i,"onUpdate:modelValue":x=>this.newConfiguration[i]=x},null,8,Wt),[[C,this.newConfiguration[i]]])])])),64)):I("",!0)])])])]),e("button",{class:"btn btn-dark btn-brand rounded-3 px-3 py-2 shadow ms-auto",disabled:!this.goodToSubmit||this.loading||this.success},[this.success?(n(),a("span",Jt,[r(u,{t:"Success"}),t[19]||(t[19]=U("! ",-1)),t[20]||(t[20]=e("i",{class:"bi bi-check-circle-fill ms-2"},null,-1))])):this.loading?(n(),a("span",Zt,[r(u,{t:"Saving..."}),t[22]||(t[22]=e("span",{class:"ms-2 spinner-border spinner-border-sm",role:"status"},null,-1))])):(n(),a("span",jt,[t[21]||(t[21]=e("i",{class:"bi bi-save-fill me-2"},null,-1)),r(u,{t:"Save"})]))],8,zt)],32)])])}const ss=X(Fe,[["render",Qt],["__scopeId","data-v-14fcf0ee"]]);export{ss as default};
+`),s=[];let f=-1;const l=t.indexOf("[Peer]");if(l===-1)return!1;for(let d=l;d-1&&(b=[b.slice(0,b.indexOf("=")),b.slice(b.indexOf("=")+1)],s[f][b[0]]=b[1])}return s};te();const ne={class:"card rounded-3"},ie={class:"card-body"},ae={class:"row"},le={class:"col-sm"},re={class:"d-flex flex-column gap-2"},de={class:"d-flex align-items-center"},ue={class:"text-muted"},ce={key:0,class:"mb-0 ms-auto"},pe={key:0,class:"d-flex gap-2 flex-column"},me={class:"text-muted d-flex align-items-center gap-1",style:{"white-space":"nowrap"}},fe={class:"badge rounded-pill text-bg-success ms-auto"},be={value:void 0,disabled:""},ve=["value"],ge={class:"col-sm"},he={class:"d-flex flex-column gap-2 h-100"},ye={class:"d-flex align-items-center"},we={class:"text-muted"},_e={key:0,class:"mb-0 ms-auto"},Ce={key:1,class:"d-flex ms-auto align-items-center"},Pe={key:0,class:"d-flex gap-2 flex-column mt-auto"},xe={class:"text-muted d-flex align-items-center gap-1",style:{"white-space":"nowrap"}},Se={class:"badge rounded-pill text-bg-success ms-auto"},$e={value:void 0,disabled:""},Le=["value"],ke={key:0,class:"d-flex gap-2"},Ie={key:1,class:"d-flex gap-2"},M=G({__name:"newConfigurationTemplate",props:["template","edit","isNew","peersCount"],emits:["subnet","port","update","remove"],setup(o,{emit:t}){const s=o,f=B(),l=P(!1);s.edit&&(l.value=!0);const d=P({...s.template}),b=P([]),u=t,S=P(void 0),i=P(void 0),x=P([]),$=()=>{if(b.value=[],s.template.Subnet){let v=new Set([...V(s.template.Subnet)]);if(s.peersCount&&s.peersCount>0){for(let k of f.Configurations){let K=k.Address.replace(" ","").split(",");for(let R of K)W(s.template.Subnet,R)&&(v=v.difference(new Set([...V(R)])))}let c=Math.floor(v.size/s.peersCount),p=0;v=Array.from(v);for(let k=0;k<(c>10?10:c);k++)b.value.push(z(v.slice(p,p+s.peersCount))),p+=s.peersCount}}},m=()=>{if(s.template.ListenPortStart&&s.template.ListenPortEnd){let v=s.template.ListenPortStart,c=s.template.ListenPortEnd;v>c&&(v=s.template.ListenPortEnd,c=s.template.ListenPortStart);let p=new Set(Array.from({length:c-v+1},(k,K)=>v+K));x.value=[...p.difference(new Set(f.Configurations.map(k=>Number(k.ListenPort))))]}};J(()=>{s.isNew||($(),m())}),N(()=>s.peersCount,()=>{$()}),N(S,()=>{u("subnet",S.value)}),N(i,()=>{u("port",i.value)}),N(()=>s.template,()=>{$(),m()},{deep:!0});const y=j(()=>{try{const{start:v,end:c}=F(d.value.Subnet);if(c-v>=1000000n)throw new Error("Too many IPs");return d.value.Subnet&&d.value.ListenPortStart&&d.value.ListenPortEnd&&d.value.ListenPortEnd>=d.value.ListenPortStart}catch{return!1}}),L=async()=>{await E("/api/newConfigurationTemplates/updateTemplate",{Template:d.value},v=>{v.status&&(u("update",d.value),l.value=!1)})},_=async()=>{await E("/api/newConfigurationTemplates/deleteTemplate",{Template:d.value},v=>{v.status&&u("remove",d)})};return(v,c)=>(n(),a("div",ne,[e("div",ie,[e("div",ae,[e("div",le,[e("div",re,[e("div",de,[e("label",ue,[e("small",null,[r(g,{t:"Subnet"})])]),l.value?h((n(),a("input",{key:1,class:"form-control-sm form-control rounded-3 w-auto ms-auto","onUpdate:modelValue":c[0]||(c[0]=p=>d.value.Subnet=p)},null,512)),[[C,d.value.Subnet]]):(n(),a("p",ce,[e("small",null,w(o.template.Subnet),1)]))]),l.value?I("",!0):(n(),a("div",pe,[e("label",me,[e("small",null,[r(g,{t:"Available Subnets"})]),e("span",fe,w(b.value.length),1)]),h(e("select",{"onUpdate:modelValue":c[1]||(c[1]=p=>S.value=p),class:"form-select form-select-sm rounded-3 w-100 ms-auto"},[e("option",be,[r(g,{t:"Select..."})]),(n(!0),a(T,null,A(b.value,p=>(n(),a("option",{value:p.join(", ")},w(p.join(", ")),9,ve))),256))],512),[[H,S.value]])]))])]),e("div",ge,[e("div",he,[e("div",ye,[e("label",we,[e("small",null,[r(g,{t:"Listen Port Range"})])]),l.value?(n(),a("div",Ce,[h(e("input",{class:"form-control-sm form-control rounded-3 ms-auto",style:{width:"80px"},"onUpdate:modelValue":c[2]||(c[2]=p=>d.value.ListenPortStart=p),type:"number"},null,512),[[C,d.value.ListenPortStart]]),c[10]||(c[10]=e("i",{class:"bi bi-arrow-right mx-2"},null,-1)),h(e("input",{class:"form-control-sm form-control rounded-3 ms-auto",style:{width:"80px"},"onUpdate:modelValue":c[3]||(c[3]=p=>d.value.ListenPortEnd=p),type:"number"},null,512),[[C,d.value.ListenPortEnd]])])):(n(),a("p",_e,[e("small",null,[U(w(o.template.ListenPortStart),1),c[9]||(c[9]=e("i",{class:"bi bi-arrow-right mx-2"},null,-1)),U(" "+w(o.template.ListenPortEnd),1)])]))]),l.value?I("",!0):(n(),a("div",Pe,[e("label",xe,[e("small",null,[r(g,{t:"Available Ports"})]),e("span",Se,w(x.value.length),1)]),h(e("select",{"onUpdate:modelValue":c[4]||(c[4]=p=>i.value=p),class:"form-select form-select-sm rounded-3 w-100 ms-auto"},[e("option",$e,[r(g,{t:"Select..."})]),(n(!0),a(T,null,A([...x.value],p=>(n(),a("option",{value:p},w(p),9,Le))),256))],512),[[H,i.value]])]))])])]),c[11]||(c[11]=e("hr",null,null,-1)),l.value?(n(),a("div",Ie,[e("button",{type:"button",onClick:c[7]||(c[7]=p=>o.isNew?u("remove"):l.value=!1),class:"ms-auto btn btn-sm border-secondary-subtle bg-secondary-subtle text-secondary-emphasis rounded-3"},[r(g,{t:"Cancel"})]),e("button",{type:"button",onClick:c[8]||(c[8]=p=>L()),class:D([{disabled:!y.value},"btn btn-sm border-primary-subtle bg-primary-subtle text-primary-emphasis rounded-3"])},[r(g,{t:"Save"})],2)])):(n(),a("div",ke,[e("button",{type:"button",onClick:c[5]||(c[5]=p=>{l.value=!0,d.value={...s.template}}),class:"ms-auto btn btn-sm border-primary-subtle bg-primary-subtle text-primary-emphasis rounded-3"},[r(g,{t:"Edit"})]),e("button",{type:"button",onClick:c[6]||(c[6]=p=>_()),class:"btn btn-sm border-danger-subtle bg-danger-subtle text-danger-emphasis rounded-3"},[r(g,{t:"Delete"})])]))])]))}}),Te={class:"card rounded-3"},Ae={class:"card-header"},Ne={class:"d-flex align-items-center"},Ue={class:"text-muted"},Ke={class:"card-body"},Oe={key:0,class:"d-flex gap-2 align-items-center mb-2"},De={class:"text-muted",style:{"white-space":"nowrap"}},Ee={class:"row g-2"},qe={key:0,class:"col-12"},Re={class:"text-center text-muted m-0"},Ve={class:"col-12"},He={class:"col-12"},Me=G({__name:"newConfigurationTemplates",emits:["subnet","port"],async setup(o,{emit:t}){let s,f;const l=t,d=P([]),b=async()=>{await q("/api/newConfigurationTemplates",{},$=>{d.value=$.data})};[s,f]=Z(()=>b()),await s,f();const u=P([]),S=async()=>{await q("/api/newConfigurationTemplates/createTemplate",{},$=>{u.value.push($.data)})},i=P(256),x=P(256);return($,m)=>(n(),a("div",Te,[e("div",Ae,[e("div",Ne,[r(g,{t:"Subnets & Listen Ports Templates"}),e("button",{type:"button",onClick:m[0]||(m[0]=y=>S()),class:"btn btn-sm bg-success-subtle text-success-emphasis border-success-subtle rounded-3 ms-auto"},[m[9]||(m[9]=e("i",{class:"bi bi-plus-circle me-2"},null,-1)),r(g,{t:"Add Template"})])]),e("small",Ue,[r(g,{t:"Create templates to keep track a list of available Subnets & Listen Ports"})])]),e("div",Ke,[d.value.length>0?(n(),a("div",Oe,[e("label",De,[e("small",null,[r(g,{t:"No. of IP Address / Subnet"})])]),h(e("input",{type:"number","onUpdate:modelValue":m[1]||(m[1]=y=>i.value=y),onChange:m[2]||(m[2]=y=>x.value=i.value),class:"form-control form-control-sm rounded-3 w-100 ms-auto"},null,544),[[C,i.value]])])):I("",!0),e("div",Ee,[u.value.length===0&&d.value.length===0?(n(),a("div",qe,[e("p",Re,[r(g,{t:"No Templates"})])])):I("",!0),(n(!0),a(T,null,A(u.value,y=>(n(),a("div",Ve,[r(M,{edit:!0,isNew:!0,onRemove:L=>u.value=u.value.filter(_=>_.TemplateID!==y.TemplateID),onUpdate:L=>{u.value=u.value.filter(_=>_.TemplateID!==y.TemplateID),b()},onSubnet:m[3]||(m[3]=L=>l("subnet",L)),onPort:m[4]||(m[4]=L=>l("port",L)),template:y},null,8,["onRemove","onUpdate","template"])]))),256)),(n(!0),a(T,null,A(d.value,(y,L)=>(n(),a("div",He,[(n(),Q(M,{key:y.TemplateID,peersCount:x.value,onRemove:m[5]||(m[5]=_=>b()),onUpdate:m[6]||(m[6]=_=>b()),onSubnet:m[7]||(m[7]=_=>l("subnet",_)),onPort:m[8]||(m[8]=_=>l("port",_)),template:y},null,8,["peersCount","template"]))]))),256))])])]))}}),Fe={name:"newConfiguration",components:{NewConfigurationTemplates:Me,LocaleText:g},async setup(){const o=B(),t=P([]);await q("/api/protocolsEnabled",{},f=>{t.value=f.data});const s=ee();return{store:o,protocols:t,dashboardStore:s}},data(){return{newConfiguration:{ConfigurationName:"",Address:"",ListenPort:"",PrivateKey:"",PublicKey:"",PresharedKey:"",PreUp:"",PreDown:"",PostUp:"",PostDown:"",Table:"",Protocol:"wg",Jc:5,Jmin:49,Jmax:998,S1:17,S2:110,S3:1,S4:2,H1:0,H2:0,H3:0,H4:0,I1:"0",I2:"0",I3:"0",I4:"0",I5:"0",J1:"0",J2:"0",J3:"0",Itime:"0"},numberOfAvailableIPs:"0",error:!1,errorMessage:"",success:!1,loading:!1,parseInterfaceResult:void 0,parsePeersResult:void 0}},created(){this.wireguardGenerateKeypair(),["H1","H2","H3","H4"].forEach(o=>{this.newConfiguration[o]=this.rand(1,2**31)}),["I1","I2","I3","I4","I5"].forEach(o=>{this.newConfiguration[o]="0"})},methods:{rand(o,t){return Math.floor(Math.random()*(t-o)+o)},wireguardGenerateKeypair(){const o=window.wireguard.generateKeypair();this.newConfiguration.PrivateKey=o.privateKey,this.newConfiguration.PublicKey=o.publicKey,this.newConfiguration.PresharedKey=o.presharedKey},async saveNewConfiguration(){this.goodToSubmit&&(this.loading=!0,await E("/api/addWireguardConfiguration",this.newConfiguration,async o=>{o.status?(this.success=!0,await this.store.getConfigurations(),this.$router.push(`/configuration/${this.newConfiguration.ConfigurationName}/peers`)):(this.error=!0,this.errorMessage=o.message,document.querySelector(`#${o.data}`).classList.remove("is-valid"),document.querySelector(`#${o.data}`).classList.add("is-invalid"),this.loading=!1)}))},openFileUpload(){document.querySelector("#fileUpload").click()},readFile(o){const t=o.target.files[0];if(!t)return!1;const s=new FileReader;s.onload=f=>{this.parseInterfaceResult=se(f.target.result),this.parsePeersResult=oe(f.target.result);let l=0;if(this.parseInterfaceResult){this.newConfiguration.ConfigurationName=t.name.replace(".conf","");for(let d of Object.keys(this.parseInterfaceResult))Object.keys(this.newConfiguration).includes(d)&&(this.newConfiguration[d]=this.parseInterfaceResult[d],l+=1)}l>0?this.dashboardStore.newMessage("WGDashboard",`Parse successful! Updated ${l} field(s)`,"success"):this.dashboardStore.newMessage("WGDashboard","Parse failed","danger")},s.readAsText(t)}},computed:{goodToSubmit(){let o=["ConfigurationName","Address","ListenPort","PrivateKey"],t=[...document.querySelectorAll("input[required]")];return o.find(s=>this.newConfiguration[s].length===0)===void 0&&t.find(s=>s.classList.contains("is-invalid"))===void 0}},watch:{"newConfiguration.Address"(o){let t=document.querySelector("#Address");if(t){t.classList.remove("is-invalid","is-valid");try{this.numberOfAvailableIPs=0,o.replace(" ","").split(",").forEach(s=>{let f=F(s),l=Number(f.end-f.start);this.numberOfAvailableIPs+=l+1}),t.classList.add("is-valid")}catch(s){console.log(s),this.numberOfAvailableIPs="0",t.classList.add("is-invalid")}}},"newConfiguration.ListenPort"(o){let t=document.querySelector("#ListenPort");t&&(t.classList.remove("is-invalid","is-valid"),o<0||o>65353||!Number.isInteger(o)?t.classList.add("is-invalid"):t.classList.add("is-valid"))},"newConfiguration.ConfigurationName"(o){let t=document.querySelector("#ConfigurationName");t&&(t.classList.remove("is-invalid","is-valid"),!/^[a-zA-Z0-9_=+.-]{1,15}$/.test(o)||o.length===0||this.store.Configurations.find(s=>s.Name===o)?t.classList.add("is-invalid"):t.classList.add("is-valid"))},"newConfiguration.PrivateKey"(o){let t=document.querySelector("#PrivateKey");if(t){t.classList.remove("is-invalid","is-valid");try{wireguard.generatePublicKey(o),t.classList.add("is-valid")}catch{t.classList.add("is-invalid")}}}},mounted(){document.querySelector("#fileUpload").addEventListener("change",this.readFile,!1)}},Ge={class:"mt-md-5 mt-3 text-body"},Be={class:"container mb-4"},We={class:"mb-4 d-flex align-items-center gap-4 align-items-center"},ze={class:"mb-0"},Je={class:"d-flex gap-2 ms-auto"},je={class:"card rounded-3 shadow"},Ze={class:"card-header"},Qe={class:"card-body d-flex gap-2 protocolBtnGroup"},Xe={key:0,class:"bi bi-check-circle-fill me-2"},Ye={key:1,class:"bi bi-circle me-2"},et={key:0,class:"bi bi-check-circle-fill me-2"},tt={key:1,class:"bi bi-circle me-2"},st={class:"card rounded-3 shadow"},ot={class:"card-header"},nt={class:"card-body"},it=["disabled"],at={class:"invalid-feedback"},lt={key:0},rt={key:1},dt={class:"mb-0"},ut={class:"card rounded-3 shadow"},ct={class:"card-header"},pt={class:"card-body",style:{"font-family":"var(--bs-font-monospace)"}},mt={class:"mb-2"},ft={class:"text-muted fw-bold mb-1"},bt={class:"input-group"},vt=["disabled"],gt={class:"text-muted fw-bold mb-1"},ht={class:"card rounded-3 shadow"},yt={class:"card-header"},wt={class:"card-body"},_t=["disabled"],Ct={class:"invalid-feedback"},Pt={key:0},xt={key:1},St={class:"card rounded-3 shadow"},$t={class:"card-header d-flex align-items-center"},Lt={class:"badge rounded-pill text-bg-success ms-auto"},kt={class:"card-body"},It=["disabled"],Tt={class:"invalid-feedback"},At={key:0},Nt={key:1},Ut={class:"accordion",id:"newConfigurationOptionalAccordion"},Kt={class:"accordion-item"},Ot={class:"accordion-header"},Dt={class:"accordion-button collapsed",type:"button","data-bs-toggle":"collapse","data-bs-target":"#newConfigurationOptionalAccordionCollapse"},Et={id:"newConfigurationOptionalAccordionCollapse",class:"accordion-collapse collapse","data-bs-parent":"#newConfigurationOptionalAccordion"},qt={class:"accordion-body d-flex flex-column gap-3"},Rt={class:"card rounded-3"},Vt={class:"card-header"},Ht={class:"card-body"},Mt=["id","onUpdate:modelValue"],Ft={class:"card rounded-3"},Gt={class:"card-header"},Bt={class:"card-body"},Wt=["id","onUpdate:modelValue"],zt=["disabled"],Jt={key:0,class:"d-flex w-100"},jt={key:1,class:"d-flex w-100"},Zt={key:2,class:"d-flex w-100 align-items-center"};function Qt(o,t,s,f,l,d){const b=O("RouterLink"),u=O("LocaleText"),S=O("NewConfigurationTemplates");return n(),a("div",Ge,[e("div",Be,[e("div",We,[r(b,{to:"/",class:"btn btn-dark btn-brand p-2 shadow",style:{"border-radius":"100%"}},{default:Y(()=>[...t[12]||(t[12]=[e("h2",{class:"mb-0",style:{"line-height":"0"}},[e("i",{class:"bi bi-arrow-left-circle"})],-1)])]),_:1}),e("h2",ze,[r(u,{t:"New Configuration"})]),e("div",Je,[e("button",{class:"titleBtn py-2 text-decoration-none btn text-primary-emphasis bg-primary-subtle rounded-3 border-1 border-primary-subtle",onClick:t[0]||(t[0]=i=>d.openFileUpload()),type:"button","aria-expanded":"false"},[t[13]||(t[13]=e("i",{class:"bi bi-upload me-2"},null,-1)),r(u,{t:"Open File"})]),t[14]||(t[14]=e("input",{type:"file",id:"fileUpload",multiple:"",class:"d-none",accept:"text/plain"},null,-1))])]),e("form",{class:"text-body d-flex flex-column gap-3",onSubmit:t[11]||(t[11]=i=>{i.preventDefault(),this.saveNewConfiguration()})},[e("div",je,[e("div",Ze,[r(u,{t:"Protocol"})]),e("div",Qe,[this.protocols.includes("wg")?(n(),a("a",{key:0,onClick:t[1]||(t[1]=i=>this.newConfiguration.Protocol="wg"),class:D([{"opacity-50":this.newConfiguration.Protocol!=="wg"},"btn btn-primary wireguardBg border-0"]),style:{"flex-basis":"100%"}},[this.newConfiguration.Protocol==="wg"?(n(),a("i",Xe)):(n(),a("i",Ye)),t[15]||(t[15]=e("strong",null," WireGuard ",-1))],2)):I("",!0),this.protocols.includes("awg")?(n(),a("a",{key:1,onClick:t[2]||(t[2]=i=>this.newConfiguration.Protocol="awg"),class:D([{"opacity-50":this.newConfiguration.Protocol!=="awg"},"btn btn-primary amneziawgBg border-0"]),style:{"flex-basis":"100%"}},[this.newConfiguration.Protocol==="awg"?(n(),a("i",et)):(n(),a("i",tt)),t[16]||(t[16]=e("strong",null," AmneziaWG ",-1))],2)):I("",!0)])]),e("div",st,[e("div",ot,[r(u,{t:"Configuration Name"})]),e("div",nt,[h(e("input",{type:"text",class:"form-control",placeholder:"ex. wg1",id:"ConfigurationName","onUpdate:modelValue":t[3]||(t[3]=i=>this.newConfiguration.ConfigurationName=i),disabled:this.loading,required:""},null,8,it),[[C,this.newConfiguration.ConfigurationName]]),e("div",at,[this.error?(n(),a("div",lt,w(this.errorMessage),1)):(n(),a("div",rt,[r(u,{t:"Configuration name is invalid. Possible reasons:"}),e("ul",dt,[e("li",null,[r(u,{t:"Configuration name already exist."})]),e("li",null,[r(u,{t:"Configuration name can only contain 15 lower/uppercase alphabet, numbers, underscore, equal sign, plus sign, period and hyphen."})])])]))])])]),e("div",ut,[e("div",ct,[r(u,{t:"Private Key"}),t[17]||(t[17]=U(" & ",-1)),r(u,{t:"Public Key"})]),e("div",pt,[e("div",mt,[e("label",ft,[e("small",null,[r(u,{t:"Private Key"})])]),e("div",bt,[h(e("input",{type:"text",class:"form-control",id:"PrivateKey",required:"",disabled:this.loading,"onUpdate:modelValue":t[4]||(t[4]=i=>this.newConfiguration.PrivateKey=i)},null,8,vt),[[C,this.newConfiguration.PrivateKey]]),e("button",{class:"btn btn-outline-primary",type:"button",title:"Regenerate Private Key",onClick:t[5]||(t[5]=i=>d.wireguardGenerateKeypair())},[...t[18]||(t[18]=[e("i",{class:"bi bi-arrow-repeat"},null,-1)])])])]),e("div",null,[e("label",gt,[e("small",null,[r(u,{t:"Public Key"})])]),h(e("input",{type:"text",class:"form-control",id:"PublicKey","onUpdate:modelValue":t[6]||(t[6]=i=>this.newConfiguration.PublicKey=i),disabled:""},null,512),[[C,this.newConfiguration.PublicKey]])])])]),r(S,{onSubnet:t[7]||(t[7]=i=>this.newConfiguration.Address=i),onPort:t[8]||(t[8]=i=>this.newConfiguration.ListenPort=i)}),e("div",ht,[e("div",yt,[r(u,{t:"Listen Port"})]),e("div",wt,[h(e("input",{type:"number",class:"form-control",placeholder:"0-65353",id:"ListenPort",min:"1",max:"65353","onUpdate:modelValue":t[9]||(t[9]=i=>this.newConfiguration.ListenPort=i),disabled:this.loading,required:""},null,8,_t),[[C,this.newConfiguration.ListenPort]]),e("div",Ct,[this.error?(n(),a("div",Pt,w(this.errorMessage),1)):(n(),a("div",xt,[r(u,{t:"Invalid port"})]))])])]),e("div",St,[e("div",$t,[r(u,{t:"IP Address/CIDR"}),e("span",Lt,[r(u,{t:l.numberOfAvailableIPs+" Available IP Address"},null,8,["t"])])]),e("div",kt,[h(e("input",{type:"text",class:"form-control",placeholder:"Ex: 10.0.0.1/24",id:"Address","onUpdate:modelValue":t[10]||(t[10]=i=>this.newConfiguration.Address=i),disabled:this.loading,required:""},null,8,It),[[C,this.newConfiguration.Address]]),e("div",Tt,[this.error?(n(),a("div",At,w(this.errorMessage),1)):(n(),a("div",Nt," IP Address/CIDR is invalid "))])])]),t[23]||(t[23]=e("hr",null,null,-1)),e("div",Ut,[e("div",Kt,[e("h2",Ot,[e("button",Dt,[r(u,{t:"Optional Settings"})])]),e("div",Et,[e("div",qt,[(n(),a(T,null,A(["Table","PreUp","PreDown","PostUp","PostDown"],i=>e("div",Rt,[e("div",Vt,w(i),1),e("div",Ht,[h(e("input",{type:"text",class:"form-control font-monospace",id:i,"onUpdate:modelValue":x=>this.newConfiguration[i]=x},null,8,Mt),[[C,this.newConfiguration[i]]])])])),64)),this.newConfiguration.Protocol==="awg"?(n(),a(T,{key:0},A(["Jc","Jmin","Jmax","S1","S2","S3","S4","H1","H2","H3","H4","I1","I2","I3","I4","I5","J1","J2","J3","Itimr"],i=>e("div",Ft,[e("div",Gt,w(i),1),e("div",Bt,[h(e("input",{type:"text",class:"form-control font-monospace",id:i,"onUpdate:modelValue":x=>this.newConfiguration[i]=x},null,8,Wt),[[C,this.newConfiguration[i]]])])])),64)):I("",!0)])])])]),e("button",{class:"btn btn-dark btn-brand rounded-3 px-3 py-2 shadow ms-auto",disabled:!this.goodToSubmit||this.loading||this.success},[this.success?(n(),a("span",Jt,[r(u,{t:"Success"}),t[19]||(t[19]=U("! ",-1)),t[20]||(t[20]=e("i",{class:"bi bi-check-circle-fill ms-2"},null,-1))])):this.loading?(n(),a("span",Zt,[r(u,{t:"Saving..."}),t[22]||(t[22]=e("span",{class:"ms-2 spinner-border spinner-border-sm",role:"status"},null,-1))])):(n(),a("span",jt,[t[21]||(t[21]=e("i",{class:"bi bi-save-fill me-2"},null,-1)),r(u,{t:"Save"})]))],8,zt)],32)])])}const ss=X(Fe,[["render",Qt],["__scopeId","data-v-14fcf0ee"]]);export{ss as default};