diff --git a/frontend/src/components/PeerViewModal.vue b/frontend/src/components/PeerViewModal.vue index 6f81d48..c3ed616 100644 --- a/frontend/src/components/PeerViewModal.vue +++ b/frontend/src/components/PeerViewModal.vue @@ -52,7 +52,7 @@ const selectedStats = computed(() => { if (!!props.peerId || props.peerId.length) { p = profile.Statistics(props.peerId) } else { - s = freshStats() // dummy peer to avoid 'undefined' exceptions + s = freshStats() // dummy stats to avoid 'undefined' exceptions } } diff --git a/internal/app/api/core/frontend-dist/assets/ProfileView-ElP3kD7E.js b/internal/app/api/core/frontend-dist/assets/ProfileView-7h9_sssB.js similarity index 98% rename from internal/app/api/core/frontend-dist/assets/ProfileView-ElP3kD7E.js rename to internal/app/api/core/frontend-dist/assets/ProfileView-7h9_sssB.js index f2bd48e..078d454 100644 --- a/internal/app/api/core/frontend-dist/assets/ProfileView-ElP3kD7E.js +++ b/internal/app/api/core/frontend-dist/assets/ProfileView-7h9_sssB.js @@ -1 +1 @@ -import{s as y,A as $,r as v,p as C,o as i,h as n,q as m,B as P,C as I,i as e,t as d,j as b,v as S,x as o,m as p,k as c,F as h,n as f,y as g,z as w}from"./index-9ks1MleN.js";const D={class:"mt-4 row"},z={class:"col-12 col-lg-5"},N={class:"mt-2"},x={class:"col-12 col-lg-4 text-lg-end"},V={class:"form-group d-inline"},A={class:"input-group mb-3"},L=["placeholder"],B=["title"],E=e("i",{class:"fa-solid fa-search"},null,-1),M=[E],F={class:"col-12 col-lg-3 text-lg-end"},U=["title"],T=e("i",{class:"fa fa-plus me-1"},null,-1),j=e("i",{class:"fa fa-user"},null,-1),q=[T,j],H={class:"mt-2 table-responsive"},K={key:0},O={key:1,id:"peerTable",class:"table table-sm"},R={scope:"col"},W=["title"],G=e("th",{scope:"col"},null,-1),J={scope:"col"},Q={scope:"col"},X={key:0,scope:"col"},Y={scope:"col"},Z=e("th",{scope:"col"},null,-1),ee=e("th",{scope:"row"},[e("input",{id:"flexCheckDefault",class:"form-check-input",type:"checkbox",value:""})],-1),te={class:"text-center"},se={key:0,class:"text-danger"},oe=["title"],le={key:1,class:"text-warning"},ie=["title"],ne=["title"],ae=["title"],de={key:0},ce={key:0},re=e("span",{class:"badge rounded-pill bg-success"},[e("i",{class:"fa-solid fa-link"})],-1),_e=["title"],ue={key:1},he=e("span",{class:"badge rounded-pill bg-light"},[e("i",{class:"fa-solid fa-link-slash"})],-1),pe=[he],fe={class:"text-center"},ge=["title","onClick"],ve=e("i",{class:"fas fa-eye me-2"},null,-1),me=[ve],be=["title","onClick"],ke=e("i",{class:"fas fa-cog"},null,-1),ye=[ke],$e=e("hr",null,null,-1),Ce={class:"mt-3"},Pe={class:"row"},Ie={class:"col-6"},Se={class:"pagination pagination-sm"},we=["onClick"],De={class:"col-6"},ze={class:"form-group row"},Ne={class:"col-sm-6 col-form-label text-end",for:"paginationSelector"},xe={class:"col-sm-6"},Ve=e("option",{value:"10"},"10",-1),Ae=e("option",{value:"25"},"25",-1),Le=e("option",{value:"50"},"50",-1),Be=e("option",{value:"100"},"100",-1),Ee={value:"999999999"},Ue={__name:"ProfileView",setup(Me){const k=y(),s=$(),u=v(""),r=v("");return C(async()=>{await s.LoadUser(),await s.LoadPeers(),await s.LoadStats()}),(a,l)=>(i(),n(h,null,[m(P,{peerId:u.value,visible:u.value!=="",onClose:l[0]||(l[0]=t=>u.value="")},null,8,["peerId","visible"]),m(I,{peerId:r.value,visible:r.value!=="",onClose:l[1]||(l[1]=t=>r.value="")},null,8,["peerId","visible"]),e("div",D,[e("div",z,[e("h2",N,d(a.$t("profile.headline")),1)]),e("div",x,[e("div",V,[e("div",A,[b(e("input",{"onUpdate:modelValue":l[2]||(l[2]=t=>o(s).filter=t),class:"form-control",placeholder:a.$t("general.search.placeholder"),type:"text",onKeyup:l[3]||(l[3]=(...t)=>o(s).afterPageSizeChange&&o(s).afterPageSizeChange(...t))},null,40,L),[[S,o(s).filter]]),e("button",{class:"input-group-text btn btn-primary",title:a.$t("general.search.button")},M,8,B)])])]),e("div",F,[o(k).Setting("SelfProvisioning")?(i(),n("a",{key:0,class:"btn btn-primary ms-2",href:"#",title:a.$t("general.search.button-add-peer"),onClick:l[4]||(l[4]=p(t=>r.value="#NEW#",["prevent"]))},q,8,U)):c("",!0)])]),e("div",H,[o(s).CountPeers===0?(i(),n("div",K,[e("h4",null,d(a.$t("profile.no-peer.headline")),1),e("p",null,d(a.$t("profile.no-peer.abstract")),1)])):c("",!0),o(s).CountPeers!==0?(i(),n("table",O,[e("thead",null,[e("tr",null,[e("th",R,[e("input",{id:"flexCheckDefault",class:"form-check-input",title:a.$t("general.select-all"),type:"checkbox",value:""},null,8,W)]),G,e("th",J,d(a.$t("profile.table-heading.name")),1),e("th",Q,d(a.$t("profile.table-heading.ip")),1),o(s).hasStatistics?(i(),n("th",X,d(a.$t("profile.table-heading.stats")),1)):c("",!0),e("th",Y,d(a.$t("profile.table-heading.interface")),1),Z])]),e("tbody",null,[(i(!0),n(h,null,f(o(s).FilteredAndPagedPeers,t=>(i(),n("tr",{key:t.Identifier},[ee,e("td",te,[t.Disabled?(i(),n("span",se,[e("i",{class:"fa fa-circle-xmark",title:t.DisabledReason},null,8,oe)])):c("",!0),!t.Disabled&&t.ExpiresAt?(i(),n("span",le,[e("i",{class:"fas fa-hourglass-end",title:t.ExpiresAt},null,8,ie)])):c("",!0)]),e("td",null,[t.DisplayName?(i(),n("span",{key:0,title:t.Identifier},d(t.DisplayName),9,ne)):(i(),n("span",{key:1,title:t.Identifier},d(a.$filters.truncate(t.Identifier,10)),9,ae))]),e("td",null,[(i(!0),n(h,null,f(t.Addresses,_=>(i(),n("span",{key:_,class:"badge rounded-pill bg-light"},d(_),1))),128))]),o(s).hasStatistics?(i(),n("td",de,[o(s).Statistics(t.Identifier).IsConnected?(i(),n("div",ce,[re,e("span",{title:o(s).Statistics(t.Identifier).LastHandshake},d(a.$t("profile.peer-connected")),9,_e)])):(i(),n("div",ue,pe))])):c("",!0),e("td",null,d(t.InterfaceIdentifier),1),e("td",fe,[e("a",{href:"#",title:a.$t("profile.button-show-peer"),onClick:p(_=>u.value=t.Identifier,["prevent"])},me,8,ge),e("a",{href:"#",title:a.$t("profile.button-edit-peer"),onClick:p(_=>r.value=t.Identifier,["prevent"])},ye,8,be)])]))),128))])])):c("",!0)]),$e,e("div",Ce,[e("div",Pe,[e("div",Ie,[e("ul",Se,[e("li",{class:g([{disabled:o(s).pageOffset===0},"page-item"])},[e("a",{class:"page-link",onClick:l[5]||(l[5]=(...t)=>o(s).previousPage&&o(s).previousPage(...t))},"«")],2),(i(!0),n(h,null,f(o(s).pages,t=>(i(),n("li",{key:t,class:g([{active:o(s).currentPage===t},"page-item"])},[e("a",{class:"page-link",onClick:_=>o(s).gotoPage(t)},d(t),9,we)],2))),128)),e("li",{class:g([{disabled:!o(s).hasNextPage},"page-item"])},[e("a",{class:"page-link",onClick:l[6]||(l[6]=(...t)=>o(s).nextPage&&o(s).nextPage(...t))},"»")],2)])]),e("div",De,[e("div",ze,[e("label",Ne,d(a.$t("general.pagination.size"))+": ",1),e("div",xe,[b(e("select",{"onUpdate:modelValue":l[7]||(l[7]=t=>o(s).pageSize=t),class:"form-select",onClick:l[8]||(l[8]=t=>o(s).afterPageSizeChange())},[Ve,Ae,Le,Be,e("option",Ee,d(a.$t("general.pagination.all")),1)],512),[[w,o(s).pageSize,void 0,{number:!0}]])])])])])])],64))}};export{Ue as default}; +import{s as y,A as $,r as v,p as C,o as i,h as n,q as m,B as P,C as I,i as e,t as d,j as b,v as S,x as o,m as p,k as c,F as h,n as f,y as g,z as w}from"./index--mSsjyvF.js";const D={class:"mt-4 row"},z={class:"col-12 col-lg-5"},N={class:"mt-2"},x={class:"col-12 col-lg-4 text-lg-end"},V={class:"form-group d-inline"},A={class:"input-group mb-3"},L=["placeholder"],B=["title"],E=e("i",{class:"fa-solid fa-search"},null,-1),M=[E],F={class:"col-12 col-lg-3 text-lg-end"},U=["title"],T=e("i",{class:"fa fa-plus me-1"},null,-1),j=e("i",{class:"fa fa-user"},null,-1),q=[T,j],H={class:"mt-2 table-responsive"},K={key:0},O={key:1,id:"peerTable",class:"table table-sm"},R={scope:"col"},W=["title"],G=e("th",{scope:"col"},null,-1),J={scope:"col"},Q={scope:"col"},X={key:0,scope:"col"},Y={scope:"col"},Z=e("th",{scope:"col"},null,-1),ee=e("th",{scope:"row"},[e("input",{id:"flexCheckDefault",class:"form-check-input",type:"checkbox",value:""})],-1),te={class:"text-center"},se={key:0,class:"text-danger"},oe=["title"],le={key:1,class:"text-warning"},ie=["title"],ne=["title"],ae=["title"],de={key:0},ce={key:0},re=e("span",{class:"badge rounded-pill bg-success"},[e("i",{class:"fa-solid fa-link"})],-1),_e=["title"],ue={key:1},he=e("span",{class:"badge rounded-pill bg-light"},[e("i",{class:"fa-solid fa-link-slash"})],-1),pe=[he],fe={class:"text-center"},ge=["title","onClick"],ve=e("i",{class:"fas fa-eye me-2"},null,-1),me=[ve],be=["title","onClick"],ke=e("i",{class:"fas fa-cog"},null,-1),ye=[ke],$e=e("hr",null,null,-1),Ce={class:"mt-3"},Pe={class:"row"},Ie={class:"col-6"},Se={class:"pagination pagination-sm"},we=["onClick"],De={class:"col-6"},ze={class:"form-group row"},Ne={class:"col-sm-6 col-form-label text-end",for:"paginationSelector"},xe={class:"col-sm-6"},Ve=e("option",{value:"10"},"10",-1),Ae=e("option",{value:"25"},"25",-1),Le=e("option",{value:"50"},"50",-1),Be=e("option",{value:"100"},"100",-1),Ee={value:"999999999"},Ue={__name:"ProfileView",setup(Me){const k=y(),s=$(),u=v(""),r=v("");return C(async()=>{await s.LoadUser(),await s.LoadPeers(),await s.LoadStats()}),(a,l)=>(i(),n(h,null,[m(P,{peerId:u.value,visible:u.value!=="",onClose:l[0]||(l[0]=t=>u.value="")},null,8,["peerId","visible"]),m(I,{peerId:r.value,visible:r.value!=="",onClose:l[1]||(l[1]=t=>r.value="")},null,8,["peerId","visible"]),e("div",D,[e("div",z,[e("h2",N,d(a.$t("profile.headline")),1)]),e("div",x,[e("div",V,[e("div",A,[b(e("input",{"onUpdate:modelValue":l[2]||(l[2]=t=>o(s).filter=t),class:"form-control",placeholder:a.$t("general.search.placeholder"),type:"text",onKeyup:l[3]||(l[3]=(...t)=>o(s).afterPageSizeChange&&o(s).afterPageSizeChange(...t))},null,40,L),[[S,o(s).filter]]),e("button",{class:"input-group-text btn btn-primary",title:a.$t("general.search.button")},M,8,B)])])]),e("div",F,[o(k).Setting("SelfProvisioning")?(i(),n("a",{key:0,class:"btn btn-primary ms-2",href:"#",title:a.$t("general.search.button-add-peer"),onClick:l[4]||(l[4]=p(t=>r.value="#NEW#",["prevent"]))},q,8,U)):c("",!0)])]),e("div",H,[o(s).CountPeers===0?(i(),n("div",K,[e("h4",null,d(a.$t("profile.no-peer.headline")),1),e("p",null,d(a.$t("profile.no-peer.abstract")),1)])):c("",!0),o(s).CountPeers!==0?(i(),n("table",O,[e("thead",null,[e("tr",null,[e("th",R,[e("input",{id:"flexCheckDefault",class:"form-check-input",title:a.$t("general.select-all"),type:"checkbox",value:""},null,8,W)]),G,e("th",J,d(a.$t("profile.table-heading.name")),1),e("th",Q,d(a.$t("profile.table-heading.ip")),1),o(s).hasStatistics?(i(),n("th",X,d(a.$t("profile.table-heading.stats")),1)):c("",!0),e("th",Y,d(a.$t("profile.table-heading.interface")),1),Z])]),e("tbody",null,[(i(!0),n(h,null,f(o(s).FilteredAndPagedPeers,t=>(i(),n("tr",{key:t.Identifier},[ee,e("td",te,[t.Disabled?(i(),n("span",se,[e("i",{class:"fa fa-circle-xmark",title:t.DisabledReason},null,8,oe)])):c("",!0),!t.Disabled&&t.ExpiresAt?(i(),n("span",le,[e("i",{class:"fas fa-hourglass-end",title:t.ExpiresAt},null,8,ie)])):c("",!0)]),e("td",null,[t.DisplayName?(i(),n("span",{key:0,title:t.Identifier},d(t.DisplayName),9,ne)):(i(),n("span",{key:1,title:t.Identifier},d(a.$filters.truncate(t.Identifier,10)),9,ae))]),e("td",null,[(i(!0),n(h,null,f(t.Addresses,_=>(i(),n("span",{key:_,class:"badge rounded-pill bg-light"},d(_),1))),128))]),o(s).hasStatistics?(i(),n("td",de,[o(s).Statistics(t.Identifier).IsConnected?(i(),n("div",ce,[re,e("span",{title:o(s).Statistics(t.Identifier).LastHandshake},d(a.$t("profile.peer-connected")),9,_e)])):(i(),n("div",ue,pe))])):c("",!0),e("td",null,d(t.InterfaceIdentifier),1),e("td",fe,[e("a",{href:"#",title:a.$t("profile.button-show-peer"),onClick:p(_=>u.value=t.Identifier,["prevent"])},me,8,ge),e("a",{href:"#",title:a.$t("profile.button-edit-peer"),onClick:p(_=>r.value=t.Identifier,["prevent"])},ye,8,be)])]))),128))])])):c("",!0)]),$e,e("div",Ce,[e("div",Pe,[e("div",Ie,[e("ul",Se,[e("li",{class:g([{disabled:o(s).pageOffset===0},"page-item"])},[e("a",{class:"page-link",onClick:l[5]||(l[5]=(...t)=>o(s).previousPage&&o(s).previousPage(...t))},"«")],2),(i(!0),n(h,null,f(o(s).pages,t=>(i(),n("li",{key:t,class:g([{active:o(s).currentPage===t},"page-item"])},[e("a",{class:"page-link",onClick:_=>o(s).gotoPage(t)},d(t),9,we)],2))),128)),e("li",{class:g([{disabled:!o(s).hasNextPage},"page-item"])},[e("a",{class:"page-link",onClick:l[6]||(l[6]=(...t)=>o(s).nextPage&&o(s).nextPage(...t))},"»")],2)])]),e("div",De,[e("div",ze,[e("label",Ne,d(a.$t("general.pagination.size"))+": ",1),e("div",xe,[b(e("select",{"onUpdate:modelValue":l[7]||(l[7]=t=>o(s).pageSize=t),class:"form-select",onClick:l[8]||(l[8]=t=>o(s).afterPageSizeChange())},[Ve,Ae,Le,Be,e("option",Ee,d(a.$t("general.pagination.all")),1)],512),[[w,o(s).pageSize,void 0,{number:!0}]])])])])])])],64))}};export{Ue as default}; diff --git a/internal/app/api/core/frontend-dist/assets/UserView-9EPRcOWe.js b/internal/app/api/core/frontend-dist/assets/UserView-s51HLNTa.js similarity index 99% rename from internal/app/api/core/frontend-dist/assets/UserView-9EPRcOWe.js rename to internal/app/api/core/frontend-dist/assets/UserView-s51HLNTa.js index f23c2c0..bf38a37 100644 --- a/internal/app/api/core/frontend-dist/assets/UserView-9EPRcOWe.js +++ b/internal/app/api/core/frontend-dist/assets/UserView-s51HLNTa.js @@ -1 +1 @@ -import{d as T,a as w,S,b as V,u as B,c as I,r as N,w as M,o as d,e as W,f as F,_ as R,g as L,h as u,i as e,t as s,j as g,v as b,k as v,l as z,m as k,F as U,n as D,s as H,p as j,q as A,x as m,y as E,z as q}from"./index-9ks1MleN.js";const P="/user",O=T({id:"users",state:()=>({userPeers:[],users:[],filter:"",pageSize:10,pageOffset:0,pages:[],fetching:!1}),getters:{Find:l=>o=>l.users.find(f=>f.Identifier===o),Count:l=>l.users.length,FilteredCount:l=>l.Filtered.length,All:l=>l.users,Peers:l=>l.userPeers,Filtered:l=>l.filter?l.users.filter(o=>o.Firstname.includes(l.filter)||o.Lastname.includes(l.filter)||o.Email.includes(l.filter)||o.Identifier.includes(l.filter)):l.users,FilteredAndPaged:l=>l.Filtered.slice(l.pageOffset,l.pageOffset+l.pageSize),isFetching:l=>l.fetching,hasNextPage:l=>l.pageOffsetl.pageOffset>0,currentPage:l=>l.pageOffset/l.pageSize+1},actions:{afterPageSizeChange(){this.pageOffset=0,this.calculatePages()},calculatePages(){let l=1;this.pages=[];for(let o=0;o{this.setUsers([]),console.log("Failed to load users: ",l),S({title:"Backend Connection Failure",text:"Failed to load users!"})})},async DeleteUser(l){return this.fetching=!0,w.delete(`${P}/${V(l)}`).then(()=>{this.users=this.users.filter(o=>o.Identifier!==l),this.fetching=!1}).catch(o=>{throw this.fetching=!1,console.log(o),new Error(o)})},async UpdateUser(l,o){return this.fetching=!0,w.put(`${P}/${V(l)}`,o).then(f=>{let _=this.users.findIndex(n=>n.Identifier===l);this.users[_]=f,this.fetching=!1}).catch(f=>{throw this.fetching=!1,console.log(f),new Error(f)})},async CreateUser(l){return this.fetching=!0,w.post(`${P}/new`,l).then(o=>{this.users.push(o),this.fetching=!1}).catch(o=>{throw this.fetching=!1,console.log(o),new Error(o)})},async LoadUserPeers(l){return this.fetching=!0,w.get(`${P}/${V(l)}/peers`).then(this.setUserPeers).catch(o=>{this.setUserPeers([]),console.log("Failed to load user peers for ",l,": ",o),S({title:"Backend Connection Failure",text:"Failed to load user peers!"})})}}}),K={key:0},G={class:"mt-4"},J={key:0,class:"form-group"},Q={class:"form-label mt-4"},X=["placeholder"],Y={class:"form-group"},Z={class:"form-label mt-4"},x=["placeholder"],ee={key:1,class:"form-group"},se={class:"form-label mt-4"},te=["placeholder"],le={key:0,id:"passwordHelp",class:"form-text text-muted"},oe={key:1},ae={class:"mt-4"},ie={class:"form-group"},ne={class:"form-label mt-4"},re=["placeholder"],de={class:"row"},ue={class:"form-group col-md-6"},ce={class:"form-label mt-4"},he=["placeholder"],pe={class:"form-group col-md-6"},me={class:"form-label mt-4"},fe=["placeholder"],ve={class:"row"},_e={class:"form-group col-md-6"},ge={class:"form-label mt-4"},be=["placeholder"],$e={class:"form-group col-md-6"},ke={class:"form-label mt-4"},ye=["placeholder"],we={class:"mt-4"},Pe={class:"form-group"},Ie={class:"form-label mt-4"},Ue={class:"mt-4"},Ce={class:"form-check form-switch"},Se={class:"form-check-label"},Fe={class:"form-check form-switch"},De={class:"form-check-label"},Ve={key:0,class:"form-check form-switch"},Le={class:"form-check-label"},ze={class:"flex-fill text-start"},Ee={__name:"UserEditModal",props:{userId:String,visible:Boolean},emits:["close"],setup(l,{emit:o}){const{t:f}=B(),_=O(),n=l,p=o,t=I(()=>_.Find(n.userId)),y=I(()=>n.visible?t.value?f("modals.user-edit.headline-edit")+" "+t.value.Identifier:f("modals.user-edit.headline-new"):""),a=N(L());M(()=>n.visible,async(i,r)=>{r===!1&&i===!0&&(t.value?(a.value.Identifier=t.value.Identifier,a.value.Email=t.value.Email,a.value.Source=t.value.Source,a.value.IsAdmin=t.value.IsAdmin,a.value.Firstname=t.value.Firstname,a.value.Lastname=t.value.Lastname,a.value.Phone=t.value.Phone,a.value.Department=t.value.Department,a.value.Notes=t.value.Notes,a.value.Password="",a.value.Disabled=t.value.Disabled):a.value=L())});function $(){a.value=L(),p("close")}async function c(){try{n.userId!=="#NEW#"?await _.UpdateUser(t.value.Identifier,a.value):await _.CreateUser(a.value),$()}catch(i){S({title:"Failed to save user!",text:i.toString(),type:"error"})}}async function C(){try{await _.DeleteUser(t.value.Identifier),$()}catch(i){S({title:"Failed to delete user!",text:i.toString(),type:"error"})}}return(i,r)=>(d(),W(R,{title:y.value,visible:l.visible,onClose:$},{default:F(()=>[a.value.Source==="db"?(d(),u("fieldset",K,[e("legend",G,s(i.$t("modals.user-edit.header-general")),1),n.userId==="#NEW#"?(d(),u("div",J,[e("label",Q,s(i.$t("modals.user-edit.identifier.label")),1),g(e("input",{"onUpdate:modelValue":r[0]||(r[0]=h=>a.value.Identifier=h),class:"form-control",placeholder:i.$t("modals.user-edit.identifier.placeholder"),type:"text"},null,8,X),[[b,a.value.Identifier]])])):v("",!0),e("div",Y,[e("label",Z,s(i.$t("modals.user-edit.source.label")),1),g(e("input",{"onUpdate:modelValue":r[1]||(r[1]=h=>a.value.Source=h),class:"form-control",disabled:"disabled",placeholder:i.$t("modals.user-edit.source.placeholder"),type:"text"},null,8,x),[[b,a.value.Source]])]),a.value.Source==="db"?(d(),u("div",ee,[e("label",se,s(i.$t("modals.user-edit.password.label")),1),g(e("input",{"onUpdate:modelValue":r[2]||(r[2]=h=>a.value.Password=h),"aria-describedby":"passwordHelp",class:"form-control",placeholder:i.$t("modals.user-edit.password.placeholder"),type:"text"},null,8,te),[[b,a.value.Password]]),n.userId!=="#NEW#"?(d(),u("small",le,s(i.$t("modals.user-edit.password.description")),1)):v("",!0)])):v("",!0)])):v("",!0),a.value.Source==="db"?(d(),u("fieldset",oe,[e("legend",ae,s(i.$t("modals.user-edit.header-personal")),1),e("div",ie,[e("label",ne,s(i.$t("modals.user-edit.email.label")),1),g(e("input",{"onUpdate:modelValue":r[3]||(r[3]=h=>a.value.Email=h),class:"form-control",placeholder:i.$t("modals.user-edit.email.placeholder"),type:"email"},null,8,re),[[b,a.value.Email]])]),e("div",de,[e("div",ue,[e("label",ce,s(i.$t("modals.user-edit.firstname.label")),1),g(e("input",{"onUpdate:modelValue":r[4]||(r[4]=h=>a.value.Firstname=h),class:"form-control",placeholder:i.$t("modals.user-edit.firstname.placeholder"),type:"text"},null,8,he),[[b,a.value.Firstname]])]),e("div",pe,[e("label",me,s(i.$t("modals.user-edit.lastname.label")),1),g(e("input",{"onUpdate:modelValue":r[5]||(r[5]=h=>a.value.Lastname=h),class:"form-control",placeholder:i.$t("modals.user-edit.lastname.placeholder"),type:"text"},null,8,fe),[[b,a.value.Lastname]])])]),e("div",ve,[e("div",_e,[e("label",ge,s(i.$t("modals.user-edit.phone.label")),1),g(e("input",{"onUpdate:modelValue":r[6]||(r[6]=h=>a.value.Phone=h),class:"form-control",placeholder:i.$t("modals.user-edit.phone.placeholder"),type:"text"},null,8,be),[[b,a.value.Phone]])]),e("div",$e,[e("label",ke,s(i.$t("modals.user-edit.department.label")),1),g(e("input",{"onUpdate:modelValue":r[7]||(r[7]=h=>a.value.Department=h),class:"form-control",placeholder:i.$t("modals.user-edit.department.placeholder"),type:"text"},null,8,ye),[[b,a.value.Department]])])])])):v("",!0),e("fieldset",null,[e("legend",we,s(i.$t("modals.user-edit.header-notes")),1),e("div",Pe,[e("label",Ie,s(i.$t("modals.user-edit.notes.label")),1),g(e("textarea",{"onUpdate:modelValue":r[8]||(r[8]=h=>a.value.Notes=h),class:"form-control",rows:"2"},null,512),[[b,a.value.Notes]])])]),e("fieldset",null,[e("legend",Ue,s(i.$t("modals.user-edit.header-state")),1),e("div",Ce,[g(e("input",{"onUpdate:modelValue":r[9]||(r[9]=h=>a.value.Disabled=h),class:"form-check-input",type:"checkbox"},null,512),[[z,a.value.Disabled]]),e("label",Se,s(i.$t("modals.user-edit.disabled.label")),1)]),e("div",Fe,[g(e("input",{"onUpdate:modelValue":r[10]||(r[10]=h=>a.value.Locked=h),class:"form-check-input",type:"checkbox"},null,512),[[z,a.value.Locked]]),e("label",De,s(i.$t("modals.user-edit.locked.label")),1)]),a.value.Source==="db"?(d(),u("div",Ve,[g(e("input",{"onUpdate:modelValue":r[11]||(r[11]=h=>a.value.IsAdmin=h),checked:"",class:"form-check-input",type:"checkbox"},null,512),[[z,a.value.IsAdmin]]),e("label",Le,s(i.$t("modals.user-edit.admin.label")),1)])):v("",!0)])]),footer:F(()=>[e("div",ze,[n.userId!=="#NEW#"&&a.value.Source==="db"?(d(),u("button",{key:0,class:"btn btn-danger me-1",type:"button",onClick:k(C,["prevent"])},s(i.$t("general.delete")),1)):v("",!0)]),e("button",{class:"btn btn-primary me-1",type:"button",onClick:k(c,["prevent"])},s(i.$t("general.save")),1),e("button",{class:"btn btn-secondary",type:"button",onClick:k($,["prevent"])},s(i.$t("general.close")),1)]),_:1},8,["title","visible"]))}},Ne={class:"nav nav-tabs"},Oe={class:"nav-item"},Ae={class:"nav-link active","data-bs-toggle":"tab",href:"#user"},Be={class:"nav-item"},Me={class:"nav-link","data-bs-toggle":"tab",href:"#peers"},We={id:"interfaceTabs",class:"tab-content"},Re={id:"user",class:"tab-pane fade active show"},Te={class:"list-group list-group-flush"},He={class:"list-group-item"},je={class:"table table-sm table-borderless device-status-table"},qe={key:0},Ke={key:1},Ge={key:0,class:"list-group-item"},Je={class:"table table-sm table-borderless device-status-table"},Qe={id:"peers",class:"tab-pane fade"},Xe={key:0,class:"list-group list-group-flush"},Ye={class:"list-group-item"},Ze={key:1,id:"peerTable",class:"table table-sm"},xe={scope:"col"},es={scope:"col"},ss={scope:"col"},ts=e("th",{scope:"col"},null,-1),ls={__name:"UserViewModal",props:{userId:String,visible:Boolean},emits:["close"],setup(l,{emit:o}){const{t:f}=B(),_=O(),n=l,p=o,t=I(()=>{let c=_.Find(n.userId);return c||{}}),y=I(()=>n.visible?f("modals.user-view.headline")+" "+t.value.Identifier:""),a=I(()=>_.Peers);M(()=>n.visible,async(c,C)=>{C===!1&&c===!0&&await _.LoadUserPeers(t.value.Identifier)});function $(){p("close")}return(c,C)=>(d(),W(R,{title:y.value,visible:l.visible,onClose:$},{default:F(()=>[e("ul",Ne,[e("li",Oe,[e("a",Ae,s(c.$t("modals.user-view.tab-user")),1)]),e("li",Be,[e("a",Me,s(c.$t("modals.user-view.tab-peers")),1)])]),e("div",We,[e("div",Re,[e("ul",Te,[e("li",He,[e("h4",null,s(c.$t("modals.user-view.headline-info")),1),e("table",je,[e("tbody",null,[e("tr",null,[e("td",null,s(c.$t("modals.user-view.email"))+":",1),e("td",null,s(t.value.Email),1)]),e("tr",null,[e("td",null,s(c.$t("modals.user-view.firstname"))+":",1),e("td",null,s(t.value.Firstname),1)]),e("tr",null,[e("td",null,s(c.$t("modals.user-view.lastname"))+":",1),e("td",null,s(t.value.Lastname),1)]),e("tr",null,[e("td",null,s(c.$t("modals.user-view.phone"))+":",1),e("td",null,s(t.value.Phone),1)]),e("tr",null,[e("td",null,s(c.$t("modals.user-view.department"))+":",1),e("td",null,s(t.value.Department),1)]),t.value.Disabled?(d(),u("tr",qe,[e("td",null,s(c.$t("modals.user-view.disabled"))+":",1),e("td",null,s(t.value.DisabledReason),1)])):v("",!0),t.value.Locked?(d(),u("tr",Ke,[e("td",null,s(c.$t("modals.user-view.locked"))+":",1),e("td",null,s(t.value.LockedReason),1)])):v("",!0)])])]),t.value.Notes?(d(),u("li",Ge,[e("h4",null,s(c.$t("modals.user-view.headline-notes")),1),e("table",Je,[e("tbody",null,[e("tr",null,[e("td",null,s(t.value.Notes),1)])])])])):v("",!0)])]),e("div",Qe,[a.value.length===0?(d(),u("ul",Xe,[e("li",Ye,s(c.$t("modals.user-view.no-peers")),1)])):v("",!0),a.value.length!==0?(d(),u("table",Ze,[e("thead",null,[e("tr",null,[e("th",xe,s(c.$t("modals.user-view.peers.name")),1),e("th",es,s(c.$t("modals.user-view.peers.interface")),1),e("th",ss,s(c.$t("modals.user-view.peers.ip")),1),ts])]),e("tbody",null,[(d(!0),u(U,null,D(a.value,i=>(d(),u("tr",{key:i.Identifier},[e("td",null,s(i.DisplayName),1),e("td",null,s(i.InterfaceIdentifier),1),e("td",null,[(d(!0),u(U,null,D(i.Addresses,r=>(d(),u("span",{key:r,class:"badge pill bg-light"},s(r),1))),128))])]))),128))])])):v("",!0)])])]),footer:F(()=>[e("button",{class:"btn btn-primary",type:"button",onClick:k($,["prevent"])},s(c.$t("general.close")),1)]),_:1},8,["title","visible"]))}},os={class:"mt-4 row"},as={class:"col-12 col-lg-5"},is={class:"col-12 col-lg-4 text-lg-end"},ns={class:"form-group d-inline"},rs={class:"input-group mb-3"},ds=["placeholder"],us=["title"],cs=e("i",{class:"fa-solid fa-search"},null,-1),hs=[cs],ps={class:"col-12 col-lg-3 text-lg-end"},ms=["title"],fs=e("i",{class:"fa fa-plus me-1"},null,-1),vs=e("i",{class:"fa fa-user"},null,-1),_s=[fs,vs],gs={class:"mt-2 table-responsive"},bs={key:0},$s={key:1,id:"userTable",class:"table table-sm"},ks={scope:"col"},ys=["title"],ws=e("th",{scope:"col"},null,-1),Ps={scope:"col"},Is={scope:"col"},Us={scope:"col"},Cs={scope:"col"},Ss={class:"text-center",scope:"col"},Fs={class:"text-center",scope:"col"},Ds={class:"text-center",scope:"col"},Vs=e("th",{scope:"col"},null,-1),Ls=e("th",{scope:"row"},[e("input",{id:"flexCheckDefault",class:"form-check-input",type:"checkbox",value:""})],-1),zs={class:"text-center"},Es=["title"],Ns=e("i",{class:"fa fa-circle-xmark"},null,-1),Os=[Ns],As=["title"],Bs=e("i",{class:"fas fa-lock"},null,-1),Ms=[Bs],Ws={class:"text-center"},Rs={class:"badge rounded-pill bg-light"},Ts={class:"text-center"},Hs={class:"text-center"},js=["title"],qs=e("i",{class:"fa fa-check-circle"},null,-1),Ks=[qs],Gs={key:1},Js=["title"],Qs={class:"text-center"},Xs=["title","onClick"],Ys=e("i",{class:"fas fa-eye me-2"},null,-1),Zs=[Ys],xs=["title","onClick"],et=e("i",{class:"fas fa-cog me-2"},null,-1),st=[et],tt=e("hr",null,null,-1),lt={class:"mt-3"},ot={class:"row"},at={class:"col-6"},it={class:"pagination pagination-sm"},nt=["onClick"],rt={class:"col-6"},dt={class:"form-group row"},ut={class:"col-sm-6 col-form-label text-end",for:"paginationSelector"},ct={class:"col-sm-6"},ht=e("option",{value:"10"},"10",-1),pt=e("option",{value:"25"},"25",-1),mt=e("option",{value:"50"},"50",-1),ft=e("option",{value:"100"},"100",-1),vt={value:"999999999"},gt={__name:"UserView",setup(l){H();const o=O(),f=N(""),_=N("");return j(()=>{o.LoadUsers()}),(n,p)=>(d(),u(U,null,[A(Ee,{userId:f.value,visible:f.value!=="",onClose:p[0]||(p[0]=t=>f.value="")},null,8,["userId","visible"]),A(ls,{userId:_.value,visible:_.value!=="",onClose:p[1]||(p[1]=t=>_.value="")},null,8,["userId","visible"]),e("div",os,[e("div",as,[e("h1",null,s(n.$t("users.headline")),1)]),e("div",is,[e("div",ns,[e("div",rs,[g(e("input",{"onUpdate:modelValue":p[2]||(p[2]=t=>m(o).filter=t),class:"form-control",placeholder:n.$t("general.search.placeholder"),type:"text",onKeyup:p[3]||(p[3]=(...t)=>m(o).afterPageSizeChange&&m(o).afterPageSizeChange(...t))},null,40,ds),[[b,m(o).filter]]),e("button",{class:"input-group-text btn btn-primary",title:n.$t("general.search.button")},hs,8,us)])])]),e("div",ps,[e("a",{class:"btn btn-primary ms-2",href:"#",title:n.$t("users.button-add-user"),onClick:p[4]||(p[4]=k(t=>f.value="#NEW#",["prevent"]))},_s,8,ms)])]),e("div",gs,[m(o).Count===0?(d(),u("div",bs,[e("h4",null,s(n.$t("users.no-user.headline")),1),e("p",null,s(n.$t("users.no-user.abstract")),1)])):v("",!0),m(o).Count!==0?(d(),u("table",$s,[e("thead",null,[e("tr",null,[e("th",ks,[e("input",{id:"flexCheckDefault",class:"form-check-input",title:n.$t("general.select-all"),type:"checkbox",value:""},null,8,ys)]),ws,e("th",Ps,s(n.$t("users.table-heading.id")),1),e("th",Is,s(n.$t("users.table-heading.email")),1),e("th",Us,s(n.$t("users.table-heading.firstname")),1),e("th",Cs,s(n.$t("users.table-heading.lastname")),1),e("th",Ss,s(n.$t("users.table-heading.source")),1),e("th",Fs,s(n.$t("users.table-heading.peers")),1),e("th",Ds,s(n.$t("users.table-heading.admin")),1),Vs])]),e("tbody",null,[(d(!0),u(U,null,D(m(o).FilteredAndPaged,t=>(d(),u("tr",{key:t.Identifier},[Ls,e("td",zs,[t.Disabled?(d(),u("span",{key:0,class:"text-danger",title:n.$t("users.user-disabled")+" "+t.DisabledReason},Os,8,Es)):v("",!0),t.Locked?(d(),u("span",{key:1,class:"text-danger",title:n.$t("users.user-locked")+" "+t.LockedReason},Ms,8,As)):v("",!0)]),e("td",null,s(t.Identifier),1),e("td",null,s(t.Email),1),e("td",null,s(t.Firstname),1),e("td",null,s(t.Lastname),1),e("td",Ws,[e("span",Rs,s(t.Source),1)]),e("td",Ts,s(t.PeerCount),1),e("td",Hs,[t.IsAdmin?(d(),u("span",{key:0,class:"text-danger",title:n.$t("users.admin")},Ks,8,js)):(d(),u("span",Gs,[e("i",{class:"fa fa-circle-xmark",title:n.$t("users.no-admin")},null,8,Js)]))]),e("td",Qs,[e("a",{href:"#",title:n.$t("users.button-show-user"),onClick:k(y=>_.value=t.Identifier,["prevent"])},Zs,8,Xs),e("a",{href:"#",title:n.$t("users.button-edit-user"),onClick:k(y=>f.value=t.Identifier,["prevent"])},st,8,xs)])]))),128))])])):v("",!0)]),tt,e("div",lt,[e("div",ot,[e("div",at,[e("ul",it,[e("li",{class:E([{disabled:m(o).pageOffset===0},"page-item"])},[e("a",{class:"page-link",onClick:p[5]||(p[5]=(...t)=>m(o).previousPage&&m(o).previousPage(...t))},"«")],2),(d(!0),u(U,null,D(m(o).pages,t=>(d(),u("li",{key:t,class:E([{active:m(o).currentPage===t},"page-item"])},[e("a",{class:"page-link",onClick:y=>m(o).gotoPage(t)},s(t),9,nt)],2))),128)),e("li",{class:E([{disabled:!m(o).hasNextPage},"page-item"])},[e("a",{class:"page-link",onClick:p[6]||(p[6]=(...t)=>m(o).nextPage&&m(o).nextPage(...t))},"»")],2)])]),e("div",rt,[e("div",dt,[e("label",ut,s(n.$t("general.pagination.size"))+":",1),e("div",ct,[g(e("select",{"onUpdate:modelValue":p[7]||(p[7]=t=>m(o).pageSize=t),class:"form-select",onClick:p[8]||(p[8]=t=>m(o).afterPageSizeChange())},[ht,pt,mt,ft,e("option",vt,s(n.$t("general.pagination.all")),1)],512),[[q,m(o).pageSize,void 0,{number:!0}]])])])])])])],64))}};export{gt as default}; +import{d as T,a as w,S,b as V,u as B,c as I,r as N,w as M,o as d,e as W,f as F,_ as R,g as L,h as u,i as e,t as s,j as g,v as b,k as v,l as z,m as k,F as U,n as D,s as H,p as j,q as A,x as m,y as E,z as q}from"./index--mSsjyvF.js";const P="/user",O=T({id:"users",state:()=>({userPeers:[],users:[],filter:"",pageSize:10,pageOffset:0,pages:[],fetching:!1}),getters:{Find:l=>o=>l.users.find(f=>f.Identifier===o),Count:l=>l.users.length,FilteredCount:l=>l.Filtered.length,All:l=>l.users,Peers:l=>l.userPeers,Filtered:l=>l.filter?l.users.filter(o=>o.Firstname.includes(l.filter)||o.Lastname.includes(l.filter)||o.Email.includes(l.filter)||o.Identifier.includes(l.filter)):l.users,FilteredAndPaged:l=>l.Filtered.slice(l.pageOffset,l.pageOffset+l.pageSize),isFetching:l=>l.fetching,hasNextPage:l=>l.pageOffsetl.pageOffset>0,currentPage:l=>l.pageOffset/l.pageSize+1},actions:{afterPageSizeChange(){this.pageOffset=0,this.calculatePages()},calculatePages(){let l=1;this.pages=[];for(let o=0;o{this.setUsers([]),console.log("Failed to load users: ",l),S({title:"Backend Connection Failure",text:"Failed to load users!"})})},async DeleteUser(l){return this.fetching=!0,w.delete(`${P}/${V(l)}`).then(()=>{this.users=this.users.filter(o=>o.Identifier!==l),this.fetching=!1}).catch(o=>{throw this.fetching=!1,console.log(o),new Error(o)})},async UpdateUser(l,o){return this.fetching=!0,w.put(`${P}/${V(l)}`,o).then(f=>{let _=this.users.findIndex(n=>n.Identifier===l);this.users[_]=f,this.fetching=!1}).catch(f=>{throw this.fetching=!1,console.log(f),new Error(f)})},async CreateUser(l){return this.fetching=!0,w.post(`${P}/new`,l).then(o=>{this.users.push(o),this.fetching=!1}).catch(o=>{throw this.fetching=!1,console.log(o),new Error(o)})},async LoadUserPeers(l){return this.fetching=!0,w.get(`${P}/${V(l)}/peers`).then(this.setUserPeers).catch(o=>{this.setUserPeers([]),console.log("Failed to load user peers for ",l,": ",o),S({title:"Backend Connection Failure",text:"Failed to load user peers!"})})}}}),K={key:0},G={class:"mt-4"},J={key:0,class:"form-group"},Q={class:"form-label mt-4"},X=["placeholder"],Y={class:"form-group"},Z={class:"form-label mt-4"},x=["placeholder"],ee={key:1,class:"form-group"},se={class:"form-label mt-4"},te=["placeholder"],le={key:0,id:"passwordHelp",class:"form-text text-muted"},oe={key:1},ae={class:"mt-4"},ie={class:"form-group"},ne={class:"form-label mt-4"},re=["placeholder"],de={class:"row"},ue={class:"form-group col-md-6"},ce={class:"form-label mt-4"},he=["placeholder"],pe={class:"form-group col-md-6"},me={class:"form-label mt-4"},fe=["placeholder"],ve={class:"row"},_e={class:"form-group col-md-6"},ge={class:"form-label mt-4"},be=["placeholder"],$e={class:"form-group col-md-6"},ke={class:"form-label mt-4"},ye=["placeholder"],we={class:"mt-4"},Pe={class:"form-group"},Ie={class:"form-label mt-4"},Ue={class:"mt-4"},Ce={class:"form-check form-switch"},Se={class:"form-check-label"},Fe={class:"form-check form-switch"},De={class:"form-check-label"},Ve={key:0,class:"form-check form-switch"},Le={class:"form-check-label"},ze={class:"flex-fill text-start"},Ee={__name:"UserEditModal",props:{userId:String,visible:Boolean},emits:["close"],setup(l,{emit:o}){const{t:f}=B(),_=O(),n=l,p=o,t=I(()=>_.Find(n.userId)),y=I(()=>n.visible?t.value?f("modals.user-edit.headline-edit")+" "+t.value.Identifier:f("modals.user-edit.headline-new"):""),a=N(L());M(()=>n.visible,async(i,r)=>{r===!1&&i===!0&&(t.value?(a.value.Identifier=t.value.Identifier,a.value.Email=t.value.Email,a.value.Source=t.value.Source,a.value.IsAdmin=t.value.IsAdmin,a.value.Firstname=t.value.Firstname,a.value.Lastname=t.value.Lastname,a.value.Phone=t.value.Phone,a.value.Department=t.value.Department,a.value.Notes=t.value.Notes,a.value.Password="",a.value.Disabled=t.value.Disabled):a.value=L())});function $(){a.value=L(),p("close")}async function c(){try{n.userId!=="#NEW#"?await _.UpdateUser(t.value.Identifier,a.value):await _.CreateUser(a.value),$()}catch(i){S({title:"Failed to save user!",text:i.toString(),type:"error"})}}async function C(){try{await _.DeleteUser(t.value.Identifier),$()}catch(i){S({title:"Failed to delete user!",text:i.toString(),type:"error"})}}return(i,r)=>(d(),W(R,{title:y.value,visible:l.visible,onClose:$},{default:F(()=>[a.value.Source==="db"?(d(),u("fieldset",K,[e("legend",G,s(i.$t("modals.user-edit.header-general")),1),n.userId==="#NEW#"?(d(),u("div",J,[e("label",Q,s(i.$t("modals.user-edit.identifier.label")),1),g(e("input",{"onUpdate:modelValue":r[0]||(r[0]=h=>a.value.Identifier=h),class:"form-control",placeholder:i.$t("modals.user-edit.identifier.placeholder"),type:"text"},null,8,X),[[b,a.value.Identifier]])])):v("",!0),e("div",Y,[e("label",Z,s(i.$t("modals.user-edit.source.label")),1),g(e("input",{"onUpdate:modelValue":r[1]||(r[1]=h=>a.value.Source=h),class:"form-control",disabled:"disabled",placeholder:i.$t("modals.user-edit.source.placeholder"),type:"text"},null,8,x),[[b,a.value.Source]])]),a.value.Source==="db"?(d(),u("div",ee,[e("label",se,s(i.$t("modals.user-edit.password.label")),1),g(e("input",{"onUpdate:modelValue":r[2]||(r[2]=h=>a.value.Password=h),"aria-describedby":"passwordHelp",class:"form-control",placeholder:i.$t("modals.user-edit.password.placeholder"),type:"text"},null,8,te),[[b,a.value.Password]]),n.userId!=="#NEW#"?(d(),u("small",le,s(i.$t("modals.user-edit.password.description")),1)):v("",!0)])):v("",!0)])):v("",!0),a.value.Source==="db"?(d(),u("fieldset",oe,[e("legend",ae,s(i.$t("modals.user-edit.header-personal")),1),e("div",ie,[e("label",ne,s(i.$t("modals.user-edit.email.label")),1),g(e("input",{"onUpdate:modelValue":r[3]||(r[3]=h=>a.value.Email=h),class:"form-control",placeholder:i.$t("modals.user-edit.email.placeholder"),type:"email"},null,8,re),[[b,a.value.Email]])]),e("div",de,[e("div",ue,[e("label",ce,s(i.$t("modals.user-edit.firstname.label")),1),g(e("input",{"onUpdate:modelValue":r[4]||(r[4]=h=>a.value.Firstname=h),class:"form-control",placeholder:i.$t("modals.user-edit.firstname.placeholder"),type:"text"},null,8,he),[[b,a.value.Firstname]])]),e("div",pe,[e("label",me,s(i.$t("modals.user-edit.lastname.label")),1),g(e("input",{"onUpdate:modelValue":r[5]||(r[5]=h=>a.value.Lastname=h),class:"form-control",placeholder:i.$t("modals.user-edit.lastname.placeholder"),type:"text"},null,8,fe),[[b,a.value.Lastname]])])]),e("div",ve,[e("div",_e,[e("label",ge,s(i.$t("modals.user-edit.phone.label")),1),g(e("input",{"onUpdate:modelValue":r[6]||(r[6]=h=>a.value.Phone=h),class:"form-control",placeholder:i.$t("modals.user-edit.phone.placeholder"),type:"text"},null,8,be),[[b,a.value.Phone]])]),e("div",$e,[e("label",ke,s(i.$t("modals.user-edit.department.label")),1),g(e("input",{"onUpdate:modelValue":r[7]||(r[7]=h=>a.value.Department=h),class:"form-control",placeholder:i.$t("modals.user-edit.department.placeholder"),type:"text"},null,8,ye),[[b,a.value.Department]])])])])):v("",!0),e("fieldset",null,[e("legend",we,s(i.$t("modals.user-edit.header-notes")),1),e("div",Pe,[e("label",Ie,s(i.$t("modals.user-edit.notes.label")),1),g(e("textarea",{"onUpdate:modelValue":r[8]||(r[8]=h=>a.value.Notes=h),class:"form-control",rows:"2"},null,512),[[b,a.value.Notes]])])]),e("fieldset",null,[e("legend",Ue,s(i.$t("modals.user-edit.header-state")),1),e("div",Ce,[g(e("input",{"onUpdate:modelValue":r[9]||(r[9]=h=>a.value.Disabled=h),class:"form-check-input",type:"checkbox"},null,512),[[z,a.value.Disabled]]),e("label",Se,s(i.$t("modals.user-edit.disabled.label")),1)]),e("div",Fe,[g(e("input",{"onUpdate:modelValue":r[10]||(r[10]=h=>a.value.Locked=h),class:"form-check-input",type:"checkbox"},null,512),[[z,a.value.Locked]]),e("label",De,s(i.$t("modals.user-edit.locked.label")),1)]),a.value.Source==="db"?(d(),u("div",Ve,[g(e("input",{"onUpdate:modelValue":r[11]||(r[11]=h=>a.value.IsAdmin=h),checked:"",class:"form-check-input",type:"checkbox"},null,512),[[z,a.value.IsAdmin]]),e("label",Le,s(i.$t("modals.user-edit.admin.label")),1)])):v("",!0)])]),footer:F(()=>[e("div",ze,[n.userId!=="#NEW#"&&a.value.Source==="db"?(d(),u("button",{key:0,class:"btn btn-danger me-1",type:"button",onClick:k(C,["prevent"])},s(i.$t("general.delete")),1)):v("",!0)]),e("button",{class:"btn btn-primary me-1",type:"button",onClick:k(c,["prevent"])},s(i.$t("general.save")),1),e("button",{class:"btn btn-secondary",type:"button",onClick:k($,["prevent"])},s(i.$t("general.close")),1)]),_:1},8,["title","visible"]))}},Ne={class:"nav nav-tabs"},Oe={class:"nav-item"},Ae={class:"nav-link active","data-bs-toggle":"tab",href:"#user"},Be={class:"nav-item"},Me={class:"nav-link","data-bs-toggle":"tab",href:"#peers"},We={id:"interfaceTabs",class:"tab-content"},Re={id:"user",class:"tab-pane fade active show"},Te={class:"list-group list-group-flush"},He={class:"list-group-item"},je={class:"table table-sm table-borderless device-status-table"},qe={key:0},Ke={key:1},Ge={key:0,class:"list-group-item"},Je={class:"table table-sm table-borderless device-status-table"},Qe={id:"peers",class:"tab-pane fade"},Xe={key:0,class:"list-group list-group-flush"},Ye={class:"list-group-item"},Ze={key:1,id:"peerTable",class:"table table-sm"},xe={scope:"col"},es={scope:"col"},ss={scope:"col"},ts=e("th",{scope:"col"},null,-1),ls={__name:"UserViewModal",props:{userId:String,visible:Boolean},emits:["close"],setup(l,{emit:o}){const{t:f}=B(),_=O(),n=l,p=o,t=I(()=>{let c=_.Find(n.userId);return c||{}}),y=I(()=>n.visible?f("modals.user-view.headline")+" "+t.value.Identifier:""),a=I(()=>_.Peers);M(()=>n.visible,async(c,C)=>{C===!1&&c===!0&&await _.LoadUserPeers(t.value.Identifier)});function $(){p("close")}return(c,C)=>(d(),W(R,{title:y.value,visible:l.visible,onClose:$},{default:F(()=>[e("ul",Ne,[e("li",Oe,[e("a",Ae,s(c.$t("modals.user-view.tab-user")),1)]),e("li",Be,[e("a",Me,s(c.$t("modals.user-view.tab-peers")),1)])]),e("div",We,[e("div",Re,[e("ul",Te,[e("li",He,[e("h4",null,s(c.$t("modals.user-view.headline-info")),1),e("table",je,[e("tbody",null,[e("tr",null,[e("td",null,s(c.$t("modals.user-view.email"))+":",1),e("td",null,s(t.value.Email),1)]),e("tr",null,[e("td",null,s(c.$t("modals.user-view.firstname"))+":",1),e("td",null,s(t.value.Firstname),1)]),e("tr",null,[e("td",null,s(c.$t("modals.user-view.lastname"))+":",1),e("td",null,s(t.value.Lastname),1)]),e("tr",null,[e("td",null,s(c.$t("modals.user-view.phone"))+":",1),e("td",null,s(t.value.Phone),1)]),e("tr",null,[e("td",null,s(c.$t("modals.user-view.department"))+":",1),e("td",null,s(t.value.Department),1)]),t.value.Disabled?(d(),u("tr",qe,[e("td",null,s(c.$t("modals.user-view.disabled"))+":",1),e("td",null,s(t.value.DisabledReason),1)])):v("",!0),t.value.Locked?(d(),u("tr",Ke,[e("td",null,s(c.$t("modals.user-view.locked"))+":",1),e("td",null,s(t.value.LockedReason),1)])):v("",!0)])])]),t.value.Notes?(d(),u("li",Ge,[e("h4",null,s(c.$t("modals.user-view.headline-notes")),1),e("table",Je,[e("tbody",null,[e("tr",null,[e("td",null,s(t.value.Notes),1)])])])])):v("",!0)])]),e("div",Qe,[a.value.length===0?(d(),u("ul",Xe,[e("li",Ye,s(c.$t("modals.user-view.no-peers")),1)])):v("",!0),a.value.length!==0?(d(),u("table",Ze,[e("thead",null,[e("tr",null,[e("th",xe,s(c.$t("modals.user-view.peers.name")),1),e("th",es,s(c.$t("modals.user-view.peers.interface")),1),e("th",ss,s(c.$t("modals.user-view.peers.ip")),1),ts])]),e("tbody",null,[(d(!0),u(U,null,D(a.value,i=>(d(),u("tr",{key:i.Identifier},[e("td",null,s(i.DisplayName),1),e("td",null,s(i.InterfaceIdentifier),1),e("td",null,[(d(!0),u(U,null,D(i.Addresses,r=>(d(),u("span",{key:r,class:"badge pill bg-light"},s(r),1))),128))])]))),128))])])):v("",!0)])])]),footer:F(()=>[e("button",{class:"btn btn-primary",type:"button",onClick:k($,["prevent"])},s(c.$t("general.close")),1)]),_:1},8,["title","visible"]))}},os={class:"mt-4 row"},as={class:"col-12 col-lg-5"},is={class:"col-12 col-lg-4 text-lg-end"},ns={class:"form-group d-inline"},rs={class:"input-group mb-3"},ds=["placeholder"],us=["title"],cs=e("i",{class:"fa-solid fa-search"},null,-1),hs=[cs],ps={class:"col-12 col-lg-3 text-lg-end"},ms=["title"],fs=e("i",{class:"fa fa-plus me-1"},null,-1),vs=e("i",{class:"fa fa-user"},null,-1),_s=[fs,vs],gs={class:"mt-2 table-responsive"},bs={key:0},$s={key:1,id:"userTable",class:"table table-sm"},ks={scope:"col"},ys=["title"],ws=e("th",{scope:"col"},null,-1),Ps={scope:"col"},Is={scope:"col"},Us={scope:"col"},Cs={scope:"col"},Ss={class:"text-center",scope:"col"},Fs={class:"text-center",scope:"col"},Ds={class:"text-center",scope:"col"},Vs=e("th",{scope:"col"},null,-1),Ls=e("th",{scope:"row"},[e("input",{id:"flexCheckDefault",class:"form-check-input",type:"checkbox",value:""})],-1),zs={class:"text-center"},Es=["title"],Ns=e("i",{class:"fa fa-circle-xmark"},null,-1),Os=[Ns],As=["title"],Bs=e("i",{class:"fas fa-lock"},null,-1),Ms=[Bs],Ws={class:"text-center"},Rs={class:"badge rounded-pill bg-light"},Ts={class:"text-center"},Hs={class:"text-center"},js=["title"],qs=e("i",{class:"fa fa-check-circle"},null,-1),Ks=[qs],Gs={key:1},Js=["title"],Qs={class:"text-center"},Xs=["title","onClick"],Ys=e("i",{class:"fas fa-eye me-2"},null,-1),Zs=[Ys],xs=["title","onClick"],et=e("i",{class:"fas fa-cog me-2"},null,-1),st=[et],tt=e("hr",null,null,-1),lt={class:"mt-3"},ot={class:"row"},at={class:"col-6"},it={class:"pagination pagination-sm"},nt=["onClick"],rt={class:"col-6"},dt={class:"form-group row"},ut={class:"col-sm-6 col-form-label text-end",for:"paginationSelector"},ct={class:"col-sm-6"},ht=e("option",{value:"10"},"10",-1),pt=e("option",{value:"25"},"25",-1),mt=e("option",{value:"50"},"50",-1),ft=e("option",{value:"100"},"100",-1),vt={value:"999999999"},gt={__name:"UserView",setup(l){H();const o=O(),f=N(""),_=N("");return j(()=>{o.LoadUsers()}),(n,p)=>(d(),u(U,null,[A(Ee,{userId:f.value,visible:f.value!=="",onClose:p[0]||(p[0]=t=>f.value="")},null,8,["userId","visible"]),A(ls,{userId:_.value,visible:_.value!=="",onClose:p[1]||(p[1]=t=>_.value="")},null,8,["userId","visible"]),e("div",os,[e("div",as,[e("h1",null,s(n.$t("users.headline")),1)]),e("div",is,[e("div",ns,[e("div",rs,[g(e("input",{"onUpdate:modelValue":p[2]||(p[2]=t=>m(o).filter=t),class:"form-control",placeholder:n.$t("general.search.placeholder"),type:"text",onKeyup:p[3]||(p[3]=(...t)=>m(o).afterPageSizeChange&&m(o).afterPageSizeChange(...t))},null,40,ds),[[b,m(o).filter]]),e("button",{class:"input-group-text btn btn-primary",title:n.$t("general.search.button")},hs,8,us)])])]),e("div",ps,[e("a",{class:"btn btn-primary ms-2",href:"#",title:n.$t("users.button-add-user"),onClick:p[4]||(p[4]=k(t=>f.value="#NEW#",["prevent"]))},_s,8,ms)])]),e("div",gs,[m(o).Count===0?(d(),u("div",bs,[e("h4",null,s(n.$t("users.no-user.headline")),1),e("p",null,s(n.$t("users.no-user.abstract")),1)])):v("",!0),m(o).Count!==0?(d(),u("table",$s,[e("thead",null,[e("tr",null,[e("th",ks,[e("input",{id:"flexCheckDefault",class:"form-check-input",title:n.$t("general.select-all"),type:"checkbox",value:""},null,8,ys)]),ws,e("th",Ps,s(n.$t("users.table-heading.id")),1),e("th",Is,s(n.$t("users.table-heading.email")),1),e("th",Us,s(n.$t("users.table-heading.firstname")),1),e("th",Cs,s(n.$t("users.table-heading.lastname")),1),e("th",Ss,s(n.$t("users.table-heading.source")),1),e("th",Fs,s(n.$t("users.table-heading.peers")),1),e("th",Ds,s(n.$t("users.table-heading.admin")),1),Vs])]),e("tbody",null,[(d(!0),u(U,null,D(m(o).FilteredAndPaged,t=>(d(),u("tr",{key:t.Identifier},[Ls,e("td",zs,[t.Disabled?(d(),u("span",{key:0,class:"text-danger",title:n.$t("users.user-disabled")+" "+t.DisabledReason},Os,8,Es)):v("",!0),t.Locked?(d(),u("span",{key:1,class:"text-danger",title:n.$t("users.user-locked")+" "+t.LockedReason},Ms,8,As)):v("",!0)]),e("td",null,s(t.Identifier),1),e("td",null,s(t.Email),1),e("td",null,s(t.Firstname),1),e("td",null,s(t.Lastname),1),e("td",Ws,[e("span",Rs,s(t.Source),1)]),e("td",Ts,s(t.PeerCount),1),e("td",Hs,[t.IsAdmin?(d(),u("span",{key:0,class:"text-danger",title:n.$t("users.admin")},Ks,8,js)):(d(),u("span",Gs,[e("i",{class:"fa fa-circle-xmark",title:n.$t("users.no-admin")},null,8,Js)]))]),e("td",Qs,[e("a",{href:"#",title:n.$t("users.button-show-user"),onClick:k(y=>_.value=t.Identifier,["prevent"])},Zs,8,Xs),e("a",{href:"#",title:n.$t("users.button-edit-user"),onClick:k(y=>f.value=t.Identifier,["prevent"])},st,8,xs)])]))),128))])])):v("",!0)]),tt,e("div",lt,[e("div",ot,[e("div",at,[e("ul",it,[e("li",{class:E([{disabled:m(o).pageOffset===0},"page-item"])},[e("a",{class:"page-link",onClick:p[5]||(p[5]=(...t)=>m(o).previousPage&&m(o).previousPage(...t))},"«")],2),(d(!0),u(U,null,D(m(o).pages,t=>(d(),u("li",{key:t,class:E([{active:m(o).currentPage===t},"page-item"])},[e("a",{class:"page-link",onClick:y=>m(o).gotoPage(t)},s(t),9,nt)],2))),128)),e("li",{class:E([{disabled:!m(o).hasNextPage},"page-item"])},[e("a",{class:"page-link",onClick:p[6]||(p[6]=(...t)=>m(o).nextPage&&m(o).nextPage(...t))},"»")],2)])]),e("div",rt,[e("div",dt,[e("label",ut,s(n.$t("general.pagination.size"))+":",1),e("div",ct,[g(e("select",{"onUpdate:modelValue":p[7]||(p[7]=t=>m(o).pageSize=t),class:"form-select",onClick:p[8]||(p[8]=t=>m(o).afterPageSizeChange())},[ht,pt,mt,ft,e("option",vt,s(n.$t("general.pagination.all")),1)],512),[[q,m(o).pageSize,void 0,{number:!0}]])])])])])])],64))}};export{gt as default}; diff --git a/internal/app/api/core/frontend-dist/assets/index-9ks1MleN.js b/internal/app/api/core/frontend-dist/assets/index--mSsjyvF.js similarity index 96% rename from internal/app/api/core/frontend-dist/assets/index-9ks1MleN.js rename to internal/app/api/core/frontend-dist/assets/index--mSsjyvF.js index 0033df0..ce88321 100644 --- a/internal/app/api/core/frontend-dist/assets/index-9ks1MleN.js +++ b/internal/app/api/core/frontend-dist/assets/index--mSsjyvF.js @@ -193,7 +193,7 @@ (?:${i2}:){1}(?:(?::${i2}){0,4}:${J2}|(?::${i2}){1,6}|:)| // 1:: 1::3:4:5:6:7:8 1::8 1::3:4:5:6:7:1.2.3.4 (?::(?:(?::${i2}){0,5}:${J2}|(?::${i2}){1,7}|:)) // ::2:3:4:5:6:7:8 ::2:3:4:5:6:7:8 ::8 ::1.2.3.4 )(?:%[0-9a-zA-Z]{1,})? // %eth0 %1 -`.replace(/\s*\/\/.*$/gm,"").replace(/\n/g,"").trim(),Wp=new RegExp(`(?:^${J2}$)|(?:^${o5}$)`),qp=new RegExp(`^${J2}$`),Kp=new RegExp(`^${o5}$`),R8=c=>c&&c.exact?Wp:new RegExp(`(?:${s4(c)}${J2}${s4(c)})|(?:${s4(c)}${o5}${s4(c)})`,"g");R8.v4=c=>c&&c.exact?qp:new RegExp(`${s4(c)}${J2}${s4(c)}`,"g");R8.v6=c=>c&&c.exact?Kp:new RegExp(`${s4(c)}${o5}${s4(c)}`,"g");const Pa={exact:!1},Ta=`${R8.v4().source}\\/(3[0-2]|[12]?[0-9])`,Ia=`${R8.v6().source}\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])`,Bp=new RegExp(`^${Ta}$`),Gp=new RegExp(`^${Ia}$`),Yp=({exact:c}=Pa)=>c?Bp:new RegExp(Ta,"g"),Zp=({exact:c}=Pa)=>c?Gp:new RegExp(Ia,"g"),$a=Yp({exact:!0}),Oa=Zp({exact:!0}),q9=c=>$a.test(c)?4:Oa.test(c)?6:0;q9.v4=c=>$a.test(c);q9.v6=c=>Oa.test(c);const x4=q9;function Xp(c){const e=(...t)=>c(...t);return Object.defineProperty(e,"name",{value:`functionTimeout(${c.name||""})`,configurable:!0}),e}const{toString:Qp}=Object.prototype;function Jp(c){return Qp.call(c)==="[object RegExp]"}const Nt={global:"g",ignoreCase:"i",multiline:"m",dotAll:"s",sticky:"y",unicode:"u"};function cv(c,e={}){if(!Jp(c))throw new TypeError("Expected a RegExp instance");const t=Object.keys(Nt).map(l=>(typeof e[l]=="boolean"?e[l]:c[l])?Nt[l]:"").join(""),s=new RegExp(e.source||c.source,t);return s.lastIndex=typeof e.lastIndex=="number"?e.lastIndex:c.lastIndex,s}function ev(c,e,{timeout:t}={}){try{return Xp(()=>cv(c).test(e),{timeout:t})()}catch(s){throw s}}const tv=45,sv={timeout:400};function R0(c){return c.length>tv?!1:ev(R8({exact:!0}),c,sv)}function V6(c){return x4(c)!==0}function c9(c){return R0(c)}function e9(c){return!0}const lv={class:"mt-4"},av={class:"form-group"},nv={class:"form-label mt-4"},rv=["placeholder"],iv={class:"form-group"},ov={class:"form-label mt-4"},uv=["placeholder"],fv={class:"mt-4"},dv={key:0,class:"form-group"},hv={class:"form-label mt-4"},mv=["placeholder"],zv={class:"form-group"},pv={class:"form-label mt-4"},vv=["placeholder"],Hv={class:"form-group"},Vv={class:"form-label mt-4"},gv=["placeholder"],Mv={key:1,class:"form-group"},Cv={class:"form-label mt-4"},Lv=["placeholder"],bv={class:"mt-4"},_v={key:0,class:"form-group"},yv={class:"form-label mt-4"},wv=["placeholder"],Ev={class:"form-group"},Av={class:"form-label mt-4"},kv={class:"form-group"},Sv={class:"form-label mt-4"},Pv={class:"form-group"},Tv={class:"form-label mt-4"},Iv={class:"form-text text-muted"},$v={class:"form-group"},Ov={class:"form-label mt-4"},xv={hidden:"",class:"form-group"},Nv={class:"form-label mt-4"},Dv={class:"row"},Rv={class:"form-group col-md-6"},Fv={class:"form-label mt-4"},Uv=["placeholder"],jv={class:"form-group col-md-6"},Wv={class:"form-label mt-4"},qv=["placeholder"],Kv={class:"mt-4"},Bv={class:"form-group"},Gv={class:"form-label mt-4"},Yv=["placeholder"],Zv={class:"form-group"},Xv={class:"form-label mt-4"},Qv=["placeholder"],Jv={class:"form-group"},cH={class:"form-label mt-4"},eH=["placeholder"],tH={class:"form-group"},sH={class:"form-label mt-4"},lH=["placeholder"],aH={class:"mt-4"},nH={class:"row"},rH={class:"form-group col-md-6"},iH={class:"form-check form-switch"},oH={class:"form-check-label"},uH={class:"form-check form-switch"},fH={class:"form-check-label"},dH={class:"form-group col-md-6"},hH={class:"form-label"},mH={class:"flex-fill text-start"},zH={__name:"PeerEditModal",props:{peerId:String,visible:Boolean},emits:["close"],setup(c,{emit:e}){const{t}=v4(),s=N8(),l=o4(),a=Ea(),n=c,r=e,i=x1(()=>{let h=s.Find(n.peerId);return h||(n.peerId||n.peerId.length?h=a.peers.find(m=>m.Identifier===n.peerId):h=O4()),h}),o=x1(()=>{let h=l.GetSelected;return h||(h=U4()),h}),d=x1(()=>n.visible?o.value.Mode==="server"?i.value?t("modals.peer-edit.headline-edit-peer")+" "+i.value.Identifier:t("modals.peer-edit.headline-new-peer"):i.value?t("modals.peer-edit.headline-edit-endpoint")+" "+i.value.Identifier:t("modals.peer-edit.headline-new-endpoint"):""),f=Z1(O4());I2(()=>n.visible,async(h,m)=>{m===!1&&h===!0&&(i.value?(f.value.Identifier=i.value.Identifier,f.value.DisplayName=i.value.DisplayName,f.value.UserIdentifier=i.value.UserIdentifier,f.value.InterfaceIdentifier=i.value.InterfaceIdentifier,f.value.Disabled=i.value.Disabled,f.value.ExpiresAt=i.value.ExpiresAt,f.value.Notes=i.value.Notes,f.value.Endpoint=i.value.Endpoint,f.value.EndpointPublicKey=i.value.EndpointPublicKey,f.value.AllowedIPs=i.value.AllowedIPs,f.value.ExtraAllowedIPs=i.value.ExtraAllowedIPs,f.value.PresharedKey=i.value.PresharedKey,f.value.PersistentKeepalive=i.value.PersistentKeepalive,f.value.PrivateKey=i.value.PrivateKey,f.value.PublicKey=i.value.PublicKey,f.value.Mode=i.value.Mode,f.value.Addresses=i.value.Addresses,f.value.CheckAliveAddress=i.value.CheckAliveAddress,f.value.Dns=i.value.Dns,f.value.DnsSearch=i.value.DnsSearch,f.value.Mtu=i.value.Mtu,f.value.FirewallMark=i.value.FirewallMark,f.value.RoutingTable=i.value.RoutingTable,f.value.PreUp=i.value.PreUp,f.value.PostUp=i.value.PostUp,f.value.PreDown=i.value.PreDown,f.value.PostDown=i.value.PostDown,(!f.value.Endpoint.Overridable||!f.value.EndpointPublicKey.Overridable||!f.value.AllowedIPs.Overridable||!f.value.PersistentKeepalive.Overridable||!f.value.Dns.Overridable||!f.value.DnsSearch.Overridable||!f.value.Mtu.Overridable||!f.value.FirewallMark.Overridable||!f.value.RoutingTable.Overridable||!f.value.PreUp.Overridable||!f.value.PostUp.Overridable||!f.value.PreDown.Overridable||!f.value.PostDown.Overridable)&&(f.value.IgnoreGlobalSettings=!0)):(await s.PreparePeer(o.value.Identifier),f.value.Identifier=s.Prepared.Identifier,f.value.DisplayName=s.Prepared.DisplayName,f.value.UserIdentifier=s.Prepared.UserIdentifier,f.value.InterfaceIdentifier=s.Prepared.InterfaceIdentifier,f.value.Disabled=s.Prepared.Disabled,f.value.ExpiresAt=s.Prepared.ExpiresAt,f.value.Notes=s.Prepared.Notes,f.value.Endpoint=s.Prepared.Endpoint,f.value.EndpointPublicKey=s.Prepared.EndpointPublicKey,f.value.AllowedIPs=s.Prepared.AllowedIPs,f.value.ExtraAllowedIPs=s.Prepared.ExtraAllowedIPs,f.value.PresharedKey=s.Prepared.PresharedKey,f.value.PersistentKeepalive=s.Prepared.PersistentKeepalive,f.value.PrivateKey=s.Prepared.PrivateKey,f.value.PublicKey=s.Prepared.PublicKey,f.value.Mode=s.Prepared.Mode,f.value.Addresses=s.Prepared.Addresses,f.value.CheckAliveAddress=s.Prepared.CheckAliveAddress,f.value.Dns=s.Prepared.Dns,f.value.DnsSearch=s.Prepared.DnsSearch,f.value.Mtu=s.Prepared.Mtu,f.value.FirewallMark=s.Prepared.FirewallMark,f.value.RoutingTable=s.Prepared.RoutingTable,f.value.PreUp=s.Prepared.PreUp,f.value.PostUp=s.Prepared.PostUp,f.value.PreDown=s.Prepared.PreDown,f.value.PostDown=s.Prepared.PostDown))}),I2(()=>f.value.IgnoreGlobalSettings,async(h,m)=>{f.value.Endpoint.Overridable=!h,f.value.EndpointPublicKey.Overridable=!h,f.value.AllowedIPs.Overridable=!h,f.value.PersistentKeepalive.Overridable=!h,f.value.Dns.Overridable=!h,f.value.DnsSearch.Overridable=!h,f.value.Mtu.Overridable=!h,f.value.FirewallMark.Overridable=!h,f.value.RoutingTable.Overridable=!h,f.value.PreUp.Overridable=!h,f.value.PostUp.Overridable=!h,f.value.PreDown.Overridable=!h,f.value.PostDown.Overridable=!h}),I2(()=>f.value.Disabled,async(h,m)=>{m&&!h&&f.value.ExpiresAt&&(f.value.ExpiresAt="")});function v(){f.value=O4(),r("close")}function _(h){let m=!0;h.forEach(M=>{x4(M)===0&&(m=!1,D1({title:"Invalid CIDR",text:M+" is not a valid IP address",type:"error"}))}),m&&(f.value.Addresses=h)}function y(h){let m=!0;h.forEach(M=>{x4(M)===0&&(m=!1,D1({title:"Invalid CIDR",text:M+" is not a valid IP address",type:"error"}))}),m&&(f.value.AllowedIPs.Value=h)}function T(h){let m=!0;h.forEach(M=>{x4(M)===0&&(m=!1,D1({title:"Invalid CIDR",text:M+" is not a valid IP address",type:"error"}))}),m&&(f.value.ExtraAllowedIPs=h)}function $(h){let m=!0;h.forEach(M=>{R0(M)||(m=!1,D1({title:"Invalid IP",text:M+" is not a valid IP address",type:"error"}))}),m&&(f.value.Dns.Value=h)}function E(h){f.value.DnsSearch.Value=h}async function z(){try{n.peerId!=="#NEW#"?await s.UpdatePeer(i.value.Identifier,f.value):await s.CreatePeer(o.value.Identifier,f.value),v()}catch(h){D1({title:"Failed to save peer!",text:h.toString(),type:"error"})}}async function C(){try{await s.DeletePeer(i.value.Identifier),v()}catch(h){D1({title:"Failed to delete peer!",text:h.toString(),type:"error"})}}return(h,m)=>(e1(),N3(x8,{title:d.value,visible:c.visible,onClose:v},{default:o2(()=>[u("fieldset",null,[u("legend",lv,P(h.$t("modals.peer-edit.header-general")),1),u("div",av,[u("label",nv,P(h.$t("modals.peer-edit.display-name.label")),1),I1(u("input",{type:"text",class:"form-control",placeholder:h.$t("modals.peer-edit.display-name.placeholder"),"onUpdate:modelValue":m[0]||(m[0]=M=>f.value.DisplayName=M)},null,8,rv),[[U1,f.value.DisplayName]])]),u("div",iv,[u("label",ov,P(h.$t("modals.peer-edit.linked-user.label")),1),I1(u("input",{type:"text",class:"form-control",placeholder:h.$t("modals.peer-edit.linked-user.placeholder"),"onUpdate:modelValue":m[1]||(m[1]=M=>f.value.UserIdentifier=M)},null,8,uv),[[U1,f.value.UserIdentifier]])])]),u("fieldset",null,[u("legend",fv,P(h.$t("modals.peer-edit.header-crypto")),1),o.value.Mode==="server"?(e1(),o1("div",dv,[u("label",hv,P(h.$t("modals.peer-edit.private-key.label")),1),I1(u("input",{type:"email",class:"form-control",placeholder:h.$t("modals.peer-edit.private-key.placeholder"),required:"","onUpdate:modelValue":m[2]||(m[2]=M=>f.value.PrivateKey=M)},null,8,mv),[[U1,f.value.PrivateKey]])])):$1("",!0),u("div",zv,[u("label",pv,P(h.$t("modals.peer-edit.public-key.label")),1),I1(u("input",{type:"email",class:"form-control",placeholder:h.$t("modals.peer-edit.public-key.placeholder"),required:"","onUpdate:modelValue":m[3]||(m[3]=M=>f.value.PublicKey=M)},null,8,vv),[[U1,f.value.PublicKey]])]),u("div",Hv,[u("label",Vv,P(h.$t("modals.peer-edit.preshared-key.label")),1),I1(u("input",{type:"email",class:"form-control",placeholder:h.$t("modals.peer-edit.preshared-key.placeholder"),"onUpdate:modelValue":m[4]||(m[4]=M=>f.value.PresharedKey=M)},null,8,gv),[[U1,f.value.PresharedKey]])]),f.value.Mode==="client"?(e1(),o1("div",Mv,[u("label",Cv,P(h.$t("modals.peer-edit.endpoint-public-key.label")),1),I1(u("input",{type:"text",class:"form-control",placeholder:h.$t("modals.peer-edit.endpoint-public-key.placeholder"),"onUpdate:modelValue":m[5]||(m[5]=M=>f.value.EndpointPublicKey.Value=M)},null,8,Lv),[[U1,f.value.EndpointPublicKey.Value]])])):$1("",!0)]),u("fieldset",null,[u("legend",bv,P(h.$t("modals.peer-edit.header-network")),1),o.value.Mode==="client"?(e1(),o1("div",_v,[u("label",yv,P(h.$t("modals.peer-edit.endpoint.label")),1),I1(u("input",{type:"text",class:"form-control",placeholder:h.$t("modals.peer-edit.endpoint.placeholder"),"onUpdate:modelValue":m[6]||(m[6]=M=>f.value.Endpoint.Value=M)},null,8,wv),[[U1,f.value.Endpoint.Value]])])):$1("",!0),u("div",Ev,[u("label",Av,P(h.$t("modals.peer-edit.ip.label")),1),w1(Z(D2),{class:"form-control",tags:f.value.Addresses,placeholder:h.$t("modals.peer-edit.ip.placeholder"),"add-tag-on-keys":[13,188,32,9],validate:Z(V6),onOnTagsChanged:_},null,8,["tags","placeholder","validate"])]),u("div",kv,[u("label",Sv,P(h.$t("modals.peer-edit.allowed-ip.label")),1),w1(Z(D2),{class:"form-control",tags:f.value.AllowedIPs.Value,placeholder:h.$t("modals.peer-edit.allowed-ip.placeholder"),"add-tag-on-keys":[13,188,32,9],validate:Z(V6),onOnTagsChanged:y},null,8,["tags","placeholder","validate"])]),u("div",Pv,[u("label",Tv,P(h.$t("modals.peer-edit.extra-allowed-ip.label")),1),w1(Z(D2),{class:"form-control",tags:f.value.ExtraAllowedIPs,placeholder:h.$t("modals.peer-edit.extra-allowed-ip.placeholder"),"add-tag-on-keys":[13,188,32,9],validate:Z(V6),onOnTagsChanged:T},null,8,["tags","placeholder","validate"]),u("small",Iv,P(h.$t("modals.peer-edit.extra-allowed-ip.description")),1)]),u("div",$v,[u("label",Ov,P(h.$t("modals.peer-edit.dns.label")),1),w1(Z(D2),{class:"form-control",tags:f.value.Dns.Value,placeholder:h.$t("modals.peer-edit.dns.placeholder"),"add-tag-on-keys":[13,188,32,9],validate:Z(c9),onOnTagsChanged:$},null,8,["tags","placeholder","validate"])]),u("div",xv,[u("label",Nv,P(h.$t("modals.peer-edit.dns-search.label")),1),w1(Z(D2),{class:"form-control",tags:f.value.DnsSearch.Value,placeholder:h.$t("modals.peer-edit.dns-search.label"),"add-tag-on-keys":[13,188,32,9],validate:Z(e9),onOnTagsChanged:E},null,8,["tags","placeholder","validate"])]),u("div",Dv,[u("div",Rv,[u("label",Fv,P(h.$t("modals.peer-edit.keep-alive.label")),1),I1(u("input",{type:"number",class:"form-control",placeholder:h.$t("modals.peer-edit.keep-alive.label"),"onUpdate:modelValue":m[7]||(m[7]=M=>f.value.PersistentKeepalive.Value=M)},null,8,Uv),[[U1,f.value.PersistentKeepalive.Value]])]),u("div",jv,[u("label",Wv,P(h.$t("modals.peer-edit.mtu.label")),1),I1(u("input",{type:"number",class:"form-control",placeholder:h.$t("modals.peer-edit.mtu.label"),"onUpdate:modelValue":m[8]||(m[8]=M=>f.value.Mtu.Value=M)},null,8,qv),[[U1,f.value.Mtu.Value]])])])]),u("fieldset",null,[u("legend",Kv,P(h.$t("modals.peer-edit.header-hooks")),1),u("div",Bv,[u("label",Gv,P(h.$t("modals.peer-edit.pre-up.label")),1),I1(u("textarea",{"onUpdate:modelValue":m[9]||(m[9]=M=>f.value.PreUp.Value=M),class:"form-control",rows:"2",placeholder:h.$t("modals.peer-edit.pre-up.placeholder")},null,8,Yv),[[U1,f.value.PreUp.Value]])]),u("div",Zv,[u("label",Xv,P(h.$t("modals.peer-edit.post-up.label")),1),I1(u("textarea",{"onUpdate:modelValue":m[10]||(m[10]=M=>f.value.PostUp.Value=M),class:"form-control",rows:"2",placeholder:h.$t("modals.peer-edit.post-up.placeholder")},null,8,Qv),[[U1,f.value.PostUp.Value]])]),u("div",Jv,[u("label",cH,P(h.$t("modals.peer-edit.pre-down.label")),1),I1(u("textarea",{"onUpdate:modelValue":m[11]||(m[11]=M=>f.value.PreDown.Value=M),class:"form-control",rows:"2",placeholder:h.$t("modals.peer-edit.pre-down.placeholder")},null,8,eH),[[U1,f.value.PreDown.Value]])]),u("div",tH,[u("label",sH,P(h.$t("modals.peer-edit.post-down.label")),1),I1(u("textarea",{"onUpdate:modelValue":m[12]||(m[12]=M=>f.value.PostDown.Value=M),class:"form-control",rows:"2",placeholder:h.$t("modals.peer-edit.post-down.placeholder")},null,8,lH),[[U1,f.value.PostDown.Value]])])]),u("fieldset",null,[u("legend",aH,P(h.$t("modals.peer-edit.header-state")),1),u("div",nH,[u("div",rH,[u("div",iH,[I1(u("input",{class:"form-check-input",type:"checkbox","onUpdate:modelValue":m[13]||(m[13]=M=>f.value.Disabled=M)},null,512),[[x0,f.value.Disabled]]),u("label",oH,P(h.$t("modals.peer-edit.disabled.label")),1)]),u("div",uH,[I1(u("input",{class:"form-check-input",type:"checkbox","onUpdate:modelValue":m[14]||(m[14]=M=>f.value.IgnoreGlobalSettings=M)},null,512),[[x0,f.value.IgnoreGlobalSettings]]),u("label",fH,P(h.$t("modals.peer-edit.ignore-global.label")),1)])]),u("div",dH,[u("label",hH,P(h.$t("modals.peer-edit.expires-at.label")),1),I1(u("input",{type:"date",pattern:"\\d{4}-\\d{2}-\\d{2}",class:"form-control",min:"2023-01-01","onUpdate:modelValue":m[15]||(m[15]=M=>f.value.ExpiresAt=M)},null,512),[[U1,f.value.ExpiresAt]])])])])]),footer:o2(()=>[u("div",mH,[n.peerId!=="#NEW#"?(e1(),o1("button",{key:0,class:"btn btn-danger me-1",type:"button",onClick:Y1(C,["prevent"])},P(h.$t("general.delete")),1)):$1("",!0)]),u("button",{class:"btn btn-primary me-1",type:"button",onClick:Y1(z,["prevent"])},P(h.$t("general.save")),1),u("button",{class:"btn btn-secondary",type:"button",onClick:Y1(v,["prevent"])},P(h.$t("general.close")),1)]),_:1},8,["title","visible"]))}},pH={class:"form-group"},vH={class:"form-label mt-4"},HH={class:"form-text text-muted"},VH={class:"form-group"},gH={class:"form-label mt-4"},MH=["placeholder"],CH={class:"form-text text-muted"},LH={__name:"PeerMultiCreateModal",props:{visible:Boolean},emits:["close"],setup(c,{emit:e}){const{t}=v4(),s=N8(),l=o4(),a=c,n=e,r=x1(()=>{let y=l.GetSelected;return y||(y=U4()),y});function i(){return{Identifiers:[],Suffix:""}}const o=Z1(i()),d=x1(()=>a.visible?r.value.Mode==="server"?t("modals.peer-multi-create.headline-peer"):t("modals.peer-multi-create.headline-endpoint"):"");function f(){o.value=i(),n("close")}function v(y){o.value.Identifiers=y}async function _(){if(o.value.Identifiers.length===0){D1({title:"Missing Identifiers",text:"At least one identifier is required to create a new peer.",type:"error"});return}try{await s.CreateMultiplePeers(r.value.Identifier,o.value),f()}catch(y){console.log(y),D1({title:"Failed to create peers!",text:y.toString(),type:"error"})}}return(y,T)=>(e1(),N3(x8,{title:d.value,visible:c.visible,onClose:f},{default:o2(()=>[u("fieldset",null,[u("div",pH,[u("label",vH,P(y.$t("modals.peer-multi-create.identifiers.label")),1),w1(Z(D2),{class:"form-control",tags:o.value.Identifiers,placeholder:y.$t("modals.peer-multi-create.identifiers.placeholder"),"add-tag-on-keys":[13,188,32,9],onOnTagsChanged:v},null,8,["tags","placeholder"]),u("small",HH,P(y.$t("modals.peer-multi-create.identifiers.description")),1)]),u("div",VH,[u("label",gH,P(y.$t("modals.peer-multi-create.prefix.label")),1),I1(u("input",{type:"text",class:"form-control",placeholder:y.$t("modals.peer-multi-create.prefix.placeholder"),"onUpdate:modelValue":T[0]||(T[0]=$=>o.value.Suffix=$)},null,8,MH),[[U1,o.value.Suffix]]),u("small",CH,P(y.$t("modals.peer-multi-create.prefix.description")),1)])])]),footer:o2(()=>[u("button",{class:"btn btn-primary me-1",type:"button",onClick:Y1(_,["prevent"])},P(y.$t("general.save")),1),u("button",{class:"btn btn-secondary",type:"button",onClick:Y1(f,["prevent"])},P(y.$t("general.close")),1)]),_:1},8,["title","visible"]))}},bH={class:"nav nav-tabs"},_H={class:"nav-item"},yH={class:"nav-link active","data-bs-toggle":"tab",href:"#interface"},wH={key:0,class:"nav-item"},EH={class:"nav-link","data-bs-toggle":"tab",href:"#peerdefaults"},AH={id:"interfaceTabs",class:"tab-content"},kH={id:"interface",class:"tab-pane fade active show"},SH={class:"mt-4"},PH={key:0,class:"form-group"},TH={class:"form-label mt-4"},IH=["placeholder"],$H={class:"form-group"},OH={class:"form-label mt-4"},xH={value:"server"},NH={value:"client"},DH={value:"any"},RH={class:"form-group"},FH={class:"form-label mt-4"},UH=["placeholder"],jH={class:"mt-4"},WH={class:"form-group"},qH={class:"form-label mt-4"},KH=["placeholder"],BH={class:"form-group"},GH={class:"form-label mt-4"},YH=["placeholder"],ZH={class:"mt-4"},XH={class:"form-group"},QH={class:"form-label mt-4"},JH={key:0,class:"form-group"},cV={class:"form-label mt-4"},eV=["placeholder"],tV={key:1,class:"form-group"},sV={class:"form-label mt-4"},lV={key:2,class:"form-group"},aV={class:"form-label mt-4"},nV={class:"row"},rV={class:"form-group col-md-6"},iV={class:"form-label mt-4"},oV=["placeholder"],uV={class:"form-group col-md-6"},fV={class:"form-label mt-4"},dV=["placeholder"],hV={class:"row"},mV={class:"form-group col-md-6"},zV={class:"form-label mt-4"},pV=["placeholder"],vV={id:"routingTableHelp",class:"form-text text-muted"},HV=u("div",{class:"form-group col-md-6"},null,-1),VV={class:"mt-4"},gV={class:"form-group"},MV={class:"form-label mt-4"},CV=["placeholder"],LV={class:"form-group"},bV={class:"form-label mt-4"},_V=["placeholder"],yV={class:"form-group"},wV={class:"form-label mt-4"},EV=["placeholder"],AV={class:"form-group"},kV={class:"form-label mt-4"},SV=["placeholder"],PV={class:"mt-4"},TV={class:"form-check form-switch"},IV={class:"form-check-label"},$V={class:"form-check form-switch"},OV={class:"form-check-label"},xV={id:"peerdefaults",class:"tab-pane fade"},NV={class:"mt-4"},DV={class:"form-group"},RV={class:"form-label mt-4"},FV=["placeholder"],UV={class:"form-text text-muted"},jV={class:"form-group"},WV={class:"form-label mt-4"},qV={class:"form-text text-muted"},KV={class:"form-group"},BV={class:"form-label mt-4"},GV={class:"form-group"},YV={class:"form-label mt-4"},ZV={class:"form-group"},XV={class:"form-label mt-4"},QV={class:"row"},JV={class:"form-group col-md-6"},cg={class:"form-label mt-4"},eg=["placeholder"],tg={class:"form-group col-md-6"},sg={class:"form-label mt-4"},lg=["placeholder"],ag={class:"row"},ng={class:"form-group col-md-6"},rg={class:"form-label mt-4"},ig=["placeholder"],og={class:"form-group col-md-6"},ug={class:"form-label mt-4"},fg=["placeholder"],dg={class:"mt-4"},hg={class:"form-group"},mg={class:"form-label mt-4"},zg=["placeholder"],pg={class:"form-group"},vg={class:"form-label mt-4"},Hg=["placeholder"],Vg={class:"form-group"},gg={class:"form-label mt-4"},Mg=["placeholder"],Cg={class:"form-group"},Lg={class:"form-label mt-4"},bg=["placeholder"],_g={key:0,class:"text-end"},yg=u("hr",{class:"mt-4"},null,-1),wg={class:"flex-fill text-start"},Eg={__name:"InterfaceEditModal",props:{interfaceId:String,visible:Boolean},emits:["close"],setup(c,{emit:e}){const{t}=v4(),s=o4(),l=N8(),a=c,n=e,r=x1(()=>s.Find(a.interfaceId)),i=x1(()=>a.visible?r.value?t("modals.interface-edit.headline-edit")+" "+r.value.Identifier:t("modals.interface-edit.headline-new"):""),o=Z1(U4());I2(()=>a.visible,async(m,M)=>{M===!1&&m===!0&&(console.log(r.value),r.value?(o.value.Disabled=r.value.Disabled,o.value.Identifier=r.value.Identifier,o.value.DisplayName=r.value.DisplayName,o.value.Mode=r.value.Mode,o.value.PublicKey=r.value.PublicKey,o.value.PrivateKey=r.value.PrivateKey,o.value.ListenPort=r.value.ListenPort,o.value.Addresses=r.value.Addresses,o.value.Dns=r.value.Dns,o.value.DnsSearch=r.value.DnsSearch,o.value.Mtu=r.value.Mtu,o.value.FirewallMark=r.value.FirewallMark,o.value.RoutingTable=r.value.RoutingTable,o.value.PreUp=r.value.PreUp,o.value.PostUp=r.value.PostUp,o.value.PreDown=r.value.PreDown,o.value.PostDown=r.value.PostDown,o.value.SaveConfig=r.value.SaveConfig,o.value.PeerDefNetwork=r.value.PeerDefNetwork,o.value.PeerDefDns=r.value.PeerDefDns,o.value.PeerDefDnsSearch=r.value.PeerDefDnsSearch,o.value.PeerDefEndpoint=r.value.PeerDefEndpoint,o.value.PeerDefAllowedIPs=r.value.PeerDefAllowedIPs,o.value.PeerDefMtu=r.value.PeerDefMtu,o.value.PeerDefPersistentKeepalive=r.value.PeerDefPersistentKeepalive,o.value.PeerDefFirewallMark=r.value.PeerDefFirewallMark,o.value.PeerDefRoutingTable=r.value.PeerDefRoutingTable,o.value.PeerDefPreUp=r.value.PeerDefPreUp,o.value.PeerDefPostUp=r.value.PeerDefPostUp,o.value.PeerDefPreDown=r.value.PeerDefPreDown,o.value.PeerDefPostDown=r.value.PeerDefPostDown):(await s.PrepareInterface(),o.value.Identifier=s.Prepared.Identifier,o.value.DisplayName=s.Prepared.DisplayName,o.value.Mode=s.Prepared.Mode,o.value.PublicKey=s.Prepared.PublicKey,o.value.PrivateKey=s.Prepared.PrivateKey,o.value.ListenPort=s.Prepared.ListenPort,o.value.Addresses=s.Prepared.Addresses,o.value.Dns=s.Prepared.Dns,o.value.DnsSearch=s.Prepared.DnsSearch,o.value.Mtu=s.Prepared.Mtu,o.value.FirewallMark=s.Prepared.FirewallMark,o.value.RoutingTable=s.Prepared.RoutingTable,o.value.PreUp=s.Prepared.PreUp,o.value.PostUp=s.Prepared.PostUp,o.value.PreDown=s.Prepared.PreDown,o.value.PostDown=s.Prepared.PostDown,o.value.SaveConfig=s.Prepared.SaveConfig,o.value.PeerDefNetwork=s.Prepared.PeerDefNetwork,o.value.PeerDefDns=s.Prepared.PeerDefDns,o.value.PeerDefDnsSearch=s.Prepared.PeerDefDnsSearch,o.value.PeerDefEndpoint=s.Prepared.PeerDefEndpoint,o.value.PeerDefAllowedIPs=s.Prepared.PeerDefAllowedIPs,o.value.PeerDefMtu=s.Prepared.PeerDefMtu,o.value.PeerDefPersistentKeepalive=s.Prepared.PeerDefPersistentKeepalive,o.value.PeerDefFirewallMark=s.Prepared.PeerDefFirewallMark,o.value.PeerDefRoutingTable=s.Prepared.PeerDefRoutingTable,o.value.PeerDefPreUp=s.Prepared.PeerDefPreUp,o.value.PeerDefPostUp=s.Prepared.PeerDefPostUp,o.value.PeerDefPreDown=s.Prepared.PeerDefPreDown,o.value.PeerDefPostDown=s.Prepared.PeerDefPostDown))});function d(){o.value=U4(),n("close")}function f(m){let M=!0;m.forEach(b=>{x4(b)===0&&(M=!1,D1({title:"Invalid CIDR",text:b+" is not a valid IP address",type:"error"}))}),M&&(o.value.Addresses=m)}function v(m){let M=!0;m.forEach(b=>{R0(b)||(M=!1,D1({title:"Invalid IP",text:b+" is not a valid IP address",type:"error"}))}),M&&(o.value.Dns=m)}function _(m){o.value.DnsSearch=m}function y(m){let M=!0;m.forEach(b=>{x4(b)===0&&(M=!1,D1({title:"Invalid CIDR",text:b+" is not a valid IP address",type:"error"}))}),M&&(o.value.PeerDefNetwork=m)}function T(m){let M=!0;m.forEach(b=>{x4(b)===0&&(M=!1,D1({title:"Invalid CIDR",text:b+" is not a valid IP address",type:"error"}))}),M&&(o.value.PeerDefAllowedIPs=m)}function $(m){let M=!0;m.forEach(b=>{R0(b)||(M=!1,D1({title:"Invalid IP",text:b+" is not a valid IP address",type:"error"}))}),M&&(o.value.PeerDefDns=m)}function E(m){o.value.PeerDefDnsSearch=m}async function z(){try{a.interfaceId!=="#NEW#"?await s.UpdateInterface(r.value.Identifier,o.value):await s.CreateInterface(o.value),d()}catch(m){console.log(m),D1({title:"Failed to save interface!",text:m.toString(),type:"error"})}}async function C(){if(a.interfaceId!=="#NEW#")try{await s.ApplyPeerDefaults(r.value.Identifier,o.value),D1({title:"Peer Defaults Applied",text:"Applied current peer defaults to all available peers.",type:"success"}),await l.LoadPeers(r.value.Identifier)}catch(m){console.log(m),D1({title:"Failed to apply peer defaults!",text:m.toString(),type:"error"})}}async function h(){try{await s.DeleteInterface(r.value.Identifier),d()}catch(m){console.log(m),D1({title:"Failed to delete interface!",text:m.toString(),type:"error"})}}return(m,M)=>(e1(),N3(x8,{title:i.value,visible:c.visible,onClose:d},{default:o2(()=>[u("ul",bH,[u("li",_H,[u("a",yH,P(m.$t("modals.interface-edit.tab-interface")),1)]),o.value.Mode==="server"?(e1(),o1("li",wH,[u("a",EH,P(m.$t("modals.interface-edit.tab-peerdef")),1)])):$1("",!0)]),u("div",AH,[u("div",kH,[u("fieldset",null,[u("legend",SH,P(m.$t("modals.interface-edit.header-general")),1),a.interfaceId==="#NEW#"?(e1(),o1("div",PH,[u("label",TH,P(m.$t("modals.interface-edit.identifier.label")),1),I1(u("input",{"onUpdate:modelValue":M[0]||(M[0]=b=>o.value.Identifier=b),class:"form-control",placeholder:m.$t("modals.interface-edit.identifier.placeholder"),type:"text"},null,8,IH),[[U1,o.value.Identifier]])])):$1("",!0),u("div",$H,[u("label",OH,P(m.$t("modals.interface-edit.mode.label")),1),I1(u("select",{"onUpdate:modelValue":M[1]||(M[1]=b=>o.value.Mode=b),class:"form-select"},[u("option",xH,P(m.$t("modals.interface-edit.mode.server")),1),u("option",NH,P(m.$t("modals.interface-edit.mode.client")),1),u("option",DH,P(m.$t("modals.interface-edit.mode.any")),1)],512),[[$7,o.value.Mode]])]),u("div",RH,[u("label",FH,P(m.$t("modals.interface-edit.display-name.label")),1),I1(u("input",{"onUpdate:modelValue":M[2]||(M[2]=b=>o.value.DisplayName=b),class:"form-control",placeholder:m.$t("modals.interface-edit.display-name.placeholder"),type:"text"},null,8,UH),[[U1,o.value.DisplayName]])])]),u("fieldset",null,[u("legend",jH,P(m.$t("modals.interface-edit.header-crypto")),1),u("div",WH,[u("label",qH,P(m.$t("modals.interface-edit.private-key.label")),1),I1(u("input",{"onUpdate:modelValue":M[3]||(M[3]=b=>o.value.PrivateKey=b),class:"form-control",placeholder:m.$t("modals.interface-edit.private-key.placeholder"),required:"",type:"email"},null,8,KH),[[U1,o.value.PrivateKey]])]),u("div",BH,[u("label",GH,P(m.$t("modals.interface-edit.public-key.label")),1),I1(u("input",{"onUpdate:modelValue":M[4]||(M[4]=b=>o.value.PublicKey=b),class:"form-control",placeholder:m.$t("modals.interface-edit.public-key.placeholder"),required:"",type:"email"},null,8,YH),[[U1,o.value.PublicKey]])])]),u("fieldset",null,[u("legend",ZH,P(m.$t("modals.interface-edit.header-network")),1),u("div",XH,[u("label",QH,P(m.$t("modals.interface-edit.ip.label")),1),w1(Z(D2),{class:"form-control",tags:o.value.Addresses,placeholder:m.$t("modals.interface-edit.ip.placeholder"),"add-tag-on-keys":[13,188,32,9],validate:Z(V6),onOnTagsChanged:f},null,8,["tags","placeholder","validate"])]),o.value.Mode==="server"?(e1(),o1("div",JH,[u("label",cV,P(m.$t("modals.interface-edit.listen-port.label")),1),I1(u("input",{"onUpdate:modelValue":M[5]||(M[5]=b=>o.value.ListenPort=b),class:"form-control",placeholder:m.$t("modals.interface-edit.listen-port.placeholder"),type:"number"},null,8,eV),[[U1,o.value.ListenPort]])])):$1("",!0),o.value.Mode!=="server"?(e1(),o1("div",tV,[u("label",sV,P(m.$t("modals.interface-edit.dns.label")),1),w1(Z(D2),{class:"form-control",tags:o.value.Dns,placeholder:m.$t("modals.interface-edit.dns.placeholder"),"add-tag-on-keys":[13,188,32,9],validate:Z(c9),onOnTagsChanged:v},null,8,["tags","placeholder","validate"])])):$1("",!0),o.value.Mode!=="server"?(e1(),o1("div",lV,[u("label",aV,P(m.$t("modals.interface-edit.dns-search.label")),1),w1(Z(D2),{class:"form-control",tags:o.value.DnsSearch,placeholder:m.$t("modals.interface-edit.dns-search.placeholder"),"add-tag-on-keys":[13,188,32,9],validate:Z(e9),onOnTagsChanged:_},null,8,["tags","placeholder","validate"])])):$1("",!0),u("div",nV,[u("div",rV,[u("label",iV,P(m.$t("modals.interface-edit.mtu.label")),1),I1(u("input",{"onUpdate:modelValue":M[6]||(M[6]=b=>o.value.Mtu=b),class:"form-control",placeholder:m.$t("modals.interface-edit.mtu.placeholder"),type:"number"},null,8,oV),[[U1,o.value.Mtu]])]),u("div",uV,[u("label",fV,P(m.$t("modals.interface-edit.firewall-mark.label")),1),I1(u("input",{"onUpdate:modelValue":M[7]||(M[7]=b=>o.value.FirewallMark=b),class:"form-control",placeholder:m.$t("modals.interface-edit.firewall-mark.placeholder"),type:"number"},null,8,dV),[[U1,o.value.FirewallMark]])])]),u("div",hV,[u("div",mV,[u("label",zV,P(m.$t("modals.interface-edit.routing-table.label")),1),I1(u("input",{"onUpdate:modelValue":M[8]||(M[8]=b=>o.value.RoutingTable=b),"aria-describedby":"routingTableHelp",class:"form-control",placeholder:m.$t("modals.interface-edit.routing-table.placeholder"),type:"text"},null,8,pV),[[U1,o.value.RoutingTable]]),u("small",vV,P(m.$t("modals.interface-edit.routing-table.description")),1)]),HV])]),u("fieldset",null,[u("legend",VV,P(m.$t("modals.interface-edit.header-hooks")),1),u("div",gV,[u("label",MV,P(m.$t("modals.interface-edit.pre-up.label")),1),I1(u("textarea",{"onUpdate:modelValue":M[9]||(M[9]=b=>o.value.PreUp=b),class:"form-control",rows:"2",placeholder:m.$t("modals.interface-edit.pre-up.placeholder")},null,8,CV),[[U1,o.value.PreUp]])]),u("div",LV,[u("label",bV,P(m.$t("modals.interface-edit.post-up.label")),1),I1(u("textarea",{"onUpdate:modelValue":M[10]||(M[10]=b=>o.value.PostUp=b),class:"form-control",rows:"2",placeholder:m.$t("modals.interface-edit.post-up.placeholder")},null,8,_V),[[U1,o.value.PostUp]])]),u("div",yV,[u("label",wV,P(m.$t("modals.interface-edit.pre-down.label")),1),I1(u("textarea",{"onUpdate:modelValue":M[11]||(M[11]=b=>o.value.PreDown=b),class:"form-control",rows:"2",placeholder:m.$t("modals.interface-edit.pre-down.placeholder")},null,8,EV),[[U1,o.value.PreDown]])]),u("div",AV,[u("label",kV,P(m.$t("modals.interface-edit.post-down.label")),1),I1(u("textarea",{"onUpdate:modelValue":M[12]||(M[12]=b=>o.value.PostDown=b),class:"form-control",rows:"2",placeholder:m.$t("modals.interface-edit.post-down.placeholder")},null,8,SV),[[U1,o.value.PostDown]])])]),u("fieldset",null,[u("legend",PV,P(m.$t("modals.interface-edit.header-state")),1),u("div",TV,[I1(u("input",{"onUpdate:modelValue":M[13]||(M[13]=b=>o.value.Disabled=b),class:"form-check-input",type:"checkbox"},null,512),[[x0,o.value.Disabled]]),u("label",IV,P(m.$t("modals.interface-edit.disabled.label")),1)]),u("div",$V,[I1(u("input",{"onUpdate:modelValue":M[14]||(M[14]=b=>o.value.SaveConfig=b),checked:"",class:"form-check-input",type:"checkbox"},null,512),[[x0,o.value.SaveConfig]]),u("label",OV,P(m.$t("modals.interface-edit.save-config.label")),1)])])]),u("div",xV,[u("fieldset",null,[u("legend",NV,P(m.$t("modals.interface-edit.header-network")),1),u("div",DV,[u("label",RV,P(m.$t("modals.interface-edit.defaults.endpoint.label")),1),I1(u("input",{"onUpdate:modelValue":M[15]||(M[15]=b=>o.value.PeerDefEndpoint=b),class:"form-control",placeholder:m.$t("modals.interface-edit.defaults.endpoint.placeholder"),type:"text"},null,8,FV),[[U1,o.value.PeerDefEndpoint]]),u("small",UV,P(m.$t("modals.interface-edit.defaults.endpoint.description")),1)]),u("div",jV,[u("label",WV,P(m.$t("modals.interface-edit.defaults.networks.label")),1),w1(Z(D2),{class:"form-control",tags:o.value.PeerDefNetwork,placeholder:m.$t("modals.interface-edit.defaults.networks.placeholder"),"add-tag-on-keys":[13,188,32,9],validate:Z(V6),onOnTagsChanged:y},null,8,["tags","placeholder","validate"]),u("small",qV,P(m.$t("modals.interface-edit.defaults.networks.description")),1)]),u("div",KV,[u("label",BV,P(m.$t("modals.interface-edit.defaults.allowed-ip.label")),1),w1(Z(D2),{class:"form-control",tags:o.value.PeerDefAllowedIPs,placeholder:m.$t("modals.interface-edit.defaults.allowed-ip.placeholder"),"add-tag-on-keys":[13,188,32,9],validate:Z(V6),onOnTagsChanged:T},null,8,["tags","placeholder","validate"])]),u("div",GV,[u("label",YV,P(m.$t("modals.interface-edit.dns.label")),1),w1(Z(D2),{class:"form-control",tags:o.value.PeerDefDns,placeholder:m.$t("modals.interface-edit.dns.placeholder"),"add-tag-on-keys":[13,188,32,9],validate:Z(c9),onOnTagsChanged:$},null,8,["tags","placeholder","validate"])]),u("div",ZV,[u("label",XV,P(m.$t("modals.interface-edit.dns-search.label")),1),w1(Z(D2),{class:"form-control",tags:o.value.PeerDefDnsSearch,placeholder:m.$t("modals.interface-edit.dns-search.placeholder"),"add-tag-on-keys":[13,188,32,9],validate:Z(e9),onOnTagsChanged:E},null,8,["tags","placeholder","validate"])]),u("div",QV,[u("div",JV,[u("label",cg,P(m.$t("modals.interface-edit.defaults.mtu.label")),1),I1(u("input",{"onUpdate:modelValue":M[16]||(M[16]=b=>o.value.PeerDefMtu=b),class:"form-control",placeholder:m.$t("modals.interface-edit.defaults.mtu.placeholder"),type:"number"},null,8,eg),[[U1,o.value.PeerDefMtu]])]),u("div",tg,[u("label",sg,P(m.$t("modals.interface-edit.firewall-mark.label")),1),I1(u("input",{"onUpdate:modelValue":M[17]||(M[17]=b=>o.value.PeerDefFirewallMark=b),class:"form-control",placeholder:m.$t("modals.interface-edit.firewall-mark.placeholder"),type:"number"},null,8,lg),[[U1,o.value.PeerDefFirewallMark]])])]),u("div",ag,[u("div",ng,[u("label",rg,P(m.$t("modals.interface-edit.routing-table.label")),1),I1(u("input",{"onUpdate:modelValue":M[18]||(M[18]=b=>o.value.PeerDefRoutingTable=b),class:"form-control",placeholder:m.$t("modals.interface-edit.routing-table.placeholder"),type:"number"},null,8,ig),[[U1,o.value.PeerDefRoutingTable]])]),u("div",og,[u("label",ug,P(m.$t("modals.interface-edit.defaults.keep-alive.label")),1),I1(u("input",{"onUpdate:modelValue":M[19]||(M[19]=b=>o.value.PeerDefPersistentKeepalive=b),class:"form-control",placeholder:m.$t("modals.interface-edit.defaults.keep-alive.placeholder"),type:"number"},null,8,fg),[[U1,o.value.PeerDefPersistentKeepalive]])])])]),u("fieldset",null,[u("legend",dg,P(m.$t("modals.interface-edit.header-peer-hooks")),1),u("div",hg,[u("label",mg,P(m.$t("modals.interface-edit.pre-up.label")),1),I1(u("textarea",{"onUpdate:modelValue":M[20]||(M[20]=b=>o.value.PeerDefPreUp=b),class:"form-control",rows:"2",placeholder:m.$t("modals.interface-edit.pre-up.placeholder")},null,8,zg),[[U1,o.value.PeerDefPreUp]])]),u("div",pg,[u("label",vg,P(m.$t("modals.interface-edit.post-up.label")),1),I1(u("textarea",{"onUpdate:modelValue":M[21]||(M[21]=b=>o.value.PeerDefPostUp=b),class:"form-control",rows:"2",placeholder:m.$t("modals.interface-edit.post-up.placeholder")},null,8,Hg),[[U1,o.value.PeerDefPostUp]])]),u("div",Vg,[u("label",gg,P(m.$t("modals.interface-edit.pre-down.label")),1),I1(u("textarea",{"onUpdate:modelValue":M[22]||(M[22]=b=>o.value.PeerDefPreDown=b),class:"form-control",rows:"2",placeholder:m.$t("modals.interface-edit.pre-down.placeholder")},null,8,Mg),[[U1,o.value.PeerDefPreDown]])]),u("div",Cg,[u("label",Lg,P(m.$t("modals.interface-edit.post-down.label")),1),I1(u("textarea",{"onUpdate:modelValue":M[23]||(M[23]=b=>o.value.PeerDefPostDown=b),class:"form-control",rows:"2",placeholder:m.$t("modals.interface-edit.post-down.placeholder")},null,8,bg),[[U1,o.value.PeerDefPostDown]])])]),a.interfaceId!=="#NEW#"?(e1(),o1("fieldset",_g,[yg,u("button",{class:"btn btn-primary me-1",type:"button",onClick:Y1(C,["prevent"])},P(m.$t("modals.interface-edit.button-apply-defaults")),1)])):$1("",!0)])])]),footer:o2(()=>[u("div",wg,[a.interfaceId!=="#NEW#"?(e1(),o1("button",{key:0,class:"btn btn-danger me-1",type:"button",onClick:Y1(h,["prevent"])},P(m.$t("general.delete")),1)):$1("",!0)]),u("button",{class:"btn btn-primary me-1",type:"button",onClick:Y1(z,["prevent"])},P(m.$t("general.save")),1),u("button",{class:"btn btn-secondary",type:"button",onClick:Y1(d,["prevent"])},P(m.$t("general.close")),1)]),_:1},8,["title","visible"]))}};Prism.languages.ini={comment:{pattern:/(^[ \f\t\v]*)[#;][^\n\r]*/m,lookbehind:!0},section:{pattern:/(^[ \f\t\v]*)\[[^\n\r\]]*\]?/m,lookbehind:!0,inside:{"section-name":{pattern:/(^\[[ \f\t\v]*)[^ \f\t\v\]]+(?:[ \f\t\v]+[^ \f\t\v\]]+)*/,lookbehind:!0,alias:"selector"},punctuation:/\[|\]/}},key:{pattern:/(^[ \f\t\v]*)[^ \f\n\r\t\v=]+(?:[ \f\t\v]+[^ \f\n\r\t\v=]+)*(?=[ \f\t\v]*=)/m,lookbehind:!0,alias:"attr-name"},value:{pattern:/(=[ \f\t\v]*)[^ \f\n\r\t\v]+(?:[ \f\t\v]+[^ \f\n\r\t\v]+)*/,lookbehind:!0,alias:"attr-value",inside:{"inner-value":{pattern:/^("|').+(?=\1$)/,lookbehind:!0}}},punctuation:/=/};const Ag={__name:"InterfaceViewModal",props:{interfaceId:String,visible:Boolean},emits:["close"],setup(c,{emit:e}){const{t}=v4(),s=o4(),l=c,a=Z1(""),n=e,r=x1(()=>s.Find(l.interfaceId)),i=x1(()=>l.visible?t("modals.interface-view.headline")+" "+r.value.Identifier:"");I2(()=>l.visible,async(d,f)=>{f===!1&&d===!0&&(console.log(r.value),await s.LoadInterfaceConfig(r.value.Identifier),a.value=s.configuration)});function o(){n("close")}return(d,f)=>(e1(),N3(x8,{title:i.value,visible:c.visible,onClose:o},{default:o2(()=>[w1(Z(wa),{language:"ini",code:a.value},null,8,["code"])]),footer:o2(()=>[u("button",{class:"btn btn-primary",type:"button",onClick:Y1(o,["prevent"])},P(d.$t("general.close")),1)]),_:1},8,["title","visible"]))}},kg={class:"page-header row"},Sg={class:"col-12 col-lg-8"},Pg={class:"col-12 col-lg-4 text-end"},Tg=u("div",{class:"form-group"},null,-1),Ig={class:"form-group"},$g={class:"input-group mb-3"},Og=["title"],xg=u("i",{class:"fa-solid fa-plus-circle"},null,-1),Ng=[xg],Dg=["disabled"],Rg={key:0,value:"nothing"},Fg=["value"],Ug={key:0,class:"row"},jg={class:"col-lg-12"},Wg={class:"mt-5"},qg={key:1,class:"row"},Kg={class:"col-lg-12"},Bg={class:"card border-secondary mb-4",style:{"min-height":"15rem"}},Gg={class:"card-header"},Yg={class:"row"},Zg={class:"col-12 col-lg-8"},Xg={key:0,class:"text-danger"},Qg=["title"],Jg={class:"col-12 col-lg-4 text-lg-end"},cM=["title"],eM=u("i",{class:"fas fa-eye"},null,-1),tM=[eM],sM=["title"],lM=u("i",{class:"fas fa-download"},null,-1),aM=[lM],nM=["title"],rM=u("i",{class:"fas fa-save"},null,-1),iM=[rM],oM=["title"],uM=u("i",{class:"fas fa-cog"},null,-1),fM=[uM],dM={class:"card-body d-flex flex-column"},hM={key:0,class:"row"},mM={class:"col-sm-6"},zM={class:"table table-sm table-borderless device-status-table"},pM={class:"col-sm-6"},vM={class:"table table-sm table-borderless device-status-table"},HM={key:1,class:"row"},VM={class:"col-sm-6"},gM={class:"table table-sm table-borderless device-status-table"},MM={class:"col-sm-6"},CM={class:"table table-sm table-borderless device-status-table"},LM={key:2,class:"row"},bM={class:"col-sm-6"},_M={class:"table table-sm table-borderless device-status-table"},yM={class:"col-sm-6"},wM={class:"table table-sm table-borderless device-status-table"},EM={key:2,class:"mt-4 row"},AM={class:"col-12 col-lg-5"},kM={key:0,class:"mt-2"},SM={key:1,class:"mt-2"},PM={class:"col-12 col-lg-4 text-lg-end"},TM={class:"form-group d-inline"},IM={class:"input-group mb-3"},$M=["placeholder"],OM=["title"],xM=u("i",{class:"fa-solid fa-search"},null,-1),NM=[xM],DM={class:"col-12 col-lg-3 text-lg-end"},RM=["title"],FM=u("i",{class:"fa fa-plus me-1"},null,-1),UM=u("i",{class:"fa fa-users"},null,-1),jM=[FM,UM],WM=["title"],qM=u("i",{class:"fa fa-plus me-1"},null,-1),KM=u("i",{class:"fa fa-user"},null,-1),BM=[qM,KM],GM={key:3,class:"mt-2 table-responsive"},YM={key:0},ZM={key:1,id:"peerTable",class:"table table-sm"},XM={scope:"col"},QM=["title"],JM=u("th",{scope:"col"},null,-1),cC={scope:"col"},eC={scope:"col"},tC={scope:"col"},sC={key:0,scope:"col"},lC={key:1,scope:"col"},aC=u("th",{scope:"col"},null,-1),nC=u("th",{scope:"row"},[u("input",{id:"flexCheckDefault",class:"form-check-input",type:"checkbox",value:""})],-1),rC={class:"text-center"},iC=["title"],oC=u("i",{class:"fa fa-circle-xmark"},null,-1),uC=[oC],fC=["title"],dC=u("i",{class:"fas fa-hourglass-end expiring-peer"},null,-1),hC=[dC],mC=["title"],zC=["title"],pC={key:0},vC={key:1},HC={key:0},VC=["title"],gC=u("i",{class:"fa-solid fa-link"},null,-1),MC=[gC],CC=["title"],LC={key:1},bC=["title"],_C=u("i",{class:"fa-solid fa-link-slash"},null,-1),yC=[_C],wC={class:"text-center"},EC=["title","onClick"],AC=u("i",{class:"fas fa-eye me-2"},null,-1),kC=[AC],SC=["title","onClick"],PC=u("i",{class:"fas fa-cog"},null,-1),TC=[PC],IC={key:4},$C={key:5,class:"mt-3"},OC={class:"row"},xC={class:"col-6"},NC={class:"pagination pagination-sm"},DC=["onClick"],RC={class:"col-6"},FC={class:"form-group row"},UC={class:"col-sm-6 col-form-label text-end",for:"paginationSelector"},jC={class:"col-sm-6"},WC=u("option",{value:"10"},"10",-1),qC=u("option",{value:"25"},"25",-1),KC=u("option",{value:"50"},"50",-1),BC=u("option",{value:"100"},"100",-1),GC={value:"999999999"},xa={__name:"InterfaceView",setup(c){const e=a5(),t=o4(),s=N8(),l=Z1(""),a=Z1(""),n=Z1(""),r=Z1(""),i=Z1("");function o(v,_){let y=v;return _&&(y+=" ("+_+")"),y}async function d(){await t.LoadInterfaceConfig(t.GetSelected.Identifier);let v=t.GetSelected.Identifier+".conf",_=t.configuration,y=document.createElement("a");y.setAttribute("href","data:text/plain;charset=utf-8,"+encodeURIComponent(_)),y.setAttribute("download",v),y.style.display="none",document.body.appendChild(y),y.click(),document.body.removeChild(y)}async function f(){try{await t.SaveConfiguration(t.GetSelected.Identifier),D1({title:"Interface configuration persisted to file",text:"The interface configuration has been written to the wg-quick configuration file.",type:"success"})}catch(v){console.log(v),D1({title:"Failed to persist interface configuration file!",text:v.toString(),type:"error"})}}return R6(async()=>{await t.LoadInterfaces(),await s.LoadPeers(void 0),await s.LoadStats(void 0)}),(v,_)=>(e1(),o1(W1,null,[w1(pp,{peerId:l.value,visible:l.value!=="",onClose:_[0]||(_[0]=y=>l.value="")},null,8,["peerId","visible"]),w1(zH,{peerId:a.value,visible:a.value!=="",onClose:_[1]||(_[1]=y=>a.value="")},null,8,["peerId","visible"]),w1(LH,{visible:n.value!=="",onClose:_[2]||(_[2]=y=>n.value="")},null,8,["visible"]),w1(Eg,{interfaceId:r.value,visible:r.value!=="",onClose:_[3]||(_[3]=y=>r.value="")},null,8,["interfaceId","visible"]),w1(Ag,{interfaceId:i.value,visible:i.value!=="",onClose:_[4]||(_[4]=y=>i.value="")},null,8,["interfaceId","visible"]),u("div",kg,[u("div",Sg,[u("h1",null,P(v.$t("interfaces.headline")),1)]),u("div",Pg,[Tg,u("div",Ig,[u("div",$g,[u("button",{class:"input-group-text btn btn-primary",title:v.$t("interfaces.button-add-interface"),onClick:_[5]||(_[5]=Y1(y=>r.value="#NEW#",["prevent"]))},Ng,8,Og),I1(u("select",{"onUpdate:modelValue":_[6]||(_[6]=y=>Z(t).selected=y),disabled:Z(t).Count===0,class:"form-select",onChange:_[7]||(_[7]=y=>Z(s).LoadPeers())},[Z(t).Count===0?(e1(),o1("option",Rg,P(v.$t("interfaces.no-interface.default-selection")),1)):$1("",!0),(e1(!0),o1(W1,null,C2(Z(t).All,y=>(e1(),o1("option",{key:y.Identifier,value:y.Identifier},P(o(y.Identifier,y.DisplayName)),9,Fg))),128))],40,Dg),[[$7,Z(t).selected]])])])])]),Z(t).Count===0?(e1(),o1("div",Ug,[u("div",jg,[u("div",Wg,[u("h4",null,P(v.$t("interfaces.no-interface.headline")),1),u("p",null,P(v.$t("interfaces.no-interface.abstract")),1)])])])):$1("",!0),Z(t).Count!==0?(e1(),o1("div",qg,[u("div",Kg,[u("div",Bg,[u("div",Gg,[u("div",Yg,[u("div",Zg,[n2(P(v.$t("interfaces.interface.headline"))+" ",1),u("strong",null,P(Z(t).GetSelected.Identifier),1),n2(" ("+P(Z(t).GetSelected.Mode)+" "+P(v.$t("interfaces.interface.mode"))+") ",1),Z(t).GetSelected.Disabled?(e1(),o1("span",Xg,[u("i",{class:"fa fa-circle-xmark",title:Z(t).GetSelected.DisabledReason},null,8,Qg)])):$1("",!0)]),u("div",Jg,[u("a",{class:"btn-link",href:"#",title:v.$t("interfaces.interface.button-show-config"),onClick:_[8]||(_[8]=Y1(y=>i.value=Z(t).GetSelected.Identifier,["prevent"]))},tM,8,cM),u("a",{class:"ms-5 btn-link",href:"#",title:v.$t("interfaces.interface.button-download-config"),onClick:Y1(d,["prevent"])},aM,8,sM),Z(e).Setting("PersistentConfigSupported")?(e1(),o1("a",{key:0,class:"ms-5 btn-link",href:"#",title:v.$t("interfaces.interface.button-store-config"),onClick:Y1(f,["prevent"])},iM,8,nM)):$1("",!0),u("a",{class:"ms-5 btn-link",href:"#",title:v.$t("interfaces.interface.button-edit"),onClick:_[9]||(_[9]=Y1(y=>r.value=Z(t).GetSelected.Identifier,["prevent"]))},fM,8,oM)])])]),u("div",dM,[Z(t).GetSelected.Mode==="server"?(e1(),o1("div",hM,[u("div",mM,[u("table",zM,[u("tbody",null,[u("tr",null,[u("td",null,P(v.$t("interfaces.interface.key"))+":",1),u("td",null,P(Z(t).GetSelected.PublicKey),1)]),u("tr",null,[u("td",null,P(v.$t("interfaces.interface.endpoint"))+":",1),u("td",null,P(Z(t).GetSelected.PeerDefEndpoint),1)]),u("tr",null,[u("td",null,P(v.$t("interfaces.interface.port"))+":",1),u("td",null,P(Z(t).GetSelected.ListenPort),1)]),u("tr",null,[u("td",null,P(v.$t("interfaces.interface.peers"))+":",1),u("td",null,P(Z(t).GetSelected.EnabledPeers),1)]),u("tr",null,[u("td",null,P(v.$t("interfaces.interface.total-peers"))+":",1),u("td",null,P(Z(t).GetSelected.TotalPeers),1)])])])]),u("div",pM,[u("table",vM,[u("tbody",null,[u("tr",null,[u("td",null,P(v.$t("interfaces.interface.ip"))+":",1),u("td",null,[(e1(!0),o1(W1,null,C2(Z(t).GetSelected.Addresses,y=>(e1(),o1("span",{class:"badge bg-light me-1",key:y},P(y),1))),128))])]),u("tr",null,[u("td",null,P(v.$t("interfaces.interface.dns"))+":",1),u("td",null,[(e1(!0),o1(W1,null,C2(Z(t).GetSelected.Dns,y=>(e1(),o1("span",{class:"badge bg-light me-1",key:y},P(y),1))),128))])]),u("tr",null,[u("td",null,P(v.$t("interfaces.interface.mtu"))+":",1),u("td",null,P(Z(t).GetSelected.Mtu),1)]),u("tr",null,[u("td",null,P(v.$t("interfaces.interface.default-keep-alive"))+":",1),u("td",null,P(Z(t).GetSelected.PeerDefPersistentKeepalive),1)]),u("tr",null,[u("td",null,P(v.$t("interfaces.interface.default-allowed-ip"))+":",1),u("td",null,[(e1(!0),o1(W1,null,C2(Z(t).GetSelected.PeerDefAllowedIPs,y=>(e1(),o1("span",{class:"badge bg-light me-1",key:y},P(y),1))),128))])])])])])])):$1("",!0),Z(t).GetSelected.Mode==="client"?(e1(),o1("div",HM,[u("div",VM,[u("table",gM,[u("tbody",null,[u("tr",null,[u("td",null,P(v.$t("interfaces.interface.key"))+":",1),u("td",null,P(Z(t).GetSelected.PublicKey),1)]),u("tr",null,[u("td",null,P(v.$t("interfaces.interface.endpoints"))+":",1),u("td",null,P(Z(t).GetSelected.EnabledPeers),1)]),u("tr",null,[u("td",null,P(v.$t("interfaces.interface.total-endpoints"))+":",1),u("td",null,P(Z(t).GetSelected.TotalPeers),1)])])])]),u("div",MM,[u("table",CM,[u("tbody",null,[u("tr",null,[u("td",null,P(v.$t("interfaces.interface.ip"))+":",1),u("td",null,[(e1(!0),o1(W1,null,C2(Z(t).GetSelected.Addresses,y=>(e1(),o1("span",{class:"badge bg-light me-1",key:y},P(y),1))),128))])]),u("tr",null,[u("td",null,P(v.$t("interfaces.interface.dns"))+":",1),u("td",null,[(e1(!0),o1(W1,null,C2(Z(t).GetSelected.Dns,y=>(e1(),o1("span",{class:"badge bg-light me-1",key:y},P(y),1))),128))])]),u("tr",null,[u("td",null,P(v.$t("interfaces.interface.mtu"))+":",1),u("td",null,P(Z(t).GetSelected.Mtu),1)])])])])])):$1("",!0),Z(t).GetSelected.Mode==="any"?(e1(),o1("div",LM,[u("div",bM,[u("table",_M,[u("tbody",null,[u("tr",null,[u("td",null,P(v.$t("interfaces.interface.key"))+":",1),u("td",null,P(Z(t).GetSelected.PublicKey),1)]),u("tr",null,[u("td",null,P(v.$t("interfaces.interface.endpoint"))+":",1),u("td",null,P(Z(t).GetSelected.PeerDefEndpoint),1)]),u("tr",null,[u("td",null,P(v.$t("interfaces.interface.port"))+":",1),u("td",null,P(Z(t).GetSelected.ListenPort),1)]),u("tr",null,[u("td",null,P(v.$t("interfaces.interface.peers"))+":",1),u("td",null,P(Z(t).GetSelected.EnabledPeers),1)]),u("tr",null,[u("td",null,P(v.$t("interfaces.interface.total-peers"))+":",1),u("td",null,P(Z(t).GetSelected.TotalPeers),1)])])])]),u("div",yM,[u("table",wM,[u("tbody",null,[u("tr",null,[u("td",null,P(v.$t("interfaces.interface.ip"))+":",1),u("td",null,[(e1(!0),o1(W1,null,C2(Z(t).GetSelected.Addresses,y=>(e1(),o1("span",{class:"badge bg-light me-1",key:y},P(y),1))),128))])]),u("tr",null,[u("td",null,P(v.$t("interfaces.interface.default-allowed-ip"))+":",1),u("td",null,[(e1(!0),o1(W1,null,C2(Z(t).GetSelected.PeerDefAllowedIPs,y=>(e1(),o1("span",{class:"badge bg-light me-1",key:y},P(y),1))),128))])]),u("tr",null,[u("td",null,P(v.$t("interfaces.interface.dns"))+":",1),u("td",null,[(e1(!0),o1(W1,null,C2(Z(t).GetSelected.PeerDefDns,y=>(e1(),o1("span",{class:"badge bg-light me-1",key:y},P(y),1))),128))])]),u("tr",null,[u("td",null,P(v.$t("interfaces.interface.mtu"))+":",1),u("td",null,P(Z(t).GetSelected.Mtu),1)]),u("tr",null,[u("td",null,P(v.$t("interfaces.interface.default-keep-alive"))+":",1),u("td",null,P(Z(t).GetSelected.PeerDefPersistentKeepalive),1)])])])])])):$1("",!0)])])])])):$1("",!0),Z(t).Count!==0?(e1(),o1("div",EM,[u("div",AM,[Z(t).GetSelected.Mode==="server"?(e1(),o1("h2",kM,P(v.$t("interfaces.headline-peers")),1)):(e1(),o1("h2",SM,P(v.$t("interfaces.headline-endpoints")),1))]),u("div",PM,[u("div",TM,[u("div",IM,[I1(u("input",{"onUpdate:modelValue":_[10]||(_[10]=y=>Z(s).filter=y),class:"form-control",placeholder:v.$t("general.search.placeholder"),type:"text",onKeyup:_[11]||(_[11]=(...y)=>Z(s).afterPageSizeChange&&Z(s).afterPageSizeChange(...y))},null,40,$M),[[U1,Z(s).filter]]),u("button",{class:"input-group-text btn btn-primary",title:v.$t("general.search.button")},NM,8,OM)])])]),u("div",DM,[u("a",{class:"btn btn-primary ms-2",href:"#",title:v.$t("interfaces.button-add-peers"),onClick:_[12]||(_[12]=Y1(y=>n.value="#NEW#",["prevent"]))},jM,8,RM),u("a",{class:"btn btn-primary ms-2",href:"#",title:v.$t("interfaces.button-add-peer"),onClick:_[13]||(_[13]=Y1(y=>a.value="#NEW#",["prevent"]))},BM,8,WM)])])):$1("",!0),Z(t).Count!==0?(e1(),o1("div",GM,[Z(s).Count===0?(e1(),o1("div",YM,[u("h4",null,P(v.$t("interfaces.no-peer.headline")),1),u("p",null,P(v.$t("interfaces.no-peer.abstract")),1)])):$1("",!0),Z(s).Count!==0?(e1(),o1("table",ZM,[u("thead",null,[u("tr",null,[u("th",XM,[u("input",{id:"flexCheckDefault",class:"form-check-input",title:v.$t("general.select-all"),type:"checkbox",value:""},null,8,QM)]),JM,u("th",cC,P(v.$t("interfaces.table-heading.name")),1),u("th",eC,P(v.$t("interfaces.table-heading.user")),1),u("th",tC,P(v.$t("interfaces.table-heading.ip")),1),Z(t).GetSelected.Mode==="client"?(e1(),o1("th",sC,P(v.$t("interfaces.table-heading.endpoint")),1)):$1("",!0),Z(s).hasStatistics?(e1(),o1("th",lC,P(v.$t("interfaces.table-heading.status")),1)):$1("",!0),aC])]),u("tbody",null,[(e1(!0),o1(W1,null,C2(Z(s).FilteredAndPaged,y=>(e1(),o1("tr",{key:y.Identifier},[nC,u("td",rC,[y.Disabled?(e1(),o1("span",{key:0,class:"text-danger",title:v.$t("interfaces.peer-disabled")+" "+y.DisabledReason},uC,8,iC)):$1("",!0),!y.Disabled&&y.ExpiresAt?(e1(),o1("span",{key:1,class:"text-warning",title:v.$t("interfaces.peer-expiring")+" "+y.ExpiresAt},hC,8,fC)):$1("",!0)]),u("td",null,[y.DisplayName?(e1(),o1("span",{key:0,title:y.Identifier},P(y.DisplayName),9,mC)):(e1(),o1("span",{key:1,title:y.Identifier},P(v.$filters.truncate(y.Identifier,10)),9,zC))]),u("td",null,P(y.UserIdentifier),1),u("td",null,[(e1(!0),o1(W1,null,C2(y.Addresses,T=>(e1(),o1("span",{key:T,class:"badge bg-light me-1"},P(T),1))),128))]),Z(t).GetSelected.Mode==="client"?(e1(),o1("td",pC,P(y.Endpoint.Value),1)):$1("",!0),Z(s).hasStatistics?(e1(),o1("td",vC,[Z(s).Statistics(y.Identifier).IsConnected?(e1(),o1("div",HC,[u("span",{class:"badge rounded-pill bg-success",title:v.$t("interfaces.peer-connected")},MC,8,VC),n2(),u("span",{title:v.$t("interfaces.peer-handshake")+" "+Z(s).Statistics(y.Identifier).LastHandshake},P(v.$t("interfaces.peer-connected")),9,CC)])):(e1(),o1("div",LC,[u("span",{class:"badge rounded-pill bg-light",title:v.$t("interfaces.peer-not-connected")},yC,8,bC)]))])):$1("",!0),u("td",wC,[u("a",{href:"#",title:v.$t("interfaces.button-show-peer"),onClick:Y1(T=>l.value=y.Identifier,["prevent"])},kC,8,EC),u("a",{href:"#",title:v.$t("interfaces.button-edit-peer"),onClick:Y1(T=>a.value=y.Identifier,["prevent"])},TC,8,SC)])]))),128))])])):$1("",!0)])):$1("",!0),Z(t).Count!==0?(e1(),o1("hr",IC)):$1("",!0),Z(t).Count!==0?(e1(),o1("div",$C,[u("div",OC,[u("div",xC,[u("ul",NC,[u("li",{class:V2([{disabled:Z(s).pageOffset===0},"page-item"])},[u("a",{class:"page-link",onClick:_[14]||(_[14]=(...y)=>Z(s).previousPage&&Z(s).previousPage(...y))},"«")],2),(e1(!0),o1(W1,null,C2(Z(s).pages,y=>(e1(),o1("li",{key:y,class:V2([{active:Z(s).currentPage===y},"page-item"])},[u("a",{class:"page-link",onClick:T=>Z(s).gotoPage(y)},P(y),9,DC)],2))),128)),u("li",{class:V2([{disabled:!Z(s).hasNextPage},"page-item"])},[u("a",{class:"page-link",onClick:_[15]||(_[15]=(...y)=>Z(s).nextPage&&Z(s).nextPage(...y))},"»")],2)])]),u("div",RC,[u("div",FC,[u("label",UC,P(v.$t("general.pagination.size"))+":",1),u("div",jC,[I1(u("select",{"onUpdate:modelValue":_[16]||(_[16]=y=>Z(s).pageSize=y),class:"form-select",onClick:_[17]||(_[17]=y=>Z(s).afterPageSizeChange())},[WC,qC,KC,BC,u("option",GC,P(v.$t("general.pagination.all")),1)],512),[[$7,Z(s).pageSize,void 0,{number:!0}]])])])])])])):$1("",!0)],64))}},YC=Object.freeze(Object.defineProperty({__proto__:null,default:xa},Symbol.toStringTag,{value:"Module"})),g6=Rf({history:sf(),routes:[{path:"/",name:"home",component:Ud},{path:"/login",name:"login",component:vh},{path:"/interface",name:"interface",component:xa},{path:"/interfaces",name:"interfaces",component:()=>J5(()=>Promise.resolve().then(()=>YC),void 0)},{path:"/users",name:"users",component:()=>J5(()=>import("./UserView-9EPRcOWe.js"),__vite__mapDeps([]))},{path:"/profile",name:"profile",component:()=>J5(()=>import("./ProfileView-ElP3kD7E.js"),__vite__mapDeps([]))}],linkActiveClass:"active",linkExactActiveClass:"exact-active"});g6.beforeEach(async c=>{const e=P3();if("wgLoginState"in c.query&&!e.IsAuthenticated){const l=c.query.wgLoginState,a=e.ReturnUrl;if(console.log("Oauth login callback:",l),l==="success")try{const n=await e.LoadSession();return console.log("Oauth login completed for UID:",n),console.log("Continuing to:",a),D1({title:"Logged in",text:"Authentication suceeded!",type:"success"}),e.ResetReturnUrl(),a}catch{return D1({title:"Login failed!",text:"Oauth session is invalid!",type:"error"}),"/login"}else return D1({title:"Login failed!",text:"Authentication via Oauth failed!",type:"error"}),"/login"}if(!["/","/login"].includes(c.path)&&!e.IsAuthenticated)return e.SetReturnUrl(c.fullPath),"/login"});const P3=F6({id:"auth",state:()=>({user:JSON.parse(localStorage.getItem("user")),providers:[],returnUrl:localStorage.getItem("returnUrl")}),getters:{UserIdentifier:c=>{var e;return((e=c.user)==null?void 0:e.Identifier)||"unknown"},User:c=>c.user,LoginProviders:c=>c.providers,IsAuthenticated:c=>c.user!=null,IsAdmin:c=>{var e;return((e=c.user)==null?void 0:e.IsAdmin)||!1},ReturnUrl:c=>c.returnUrl||"/"},actions:{SetReturnUrl(c){this.returnUrl=c,localStorage.setItem("returnUrl",c)},ResetReturnUrl(){this.returnUrl=null,localStorage.removeItem("returnUrl")},async LoadProviders(){c2.get("/auth/providers").then(c=>this.providers=c).catch(c=>{this.providers=[],console.log("Failed to load auth providers: ",c),D1({title:"Backend Connection Failure",text:"Failed to load external authentication providers!"})})},async LoadSession(){return c2.get("/auth/session").then(c=>c.LoggedIn===!0?(this.ResetReturnUrl(),this.setUserInfo(c),c.UserIdentifier):(this.setUserInfo(null),Promise.reject(new Error("session not authenticated")))).catch(c=>(this.setUserInfo(null),Promise.reject(c)))},async Login(c,e){return c2.post("/auth/login",{username:c,password:e}).then(t=>(this.ResetReturnUrl(),this.setUserInfo(t),t.Identifier)).catch(t=>(console.log("Login failed:",t),this.setUserInfo(null),Promise.reject(new Error("login failed"))))},async Logout(){this.setUserInfo(null),this.ResetReturnUrl();try{await c2.post("/auth/logout")}catch(c){console.log("Logout request failed:",c)}D1({title:"Logged Out",text:"Logout successful!",type:"warn"}),await g6.push("/login")},setUserInfo(c){c?("UserIdentifier"in c?this.user={Identifier:c.UserIdentifier,Firstname:c.UserFirstname,Lastname:c.UserLastname,Email:c.UserEmail,IsAdmin:c.IsAdmin}:this.user={Identifier:c.Identifier,Firstname:c.Firstname,Lastname:c.Lastname,Email:c.Email,IsAdmin:c.IsAdmin},localStorage.setItem("user",JSON.stringify(this.user))):(this.user=null,localStorage.removeItem("user"))}}}),ZC={class:"navbar navbar-expand-lg navbar-dark bg-primary"},XC={class:"container-fluid"},QC=u("a",{class:"navbar-brand",href:"/"},[u("img",{alt:"WireGuard Portal",src:Nu})],-1),JC=u("button",{"aria-controls":"navbarColor01","aria-expanded":"false","aria-label":"Toggle navigation",class:"navbar-toggler","data-bs-target":"#navbarTop","data-bs-toggle":"collapse",type:"button"},[u("span",{class:"navbar-toggler-icon"})],-1),cL={id:"navbarTop",class:"collapse navbar-collapse"},eL={class:"navbar-nav me-auto"},tL={class:"nav-item"},sL={key:0,class:"nav-item"},lL={key:1,class:"nav-item"},aL={class:"navbar-nav d-flex justify-content-end"},nL={key:0,class:"nav-item dropdown"},rL={"aria-expanded":"false","aria-haspopup":"true",class:"nav-link dropdown-toggle","data-bs-toggle":"dropdown",href:"#",role:"button"},iL={class:"dropdown-menu"},oL=u("i",{class:"fas fa-user"},null,-1),uL=u("div",{class:"dropdown-divider"},null,-1),fL=u("i",{class:"fas fa-sign-out-alt"},null,-1),dL={key:1,class:"nav-item"},hL=u("i",{class:"fas fa-sign-in-alt fa-sm fa-fw me-2"},null,-1),mL={class:"container mt-5 flex-shrink-0"},zL={class:"page-footer mt-auto"},pL={class:"container mt-5"},vL={class:"row align-items-center"},HL={class:"col-6"},VL={key:0},gL={class:"col-6 text-end"},ML=["aria-label"],CL={class:"btn-group",role:"group"},LL={"aria-expanded":"false","aria-haspopup":"true",class:"btn btn btn-secondary pe-0","data-bs-toggle":"dropdown",type:"button"},bL={"aria-labelledby":"btnGroupDrop3",class:"dropdown-menu",style:{}},_L=u("span",{class:"fi fi-us"},null,-1),yL=u("span",{class:"fi fi-de"},null,-1),wL=u("span",{class:"fi fi-ru"},null,-1),EL={__name:"App",setup(c){const e=F4().appContext.config.globalProperties,t=P3(),s=Yl(),l=a5();R6(async()=>{console.log("Starting WireGuard Portal frontend..."),await s.LoadSecurityProperties(),await t.LoadProviders();let d=t.IsAuthenticated;try{await t.LoadSession(),await l.LoadSettings(),console.log("WireGuard Portal session is valid")}catch{d&&(console.log("WireGuard Portal invalid - logging out"),await t.Logout())}console.log("WireGuard Portal ready!")});const a=function(d){e.$i18n.locale!==d&&(localStorage.setItem("wgLang",d),e.$i18n.locale=d)},n=x1(()=>{let d=e.$i18n.locale.toLowerCase();return d==="en"&&(d="us"),"fi-"+d}),r=Z1(WGPORTAL_SITE_COMPANY_NAME),i=Z1(WGPORTAL_VERSION),o=Z1(new Date().getFullYear());return(d,f)=>{const v=b9("notifications");return e1(),o1(W1,null,[w1(v,{duration:3e3,"ignore-duplicates":!0,position:"top right"}),u("nav",ZC,[u("div",XC,[QC,JC,u("div",cL,[u("ul",eL,[u("li",tL,[w1(Z(E3),{to:{name:"home"},class:"nav-link"},{default:o2(()=>[n2(P(d.$t("menu.home")),1)]),_:1})]),Z(t).IsAuthenticated&&Z(t).IsAdmin?(e1(),o1("li",sL,[w1(Z(E3),{to:{name:"interfaces"},class:"nav-link"},{default:o2(()=>[n2(P(d.$t("menu.interfaces")),1)]),_:1})])):$1("",!0),Z(t).IsAuthenticated&&Z(t).IsAdmin?(e1(),o1("li",lL,[w1(Z(E3),{to:{name:"users"},class:"nav-link"},{default:o2(()=>[n2(P(d.$t("menu.users")),1)]),_:1})])):$1("",!0)]),u("div",aL,[Z(t).IsAuthenticated?(e1(),o1("div",nL,[u("a",rL,P(Z(t).User.Firstname)+" "+P(Z(t).User.Lastname),1),u("div",iL,[w1(Z(E3),{to:{name:"profile"},class:"dropdown-item"},{default:o2(()=>[oL,n2(" "+P(d.$t("menu.profile")),1)]),_:1}),uL,u("a",{class:"dropdown-item",href:"#",onClick:f[0]||(f[0]=Y1((..._)=>Z(t).Logout&&Z(t).Logout(..._),["prevent"]))},[fL,n2(" "+P(d.$t("menu.logout")),1)])])])):$1("",!0),Z(t).IsAuthenticated?$1("",!0):(e1(),o1("div",dL,[w1(Z(E3),{to:{name:"login"},class:"nav-link"},{default:o2(()=>[hL,n2(P(d.$t("menu.login")),1)]),_:1})]))])])])]),u("div",mL,[w1(Z(Bl))]),u("footer",zL,[u("div",pL,[u("div",vL,[u("div",HL,[n2("Copyright © "+P(r.value)+" "+P(o.value)+" ",1),Z(t).IsAuthenticated?(e1(),o1("span",VL," - version "+P(i.value),1)):$1("",!0)]),u("div",gL,[u("div",{"aria-label":d.$t("menu.lang"),class:"btn-group",role:"group"},[u("div",CL,[u("button",LL,[u("span",{class:V2([n.value,"fi"])},null,2)]),u("div",bL,[u("a",{class:"dropdown-item",href:"#",onClick:f[1]||(f[1]=Y1(_=>a("en"),["prevent"]))},[_L,n2(" English ")]),u("a",{class:"dropdown-item",href:"#",onClick:f[2]||(f[2]=Y1(_=>a("de"),["prevent"]))},[yL,n2(" Deutsch ")]),u("a",{class:"dropdown-item",href:"#",onClick:f[3]||(f[3]=Y1(_=>a("ru"),["prevent"]))},[wL,n2(" Русский ")])])])],8,ML)])])])])],64)}}},AL={pagination:{size:"Anzahl an Elementen",all:"Alle (langsam)"},search:{placeholder:"Suche...",button:"Suchen"},"select-all":"Alle auswählen",yes:"Ja",no:"Nein",cancel:"Abbrechen",close:"Schließen",save:"Speichern",delete:"Löschen"},kL={headline:"Bitte melden Sie sich an",username:{label:"Benutzername",placeholder:"Bitte geben Sie Ihren Benutzernamen ein"},password:{label:"Kennwort",placeholder:"Bitte geben Sie Ihr Passwort ein"},button:"Anmelden"},SL={home:"Home",interfaces:"Schnittstellen",users:"Benutzer",lang:"Sprache ändern",profile:"Mein Profil",login:"Anmelden",logout:"Abmelden"},PL={headline:"WireGuard® VPN Portal","info-headline":"Mehr Informationen",abstract:"WireGuard® ist ein extrem einfaches, aber dennoch schnelles und modernes VPN, das modernste Kryptographie nutzt. Es zielt darauf ab, schneller, einfacher, schlanker und nützlicher als IPsec zu sein, während es die massiven Kopfschmerzen vermeidet. Es soll wesentlich leistungsfähiger sein als OpenVPN.",installation:{"box-header":"WireGuard Installation",headline:"Installation",content:"Die Installationsanweisungen für die Client-Software finden Sie auf der offiziellen WireGuard-Website.",btn:"Anleitung öffnen"},"about-wg":{"box-header":"Über WireGuard",headline:"Über",content:"WireGuard® ist ein extrem einfaches, aber schnelles und modernes VPN, das modernste Kryptographie verwendet.",button:"Details"},"about-portal":{"box-header":"Über WireGuard Portal",headline:"WireGuard Portal",content:"WireGuard Portal ist ein einfaches, webbasiertes Konfigurationsportal für WireGuard.",button:"Details"},profiles:{headline:"VPN Profile",abstract:"Über Ihr Benutzerprofil können Sie auf Ihre persönlichen VPN-Konfigurationen zugreifen und diese herunterladen.",content:"Um alle Ihre konfigurierten Profile zu finden, klicken Sie auf die Schaltfläche unten.",button:"Mein Profil öffnen"},admin:{headline:"Verwaltungsbereich",abstract:"Im Administrationsbereich können Sie VPN-Zugänge und die Serverschnittstelle sowie die Benutzer, die sich am VPN-Portal anmelden dürfen, verwalten.",content:"","button-admin":"Schnittstellenverwaltung","button-user":"Benutzerverwaltung"}},TL={headline:"Schnittstellenverwaltung","headline-peers":"Current VPN Peers","headline-endpoints":"Current Endpoints","no-interface":{"default-selection":"No Interface available",headline:"No interfaces found...",abstract:"Click the plus button above to create a new WireGuard interface."},"no-peer":{headline:"No peers available",abstract:"Currently, there are no peers available for the selected WireGuard interface."},"table-heading":{name:"Name",user:"User",ip:"IP's",endpoint:"Endpoint",status:"Status"},interface:{headline:"Interface status for",mode:"mode",key:"Public Key",endpoint:"Public Endpoint",port:"Listening Port",peers:"Enabled Peers","total-peers":"Total Peers",endpoints:"Enabled Endpoints","total-endpoints":"Total Endpoints",ip:"IP Address","default-allowed-ip":"Default allowed IPs",dns:"DNS Servers",mtu:"MTU","default-keep-alive":"Default Keepalive Interval","button-show-config":"Show configuration","button-download-config":"Download configuration","button-store-config":"Store configuration for wg-quick","button-edit":"Edit interface"},"button-add-interface":"Add Interface","button-add-peer":"Add Peer","button-add-peers":"Add Multiple Peers","button-show-peer":"Show Peer","button-edit-peer":"Edit Peer","peer-disabled":"Peer is disabled, reason:","peer-expiring":"Peer is expiring at","peer-connected":"Connected","peer-not-connected":"Not Connected","peer-handshake":"Last handshake:"},IL={headline:"Benutzerverwaltung","table-heading":{id:"ID",email:"E-Mail",firstname:"Firstname",lastname:"Lastname",source:"Source",peers:"Peers",admin:"Admin"},"no-user":{headline:"No users available",abstract:"Currently, there are no users registered with WireGuard Portal."},"button-add-user":"Add User","button-show-user":"Show User","button-edit-user":"Edit User","user-disabled":"User is disabled, reason:","user-locked":"Account is locked, reason:",admin:"User has administrator privileges","no-admin":"User has no administrator privileges"},$L={headline:"Meine VPN-Konfigurationen","table-heading":{name:"Name",ip:"IP's",stats:"Status",interface:"Server Interface"},"no-peer":{headline:"No peers available",abstract:"Currently, there are no peers associated with your user profile."},"peer-connected":"Connected","button-add-peer":"Add Peer","button-show-peer":"Show Peer","button-edit-peer":"Edit Peer"},OL={"user-view":{headline:"User Account:","tab-user":"Information","tab-peers":"Peers","headline-info":"User Information:","headline-notes":"Notes:",email:"E-Mail",firstname:"Firstname",lastname:"Lastname",phone:"Phone number",department:"Department",disabled:"Account Disabled",locked:"Account Locked","no-peers":"User has no associated peers.",peers:{name:"Name",interface:"Interface",ip:"IP's"}},"user-edit":{"headline-edit":"Edit user:","headline-new":"New user","header-general":"General","header-personal":"User Information","header-notes":"Notes","header-state":"State",identifier:{label:"Identifier",placeholder:"The unique user identifier"},source:{label:"Source",placeholder:"The user source"},password:{label:"Password",placeholder:"A super secret password",description:"Leave this field blank to keep current password."},email:{label:"Email",placeholder:"The email address"},phone:{label:"Phone",placeholder:"The phone number"},department:{label:"Department",placeholder:"The department"},firstname:{label:"Firstname",placeholder:"Firstname"},lastname:{label:"Lastname",placeholder:"Lastname"},notes:{label:"Notes",placeholder:""},disabled:{label:"Disabled (no WireGuard connection and no login possible)"},locked:{label:"Locked (no login possible, WireGuard connections still work)"},admin:{label:"Is Admin"}},"interface-view":{headline:"Config for Interface:"},"interface-edit":{"headline-edit":"Edit Interface:","headline-new":"New Interface","tab-interface":"Interface","tab-peerdef":"Peer Defaults","header-general":"General","header-network":"Network","header-crypto":"Cryptography","header-hooks":"Interface Hooks","header-peer-hooks":"Hooks","header-state":"State",identifier:{label:"Identifier",placeholder:"The unique interface identifier"},mode:{label:"Interface Mode",server:"Server Mode",client:"Client Mode",any:"Unknown Mode"},"display-name":{label:"Display Name",placeholder:"The descriptive name for the interface"},"private-key":{label:"Private Key",placeholder:"The private key"},"public-key":{label:"Public Key",placeholder:"The public key"},ip:{label:"IP Addresses",placeholder:"IP Addresses (CIDR format)"},"listen-port":{label:"Listen Port",placeholder:"The listening port"},dns:{label:"DNS Server",placeholder:"The DNS servers that should be used"},"dns-search":{label:"DNS Search Domains",placeholder:"DNS search prefixes"},mtu:{label:"MTU",placeholder:"The interface MTU (0 = keep default)"},"firewall-mark":{label:"Firewall Mark",placeholder:"Firewall mark that is applied to outgoing traffic. (0 = automatic)"},"routing-table":{label:"Routing Table",placeholder:"The routing table ID",description:"Special cases: off = do not manage routes, 0 = automatic"},"pre-up":{label:"Pre-Up",placeholder:"One or multiple bash commands separated by ;"},"post-up":{label:"Post-Up",placeholder:"One or multiple bash commands separated by ;"},"pre-down":{label:"Pre-Down",placeholder:"One or multiple bash commands separated by ;"},"post-down":{label:"Post-Down",placeholder:"One or multiple bash commands separated by ;"},disabled:{label:"Interface Disabled"},"save-config":{label:"Automatically save wg-quick config"},defaults:{endpoint:{label:"Endpoint Address",placeholder:"Endpoint Address",description:"The endpoint address that peers will connect to."},networks:{label:"IP Networks",placeholder:"Network Addresses",description:"Peers will get IP addresses from those subnets."},"allowed-ip":{label:"Allowed IP Addresses",placeholder:"Default Allowed IP Addresses"},mtu:{label:"MTU",placeholder:"The client MTU (0 = keep default)"},"keep-alive":{label:"Keep Alive Interval",placeholder:"Persistent Keepalive (0 = default)"}},"button-apply-defaults":"Apply Peer Defaults"},"peer-view":{"headline-peer":"Peer:","headline-endpoint":"Endpoint:","section-info":"Peer Information","section-status":"Current Status","section-config":"Configuration",identifier:"Identifier",ip:"IP Addresses",user:"Associated User",notes:"Notes","expiry-status":"Expires At","disabled-status":"Disabled At",traffic:"Traffic","connection-status":"Connection Stats",upload:"Uploaded Bytes (from Server to Peer)",download:"Downloaded Bytes (from Peer to Server)",pingable:"Is Pingable",handshake:"Last Handshake","connected-since":"Connected since",endpoint:"Endpoint","button-download":"Download configuration","button-email":"Send configuration via E-Mail"},"peer-edit":{"headline-edit-peer":"Edit peer:","headline-edit-endpoint":"Edit endpoint:","headline-new-peer":"Create peer","headline-new-endpoint":"Create endpoint","header-general":"General","header-network":"Network","header-crypto":"Cryptography","header-hooks":"Hooks (Executed on Peer)","header-state":"State","display-name":{label:"Display Name",placeholder:"The descriptive name for the peer"},"linked-user":{label:"Linked User",placeholder:"The user account which owns this peer"},"private-key":{label:"Private Key",placeholder:"The private key"},"public-key":{label:"Public Key",placeholder:"The public key"},"preshared-key":{label:"Preshared Key",placeholder:"Optional pre-shared key"},"endpoint-public-key":{label:"Endpoint public Key",placeholder:"The public key of the remote endpoint"},endpoint:{label:"Endpoint Address",placeholder:"The address of the remote endpoint"},ip:{label:"IP Addresses",placeholder:"IP Addresses (CIDR format)"},"allowed-ip":{label:"Allowed IP Addresses",placeholder:"Allowed IP Addresses (CIDR format)"},"extra-allowed-ip":{label:"Extra allowed IP Addresses",placeholder:"Extra allowed IP's (Server Sided)",description:"Those IP's will be added on the remote WireGuard interface as allowed IP's."},dns:{label:"DNS Server",placeholder:"The DNS servers that should be used"},"dns-search":{label:"DNS Search Domains",placeholder:"DNS search prefixes"},"keep-alive":{label:"Keep Alive Interval",placeholder:"Persistent Keepalive (0 = default)"},mtu:{label:"MTU",placeholder:"The client MTU (0 = keep default)"},"pre-up":{label:"Pre-Up",placeholder:"One or multiple bash commands separated by ;"},"post-up":{label:"Post-Up",placeholder:"One or multiple bash commands separated by ;"},"pre-down":{label:"Pre-Down",placeholder:"One or multiple bash commands separated by ;"},"post-down":{label:"Post-Down",placeholder:"One or multiple bash commands separated by ;"},disabled:{label:"Peer Disabled"},"ignore-global":{label:"Ignore global settings"},"expires-at":{label:"Expiry date"}},"peer-multi-create":{"headline-peer":"Create multiple peers","headline-endpoint":"Create multiple endpoints",identifiers:{label:"User Identifiers",placeholder:"User Identifiers",description:"A user identifier (the username) for which a peer should be created."},prefix:{"headline-peer":"Peer:","headline-endpoint":"Endpoint:",label:"Display Name Prefix",placeholder:"The prefix",description:"A prefix that is added to the peers display name."}}},xL={general:AL,login:kL,menu:SL,home:PL,interfaces:TL,users:IL,profile:$L,modals:OL},NL={pagination:{size:"Количество элементов",all:"Все (медленно)"},search:{placeholder:"Поиск...",button:"Поиск"},"select-all":"Выбрать все",yes:"Да",no:"Нет",cancel:"Отмена",close:"Закрыть",save:"Сохранить",delete:"Удалить"},DL={headline:"Пожалуйста, войдите в систему",username:{label:"Имя пользователя",placeholder:"Пожалуйста, введите ваше имя пользователя"},password:{label:"Пароль",placeholder:"Пожалуйста, введите ваш пароль"},button:"Войти"},RL={home:"Главная",interfaces:"Интерфейсы",users:"Пользователи",lang:"Сменить язык",profile:"Мой профиль",login:"Вход",logout:"Выход"},FL={headline:"Портал VPN WireGuard®","info-headline":"Дополнительная информация",abstract:"WireGuard® - это чрезвычайно простой, но быстрый и современный VPN, использующий передовую криптографию. Он стремится быть быстрее, проще, компактнее и полезнее, чем IPsec, избегая при этом значительных сложностей. Он предназначен для значительного повышения производительности по сравнению с OpenVPN.",installation:{"box-header":"Установка WireGuard",headline:"Установка",content:"Инструкции по установке клиентского программного обеспечения можно найти на официальном сайте WireGuard.",btn:"Открыть инструкции",button:"Открыть инструкции"},"about-wg":{"box-header":"О WireGuard",headline:"О программе",content:"WireGuard® - это чрезвычайно простой, но быстрый и современный VPN, использующий передовую криптографию.",button:"Подробнее"},"about-portal":{"box-header":"О портале WireGuard",headline:"Портал WireGuard",content:"Портал WireGuard - это простой веб-портал для настройки WireGuard.",button:"Подробнее"},profiles:{headline:"VPN Профили",abstract:"Вы можете получить доступ и загрузить свои личные конфигурации VPN через свой пользовательский профиль.",content:"Чтобы найти все сконфигурированные профили, нажмите на кнопку ниже.",button:"Открыть мой профиль"},admin:{headline:"Административная зона",abstract:"В административной зоне вы можете управлять узлами и серверным интерфейсом WireGuard, а также пользователями, которым разрешен вход в портал WireGuard.",content:"","button-admin":"Открыть администрирование сервера","button-user":"Открыть администрирование пользователей"}},UL={headline:"Администрирование интерфейсов","headline-peers":"Текущие VPN пиры","headline-endpoints":"Текущие конечные точки","no-interface":{"default-selection":"Интерфейсы отсутствуют",headline:"Интерфейсы не найдены...",abstract:"Нажмите на кнопку со знаком плюса выше, чтобы создать новый интерфейс WireGuard."},"no-peer":{headline:"Пиры отсутствуют",abstract:"В настоящее время для выбранного интерфейса WireGuard нет доступных пиров."},"table-heading":{name:"Имя",user:"Пользователь",ip:"IP-адреса",endpoint:"Конечная точка",status:"Статус"},interface:{headline:"Статус интерфейса для",mode:"режим",key:"Публичный ключ",endpoint:"Публичная конечная точка",port:"Порт прослушивания",peers:"Активные пиры","total-peers":"Всего пиров",endpoints:"Активные конечные точки","total-endpoints":"Всего конечных точек",ip:"IP-адрес","default-allowed-ip":"Разрешенные IP по умолчанию",dns:"DNS-серверы",mtu:"MTU","default-keep-alive":"Интервал поддержания активности по умолчанию","button-show-config":"Показать конфигурацию","button-download-config":"Скачать конфигурацию","button-store-config":"Сохранить конфигурацию для wg-quick","button-edit":"Редактировать интерфейс"},"button-add-interface":"Добавить интерфейс","button-add-peer":"Добавить пира","button-add-peers":"Добавить несколько пиров","button-show-peer":"Показать пира","button-edit-peer":"Редактировать пира","peer-disabled":"Пир отключен, причина:","peer-expiring":"Пир истекает в","peer-connected":"Подключено","peer-not-connected":"Не подключено","peer-handshake":"Последнее рукопожатие:"},jL={headline:"Администрирование пользователей","table-heading":{id:"ID",email:"Электронная почта",firstname:"Имя",lastname:"Фамилия",source:"Источник",peers:"Пиры",admin:"Админ"},"no-user":{headline:"Пользователи отсутствуют",abstract:"В настоящее время в портале WireGuard не зарегистрировано ни одного пользователя."},"button-add-user":"Добавить пользователя","button-show-user":"Показать пользователя","button-edit-user":"Редактировать пользователя","user-disabled":"Пользователь отключен, причина:","user-locked":"Учетная запись заблокирована, причина:",admin:"Пользователь имеет права администратора","no-admin":"Пользователь не имеет прав администратора"},WL={headline:"Мои VPN пиры","table-heading":{name:"Имя",ip:"IP-адреса",stats:"Статус",interface:"Интерфейс сервера"},"no-peer":{headline:"Пиров нет",abstract:"В настоящее время у вашего профиля пользователя нет связанных пиров."},"peer-connected":"Подключено","button-add-peer":"Добавить пира","button-show-peer":"Показать пира","button-edit-peer":"Редактировать пира"},qL={"user-view":{headline:"Учетная запись пользователя:","tab-user":"Информация","tab-peers":"Пиры","headline-info":"Информация о пользователе:","headline-notes":"Заметки:",email:"Электронная почта",firstname:"Имя",lastname:"Фамилия",phone:"Номер телефона",department:"Отдел",disabled:"Учетная запись отключена",locked:"Учетная запись заблокирована","no-peers":"У пользователя нет связанных пиров.",peers:{name:"Имя",interface:"Интерфейс",ip:"IP-адреса"}},"user-edit":{"headline-edit":"Редактировать пользователя:","headline-new":"Новый пользователь","header-general":"Общее","header-personal":"Информация о пользователе","header-notes":"Заметки","header-state":"Состояние",identifier:{label:"Идентификатор",placeholder:"Уникальный идентификатор пользователя"},source:{label:"Источник",placeholder:"Источник пользователя"},password:{label:"Пароль",placeholder:"Надежный пароль",description:"Оставьте это поле пустым, чтобы сохранить текущий пароль."},email:{label:"Электронная почта",placeholder:"Адрес электронной почты"},phone:{label:"Телефон",placeholder:"Номер телефона"},department:{label:"Отдел",placeholder:"Отдел"},firstname:{label:"Имя",placeholder:"Имя"},lastname:{label:"Фамилия",placeholder:"Фамилия"},notes:{label:"Заметки",placeholder:""},disabled:{label:"Отключен (нет возможности подключения к WireGuard и входа в систему)"},locked:{label:"Заблокирован (вход в систему невозможен, подключения WireGuard работают)"},admin:{label:"Является администратором"}},"interface-view":{headline:"Конфигурация интерфейса:"},"interface-edit":{"headline-edit":"Редактировать интерфейс:","headline-new":"Новый интерфейс","tab-interface":"Интерфейс","tab-peerdef":"Настройки пира по умолчанию","header-general":"Общие","header-network":"Сеть","header-crypto":"Криптография","header-hooks":"Хуки интерфейса","header-peer-hooks":"Хуки","header-state":"Состояние",identifier:{label:"Идентификатор",placeholder:"Уникальный идентификатор интерфейса"},mode:{label:"Режим интерфейса",server:"Режим сервера",client:"Режим клиента",any:"Неизвестный режим"},"display-name":{label:"Отображаемое имя",placeholder:"Описательное имя для интерфейса"},"private-key":{label:"Приватный ключ",placeholder:"Приватный ключ"},"public-key":{label:"Публичный ключ",placeholder:"Публичный ключ"},ip:{label:"IP-адреса",placeholder:"IP-адреса (в формате CIDR)"},"listen-port":{label:"Порт прослушивания",placeholder:"Порт для прослушивания"},dns:{label:"DNS-сервер",placeholder:"Используемые DNS-серверы"},"dns-search":{label:"Поисковые домены DNS",placeholder:"Префиксы поиска DNS"},mtu:{label:"MTU",placeholder:"MTU интерфейса (0 = использовать значение по умолчанию)"},"firewall-mark":{label:"Метка брандмауэра",placeholder:"Метка брандмауэра, применяемая к исходящему трафику (0 = автоматически)"},"routing-table":{label:"Таблица маршрутизации",placeholder:"ID таблицы маршрутизации",description:"Особые случаи: off = не управлять маршрутами, 0 = автоматически"},"pre-up":{label:"Pre-Up",placeholder:"Одна или несколько команд bash, разделенных ;"},"post-up":{label:"Post-Up",placeholder:"Одна или несколько команд bash, разделенных ;"},"pre-down":{label:"Pre-Down",placeholder:"Одна или несколько команд bash, разделенных ;"},"post-down":{label:"Post-Down",placeholder:"Одна или несколько команд bash, разделенных ;"},disabled:{label:"Интерфейс отключен"},"save-config":{label:"Автоматически сохранять конфигурацию wg-quick"},defaults:{endpoint:{label:"Адрес конечной точки",placeholder:"Адрес конечной точки",description:"Адрес конечной точки, к которой будут подключаться пиры."},networks:{label:"IP-сети",placeholder:"Сетевые адреса",description:"Пиры будут получать IP-адреса из этих подсетей."},"allowed-ip":{label:"Разрешенные IP-адреса",placeholder:"Разрешенные IP-адреса по умолчанию"},mtu:{label:"MTU",placeholder:"MTU клиента (0 = использовать значение по умолчанию)"},"keep-alive":{label:"Интервал поддержания активности",placeholder:"Постоянное поддержание активности (0 = значение по умолчанию)"}},"button-apply-defaults":"Применить настройки пира по умолчанию"},"peer-view":{"headline-peer":"Пир:","headline-endpoint":"Конечная точка:","section-info":"Информация о пире","section-status":"Текущий статус","section-config":"Конфигурация",identifier:"Идентификатор",ip:"IP-адреса",user:"Связанный пользователь",notes:"Заметки","expiry-status":"Истекает в","disabled-status":"Отключено в",traffic:"Трафик","connection-status":"Статус соединения",upload:"Загружено байт (от сервера к пиру)",download:"Скачано байт (от пира к серверу)",pingable:"Доступность пинга",handshake:"Последнее рукопожатие","connected-since":"Подключен с",endpoint:"Конечная точка","button-download":"Скачать конфигурацию","button-email":"Отправить конфигурацию по электронной почте"},"peer-edit":{"headline-edit-peer":"Редактировать пира:","headline-edit-endpoint":"Редактировать конечную точку:","headline-new-peer":"Создать пира","headline-new-endpoint":"Создать конечную точку","header-general":"Общее","header-network":"Сеть","header-crypto":"Криптография","header-hooks":"Хуки (Выполняются на пире)","header-state":"Состояние","display-name":{label:"Отображаемое имя",placeholder:"Описательное имя для пира"},"linked-user":{label:"Связанный пользователь",placeholder:"Учетная запись пользователя, которой принадлежит этот пир"},"private-key":{label:"Приватный ключ",placeholder:"Приватный ключ"},"public-key":{label:"Публичный ключ",placeholder:"Публичный ключ"},"preshared-key":{label:"Предварительно разделяемый ключ",placeholder:"Необязательный предварительно разделяемый ключ"},"endpoint-public-key":{label:"Публичный ключ конечной точки",placeholder:"Публичный ключ удаленной конечной точки"},endpoint:{label:"Адрес конечной точки",placeholder:"Адрес удаленной конечной точки"},ip:{label:"IP-адреса",placeholder:"IP-адреса (в формате CIDR)"},"allowed-ip":{label:"Разрешенные IP-адреса",placeholder:"Разрешенные IP-адреса (в формате CIDR)"},"extra-allowed-ip":{label:"Дополнительно разрешенные IP-адреса",placeholder:"Дополнительные разрешенные IP-адреса (на стороне сервера)",description:"Эти IP-адреса будут добавлены в удаленный интерфейс WireGuard как разрешенные IP-адреса."},dns:{label:"DNS Server",placeholder:"The DNS servers that should be used"},"dns-search":{label:"DNS Search Domains",placeholder:"DNS search prefixes"},"keep-alive":{label:"Keep Alive Interval",placeholder:"Persistent Keepalive (0 = default)"},mtu:{label:"MTU",placeholder:"The client MTU (0 = keep default)"},"pre-up":{label:"Pre-Up",placeholder:"One or multiple bash commands separated by ;"},"post-up":{label:"Post-Up",placeholder:"One or multiple bash commands separated by ;"},"pre-down":{label:"Pre-Down",placeholder:"One or multiple bash commands separated by ;"},"post-down":{label:"Post-Down",placeholder:"One or multiple bash commands separated by ;"},disabled:{label:"Peer Disabled"},"ignore-global":{label:"Ignore global settings"},"expires-at":{label:"Expiry date"}},"peer-multi-create":{"headline-peer":"Create multiple peers","headline-endpoint":"Create multiple endpoints",identifiers:{label:"User Identifiers",placeholder:"User Identifiers",description:"A user identifier (the username) for which a peer should be created."},prefix:{"headline-peer":"Peer:","headline-endpoint":"Endpoint:",label:"Display Name Prefix",placeholder:"The prefix",description:"A prefix that is added to the peers display name."}}},KL={general:NL,login:DL,menu:RL,home:FL,interfaces:UL,users:jL,profile:WL,modals:qL},BL={pagination:{size:"Number of Elements",all:"All (slow)"},search:{placeholder:"Search...",button:"Search"},"select-all":"Select all",yes:"Yes",no:"No",cancel:"Cancel",close:"Close",save:"Save",delete:"Delete"},GL={headline:"Please sign in",username:{label:"Username",placeholder:"Please enter your username"},password:{label:"Password",placeholder:"Please enter your password"},button:"Sign in"},YL={home:"Home",interfaces:"Interfaces",users:"Users",lang:"Toggle Language",profile:"My Profile",login:"Login",logout:"Logout"},ZL={headline:"WireGuard® VPN Portal","info-headline":"More Information",abstract:"WireGuard® is an extremely simple yet fast and modern VPN that utilizes state-of-the-art cryptography. It aims to be faster, simpler, leaner, and more useful than IPsec, while avoiding the massive headache. It intends to be considerably more performant than OpenVPN.",installation:{"box-header":"WireGuard Installation",headline:"Installation",content:"Installation instructions for client software can be found on the official WireGuard website.",btn:"Open Instructions",button:"Open Instructions"},"about-wg":{"box-header":"About WireGuard",headline:"About",content:"WireGuard® is an extremely simple yet fast and modern VPN that utilizes state-of-the-art cryptography.",button:"More"},"about-portal":{"box-header":"About WireGuard Portal",headline:"WireGuard Portal",content:"WireGuard Portal is a simple, web based configuration portal for WireGuard.",button:"More"},profiles:{headline:"VPN Profiles",abstract:"You can access and download your personal VPN configurations via your Userprofile.",content:"To find all your configured profiles click on the button below.",button:"Open my profile"},admin:{headline:"Administration Area",abstract:"In the administration area you can manage WireGuard peers and the server interface as well as users that are allowed to log in to the WireGuard Portal.",content:"","button-admin":"Open Server Administration","button-user":"Open User Administration"}},XL={headline:"Interface Administration","headline-peers":"Current VPN Peers","headline-endpoints":"Current Endpoints","no-interface":{"default-selection":"No Interface available",headline:"No interfaces found...",abstract:"Click the plus button above to create a new WireGuard interface."},"no-peer":{headline:"No peers available",abstract:"Currently, there are no peers available for the selected WireGuard interface."},"table-heading":{name:"Name",user:"User",ip:"IP's",endpoint:"Endpoint",status:"Status"},interface:{headline:"Interface status for",mode:"mode",key:"Public Key",endpoint:"Public Endpoint",port:"Listening Port",peers:"Enabled Peers","total-peers":"Total Peers",endpoints:"Enabled Endpoints","total-endpoints":"Total Endpoints",ip:"IP Address","default-allowed-ip":"Default allowed IPs",dns:"DNS Servers",mtu:"MTU","default-keep-alive":"Default Keepalive Interval","button-show-config":"Show configuration","button-download-config":"Download configuration","button-store-config":"Store configuration for wg-quick","button-edit":"Edit interface"},"button-add-interface":"Add Interface","button-add-peer":"Add Peer","button-add-peers":"Add Multiple Peers","button-show-peer":"Show Peer","button-edit-peer":"Edit Peer","peer-disabled":"Peer is disabled, reason:","peer-expiring":"Peer is expiring at","peer-connected":"Connected","peer-not-connected":"Not Connected","peer-handshake":"Last handshake:"},QL={headline:"User Administration","table-heading":{id:"ID",email:"E-Mail",firstname:"Firstname",lastname:"Lastname",source:"Source",peers:"Peers",admin:"Admin"},"no-user":{headline:"No users available",abstract:"Currently, there are no users registered with WireGuard Portal."},"button-add-user":"Add User","button-show-user":"Show User","button-edit-user":"Edit User","user-disabled":"User is disabled, reason:","user-locked":"Account is locked, reason:",admin:"User has administrator privileges","no-admin":"User has no administrator privileges"},JL={headline:"My VPN Peers","table-heading":{name:"Name",ip:"IP's",stats:"Status",interface:"Server Interface"},"no-peer":{headline:"No peers available",abstract:"Currently, there are no peers associated with your user profile."},"peer-connected":"Connected","button-add-peer":"Add Peer","button-show-peer":"Show Peer","button-edit-peer":"Edit Peer"},cb={"user-view":{headline:"User Account:","tab-user":"Information","tab-peers":"Peers","headline-info":"User Information:","headline-notes":"Notes:",email:"E-Mail",firstname:"Firstname",lastname:"Lastname",phone:"Phone number",department:"Department",disabled:"Account Disabled",locked:"Account Locked","no-peers":"User has no associated peers.",peers:{name:"Name",interface:"Interface",ip:"IP's"}},"user-edit":{"headline-edit":"Edit user:","headline-new":"New user","header-general":"General","header-personal":"User Information","header-notes":"Notes","header-state":"State",identifier:{label:"Identifier",placeholder:"The unique user identifier"},source:{label:"Source",placeholder:"The user source"},password:{label:"Password",placeholder:"A super secret password",description:"Leave this field blank to keep current password."},email:{label:"Email",placeholder:"The email address"},phone:{label:"Phone",placeholder:"The phone number"},department:{label:"Department",placeholder:"The department"},firstname:{label:"Firstname",placeholder:"Firstname"},lastname:{label:"Lastname",placeholder:"Lastname"},notes:{label:"Notes",placeholder:""},disabled:{label:"Disabled (no WireGuard connection and no login possible)"},locked:{label:"Locked (no login possible, WireGuard connections still work)"},admin:{label:"Is Admin"}},"interface-view":{headline:"Config for Interface:"},"interface-edit":{"headline-edit":"Edit Interface:","headline-new":"New Interface","tab-interface":"Interface","tab-peerdef":"Peer Defaults","header-general":"General","header-network":"Network","header-crypto":"Cryptography","header-hooks":"Interface Hooks","header-peer-hooks":"Hooks","header-state":"State",identifier:{label:"Identifier",placeholder:"The unique interface identifier"},mode:{label:"Interface Mode",server:"Server Mode",client:"Client Mode",any:"Unknown Mode"},"display-name":{label:"Display Name",placeholder:"The descriptive name for the interface"},"private-key":{label:"Private Key",placeholder:"The private key"},"public-key":{label:"Public Key",placeholder:"The public key"},ip:{label:"IP Addresses",placeholder:"IP Addresses (CIDR format)"},"listen-port":{label:"Listen Port",placeholder:"The listening port"},dns:{label:"DNS Server",placeholder:"The DNS servers that should be used"},"dns-search":{label:"DNS Search Domains",placeholder:"DNS search prefixes"},mtu:{label:"MTU",placeholder:"The interface MTU (0 = keep default)"},"firewall-mark":{label:"Firewall Mark",placeholder:"Firewall mark that is applied to outgoing traffic. (0 = automatic)"},"routing-table":{label:"Routing Table",placeholder:"The routing table ID",description:"Special cases: off = do not manage routes, 0 = automatic"},"pre-up":{label:"Pre-Up",placeholder:"One or multiple bash commands separated by ;"},"post-up":{label:"Post-Up",placeholder:"One or multiple bash commands separated by ;"},"pre-down":{label:"Pre-Down",placeholder:"One or multiple bash commands separated by ;"},"post-down":{label:"Post-Down",placeholder:"One or multiple bash commands separated by ;"},disabled:{label:"Interface Disabled"},"save-config":{label:"Automatically save wg-quick config"},defaults:{endpoint:{label:"Endpoint Address",placeholder:"Endpoint Address",description:"The endpoint address that peers will connect to."},networks:{label:"IP Networks",placeholder:"Network Addresses",description:"Peers will get IP addresses from those subnets."},"allowed-ip":{label:"Allowed IP Addresses",placeholder:"Default Allowed IP Addresses"},mtu:{label:"MTU",placeholder:"The client MTU (0 = keep default)"},"keep-alive":{label:"Keep Alive Interval",placeholder:"Persistent Keepalive (0 = default)"}},"button-apply-defaults":"Apply Peer Defaults"},"peer-view":{"headline-peer":"Peer:","headline-endpoint":"Endpoint:","section-info":"Peer Information","section-status":"Current Status","section-config":"Configuration",identifier:"Identifier",ip:"IP Addresses",user:"Associated User",notes:"Notes","expiry-status":"Expires At","disabled-status":"Disabled At",traffic:"Traffic","connection-status":"Connection Stats",upload:"Uploaded Bytes (from Server to Peer)",download:"Downloaded Bytes (from Peer to Server)",pingable:"Is Pingable",handshake:"Last Handshake","connected-since":"Connected since",endpoint:"Endpoint","button-download":"Download configuration","button-email":"Send configuration via E-Mail"},"peer-edit":{"headline-edit-peer":"Edit peer:","headline-edit-endpoint":"Edit endpoint:","headline-new-peer":"Create peer","headline-new-endpoint":"Create endpoint","header-general":"General","header-network":"Network","header-crypto":"Cryptography","header-hooks":"Hooks (Executed on Peer)","header-state":"State","display-name":{label:"Display Name",placeholder:"The descriptive name for the peer"},"linked-user":{label:"Linked User",placeholder:"The user account which owns this peer"},"private-key":{label:"Private Key",placeholder:"The private key"},"public-key":{label:"Public Key",placeholder:"The public key"},"preshared-key":{label:"Preshared Key",placeholder:"Optional pre-shared key"},"endpoint-public-key":{label:"Endpoint public Key",placeholder:"The public key of the remote endpoint"},endpoint:{label:"Endpoint Address",placeholder:"The address of the remote endpoint"},ip:{label:"IP Addresses",placeholder:"IP Addresses (CIDR format)"},"allowed-ip":{label:"Allowed IP Addresses",placeholder:"Allowed IP Addresses (CIDR format)"},"extra-allowed-ip":{label:"Extra allowed IP Addresses",placeholder:"Extra allowed IP's (Server Sided)",description:"Those IP's will be added on the remote WireGuard interface as allowed IP's."},dns:{label:"DNS Server",placeholder:"The DNS servers that should be used"},"dns-search":{label:"DNS Search Domains",placeholder:"DNS search prefixes"},"keep-alive":{label:"Keep Alive Interval",placeholder:"Persistent Keepalive (0 = default)"},mtu:{label:"MTU",placeholder:"The client MTU (0 = keep default)"},"pre-up":{label:"Pre-Up",placeholder:"One or multiple bash commands separated by ;"},"post-up":{label:"Post-Up",placeholder:"One or multiple bash commands separated by ;"},"pre-down":{label:"Pre-Down",placeholder:"One or multiple bash commands separated by ;"},"post-down":{label:"Post-Down",placeholder:"One or multiple bash commands separated by ;"},disabled:{label:"Peer Disabled"},"ignore-global":{label:"Ignore global settings"},"expires-at":{label:"Expiry date"}},"peer-multi-create":{"headline-peer":"Create multiple peers","headline-endpoint":"Create multiple endpoints",identifiers:{label:"User Identifiers",placeholder:"User Identifiers",description:"A user identifier (the username) for which a peer should be created."},prefix:{"headline-peer":"Peer:","headline-endpoint":"Endpoint:",label:"Display Name Prefix",placeholder:"The prefix",description:"A prefix that is added to the peers display name."}}},eb={general:BL,login:GL,menu:YL,home:ZL,interfaces:XL,users:QL,profile:JL,modals:cb};function tb(){let c=localStorage.getItem("wgLang");return c||(c="en"),c}const sb=iz({legacy:!1,globalInjection:!0,allowComposition:!0,locale:tb(),fallbackLocale:"en",messages:{de:xL,ru:KL,en:eb}});var A2="top",R2="bottom",F2="right",k2="left",u5="auto",j6=[A2,R2,F2,k2],W4="start",k6="end",Na="clippingParents",K9="viewport",i6="popper",Da="reference",t9=j6.reduce(function(c,e){return c.concat([e+"-"+W4,e+"-"+k6])},[]),B9=[].concat(j6,[u5]).reduce(function(c,e){return c.concat([e,e+"-"+W4,e+"-"+k6])},[]),Ra="beforeRead",Fa="read",Ua="afterRead",ja="beforeMain",Wa="main",qa="afterMain",Ka="beforeWrite",Ba="write",Ga="afterWrite",Ya=[Ra,Fa,Ua,ja,Wa,qa,Ka,Ba,Ga];function V3(c){return c?(c.nodeName||"").toLowerCase():null}function U2(c){if(c==null)return window;if(c.toString()!=="[object Window]"){var e=c.ownerDocument;return e&&e.defaultView||window}return c}function q4(c){var e=U2(c).Element;return c instanceof e||c instanceof Element}function B2(c){var e=U2(c).HTMLElement;return c instanceof e||c instanceof HTMLElement}function G9(c){if(typeof ShadowRoot>"u")return!1;var e=U2(c).ShadowRoot;return c instanceof e||c instanceof ShadowRoot}function lb(c){var e=c.state;Object.keys(e.elements).forEach(function(t){var s=e.styles[t]||{},l=e.attributes[t]||{},a=e.elements[t];!B2(a)||!V3(a)||(Object.assign(a.style,s),Object.keys(l).forEach(function(n){var r=l[n];r===!1?a.removeAttribute(n):a.setAttribute(n,r===!0?"":r)}))})}function ab(c){var e=c.state,t={popper:{position:e.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(e.elements.popper.style,t.popper),e.styles=t,e.elements.arrow&&Object.assign(e.elements.arrow.style,t.arrow),function(){Object.keys(e.elements).forEach(function(s){var l=e.elements[s],a=e.attributes[s]||{},n=Object.keys(e.styles.hasOwnProperty(s)?e.styles[s]:t[s]),r=n.reduce(function(i,o){return i[o]="",i},{});!B2(l)||!V3(l)||(Object.assign(l.style,r),Object.keys(a).forEach(function(i){l.removeAttribute(i)}))})}}const Y9={name:"applyStyles",enabled:!0,phase:"write",fn:lb,effect:ab,requires:["computeStyles"]};function p3(c){return c.split("-")[0]}var N4=Math.max,F0=Math.min,S6=Math.round;function s9(){var c=navigator.userAgentData;return c!=null&&c.brands&&Array.isArray(c.brands)?c.brands.map(function(e){return e.brand+"/"+e.version}).join(" "):navigator.userAgent}function Za(){return!/^((?!chrome|android).)*safari/i.test(s9())}function P6(c,e,t){e===void 0&&(e=!1),t===void 0&&(t=!1);var s=c.getBoundingClientRect(),l=1,a=1;e&&B2(c)&&(l=c.offsetWidth>0&&S6(s.width)/c.offsetWidth||1,a=c.offsetHeight>0&&S6(s.height)/c.offsetHeight||1);var n=q4(c)?U2(c):window,r=n.visualViewport,i=!Za()&&t,o=(s.left+(i&&r?r.offsetLeft:0))/l,d=(s.top+(i&&r?r.offsetTop:0))/a,f=s.width/l,v=s.height/a;return{width:f,height:v,top:d,right:o+f,bottom:d+v,left:o,x:o,y:d}}function Z9(c){var e=P6(c),t=c.offsetWidth,s=c.offsetHeight;return Math.abs(e.width-t)<=1&&(t=e.width),Math.abs(e.height-s)<=1&&(s=e.height),{x:c.offsetLeft,y:c.offsetTop,width:t,height:s}}function Xa(c,e){var t=e.getRootNode&&e.getRootNode();if(c.contains(e))return!0;if(t&&G9(t)){var s=e;do{if(s&&c.isSameNode(s))return!0;s=s.parentNode||s.host}while(s)}return!1}function O3(c){return U2(c).getComputedStyle(c)}function nb(c){return["table","td","th"].indexOf(V3(c))>=0}function H4(c){return((q4(c)?c.ownerDocument:c.document)||window.document).documentElement}function f5(c){return V3(c)==="html"?c:c.assignedSlot||c.parentNode||(G9(c)?c.host:null)||H4(c)}function Dt(c){return!B2(c)||O3(c).position==="fixed"?null:c.offsetParent}function rb(c){var e=/firefox/i.test(s9()),t=/Trident/i.test(s9());if(t&&B2(c)){var s=O3(c);if(s.position==="fixed")return null}var l=f5(c);for(G9(l)&&(l=l.host);B2(l)&&["html","body"].indexOf(V3(l))<0;){var a=O3(l);if(a.transform!=="none"||a.perspective!=="none"||a.contain==="paint"||["transform","perspective"].indexOf(a.willChange)!==-1||e&&a.willChange==="filter"||e&&a.filter&&a.filter!=="none")return l;l=l.parentNode}return null}function F8(c){for(var e=U2(c),t=Dt(c);t&&nb(t)&&O3(t).position==="static";)t=Dt(t);return t&&(V3(t)==="html"||V3(t)==="body"&&O3(t).position==="static")?e:t||rb(c)||e}function X9(c){return["top","bottom"].indexOf(c)>=0?"x":"y"}function v8(c,e,t){return N4(c,F0(e,t))}function ib(c,e,t){var s=v8(c,e,t);return s>t?t:s}function Qa(){return{top:0,right:0,bottom:0,left:0}}function Ja(c){return Object.assign({},Qa(),c)}function cn(c,e){return e.reduce(function(t,s){return t[s]=c,t},{})}var ob=function(e,t){return e=typeof e=="function"?e(Object.assign({},t.rects,{placement:t.placement})):e,Ja(typeof e!="number"?e:cn(e,j6))};function ub(c){var e,t=c.state,s=c.name,l=c.options,a=t.elements.arrow,n=t.modifiersData.popperOffsets,r=p3(t.placement),i=X9(r),o=[k2,F2].indexOf(r)>=0,d=o?"height":"width";if(!(!a||!n)){var f=ob(l.padding,t),v=Z9(a),_=i==="y"?A2:k2,y=i==="y"?R2:F2,T=t.rects.reference[d]+t.rects.reference[i]-n[i]-t.rects.popper[d],$=n[i]-t.rects.reference[i],E=F8(a),z=E?i==="y"?E.clientHeight||0:E.clientWidth||0:0,C=T/2-$/2,h=f[_],m=z-v[d]-f[y],M=z/2-v[d]/2+C,b=v8(h,M,m),N=i;t.modifiersData[s]=(e={},e[N]=b,e.centerOffset=b-M,e)}}function fb(c){var e=c.state,t=c.options,s=t.element,l=s===void 0?"[data-popper-arrow]":s;l!=null&&(typeof l=="string"&&(l=e.elements.popper.querySelector(l),!l)||Xa(e.elements.popper,l)&&(e.elements.arrow=l))}const en={name:"arrow",enabled:!0,phase:"main",fn:ub,effect:fb,requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function T6(c){return c.split("-")[1]}var db={top:"auto",right:"auto",bottom:"auto",left:"auto"};function hb(c,e){var t=c.x,s=c.y,l=e.devicePixelRatio||1;return{x:S6(t*l)/l||0,y:S6(s*l)/l||0}}function Rt(c){var e,t=c.popper,s=c.popperRect,l=c.placement,a=c.variation,n=c.offsets,r=c.position,i=c.gpuAcceleration,o=c.adaptive,d=c.roundOffsets,f=c.isFixed,v=n.x,_=v===void 0?0:v,y=n.y,T=y===void 0?0:y,$=typeof d=="function"?d({x:_,y:T}):{x:_,y:T};_=$.x,T=$.y;var E=n.hasOwnProperty("x"),z=n.hasOwnProperty("y"),C=k2,h=A2,m=window;if(o){var M=F8(t),b="clientHeight",N="clientWidth";if(M===U2(t)&&(M=H4(t),O3(M).position!=="static"&&r==="absolute"&&(b="scrollHeight",N="scrollWidth")),M=M,l===A2||(l===k2||l===F2)&&a===k6){h=R2;var I=f&&M===m&&m.visualViewport?m.visualViewport.height:M[b];T-=I-s.height,T*=i?1:-1}if(l===k2||(l===A2||l===R2)&&a===k6){C=F2;var F=f&&M===m&&m.visualViewport?m.visualViewport.width:M[N];_-=F-s.width,_*=i?1:-1}}var U=Object.assign({position:r},o&&db),q=d===!0?hb({x:_,y:T},U2(t)):{x:_,y:T};if(_=q.x,T=q.y,i){var f1;return Object.assign({},U,(f1={},f1[h]=z?"0":"",f1[C]=E?"0":"",f1.transform=(m.devicePixelRatio||1)<=1?"translate("+_+"px, "+T+"px)":"translate3d("+_+"px, "+T+"px, 0)",f1))}return Object.assign({},U,(e={},e[h]=z?T+"px":"",e[C]=E?_+"px":"",e.transform="",e))}function mb(c){var e=c.state,t=c.options,s=t.gpuAcceleration,l=s===void 0?!0:s,a=t.adaptive,n=a===void 0?!0:a,r=t.roundOffsets,i=r===void 0?!0:r,o={placement:p3(e.placement),variation:T6(e.placement),popper:e.elements.popper,popperRect:e.rects.popper,gpuAcceleration:l,isFixed:e.options.strategy==="fixed"};e.modifiersData.popperOffsets!=null&&(e.styles.popper=Object.assign({},e.styles.popper,Rt(Object.assign({},o,{offsets:e.modifiersData.popperOffsets,position:e.options.strategy,adaptive:n,roundOffsets:i})))),e.modifiersData.arrow!=null&&(e.styles.arrow=Object.assign({},e.styles.arrow,Rt(Object.assign({},o,{offsets:e.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:i})))),e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-placement":e.placement})}const Q9={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:mb,data:{}};var z0={passive:!0};function zb(c){var e=c.state,t=c.instance,s=c.options,l=s.scroll,a=l===void 0?!0:l,n=s.resize,r=n===void 0?!0:n,i=U2(e.elements.popper),o=[].concat(e.scrollParents.reference,e.scrollParents.popper);return a&&o.forEach(function(d){d.addEventListener("scroll",t.update,z0)}),r&&i.addEventListener("resize",t.update,z0),function(){a&&o.forEach(function(d){d.removeEventListener("scroll",t.update,z0)}),r&&i.removeEventListener("resize",t.update,z0)}}const J9={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:zb,data:{}};var pb={left:"right",right:"left",bottom:"top",top:"bottom"};function w0(c){return c.replace(/left|right|bottom|top/g,function(e){return pb[e]})}var vb={start:"end",end:"start"};function Ft(c){return c.replace(/start|end/g,function(e){return vb[e]})}function cc(c){var e=U2(c),t=e.pageXOffset,s=e.pageYOffset;return{scrollLeft:t,scrollTop:s}}function ec(c){return P6(H4(c)).left+cc(c).scrollLeft}function Hb(c,e){var t=U2(c),s=H4(c),l=t.visualViewport,a=s.clientWidth,n=s.clientHeight,r=0,i=0;if(l){a=l.width,n=l.height;var o=Za();(o||!o&&e==="fixed")&&(r=l.offsetLeft,i=l.offsetTop)}return{width:a,height:n,x:r+ec(c),y:i}}function Vb(c){var e,t=H4(c),s=cc(c),l=(e=c.ownerDocument)==null?void 0:e.body,a=N4(t.scrollWidth,t.clientWidth,l?l.scrollWidth:0,l?l.clientWidth:0),n=N4(t.scrollHeight,t.clientHeight,l?l.scrollHeight:0,l?l.clientHeight:0),r=-s.scrollLeft+ec(c),i=-s.scrollTop;return O3(l||t).direction==="rtl"&&(r+=N4(t.clientWidth,l?l.clientWidth:0)-a),{width:a,height:n,x:r,y:i}}function tc(c){var e=O3(c),t=e.overflow,s=e.overflowX,l=e.overflowY;return/auto|scroll|overlay|hidden/.test(t+l+s)}function tn(c){return["html","body","#document"].indexOf(V3(c))>=0?c.ownerDocument.body:B2(c)&&tc(c)?c:tn(f5(c))}function H8(c,e){var t;e===void 0&&(e=[]);var s=tn(c),l=s===((t=c.ownerDocument)==null?void 0:t.body),a=U2(s),n=l?[a].concat(a.visualViewport||[],tc(s)?s:[]):s,r=e.concat(n);return l?r:r.concat(H8(f5(n)))}function l9(c){return Object.assign({},c,{left:c.x,top:c.y,right:c.x+c.width,bottom:c.y+c.height})}function gb(c,e){var t=P6(c,!1,e==="fixed");return t.top=t.top+c.clientTop,t.left=t.left+c.clientLeft,t.bottom=t.top+c.clientHeight,t.right=t.left+c.clientWidth,t.width=c.clientWidth,t.height=c.clientHeight,t.x=t.left,t.y=t.top,t}function Ut(c,e,t){return e===K9?l9(Hb(c,t)):q4(e)?gb(e,t):l9(Vb(H4(c)))}function Mb(c){var e=H8(f5(c)),t=["absolute","fixed"].indexOf(O3(c).position)>=0,s=t&&B2(c)?F8(c):c;return q4(s)?e.filter(function(l){return q4(l)&&Xa(l,s)&&V3(l)!=="body"}):[]}function Cb(c,e,t,s){var l=e==="clippingParents"?Mb(c):[].concat(e),a=[].concat(l,[t]),n=a[0],r=a.reduce(function(i,o){var d=Ut(c,o,s);return i.top=N4(d.top,i.top),i.right=F0(d.right,i.right),i.bottom=F0(d.bottom,i.bottom),i.left=N4(d.left,i.left),i},Ut(c,n,s));return r.width=r.right-r.left,r.height=r.bottom-r.top,r.x=r.left,r.y=r.top,r}function sn(c){var e=c.reference,t=c.element,s=c.placement,l=s?p3(s):null,a=s?T6(s):null,n=e.x+e.width/2-t.width/2,r=e.y+e.height/2-t.height/2,i;switch(l){case A2:i={x:n,y:e.y-t.height};break;case R2:i={x:n,y:e.y+e.height};break;case F2:i={x:e.x+e.width,y:r};break;case k2:i={x:e.x-t.width,y:r};break;default:i={x:e.x,y:e.y}}var o=l?X9(l):null;if(o!=null){var d=o==="y"?"height":"width";switch(a){case W4:i[o]=i[o]-(e[d]/2-t[d]/2);break;case k6:i[o]=i[o]+(e[d]/2-t[d]/2);break}}return i}function I6(c,e){e===void 0&&(e={});var t=e,s=t.placement,l=s===void 0?c.placement:s,a=t.strategy,n=a===void 0?c.strategy:a,r=t.boundary,i=r===void 0?Na:r,o=t.rootBoundary,d=o===void 0?K9:o,f=t.elementContext,v=f===void 0?i6:f,_=t.altBoundary,y=_===void 0?!1:_,T=t.padding,$=T===void 0?0:T,E=Ja(typeof $!="number"?$:cn($,j6)),z=v===i6?Da:i6,C=c.rects.popper,h=c.elements[y?z:v],m=Cb(q4(h)?h:h.contextElement||H4(c.elements.popper),i,d,n),M=P6(c.elements.reference),b=sn({reference:M,element:C,strategy:"absolute",placement:l}),N=l9(Object.assign({},C,b)),I=v===i6?N:M,F={top:m.top-I.top+E.top,bottom:I.bottom-m.bottom+E.bottom,left:m.left-I.left+E.left,right:I.right-m.right+E.right},U=c.modifiersData.offset;if(v===i6&&U){var q=U[l];Object.keys(F).forEach(function(f1){var v1=[F2,R2].indexOf(f1)>=0?1:-1,L1=[A2,R2].indexOf(f1)>=0?"y":"x";F[f1]+=q[L1]*v1})}return F}function Lb(c,e){e===void 0&&(e={});var t=e,s=t.placement,l=t.boundary,a=t.rootBoundary,n=t.padding,r=t.flipVariations,i=t.allowedAutoPlacements,o=i===void 0?B9:i,d=T6(s),f=d?r?t9:t9.filter(function(y){return T6(y)===d}):j6,v=f.filter(function(y){return o.indexOf(y)>=0});v.length===0&&(v=f);var _=v.reduce(function(y,T){return y[T]=I6(c,{placement:T,boundary:l,rootBoundary:a,padding:n})[p3(T)],y},{});return Object.keys(_).sort(function(y,T){return _[y]-_[T]})}function bb(c){if(p3(c)===u5)return[];var e=w0(c);return[Ft(c),e,Ft(e)]}function _b(c){var e=c.state,t=c.options,s=c.name;if(!e.modifiersData[s]._skip){for(var l=t.mainAxis,a=l===void 0?!0:l,n=t.altAxis,r=n===void 0?!0:n,i=t.fallbackPlacements,o=t.padding,d=t.boundary,f=t.rootBoundary,v=t.altBoundary,_=t.flipVariations,y=_===void 0?!0:_,T=t.allowedAutoPlacements,$=e.options.placement,E=p3($),z=E===$,C=i||(z||!y?[w0($)]:bb($)),h=[$].concat(C).reduce(function(K,Q){return K.concat(p3(Q)===u5?Lb(e,{placement:Q,boundary:d,rootBoundary:f,padding:o,flipVariations:y,allowedAutoPlacements:T}):Q)},[]),m=e.rects.reference,M=e.rects.popper,b=new Map,N=!0,I=h[0],F=0;F=0,L1=v1?"width":"height",z1=I6(e,{placement:U,boundary:d,rootBoundary:f,altBoundary:v,padding:o}),d1=v1?f1?F2:k2:f1?R2:A2;m[L1]>M[L1]&&(d1=w0(d1));var r1=w0(d1),g1=[];if(a&&g1.push(z1[q]<=0),r&&g1.push(z1[d1]<=0,z1[r1]<=0),g1.every(function(K){return K})){I=U,N=!1;break}b.set(U,g1)}if(N)for(var y1=y?3:1,T1=function(Q){var M1=h.find(function(G){var u1=b.get(G);if(u1)return u1.slice(0,Q).every(function(n1){return n1})});if(M1)return I=M1,"break"},O=y1;O>0;O--){var X=T1(O);if(X==="break")break}e.placement!==I&&(e.modifiersData[s]._skip=!0,e.placement=I,e.reset=!0)}}const ln={name:"flip",enabled:!0,phase:"main",fn:_b,requiresIfExists:["offset"],data:{_skip:!1}};function jt(c,e,t){return t===void 0&&(t={x:0,y:0}),{top:c.top-e.height-t.y,right:c.right-e.width+t.x,bottom:c.bottom-e.height+t.y,left:c.left-e.width-t.x}}function Wt(c){return[A2,F2,R2,k2].some(function(e){return c[e]>=0})}function yb(c){var e=c.state,t=c.name,s=e.rects.reference,l=e.rects.popper,a=e.modifiersData.preventOverflow,n=I6(e,{elementContext:"reference"}),r=I6(e,{altBoundary:!0}),i=jt(n,s),o=jt(r,l,a),d=Wt(i),f=Wt(o);e.modifiersData[t]={referenceClippingOffsets:i,popperEscapeOffsets:o,isReferenceHidden:d,hasPopperEscaped:f},e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-reference-hidden":d,"data-popper-escaped":f})}const an={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:yb};function wb(c,e,t){var s=p3(c),l=[k2,A2].indexOf(s)>=0?-1:1,a=typeof t=="function"?t(Object.assign({},e,{placement:c})):t,n=a[0],r=a[1];return n=n||0,r=(r||0)*l,[k2,F2].indexOf(s)>=0?{x:r,y:n}:{x:n,y:r}}function Eb(c){var e=c.state,t=c.options,s=c.name,l=t.offset,a=l===void 0?[0,0]:l,n=B9.reduce(function(d,f){return d[f]=wb(f,e.rects,a),d},{}),r=n[e.placement],i=r.x,o=r.y;e.modifiersData.popperOffsets!=null&&(e.modifiersData.popperOffsets.x+=i,e.modifiersData.popperOffsets.y+=o),e.modifiersData[s]=n}const nn={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:Eb};function Ab(c){var e=c.state,t=c.name;e.modifiersData[t]=sn({reference:e.rects.reference,element:e.rects.popper,strategy:"absolute",placement:e.placement})}const sc={name:"popperOffsets",enabled:!0,phase:"read",fn:Ab,data:{}};function kb(c){return c==="x"?"y":"x"}function Sb(c){var e=c.state,t=c.options,s=c.name,l=t.mainAxis,a=l===void 0?!0:l,n=t.altAxis,r=n===void 0?!1:n,i=t.boundary,o=t.rootBoundary,d=t.altBoundary,f=t.padding,v=t.tether,_=v===void 0?!0:v,y=t.tetherOffset,T=y===void 0?0:y,$=I6(e,{boundary:i,rootBoundary:o,padding:f,altBoundary:d}),E=p3(e.placement),z=T6(e.placement),C=!z,h=X9(E),m=kb(h),M=e.modifiersData.popperOffsets,b=e.rects.reference,N=e.rects.popper,I=typeof T=="function"?T(Object.assign({},e.rects,{placement:e.placement})):T,F=typeof I=="number"?{mainAxis:I,altAxis:I}:Object.assign({mainAxis:0,altAxis:0},I),U=e.modifiersData.offset?e.modifiersData.offset[e.placement]:null,q={x:0,y:0};if(M){if(a){var f1,v1=h==="y"?A2:k2,L1=h==="y"?R2:F2,z1=h==="y"?"height":"width",d1=M[h],r1=d1+$[v1],g1=d1-$[L1],y1=_?-N[z1]/2:0,T1=z===W4?b[z1]:N[z1],O=z===W4?-N[z1]:-b[z1],X=e.elements.arrow,K=_&&X?Z9(X):{width:0,height:0},Q=e.modifiersData["arrow#persistent"]?e.modifiersData["arrow#persistent"].padding:Qa(),M1=Q[v1],G=Q[L1],u1=v8(0,b[z1],K[z1]),n1=C?b[z1]/2-y1-u1-M1-F.mainAxis:T1-u1-M1-F.mainAxis,m1=C?-b[z1]/2+y1+u1+G+F.mainAxis:O+u1+G+F.mainAxis,k1=e.elements.arrow&&F8(e.elements.arrow),S=k1?h==="y"?k1.clientTop||0:k1.clientLeft||0:0,V=(f1=U==null?void 0:U[h])!=null?f1:0,H=d1+n1-V-S,A=d1+m1-V,D=v8(_?F0(r1,H):r1,d1,_?N4(g1,A):g1);M[h]=D,q[h]=D-d1}if(r){var B,c1=h==="x"?A2:k2,t1=h==="x"?R2:F2,l1=M[m],s1=m==="y"?"height":"width",b1=l1+$[c1],h1=l1-$[t1],R=[A2,k2].indexOf(E)!==-1,Y=(B=U==null?void 0:U[m])!=null?B:0,H1=R?b1:l1-b[s1]-N[s1]-Y+F.altAxis,S1=R?l1+b[s1]+N[s1]-Y-F.altAxis:h1,F1=_&&R?ib(H1,l1,S1):v8(_?H1:b1,l1,_?S1:h1);M[m]=F1,q[m]=F1-l1}e.modifiersData[s]=q}}const rn={name:"preventOverflow",enabled:!0,phase:"main",fn:Sb,requiresIfExists:["offset"]};function Pb(c){return{scrollLeft:c.scrollLeft,scrollTop:c.scrollTop}}function Tb(c){return c===U2(c)||!B2(c)?cc(c):Pb(c)}function Ib(c){var e=c.getBoundingClientRect(),t=S6(e.width)/c.offsetWidth||1,s=S6(e.height)/c.offsetHeight||1;return t!==1||s!==1}function $b(c,e,t){t===void 0&&(t=!1);var s=B2(e),l=B2(e)&&Ib(e),a=H4(e),n=P6(c,l,t),r={scrollLeft:0,scrollTop:0},i={x:0,y:0};return(s||!s&&!t)&&((V3(e)!=="body"||tc(a))&&(r=Tb(e)),B2(e)?(i=P6(e,!0),i.x+=e.clientLeft,i.y+=e.clientTop):a&&(i.x=ec(a))),{x:n.left+r.scrollLeft-i.x,y:n.top+r.scrollTop-i.y,width:n.width,height:n.height}}function Ob(c){var e=new Map,t=new Set,s=[];c.forEach(function(a){e.set(a.name,a)});function l(a){t.add(a.name);var n=[].concat(a.requires||[],a.requiresIfExists||[]);n.forEach(function(r){if(!t.has(r)){var i=e.get(r);i&&l(i)}}),s.push(a)}return c.forEach(function(a){t.has(a.name)||l(a)}),s}function xb(c){var e=Ob(c);return Ya.reduce(function(t,s){return t.concat(e.filter(function(l){return l.phase===s}))},[])}function Nb(c){var e;return function(){return e||(e=new Promise(function(t){Promise.resolve().then(function(){e=void 0,t(c())})})),e}}function Db(c){var e=c.reduce(function(t,s){var l=t[s.name];return t[s.name]=l?Object.assign({},l,s,{options:Object.assign({},l.options,s.options),data:Object.assign({},l.data,s.data)}):s,t},{});return Object.keys(e).map(function(t){return e[t]})}var qt={placement:"bottom",modifiers:[],strategy:"absolute"};function Kt(){for(var c=arguments.length,e=new Array(c),t=0;tc&&c.exact?Wp:new RegExp(`(?:${s4(c)}${J2}${s4(c)})|(?:${s4(c)}${o5}${s4(c)})`,"g");R8.v4=c=>c&&c.exact?qp:new RegExp(`${s4(c)}${J2}${s4(c)}`,"g");R8.v6=c=>c&&c.exact?Kp:new RegExp(`${s4(c)}${o5}${s4(c)}`,"g");const Pa={exact:!1},Ta=`${R8.v4().source}\\/(3[0-2]|[12]?[0-9])`,Ia=`${R8.v6().source}\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])`,Bp=new RegExp(`^${Ta}$`),Gp=new RegExp(`^${Ia}$`),Yp=({exact:c}=Pa)=>c?Bp:new RegExp(Ta,"g"),Zp=({exact:c}=Pa)=>c?Gp:new RegExp(Ia,"g"),$a=Yp({exact:!0}),Oa=Zp({exact:!0}),q9=c=>$a.test(c)?4:Oa.test(c)?6:0;q9.v4=c=>$a.test(c);q9.v6=c=>Oa.test(c);const x4=q9;function Xp(c){const e=(...t)=>c(...t);return Object.defineProperty(e,"name",{value:`functionTimeout(${c.name||""})`,configurable:!0}),e}const{toString:Qp}=Object.prototype;function Jp(c){return Qp.call(c)==="[object RegExp]"}const Nt={global:"g",ignoreCase:"i",multiline:"m",dotAll:"s",sticky:"y",unicode:"u"};function cv(c,e={}){if(!Jp(c))throw new TypeError("Expected a RegExp instance");const t=Object.keys(Nt).map(l=>(typeof e[l]=="boolean"?e[l]:c[l])?Nt[l]:"").join(""),s=new RegExp(e.source||c.source,t);return s.lastIndex=typeof e.lastIndex=="number"?e.lastIndex:c.lastIndex,s}function ev(c,e,{timeout:t}={}){try{return Xp(()=>cv(c).test(e),{timeout:t})()}catch(s){throw s}}const tv=45,sv={timeout:400};function R0(c){return c.length>tv?!1:ev(R8({exact:!0}),c,sv)}function V6(c){return x4(c)!==0}function c9(c){return R0(c)}function e9(c){return!0}const lv={class:"mt-4"},av={class:"form-group"},nv={class:"form-label mt-4"},rv=["placeholder"],iv={class:"form-group"},ov={class:"form-label mt-4"},uv=["placeholder"],fv={class:"mt-4"},dv={key:0,class:"form-group"},hv={class:"form-label mt-4"},mv=["placeholder"],zv={class:"form-group"},pv={class:"form-label mt-4"},vv=["placeholder"],Hv={class:"form-group"},Vv={class:"form-label mt-4"},gv=["placeholder"],Mv={key:1,class:"form-group"},Cv={class:"form-label mt-4"},Lv=["placeholder"],bv={class:"mt-4"},_v={key:0,class:"form-group"},yv={class:"form-label mt-4"},wv=["placeholder"],Ev={class:"form-group"},Av={class:"form-label mt-4"},kv={class:"form-group"},Sv={class:"form-label mt-4"},Pv={class:"form-group"},Tv={class:"form-label mt-4"},Iv={class:"form-text text-muted"},$v={class:"form-group"},Ov={class:"form-label mt-4"},xv={hidden:"",class:"form-group"},Nv={class:"form-label mt-4"},Dv={class:"row"},Rv={class:"form-group col-md-6"},Fv={class:"form-label mt-4"},Uv=["placeholder"],jv={class:"form-group col-md-6"},Wv={class:"form-label mt-4"},qv=["placeholder"],Kv={class:"mt-4"},Bv={class:"form-group"},Gv={class:"form-label mt-4"},Yv=["placeholder"],Zv={class:"form-group"},Xv={class:"form-label mt-4"},Qv=["placeholder"],Jv={class:"form-group"},cH={class:"form-label mt-4"},eH=["placeholder"],tH={class:"form-group"},sH={class:"form-label mt-4"},lH=["placeholder"],aH={class:"mt-4"},nH={class:"row"},rH={class:"form-group col-md-6"},iH={class:"form-check form-switch"},oH={class:"form-check-label"},uH={class:"form-check form-switch"},fH={class:"form-check-label"},dH={class:"form-group col-md-6"},hH={class:"form-label"},mH={class:"flex-fill text-start"},zH={__name:"PeerEditModal",props:{peerId:String,visible:Boolean},emits:["close"],setup(c,{emit:e}){const{t}=v4(),s=N8(),l=o4(),a=Ea(),n=c,r=e,i=x1(()=>{let h=s.Find(n.peerId);return h||(n.peerId||n.peerId.length?h=a.peers.find(m=>m.Identifier===n.peerId):h=O4()),h}),o=x1(()=>{let h=l.GetSelected;return h||(h=U4()),h}),d=x1(()=>n.visible?o.value.Mode==="server"?i.value?t("modals.peer-edit.headline-edit-peer")+" "+i.value.Identifier:t("modals.peer-edit.headline-new-peer"):i.value?t("modals.peer-edit.headline-edit-endpoint")+" "+i.value.Identifier:t("modals.peer-edit.headline-new-endpoint"):""),f=Z1(O4());I2(()=>n.visible,async(h,m)=>{m===!1&&h===!0&&(i.value?(f.value.Identifier=i.value.Identifier,f.value.DisplayName=i.value.DisplayName,f.value.UserIdentifier=i.value.UserIdentifier,f.value.InterfaceIdentifier=i.value.InterfaceIdentifier,f.value.Disabled=i.value.Disabled,f.value.ExpiresAt=i.value.ExpiresAt,f.value.Notes=i.value.Notes,f.value.Endpoint=i.value.Endpoint,f.value.EndpointPublicKey=i.value.EndpointPublicKey,f.value.AllowedIPs=i.value.AllowedIPs,f.value.ExtraAllowedIPs=i.value.ExtraAllowedIPs,f.value.PresharedKey=i.value.PresharedKey,f.value.PersistentKeepalive=i.value.PersistentKeepalive,f.value.PrivateKey=i.value.PrivateKey,f.value.PublicKey=i.value.PublicKey,f.value.Mode=i.value.Mode,f.value.Addresses=i.value.Addresses,f.value.CheckAliveAddress=i.value.CheckAliveAddress,f.value.Dns=i.value.Dns,f.value.DnsSearch=i.value.DnsSearch,f.value.Mtu=i.value.Mtu,f.value.FirewallMark=i.value.FirewallMark,f.value.RoutingTable=i.value.RoutingTable,f.value.PreUp=i.value.PreUp,f.value.PostUp=i.value.PostUp,f.value.PreDown=i.value.PreDown,f.value.PostDown=i.value.PostDown,(!f.value.Endpoint.Overridable||!f.value.EndpointPublicKey.Overridable||!f.value.AllowedIPs.Overridable||!f.value.PersistentKeepalive.Overridable||!f.value.Dns.Overridable||!f.value.DnsSearch.Overridable||!f.value.Mtu.Overridable||!f.value.FirewallMark.Overridable||!f.value.RoutingTable.Overridable||!f.value.PreUp.Overridable||!f.value.PostUp.Overridable||!f.value.PreDown.Overridable||!f.value.PostDown.Overridable)&&(f.value.IgnoreGlobalSettings=!0)):(await s.PreparePeer(o.value.Identifier),f.value.Identifier=s.Prepared.Identifier,f.value.DisplayName=s.Prepared.DisplayName,f.value.UserIdentifier=s.Prepared.UserIdentifier,f.value.InterfaceIdentifier=s.Prepared.InterfaceIdentifier,f.value.Disabled=s.Prepared.Disabled,f.value.ExpiresAt=s.Prepared.ExpiresAt,f.value.Notes=s.Prepared.Notes,f.value.Endpoint=s.Prepared.Endpoint,f.value.EndpointPublicKey=s.Prepared.EndpointPublicKey,f.value.AllowedIPs=s.Prepared.AllowedIPs,f.value.ExtraAllowedIPs=s.Prepared.ExtraAllowedIPs,f.value.PresharedKey=s.Prepared.PresharedKey,f.value.PersistentKeepalive=s.Prepared.PersistentKeepalive,f.value.PrivateKey=s.Prepared.PrivateKey,f.value.PublicKey=s.Prepared.PublicKey,f.value.Mode=s.Prepared.Mode,f.value.Addresses=s.Prepared.Addresses,f.value.CheckAliveAddress=s.Prepared.CheckAliveAddress,f.value.Dns=s.Prepared.Dns,f.value.DnsSearch=s.Prepared.DnsSearch,f.value.Mtu=s.Prepared.Mtu,f.value.FirewallMark=s.Prepared.FirewallMark,f.value.RoutingTable=s.Prepared.RoutingTable,f.value.PreUp=s.Prepared.PreUp,f.value.PostUp=s.Prepared.PostUp,f.value.PreDown=s.Prepared.PreDown,f.value.PostDown=s.Prepared.PostDown))}),I2(()=>f.value.IgnoreGlobalSettings,async(h,m)=>{f.value.Endpoint.Overridable=!h,f.value.EndpointPublicKey.Overridable=!h,f.value.AllowedIPs.Overridable=!h,f.value.PersistentKeepalive.Overridable=!h,f.value.Dns.Overridable=!h,f.value.DnsSearch.Overridable=!h,f.value.Mtu.Overridable=!h,f.value.FirewallMark.Overridable=!h,f.value.RoutingTable.Overridable=!h,f.value.PreUp.Overridable=!h,f.value.PostUp.Overridable=!h,f.value.PreDown.Overridable=!h,f.value.PostDown.Overridable=!h}),I2(()=>f.value.Disabled,async(h,m)=>{m&&!h&&f.value.ExpiresAt&&(f.value.ExpiresAt="")});function v(){f.value=O4(),r("close")}function _(h){let m=!0;h.forEach(M=>{x4(M)===0&&(m=!1,D1({title:"Invalid CIDR",text:M+" is not a valid IP address",type:"error"}))}),m&&(f.value.Addresses=h)}function y(h){let m=!0;h.forEach(M=>{x4(M)===0&&(m=!1,D1({title:"Invalid CIDR",text:M+" is not a valid IP address",type:"error"}))}),m&&(f.value.AllowedIPs.Value=h)}function T(h){let m=!0;h.forEach(M=>{x4(M)===0&&(m=!1,D1({title:"Invalid CIDR",text:M+" is not a valid IP address",type:"error"}))}),m&&(f.value.ExtraAllowedIPs=h)}function $(h){let m=!0;h.forEach(M=>{R0(M)||(m=!1,D1({title:"Invalid IP",text:M+" is not a valid IP address",type:"error"}))}),m&&(f.value.Dns.Value=h)}function E(h){f.value.DnsSearch.Value=h}async function z(){try{n.peerId!=="#NEW#"?await s.UpdatePeer(i.value.Identifier,f.value):await s.CreatePeer(o.value.Identifier,f.value),v()}catch(h){D1({title:"Failed to save peer!",text:h.toString(),type:"error"})}}async function C(){try{await s.DeletePeer(i.value.Identifier),v()}catch(h){D1({title:"Failed to delete peer!",text:h.toString(),type:"error"})}}return(h,m)=>(e1(),N3(x8,{title:d.value,visible:c.visible,onClose:v},{default:o2(()=>[u("fieldset",null,[u("legend",lv,P(h.$t("modals.peer-edit.header-general")),1),u("div",av,[u("label",nv,P(h.$t("modals.peer-edit.display-name.label")),1),I1(u("input",{type:"text",class:"form-control",placeholder:h.$t("modals.peer-edit.display-name.placeholder"),"onUpdate:modelValue":m[0]||(m[0]=M=>f.value.DisplayName=M)},null,8,rv),[[U1,f.value.DisplayName]])]),u("div",iv,[u("label",ov,P(h.$t("modals.peer-edit.linked-user.label")),1),I1(u("input",{type:"text",class:"form-control",placeholder:h.$t("modals.peer-edit.linked-user.placeholder"),"onUpdate:modelValue":m[1]||(m[1]=M=>f.value.UserIdentifier=M)},null,8,uv),[[U1,f.value.UserIdentifier]])])]),u("fieldset",null,[u("legend",fv,P(h.$t("modals.peer-edit.header-crypto")),1),o.value.Mode==="server"?(e1(),o1("div",dv,[u("label",hv,P(h.$t("modals.peer-edit.private-key.label")),1),I1(u("input",{type:"email",class:"form-control",placeholder:h.$t("modals.peer-edit.private-key.placeholder"),required:"","onUpdate:modelValue":m[2]||(m[2]=M=>f.value.PrivateKey=M)},null,8,mv),[[U1,f.value.PrivateKey]])])):$1("",!0),u("div",zv,[u("label",pv,P(h.$t("modals.peer-edit.public-key.label")),1),I1(u("input",{type:"email",class:"form-control",placeholder:h.$t("modals.peer-edit.public-key.placeholder"),required:"","onUpdate:modelValue":m[3]||(m[3]=M=>f.value.PublicKey=M)},null,8,vv),[[U1,f.value.PublicKey]])]),u("div",Hv,[u("label",Vv,P(h.$t("modals.peer-edit.preshared-key.label")),1),I1(u("input",{type:"email",class:"form-control",placeholder:h.$t("modals.peer-edit.preshared-key.placeholder"),"onUpdate:modelValue":m[4]||(m[4]=M=>f.value.PresharedKey=M)},null,8,gv),[[U1,f.value.PresharedKey]])]),f.value.Mode==="client"?(e1(),o1("div",Mv,[u("label",Cv,P(h.$t("modals.peer-edit.endpoint-public-key.label")),1),I1(u("input",{type:"text",class:"form-control",placeholder:h.$t("modals.peer-edit.endpoint-public-key.placeholder"),"onUpdate:modelValue":m[5]||(m[5]=M=>f.value.EndpointPublicKey.Value=M)},null,8,Lv),[[U1,f.value.EndpointPublicKey.Value]])])):$1("",!0)]),u("fieldset",null,[u("legend",bv,P(h.$t("modals.peer-edit.header-network")),1),o.value.Mode==="client"?(e1(),o1("div",_v,[u("label",yv,P(h.$t("modals.peer-edit.endpoint.label")),1),I1(u("input",{type:"text",class:"form-control",placeholder:h.$t("modals.peer-edit.endpoint.placeholder"),"onUpdate:modelValue":m[6]||(m[6]=M=>f.value.Endpoint.Value=M)},null,8,wv),[[U1,f.value.Endpoint.Value]])])):$1("",!0),u("div",Ev,[u("label",Av,P(h.$t("modals.peer-edit.ip.label")),1),w1(Z(D2),{class:"form-control",tags:f.value.Addresses,placeholder:h.$t("modals.peer-edit.ip.placeholder"),"add-tag-on-keys":[13,188,32,9],validate:Z(V6),onOnTagsChanged:_},null,8,["tags","placeholder","validate"])]),u("div",kv,[u("label",Sv,P(h.$t("modals.peer-edit.allowed-ip.label")),1),w1(Z(D2),{class:"form-control",tags:f.value.AllowedIPs.Value,placeholder:h.$t("modals.peer-edit.allowed-ip.placeholder"),"add-tag-on-keys":[13,188,32,9],validate:Z(V6),onOnTagsChanged:y},null,8,["tags","placeholder","validate"])]),u("div",Pv,[u("label",Tv,P(h.$t("modals.peer-edit.extra-allowed-ip.label")),1),w1(Z(D2),{class:"form-control",tags:f.value.ExtraAllowedIPs,placeholder:h.$t("modals.peer-edit.extra-allowed-ip.placeholder"),"add-tag-on-keys":[13,188,32,9],validate:Z(V6),onOnTagsChanged:T},null,8,["tags","placeholder","validate"]),u("small",Iv,P(h.$t("modals.peer-edit.extra-allowed-ip.description")),1)]),u("div",$v,[u("label",Ov,P(h.$t("modals.peer-edit.dns.label")),1),w1(Z(D2),{class:"form-control",tags:f.value.Dns.Value,placeholder:h.$t("modals.peer-edit.dns.placeholder"),"add-tag-on-keys":[13,188,32,9],validate:Z(c9),onOnTagsChanged:$},null,8,["tags","placeholder","validate"])]),u("div",xv,[u("label",Nv,P(h.$t("modals.peer-edit.dns-search.label")),1),w1(Z(D2),{class:"form-control",tags:f.value.DnsSearch.Value,placeholder:h.$t("modals.peer-edit.dns-search.label"),"add-tag-on-keys":[13,188,32,9],validate:Z(e9),onOnTagsChanged:E},null,8,["tags","placeholder","validate"])]),u("div",Dv,[u("div",Rv,[u("label",Fv,P(h.$t("modals.peer-edit.keep-alive.label")),1),I1(u("input",{type:"number",class:"form-control",placeholder:h.$t("modals.peer-edit.keep-alive.label"),"onUpdate:modelValue":m[7]||(m[7]=M=>f.value.PersistentKeepalive.Value=M)},null,8,Uv),[[U1,f.value.PersistentKeepalive.Value]])]),u("div",jv,[u("label",Wv,P(h.$t("modals.peer-edit.mtu.label")),1),I1(u("input",{type:"number",class:"form-control",placeholder:h.$t("modals.peer-edit.mtu.label"),"onUpdate:modelValue":m[8]||(m[8]=M=>f.value.Mtu.Value=M)},null,8,qv),[[U1,f.value.Mtu.Value]])])])]),u("fieldset",null,[u("legend",Kv,P(h.$t("modals.peer-edit.header-hooks")),1),u("div",Bv,[u("label",Gv,P(h.$t("modals.peer-edit.pre-up.label")),1),I1(u("textarea",{"onUpdate:modelValue":m[9]||(m[9]=M=>f.value.PreUp.Value=M),class:"form-control",rows:"2",placeholder:h.$t("modals.peer-edit.pre-up.placeholder")},null,8,Yv),[[U1,f.value.PreUp.Value]])]),u("div",Zv,[u("label",Xv,P(h.$t("modals.peer-edit.post-up.label")),1),I1(u("textarea",{"onUpdate:modelValue":m[10]||(m[10]=M=>f.value.PostUp.Value=M),class:"form-control",rows:"2",placeholder:h.$t("modals.peer-edit.post-up.placeholder")},null,8,Qv),[[U1,f.value.PostUp.Value]])]),u("div",Jv,[u("label",cH,P(h.$t("modals.peer-edit.pre-down.label")),1),I1(u("textarea",{"onUpdate:modelValue":m[11]||(m[11]=M=>f.value.PreDown.Value=M),class:"form-control",rows:"2",placeholder:h.$t("modals.peer-edit.pre-down.placeholder")},null,8,eH),[[U1,f.value.PreDown.Value]])]),u("div",tH,[u("label",sH,P(h.$t("modals.peer-edit.post-down.label")),1),I1(u("textarea",{"onUpdate:modelValue":m[12]||(m[12]=M=>f.value.PostDown.Value=M),class:"form-control",rows:"2",placeholder:h.$t("modals.peer-edit.post-down.placeholder")},null,8,lH),[[U1,f.value.PostDown.Value]])])]),u("fieldset",null,[u("legend",aH,P(h.$t("modals.peer-edit.header-state")),1),u("div",nH,[u("div",rH,[u("div",iH,[I1(u("input",{class:"form-check-input",type:"checkbox","onUpdate:modelValue":m[13]||(m[13]=M=>f.value.Disabled=M)},null,512),[[x0,f.value.Disabled]]),u("label",oH,P(h.$t("modals.peer-edit.disabled.label")),1)]),u("div",uH,[I1(u("input",{class:"form-check-input",type:"checkbox","onUpdate:modelValue":m[14]||(m[14]=M=>f.value.IgnoreGlobalSettings=M)},null,512),[[x0,f.value.IgnoreGlobalSettings]]),u("label",fH,P(h.$t("modals.peer-edit.ignore-global.label")),1)])]),u("div",dH,[u("label",hH,P(h.$t("modals.peer-edit.expires-at.label")),1),I1(u("input",{type:"date",pattern:"\\d{4}-\\d{2}-\\d{2}",class:"form-control",min:"2023-01-01","onUpdate:modelValue":m[15]||(m[15]=M=>f.value.ExpiresAt=M)},null,512),[[U1,f.value.ExpiresAt]])])])])]),footer:o2(()=>[u("div",mH,[n.peerId!=="#NEW#"?(e1(),o1("button",{key:0,class:"btn btn-danger me-1",type:"button",onClick:Y1(C,["prevent"])},P(h.$t("general.delete")),1)):$1("",!0)]),u("button",{class:"btn btn-primary me-1",type:"button",onClick:Y1(z,["prevent"])},P(h.$t("general.save")),1),u("button",{class:"btn btn-secondary",type:"button",onClick:Y1(v,["prevent"])},P(h.$t("general.close")),1)]),_:1},8,["title","visible"]))}},pH={class:"form-group"},vH={class:"form-label mt-4"},HH={class:"form-text text-muted"},VH={class:"form-group"},gH={class:"form-label mt-4"},MH=["placeholder"],CH={class:"form-text text-muted"},LH={__name:"PeerMultiCreateModal",props:{visible:Boolean},emits:["close"],setup(c,{emit:e}){const{t}=v4(),s=N8(),l=o4(),a=c,n=e,r=x1(()=>{let y=l.GetSelected;return y||(y=U4()),y});function i(){return{Identifiers:[],Suffix:""}}const o=Z1(i()),d=x1(()=>a.visible?r.value.Mode==="server"?t("modals.peer-multi-create.headline-peer"):t("modals.peer-multi-create.headline-endpoint"):"");function f(){o.value=i(),n("close")}function v(y){o.value.Identifiers=y}async function _(){if(o.value.Identifiers.length===0){D1({title:"Missing Identifiers",text:"At least one identifier is required to create a new peer.",type:"error"});return}try{await s.CreateMultiplePeers(r.value.Identifier,o.value),f()}catch(y){console.log(y),D1({title:"Failed to create peers!",text:y.toString(),type:"error"})}}return(y,T)=>(e1(),N3(x8,{title:d.value,visible:c.visible,onClose:f},{default:o2(()=>[u("fieldset",null,[u("div",pH,[u("label",vH,P(y.$t("modals.peer-multi-create.identifiers.label")),1),w1(Z(D2),{class:"form-control",tags:o.value.Identifiers,placeholder:y.$t("modals.peer-multi-create.identifiers.placeholder"),"add-tag-on-keys":[13,188,32,9],onOnTagsChanged:v},null,8,["tags","placeholder"]),u("small",HH,P(y.$t("modals.peer-multi-create.identifiers.description")),1)]),u("div",VH,[u("label",gH,P(y.$t("modals.peer-multi-create.prefix.label")),1),I1(u("input",{type:"text",class:"form-control",placeholder:y.$t("modals.peer-multi-create.prefix.placeholder"),"onUpdate:modelValue":T[0]||(T[0]=$=>o.value.Suffix=$)},null,8,MH),[[U1,o.value.Suffix]]),u("small",CH,P(y.$t("modals.peer-multi-create.prefix.description")),1)])])]),footer:o2(()=>[u("button",{class:"btn btn-primary me-1",type:"button",onClick:Y1(_,["prevent"])},P(y.$t("general.save")),1),u("button",{class:"btn btn-secondary",type:"button",onClick:Y1(f,["prevent"])},P(y.$t("general.close")),1)]),_:1},8,["title","visible"]))}},bH={class:"nav nav-tabs"},_H={class:"nav-item"},yH={class:"nav-link active","data-bs-toggle":"tab",href:"#interface"},wH={key:0,class:"nav-item"},EH={class:"nav-link","data-bs-toggle":"tab",href:"#peerdefaults"},AH={id:"interfaceTabs",class:"tab-content"},kH={id:"interface",class:"tab-pane fade active show"},SH={class:"mt-4"},PH={key:0,class:"form-group"},TH={class:"form-label mt-4"},IH=["placeholder"],$H={class:"form-group"},OH={class:"form-label mt-4"},xH={value:"server"},NH={value:"client"},DH={value:"any"},RH={class:"form-group"},FH={class:"form-label mt-4"},UH=["placeholder"],jH={class:"mt-4"},WH={class:"form-group"},qH={class:"form-label mt-4"},KH=["placeholder"],BH={class:"form-group"},GH={class:"form-label mt-4"},YH=["placeholder"],ZH={class:"mt-4"},XH={class:"form-group"},QH={class:"form-label mt-4"},JH={key:0,class:"form-group"},cV={class:"form-label mt-4"},eV=["placeholder"],tV={key:1,class:"form-group"},sV={class:"form-label mt-4"},lV={key:2,class:"form-group"},aV={class:"form-label mt-4"},nV={class:"row"},rV={class:"form-group col-md-6"},iV={class:"form-label mt-4"},oV=["placeholder"],uV={class:"form-group col-md-6"},fV={class:"form-label mt-4"},dV=["placeholder"],hV={class:"row"},mV={class:"form-group col-md-6"},zV={class:"form-label mt-4"},pV=["placeholder"],vV={id:"routingTableHelp",class:"form-text text-muted"},HV=u("div",{class:"form-group col-md-6"},null,-1),VV={class:"mt-4"},gV={class:"form-group"},MV={class:"form-label mt-4"},CV=["placeholder"],LV={class:"form-group"},bV={class:"form-label mt-4"},_V=["placeholder"],yV={class:"form-group"},wV={class:"form-label mt-4"},EV=["placeholder"],AV={class:"form-group"},kV={class:"form-label mt-4"},SV=["placeholder"],PV={class:"mt-4"},TV={class:"form-check form-switch"},IV={class:"form-check-label"},$V={class:"form-check form-switch"},OV={class:"form-check-label"},xV={id:"peerdefaults",class:"tab-pane fade"},NV={class:"mt-4"},DV={class:"form-group"},RV={class:"form-label mt-4"},FV=["placeholder"],UV={class:"form-text text-muted"},jV={class:"form-group"},WV={class:"form-label mt-4"},qV={class:"form-text text-muted"},KV={class:"form-group"},BV={class:"form-label mt-4"},GV={class:"form-group"},YV={class:"form-label mt-4"},ZV={class:"form-group"},XV={class:"form-label mt-4"},QV={class:"row"},JV={class:"form-group col-md-6"},cg={class:"form-label mt-4"},eg=["placeholder"],tg={class:"form-group col-md-6"},sg={class:"form-label mt-4"},lg=["placeholder"],ag={class:"row"},ng={class:"form-group col-md-6"},rg={class:"form-label mt-4"},ig=["placeholder"],og={class:"form-group col-md-6"},ug={class:"form-label mt-4"},fg=["placeholder"],dg={class:"mt-4"},hg={class:"form-group"},mg={class:"form-label mt-4"},zg=["placeholder"],pg={class:"form-group"},vg={class:"form-label mt-4"},Hg=["placeholder"],Vg={class:"form-group"},gg={class:"form-label mt-4"},Mg=["placeholder"],Cg={class:"form-group"},Lg={class:"form-label mt-4"},bg=["placeholder"],_g={key:0,class:"text-end"},yg=u("hr",{class:"mt-4"},null,-1),wg={class:"flex-fill text-start"},Eg={__name:"InterfaceEditModal",props:{interfaceId:String,visible:Boolean},emits:["close"],setup(c,{emit:e}){const{t}=v4(),s=o4(),l=N8(),a=c,n=e,r=x1(()=>s.Find(a.interfaceId)),i=x1(()=>a.visible?r.value?t("modals.interface-edit.headline-edit")+" "+r.value.Identifier:t("modals.interface-edit.headline-new"):""),o=Z1(U4());I2(()=>a.visible,async(m,M)=>{M===!1&&m===!0&&(console.log(r.value),r.value?(o.value.Disabled=r.value.Disabled,o.value.Identifier=r.value.Identifier,o.value.DisplayName=r.value.DisplayName,o.value.Mode=r.value.Mode,o.value.PublicKey=r.value.PublicKey,o.value.PrivateKey=r.value.PrivateKey,o.value.ListenPort=r.value.ListenPort,o.value.Addresses=r.value.Addresses,o.value.Dns=r.value.Dns,o.value.DnsSearch=r.value.DnsSearch,o.value.Mtu=r.value.Mtu,o.value.FirewallMark=r.value.FirewallMark,o.value.RoutingTable=r.value.RoutingTable,o.value.PreUp=r.value.PreUp,o.value.PostUp=r.value.PostUp,o.value.PreDown=r.value.PreDown,o.value.PostDown=r.value.PostDown,o.value.SaveConfig=r.value.SaveConfig,o.value.PeerDefNetwork=r.value.PeerDefNetwork,o.value.PeerDefDns=r.value.PeerDefDns,o.value.PeerDefDnsSearch=r.value.PeerDefDnsSearch,o.value.PeerDefEndpoint=r.value.PeerDefEndpoint,o.value.PeerDefAllowedIPs=r.value.PeerDefAllowedIPs,o.value.PeerDefMtu=r.value.PeerDefMtu,o.value.PeerDefPersistentKeepalive=r.value.PeerDefPersistentKeepalive,o.value.PeerDefFirewallMark=r.value.PeerDefFirewallMark,o.value.PeerDefRoutingTable=r.value.PeerDefRoutingTable,o.value.PeerDefPreUp=r.value.PeerDefPreUp,o.value.PeerDefPostUp=r.value.PeerDefPostUp,o.value.PeerDefPreDown=r.value.PeerDefPreDown,o.value.PeerDefPostDown=r.value.PeerDefPostDown):(await s.PrepareInterface(),o.value.Identifier=s.Prepared.Identifier,o.value.DisplayName=s.Prepared.DisplayName,o.value.Mode=s.Prepared.Mode,o.value.PublicKey=s.Prepared.PublicKey,o.value.PrivateKey=s.Prepared.PrivateKey,o.value.ListenPort=s.Prepared.ListenPort,o.value.Addresses=s.Prepared.Addresses,o.value.Dns=s.Prepared.Dns,o.value.DnsSearch=s.Prepared.DnsSearch,o.value.Mtu=s.Prepared.Mtu,o.value.FirewallMark=s.Prepared.FirewallMark,o.value.RoutingTable=s.Prepared.RoutingTable,o.value.PreUp=s.Prepared.PreUp,o.value.PostUp=s.Prepared.PostUp,o.value.PreDown=s.Prepared.PreDown,o.value.PostDown=s.Prepared.PostDown,o.value.SaveConfig=s.Prepared.SaveConfig,o.value.PeerDefNetwork=s.Prepared.PeerDefNetwork,o.value.PeerDefDns=s.Prepared.PeerDefDns,o.value.PeerDefDnsSearch=s.Prepared.PeerDefDnsSearch,o.value.PeerDefEndpoint=s.Prepared.PeerDefEndpoint,o.value.PeerDefAllowedIPs=s.Prepared.PeerDefAllowedIPs,o.value.PeerDefMtu=s.Prepared.PeerDefMtu,o.value.PeerDefPersistentKeepalive=s.Prepared.PeerDefPersistentKeepalive,o.value.PeerDefFirewallMark=s.Prepared.PeerDefFirewallMark,o.value.PeerDefRoutingTable=s.Prepared.PeerDefRoutingTable,o.value.PeerDefPreUp=s.Prepared.PeerDefPreUp,o.value.PeerDefPostUp=s.Prepared.PeerDefPostUp,o.value.PeerDefPreDown=s.Prepared.PeerDefPreDown,o.value.PeerDefPostDown=s.Prepared.PeerDefPostDown))});function d(){o.value=U4(),n("close")}function f(m){let M=!0;m.forEach(b=>{x4(b)===0&&(M=!1,D1({title:"Invalid CIDR",text:b+" is not a valid IP address",type:"error"}))}),M&&(o.value.Addresses=m)}function v(m){let M=!0;m.forEach(b=>{R0(b)||(M=!1,D1({title:"Invalid IP",text:b+" is not a valid IP address",type:"error"}))}),M&&(o.value.Dns=m)}function _(m){o.value.DnsSearch=m}function y(m){let M=!0;m.forEach(b=>{x4(b)===0&&(M=!1,D1({title:"Invalid CIDR",text:b+" is not a valid IP address",type:"error"}))}),M&&(o.value.PeerDefNetwork=m)}function T(m){let M=!0;m.forEach(b=>{x4(b)===0&&(M=!1,D1({title:"Invalid CIDR",text:b+" is not a valid IP address",type:"error"}))}),M&&(o.value.PeerDefAllowedIPs=m)}function $(m){let M=!0;m.forEach(b=>{R0(b)||(M=!1,D1({title:"Invalid IP",text:b+" is not a valid IP address",type:"error"}))}),M&&(o.value.PeerDefDns=m)}function E(m){o.value.PeerDefDnsSearch=m}async function z(){try{a.interfaceId!=="#NEW#"?await s.UpdateInterface(r.value.Identifier,o.value):await s.CreateInterface(o.value),d()}catch(m){console.log(m),D1({title:"Failed to save interface!",text:m.toString(),type:"error"})}}async function C(){if(a.interfaceId!=="#NEW#")try{await s.ApplyPeerDefaults(r.value.Identifier,o.value),D1({title:"Peer Defaults Applied",text:"Applied current peer defaults to all available peers.",type:"success"}),await l.LoadPeers(r.value.Identifier)}catch(m){console.log(m),D1({title:"Failed to apply peer defaults!",text:m.toString(),type:"error"})}}async function h(){try{await s.DeleteInterface(r.value.Identifier),d()}catch(m){console.log(m),D1({title:"Failed to delete interface!",text:m.toString(),type:"error"})}}return(m,M)=>(e1(),N3(x8,{title:i.value,visible:c.visible,onClose:d},{default:o2(()=>[u("ul",bH,[u("li",_H,[u("a",yH,P(m.$t("modals.interface-edit.tab-interface")),1)]),o.value.Mode==="server"?(e1(),o1("li",wH,[u("a",EH,P(m.$t("modals.interface-edit.tab-peerdef")),1)])):$1("",!0)]),u("div",AH,[u("div",kH,[u("fieldset",null,[u("legend",SH,P(m.$t("modals.interface-edit.header-general")),1),a.interfaceId==="#NEW#"?(e1(),o1("div",PH,[u("label",TH,P(m.$t("modals.interface-edit.identifier.label")),1),I1(u("input",{"onUpdate:modelValue":M[0]||(M[0]=b=>o.value.Identifier=b),class:"form-control",placeholder:m.$t("modals.interface-edit.identifier.placeholder"),type:"text"},null,8,IH),[[U1,o.value.Identifier]])])):$1("",!0),u("div",$H,[u("label",OH,P(m.$t("modals.interface-edit.mode.label")),1),I1(u("select",{"onUpdate:modelValue":M[1]||(M[1]=b=>o.value.Mode=b),class:"form-select"},[u("option",xH,P(m.$t("modals.interface-edit.mode.server")),1),u("option",NH,P(m.$t("modals.interface-edit.mode.client")),1),u("option",DH,P(m.$t("modals.interface-edit.mode.any")),1)],512),[[$7,o.value.Mode]])]),u("div",RH,[u("label",FH,P(m.$t("modals.interface-edit.display-name.label")),1),I1(u("input",{"onUpdate:modelValue":M[2]||(M[2]=b=>o.value.DisplayName=b),class:"form-control",placeholder:m.$t("modals.interface-edit.display-name.placeholder"),type:"text"},null,8,UH),[[U1,o.value.DisplayName]])])]),u("fieldset",null,[u("legend",jH,P(m.$t("modals.interface-edit.header-crypto")),1),u("div",WH,[u("label",qH,P(m.$t("modals.interface-edit.private-key.label")),1),I1(u("input",{"onUpdate:modelValue":M[3]||(M[3]=b=>o.value.PrivateKey=b),class:"form-control",placeholder:m.$t("modals.interface-edit.private-key.placeholder"),required:"",type:"email"},null,8,KH),[[U1,o.value.PrivateKey]])]),u("div",BH,[u("label",GH,P(m.$t("modals.interface-edit.public-key.label")),1),I1(u("input",{"onUpdate:modelValue":M[4]||(M[4]=b=>o.value.PublicKey=b),class:"form-control",placeholder:m.$t("modals.interface-edit.public-key.placeholder"),required:"",type:"email"},null,8,YH),[[U1,o.value.PublicKey]])])]),u("fieldset",null,[u("legend",ZH,P(m.$t("modals.interface-edit.header-network")),1),u("div",XH,[u("label",QH,P(m.$t("modals.interface-edit.ip.label")),1),w1(Z(D2),{class:"form-control",tags:o.value.Addresses,placeholder:m.$t("modals.interface-edit.ip.placeholder"),"add-tag-on-keys":[13,188,32,9],validate:Z(V6),onOnTagsChanged:f},null,8,["tags","placeholder","validate"])]),o.value.Mode==="server"?(e1(),o1("div",JH,[u("label",cV,P(m.$t("modals.interface-edit.listen-port.label")),1),I1(u("input",{"onUpdate:modelValue":M[5]||(M[5]=b=>o.value.ListenPort=b),class:"form-control",placeholder:m.$t("modals.interface-edit.listen-port.placeholder"),type:"number"},null,8,eV),[[U1,o.value.ListenPort]])])):$1("",!0),o.value.Mode!=="server"?(e1(),o1("div",tV,[u("label",sV,P(m.$t("modals.interface-edit.dns.label")),1),w1(Z(D2),{class:"form-control",tags:o.value.Dns,placeholder:m.$t("modals.interface-edit.dns.placeholder"),"add-tag-on-keys":[13,188,32,9],validate:Z(c9),onOnTagsChanged:v},null,8,["tags","placeholder","validate"])])):$1("",!0),o.value.Mode!=="server"?(e1(),o1("div",lV,[u("label",aV,P(m.$t("modals.interface-edit.dns-search.label")),1),w1(Z(D2),{class:"form-control",tags:o.value.DnsSearch,placeholder:m.$t("modals.interface-edit.dns-search.placeholder"),"add-tag-on-keys":[13,188,32,9],validate:Z(e9),onOnTagsChanged:_},null,8,["tags","placeholder","validate"])])):$1("",!0),u("div",nV,[u("div",rV,[u("label",iV,P(m.$t("modals.interface-edit.mtu.label")),1),I1(u("input",{"onUpdate:modelValue":M[6]||(M[6]=b=>o.value.Mtu=b),class:"form-control",placeholder:m.$t("modals.interface-edit.mtu.placeholder"),type:"number"},null,8,oV),[[U1,o.value.Mtu]])]),u("div",uV,[u("label",fV,P(m.$t("modals.interface-edit.firewall-mark.label")),1),I1(u("input",{"onUpdate:modelValue":M[7]||(M[7]=b=>o.value.FirewallMark=b),class:"form-control",placeholder:m.$t("modals.interface-edit.firewall-mark.placeholder"),type:"number"},null,8,dV),[[U1,o.value.FirewallMark]])])]),u("div",hV,[u("div",mV,[u("label",zV,P(m.$t("modals.interface-edit.routing-table.label")),1),I1(u("input",{"onUpdate:modelValue":M[8]||(M[8]=b=>o.value.RoutingTable=b),"aria-describedby":"routingTableHelp",class:"form-control",placeholder:m.$t("modals.interface-edit.routing-table.placeholder"),type:"text"},null,8,pV),[[U1,o.value.RoutingTable]]),u("small",vV,P(m.$t("modals.interface-edit.routing-table.description")),1)]),HV])]),u("fieldset",null,[u("legend",VV,P(m.$t("modals.interface-edit.header-hooks")),1),u("div",gV,[u("label",MV,P(m.$t("modals.interface-edit.pre-up.label")),1),I1(u("textarea",{"onUpdate:modelValue":M[9]||(M[9]=b=>o.value.PreUp=b),class:"form-control",rows:"2",placeholder:m.$t("modals.interface-edit.pre-up.placeholder")},null,8,CV),[[U1,o.value.PreUp]])]),u("div",LV,[u("label",bV,P(m.$t("modals.interface-edit.post-up.label")),1),I1(u("textarea",{"onUpdate:modelValue":M[10]||(M[10]=b=>o.value.PostUp=b),class:"form-control",rows:"2",placeholder:m.$t("modals.interface-edit.post-up.placeholder")},null,8,_V),[[U1,o.value.PostUp]])]),u("div",yV,[u("label",wV,P(m.$t("modals.interface-edit.pre-down.label")),1),I1(u("textarea",{"onUpdate:modelValue":M[11]||(M[11]=b=>o.value.PreDown=b),class:"form-control",rows:"2",placeholder:m.$t("modals.interface-edit.pre-down.placeholder")},null,8,EV),[[U1,o.value.PreDown]])]),u("div",AV,[u("label",kV,P(m.$t("modals.interface-edit.post-down.label")),1),I1(u("textarea",{"onUpdate:modelValue":M[12]||(M[12]=b=>o.value.PostDown=b),class:"form-control",rows:"2",placeholder:m.$t("modals.interface-edit.post-down.placeholder")},null,8,SV),[[U1,o.value.PostDown]])])]),u("fieldset",null,[u("legend",PV,P(m.$t("modals.interface-edit.header-state")),1),u("div",TV,[I1(u("input",{"onUpdate:modelValue":M[13]||(M[13]=b=>o.value.Disabled=b),class:"form-check-input",type:"checkbox"},null,512),[[x0,o.value.Disabled]]),u("label",IV,P(m.$t("modals.interface-edit.disabled.label")),1)]),u("div",$V,[I1(u("input",{"onUpdate:modelValue":M[14]||(M[14]=b=>o.value.SaveConfig=b),checked:"",class:"form-check-input",type:"checkbox"},null,512),[[x0,o.value.SaveConfig]]),u("label",OV,P(m.$t("modals.interface-edit.save-config.label")),1)])])]),u("div",xV,[u("fieldset",null,[u("legend",NV,P(m.$t("modals.interface-edit.header-network")),1),u("div",DV,[u("label",RV,P(m.$t("modals.interface-edit.defaults.endpoint.label")),1),I1(u("input",{"onUpdate:modelValue":M[15]||(M[15]=b=>o.value.PeerDefEndpoint=b),class:"form-control",placeholder:m.$t("modals.interface-edit.defaults.endpoint.placeholder"),type:"text"},null,8,FV),[[U1,o.value.PeerDefEndpoint]]),u("small",UV,P(m.$t("modals.interface-edit.defaults.endpoint.description")),1)]),u("div",jV,[u("label",WV,P(m.$t("modals.interface-edit.defaults.networks.label")),1),w1(Z(D2),{class:"form-control",tags:o.value.PeerDefNetwork,placeholder:m.$t("modals.interface-edit.defaults.networks.placeholder"),"add-tag-on-keys":[13,188,32,9],validate:Z(V6),onOnTagsChanged:y},null,8,["tags","placeholder","validate"]),u("small",qV,P(m.$t("modals.interface-edit.defaults.networks.description")),1)]),u("div",KV,[u("label",BV,P(m.$t("modals.interface-edit.defaults.allowed-ip.label")),1),w1(Z(D2),{class:"form-control",tags:o.value.PeerDefAllowedIPs,placeholder:m.$t("modals.interface-edit.defaults.allowed-ip.placeholder"),"add-tag-on-keys":[13,188,32,9],validate:Z(V6),onOnTagsChanged:T},null,8,["tags","placeholder","validate"])]),u("div",GV,[u("label",YV,P(m.$t("modals.interface-edit.dns.label")),1),w1(Z(D2),{class:"form-control",tags:o.value.PeerDefDns,placeholder:m.$t("modals.interface-edit.dns.placeholder"),"add-tag-on-keys":[13,188,32,9],validate:Z(c9),onOnTagsChanged:$},null,8,["tags","placeholder","validate"])]),u("div",ZV,[u("label",XV,P(m.$t("modals.interface-edit.dns-search.label")),1),w1(Z(D2),{class:"form-control",tags:o.value.PeerDefDnsSearch,placeholder:m.$t("modals.interface-edit.dns-search.placeholder"),"add-tag-on-keys":[13,188,32,9],validate:Z(e9),onOnTagsChanged:E},null,8,["tags","placeholder","validate"])]),u("div",QV,[u("div",JV,[u("label",cg,P(m.$t("modals.interface-edit.defaults.mtu.label")),1),I1(u("input",{"onUpdate:modelValue":M[16]||(M[16]=b=>o.value.PeerDefMtu=b),class:"form-control",placeholder:m.$t("modals.interface-edit.defaults.mtu.placeholder"),type:"number"},null,8,eg),[[U1,o.value.PeerDefMtu]])]),u("div",tg,[u("label",sg,P(m.$t("modals.interface-edit.firewall-mark.label")),1),I1(u("input",{"onUpdate:modelValue":M[17]||(M[17]=b=>o.value.PeerDefFirewallMark=b),class:"form-control",placeholder:m.$t("modals.interface-edit.firewall-mark.placeholder"),type:"number"},null,8,lg),[[U1,o.value.PeerDefFirewallMark]])])]),u("div",ag,[u("div",ng,[u("label",rg,P(m.$t("modals.interface-edit.routing-table.label")),1),I1(u("input",{"onUpdate:modelValue":M[18]||(M[18]=b=>o.value.PeerDefRoutingTable=b),class:"form-control",placeholder:m.$t("modals.interface-edit.routing-table.placeholder"),type:"number"},null,8,ig),[[U1,o.value.PeerDefRoutingTable]])]),u("div",og,[u("label",ug,P(m.$t("modals.interface-edit.defaults.keep-alive.label")),1),I1(u("input",{"onUpdate:modelValue":M[19]||(M[19]=b=>o.value.PeerDefPersistentKeepalive=b),class:"form-control",placeholder:m.$t("modals.interface-edit.defaults.keep-alive.placeholder"),type:"number"},null,8,fg),[[U1,o.value.PeerDefPersistentKeepalive]])])])]),u("fieldset",null,[u("legend",dg,P(m.$t("modals.interface-edit.header-peer-hooks")),1),u("div",hg,[u("label",mg,P(m.$t("modals.interface-edit.pre-up.label")),1),I1(u("textarea",{"onUpdate:modelValue":M[20]||(M[20]=b=>o.value.PeerDefPreUp=b),class:"form-control",rows:"2",placeholder:m.$t("modals.interface-edit.pre-up.placeholder")},null,8,zg),[[U1,o.value.PeerDefPreUp]])]),u("div",pg,[u("label",vg,P(m.$t("modals.interface-edit.post-up.label")),1),I1(u("textarea",{"onUpdate:modelValue":M[21]||(M[21]=b=>o.value.PeerDefPostUp=b),class:"form-control",rows:"2",placeholder:m.$t("modals.interface-edit.post-up.placeholder")},null,8,Hg),[[U1,o.value.PeerDefPostUp]])]),u("div",Vg,[u("label",gg,P(m.$t("modals.interface-edit.pre-down.label")),1),I1(u("textarea",{"onUpdate:modelValue":M[22]||(M[22]=b=>o.value.PeerDefPreDown=b),class:"form-control",rows:"2",placeholder:m.$t("modals.interface-edit.pre-down.placeholder")},null,8,Mg),[[U1,o.value.PeerDefPreDown]])]),u("div",Cg,[u("label",Lg,P(m.$t("modals.interface-edit.post-down.label")),1),I1(u("textarea",{"onUpdate:modelValue":M[23]||(M[23]=b=>o.value.PeerDefPostDown=b),class:"form-control",rows:"2",placeholder:m.$t("modals.interface-edit.post-down.placeholder")},null,8,bg),[[U1,o.value.PeerDefPostDown]])])]),a.interfaceId!=="#NEW#"?(e1(),o1("fieldset",_g,[yg,u("button",{class:"btn btn-primary me-1",type:"button",onClick:Y1(C,["prevent"])},P(m.$t("modals.interface-edit.button-apply-defaults")),1)])):$1("",!0)])])]),footer:o2(()=>[u("div",wg,[a.interfaceId!=="#NEW#"?(e1(),o1("button",{key:0,class:"btn btn-danger me-1",type:"button",onClick:Y1(h,["prevent"])},P(m.$t("general.delete")),1)):$1("",!0)]),u("button",{class:"btn btn-primary me-1",type:"button",onClick:Y1(z,["prevent"])},P(m.$t("general.save")),1),u("button",{class:"btn btn-secondary",type:"button",onClick:Y1(d,["prevent"])},P(m.$t("general.close")),1)]),_:1},8,["title","visible"]))}};Prism.languages.ini={comment:{pattern:/(^[ \f\t\v]*)[#;][^\n\r]*/m,lookbehind:!0},section:{pattern:/(^[ \f\t\v]*)\[[^\n\r\]]*\]?/m,lookbehind:!0,inside:{"section-name":{pattern:/(^\[[ \f\t\v]*)[^ \f\t\v\]]+(?:[ \f\t\v]+[^ \f\t\v\]]+)*/,lookbehind:!0,alias:"selector"},punctuation:/\[|\]/}},key:{pattern:/(^[ \f\t\v]*)[^ \f\n\r\t\v=]+(?:[ \f\t\v]+[^ \f\n\r\t\v=]+)*(?=[ \f\t\v]*=)/m,lookbehind:!0,alias:"attr-name"},value:{pattern:/(=[ \f\t\v]*)[^ \f\n\r\t\v]+(?:[ \f\t\v]+[^ \f\n\r\t\v]+)*/,lookbehind:!0,alias:"attr-value",inside:{"inner-value":{pattern:/^("|').+(?=\1$)/,lookbehind:!0}}},punctuation:/=/};const Ag={__name:"InterfaceViewModal",props:{interfaceId:String,visible:Boolean},emits:["close"],setup(c,{emit:e}){const{t}=v4(),s=o4(),l=c,a=Z1(""),n=e,r=x1(()=>s.Find(l.interfaceId)),i=x1(()=>l.visible?t("modals.interface-view.headline")+" "+r.value.Identifier:"");I2(()=>l.visible,async(d,f)=>{f===!1&&d===!0&&(console.log(r.value),await s.LoadInterfaceConfig(r.value.Identifier),a.value=s.configuration)});function o(){n("close")}return(d,f)=>(e1(),N3(x8,{title:i.value,visible:c.visible,onClose:o},{default:o2(()=>[w1(Z(wa),{language:"ini",code:a.value},null,8,["code"])]),footer:o2(()=>[u("button",{class:"btn btn-primary",type:"button",onClick:Y1(o,["prevent"])},P(d.$t("general.close")),1)]),_:1},8,["title","visible"]))}},kg={class:"page-header row"},Sg={class:"col-12 col-lg-8"},Pg={class:"col-12 col-lg-4 text-end"},Tg=u("div",{class:"form-group"},null,-1),Ig={class:"form-group"},$g={class:"input-group mb-3"},Og=["title"],xg=u("i",{class:"fa-solid fa-plus-circle"},null,-1),Ng=[xg],Dg=["disabled"],Rg={key:0,value:"nothing"},Fg=["value"],Ug={key:0,class:"row"},jg={class:"col-lg-12"},Wg={class:"mt-5"},qg={key:1,class:"row"},Kg={class:"col-lg-12"},Bg={class:"card border-secondary mb-4",style:{"min-height":"15rem"}},Gg={class:"card-header"},Yg={class:"row"},Zg={class:"col-12 col-lg-8"},Xg={key:0,class:"text-danger"},Qg=["title"],Jg={class:"col-12 col-lg-4 text-lg-end"},cM=["title"],eM=u("i",{class:"fas fa-eye"},null,-1),tM=[eM],sM=["title"],lM=u("i",{class:"fas fa-download"},null,-1),aM=[lM],nM=["title"],rM=u("i",{class:"fas fa-save"},null,-1),iM=[rM],oM=["title"],uM=u("i",{class:"fas fa-cog"},null,-1),fM=[uM],dM={class:"card-body d-flex flex-column"},hM={key:0,class:"row"},mM={class:"col-sm-6"},zM={class:"table table-sm table-borderless device-status-table"},pM={class:"col-sm-6"},vM={class:"table table-sm table-borderless device-status-table"},HM={key:1,class:"row"},VM={class:"col-sm-6"},gM={class:"table table-sm table-borderless device-status-table"},MM={class:"col-sm-6"},CM={class:"table table-sm table-borderless device-status-table"},LM={key:2,class:"row"},bM={class:"col-sm-6"},_M={class:"table table-sm table-borderless device-status-table"},yM={class:"col-sm-6"},wM={class:"table table-sm table-borderless device-status-table"},EM={key:2,class:"mt-4 row"},AM={class:"col-12 col-lg-5"},kM={key:0,class:"mt-2"},SM={key:1,class:"mt-2"},PM={class:"col-12 col-lg-4 text-lg-end"},TM={class:"form-group d-inline"},IM={class:"input-group mb-3"},$M=["placeholder"],OM=["title"],xM=u("i",{class:"fa-solid fa-search"},null,-1),NM=[xM],DM={class:"col-12 col-lg-3 text-lg-end"},RM=["title"],FM=u("i",{class:"fa fa-plus me-1"},null,-1),UM=u("i",{class:"fa fa-users"},null,-1),jM=[FM,UM],WM=["title"],qM=u("i",{class:"fa fa-plus me-1"},null,-1),KM=u("i",{class:"fa fa-user"},null,-1),BM=[qM,KM],GM={key:3,class:"mt-2 table-responsive"},YM={key:0},ZM={key:1,id:"peerTable",class:"table table-sm"},XM={scope:"col"},QM=["title"],JM=u("th",{scope:"col"},null,-1),cC={scope:"col"},eC={scope:"col"},tC={scope:"col"},sC={key:0,scope:"col"},lC={key:1,scope:"col"},aC=u("th",{scope:"col"},null,-1),nC=u("th",{scope:"row"},[u("input",{id:"flexCheckDefault",class:"form-check-input",type:"checkbox",value:""})],-1),rC={class:"text-center"},iC=["title"],oC=u("i",{class:"fa fa-circle-xmark"},null,-1),uC=[oC],fC=["title"],dC=u("i",{class:"fas fa-hourglass-end expiring-peer"},null,-1),hC=[dC],mC=["title"],zC=["title"],pC={key:0},vC={key:1},HC={key:0},VC=["title"],gC=u("i",{class:"fa-solid fa-link"},null,-1),MC=[gC],CC=["title"],LC={key:1},bC=["title"],_C=u("i",{class:"fa-solid fa-link-slash"},null,-1),yC=[_C],wC={class:"text-center"},EC=["title","onClick"],AC=u("i",{class:"fas fa-eye me-2"},null,-1),kC=[AC],SC=["title","onClick"],PC=u("i",{class:"fas fa-cog"},null,-1),TC=[PC],IC={key:4},$C={key:5,class:"mt-3"},OC={class:"row"},xC={class:"col-6"},NC={class:"pagination pagination-sm"},DC=["onClick"],RC={class:"col-6"},FC={class:"form-group row"},UC={class:"col-sm-6 col-form-label text-end",for:"paginationSelector"},jC={class:"col-sm-6"},WC=u("option",{value:"10"},"10",-1),qC=u("option",{value:"25"},"25",-1),KC=u("option",{value:"50"},"50",-1),BC=u("option",{value:"100"},"100",-1),GC={value:"999999999"},xa={__name:"InterfaceView",setup(c){const e=a5(),t=o4(),s=N8(),l=Z1(""),a=Z1(""),n=Z1(""),r=Z1(""),i=Z1("");function o(v,_){let y=v;return _&&(y+=" ("+_+")"),y}async function d(){await t.LoadInterfaceConfig(t.GetSelected.Identifier);let v=t.GetSelected.Identifier+".conf",_=t.configuration,y=document.createElement("a");y.setAttribute("href","data:text/plain;charset=utf-8,"+encodeURIComponent(_)),y.setAttribute("download",v),y.style.display="none",document.body.appendChild(y),y.click(),document.body.removeChild(y)}async function f(){try{await t.SaveConfiguration(t.GetSelected.Identifier),D1({title:"Interface configuration persisted to file",text:"The interface configuration has been written to the wg-quick configuration file.",type:"success"})}catch(v){console.log(v),D1({title:"Failed to persist interface configuration file!",text:v.toString(),type:"error"})}}return R6(async()=>{await t.LoadInterfaces(),await s.LoadPeers(void 0),await s.LoadStats(void 0)}),(v,_)=>(e1(),o1(W1,null,[w1(pp,{peerId:l.value,visible:l.value!=="",onClose:_[0]||(_[0]=y=>l.value="")},null,8,["peerId","visible"]),w1(zH,{peerId:a.value,visible:a.value!=="",onClose:_[1]||(_[1]=y=>a.value="")},null,8,["peerId","visible"]),w1(LH,{visible:n.value!=="",onClose:_[2]||(_[2]=y=>n.value="")},null,8,["visible"]),w1(Eg,{interfaceId:r.value,visible:r.value!=="",onClose:_[3]||(_[3]=y=>r.value="")},null,8,["interfaceId","visible"]),w1(Ag,{interfaceId:i.value,visible:i.value!=="",onClose:_[4]||(_[4]=y=>i.value="")},null,8,["interfaceId","visible"]),u("div",kg,[u("div",Sg,[u("h1",null,P(v.$t("interfaces.headline")),1)]),u("div",Pg,[Tg,u("div",Ig,[u("div",$g,[u("button",{class:"input-group-text btn btn-primary",title:v.$t("interfaces.button-add-interface"),onClick:_[5]||(_[5]=Y1(y=>r.value="#NEW#",["prevent"]))},Ng,8,Og),I1(u("select",{"onUpdate:modelValue":_[6]||(_[6]=y=>Z(t).selected=y),disabled:Z(t).Count===0,class:"form-select",onChange:_[7]||(_[7]=y=>Z(s).LoadPeers())},[Z(t).Count===0?(e1(),o1("option",Rg,P(v.$t("interfaces.no-interface.default-selection")),1)):$1("",!0),(e1(!0),o1(W1,null,C2(Z(t).All,y=>(e1(),o1("option",{key:y.Identifier,value:y.Identifier},P(o(y.Identifier,y.DisplayName)),9,Fg))),128))],40,Dg),[[$7,Z(t).selected]])])])])]),Z(t).Count===0?(e1(),o1("div",Ug,[u("div",jg,[u("div",Wg,[u("h4",null,P(v.$t("interfaces.no-interface.headline")),1),u("p",null,P(v.$t("interfaces.no-interface.abstract")),1)])])])):$1("",!0),Z(t).Count!==0?(e1(),o1("div",qg,[u("div",Kg,[u("div",Bg,[u("div",Gg,[u("div",Yg,[u("div",Zg,[n2(P(v.$t("interfaces.interface.headline"))+" ",1),u("strong",null,P(Z(t).GetSelected.Identifier),1),n2(" ("+P(Z(t).GetSelected.Mode)+" "+P(v.$t("interfaces.interface.mode"))+") ",1),Z(t).GetSelected.Disabled?(e1(),o1("span",Xg,[u("i",{class:"fa fa-circle-xmark",title:Z(t).GetSelected.DisabledReason},null,8,Qg)])):$1("",!0)]),u("div",Jg,[u("a",{class:"btn-link",href:"#",title:v.$t("interfaces.interface.button-show-config"),onClick:_[8]||(_[8]=Y1(y=>i.value=Z(t).GetSelected.Identifier,["prevent"]))},tM,8,cM),u("a",{class:"ms-5 btn-link",href:"#",title:v.$t("interfaces.interface.button-download-config"),onClick:Y1(d,["prevent"])},aM,8,sM),Z(e).Setting("PersistentConfigSupported")?(e1(),o1("a",{key:0,class:"ms-5 btn-link",href:"#",title:v.$t("interfaces.interface.button-store-config"),onClick:Y1(f,["prevent"])},iM,8,nM)):$1("",!0),u("a",{class:"ms-5 btn-link",href:"#",title:v.$t("interfaces.interface.button-edit"),onClick:_[9]||(_[9]=Y1(y=>r.value=Z(t).GetSelected.Identifier,["prevent"]))},fM,8,oM)])])]),u("div",dM,[Z(t).GetSelected.Mode==="server"?(e1(),o1("div",hM,[u("div",mM,[u("table",zM,[u("tbody",null,[u("tr",null,[u("td",null,P(v.$t("interfaces.interface.key"))+":",1),u("td",null,P(Z(t).GetSelected.PublicKey),1)]),u("tr",null,[u("td",null,P(v.$t("interfaces.interface.endpoint"))+":",1),u("td",null,P(Z(t).GetSelected.PeerDefEndpoint),1)]),u("tr",null,[u("td",null,P(v.$t("interfaces.interface.port"))+":",1),u("td",null,P(Z(t).GetSelected.ListenPort),1)]),u("tr",null,[u("td",null,P(v.$t("interfaces.interface.peers"))+":",1),u("td",null,P(Z(t).GetSelected.EnabledPeers),1)]),u("tr",null,[u("td",null,P(v.$t("interfaces.interface.total-peers"))+":",1),u("td",null,P(Z(t).GetSelected.TotalPeers),1)])])])]),u("div",pM,[u("table",vM,[u("tbody",null,[u("tr",null,[u("td",null,P(v.$t("interfaces.interface.ip"))+":",1),u("td",null,[(e1(!0),o1(W1,null,C2(Z(t).GetSelected.Addresses,y=>(e1(),o1("span",{class:"badge bg-light me-1",key:y},P(y),1))),128))])]),u("tr",null,[u("td",null,P(v.$t("interfaces.interface.dns"))+":",1),u("td",null,[(e1(!0),o1(W1,null,C2(Z(t).GetSelected.Dns,y=>(e1(),o1("span",{class:"badge bg-light me-1",key:y},P(y),1))),128))])]),u("tr",null,[u("td",null,P(v.$t("interfaces.interface.mtu"))+":",1),u("td",null,P(Z(t).GetSelected.Mtu),1)]),u("tr",null,[u("td",null,P(v.$t("interfaces.interface.default-keep-alive"))+":",1),u("td",null,P(Z(t).GetSelected.PeerDefPersistentKeepalive),1)]),u("tr",null,[u("td",null,P(v.$t("interfaces.interface.default-allowed-ip"))+":",1),u("td",null,[(e1(!0),o1(W1,null,C2(Z(t).GetSelected.PeerDefAllowedIPs,y=>(e1(),o1("span",{class:"badge bg-light me-1",key:y},P(y),1))),128))])])])])])])):$1("",!0),Z(t).GetSelected.Mode==="client"?(e1(),o1("div",HM,[u("div",VM,[u("table",gM,[u("tbody",null,[u("tr",null,[u("td",null,P(v.$t("interfaces.interface.key"))+":",1),u("td",null,P(Z(t).GetSelected.PublicKey),1)]),u("tr",null,[u("td",null,P(v.$t("interfaces.interface.endpoints"))+":",1),u("td",null,P(Z(t).GetSelected.EnabledPeers),1)]),u("tr",null,[u("td",null,P(v.$t("interfaces.interface.total-endpoints"))+":",1),u("td",null,P(Z(t).GetSelected.TotalPeers),1)])])])]),u("div",MM,[u("table",CM,[u("tbody",null,[u("tr",null,[u("td",null,P(v.$t("interfaces.interface.ip"))+":",1),u("td",null,[(e1(!0),o1(W1,null,C2(Z(t).GetSelected.Addresses,y=>(e1(),o1("span",{class:"badge bg-light me-1",key:y},P(y),1))),128))])]),u("tr",null,[u("td",null,P(v.$t("interfaces.interface.dns"))+":",1),u("td",null,[(e1(!0),o1(W1,null,C2(Z(t).GetSelected.Dns,y=>(e1(),o1("span",{class:"badge bg-light me-1",key:y},P(y),1))),128))])]),u("tr",null,[u("td",null,P(v.$t("interfaces.interface.mtu"))+":",1),u("td",null,P(Z(t).GetSelected.Mtu),1)])])])])])):$1("",!0),Z(t).GetSelected.Mode==="any"?(e1(),o1("div",LM,[u("div",bM,[u("table",_M,[u("tbody",null,[u("tr",null,[u("td",null,P(v.$t("interfaces.interface.key"))+":",1),u("td",null,P(Z(t).GetSelected.PublicKey),1)]),u("tr",null,[u("td",null,P(v.$t("interfaces.interface.endpoint"))+":",1),u("td",null,P(Z(t).GetSelected.PeerDefEndpoint),1)]),u("tr",null,[u("td",null,P(v.$t("interfaces.interface.port"))+":",1),u("td",null,P(Z(t).GetSelected.ListenPort),1)]),u("tr",null,[u("td",null,P(v.$t("interfaces.interface.peers"))+":",1),u("td",null,P(Z(t).GetSelected.EnabledPeers),1)]),u("tr",null,[u("td",null,P(v.$t("interfaces.interface.total-peers"))+":",1),u("td",null,P(Z(t).GetSelected.TotalPeers),1)])])])]),u("div",yM,[u("table",wM,[u("tbody",null,[u("tr",null,[u("td",null,P(v.$t("interfaces.interface.ip"))+":",1),u("td",null,[(e1(!0),o1(W1,null,C2(Z(t).GetSelected.Addresses,y=>(e1(),o1("span",{class:"badge bg-light me-1",key:y},P(y),1))),128))])]),u("tr",null,[u("td",null,P(v.$t("interfaces.interface.default-allowed-ip"))+":",1),u("td",null,[(e1(!0),o1(W1,null,C2(Z(t).GetSelected.PeerDefAllowedIPs,y=>(e1(),o1("span",{class:"badge bg-light me-1",key:y},P(y),1))),128))])]),u("tr",null,[u("td",null,P(v.$t("interfaces.interface.dns"))+":",1),u("td",null,[(e1(!0),o1(W1,null,C2(Z(t).GetSelected.PeerDefDns,y=>(e1(),o1("span",{class:"badge bg-light me-1",key:y},P(y),1))),128))])]),u("tr",null,[u("td",null,P(v.$t("interfaces.interface.mtu"))+":",1),u("td",null,P(Z(t).GetSelected.Mtu),1)]),u("tr",null,[u("td",null,P(v.$t("interfaces.interface.default-keep-alive"))+":",1),u("td",null,P(Z(t).GetSelected.PeerDefPersistentKeepalive),1)])])])])])):$1("",!0)])])])])):$1("",!0),Z(t).Count!==0?(e1(),o1("div",EM,[u("div",AM,[Z(t).GetSelected.Mode==="server"?(e1(),o1("h2",kM,P(v.$t("interfaces.headline-peers")),1)):(e1(),o1("h2",SM,P(v.$t("interfaces.headline-endpoints")),1))]),u("div",PM,[u("div",TM,[u("div",IM,[I1(u("input",{"onUpdate:modelValue":_[10]||(_[10]=y=>Z(s).filter=y),class:"form-control",placeholder:v.$t("general.search.placeholder"),type:"text",onKeyup:_[11]||(_[11]=(...y)=>Z(s).afterPageSizeChange&&Z(s).afterPageSizeChange(...y))},null,40,$M),[[U1,Z(s).filter]]),u("button",{class:"input-group-text btn btn-primary",title:v.$t("general.search.button")},NM,8,OM)])])]),u("div",DM,[u("a",{class:"btn btn-primary ms-2",href:"#",title:v.$t("interfaces.button-add-peers"),onClick:_[12]||(_[12]=Y1(y=>n.value="#NEW#",["prevent"]))},jM,8,RM),u("a",{class:"btn btn-primary ms-2",href:"#",title:v.$t("interfaces.button-add-peer"),onClick:_[13]||(_[13]=Y1(y=>a.value="#NEW#",["prevent"]))},BM,8,WM)])])):$1("",!0),Z(t).Count!==0?(e1(),o1("div",GM,[Z(s).Count===0?(e1(),o1("div",YM,[u("h4",null,P(v.$t("interfaces.no-peer.headline")),1),u("p",null,P(v.$t("interfaces.no-peer.abstract")),1)])):$1("",!0),Z(s).Count!==0?(e1(),o1("table",ZM,[u("thead",null,[u("tr",null,[u("th",XM,[u("input",{id:"flexCheckDefault",class:"form-check-input",title:v.$t("general.select-all"),type:"checkbox",value:""},null,8,QM)]),JM,u("th",cC,P(v.$t("interfaces.table-heading.name")),1),u("th",eC,P(v.$t("interfaces.table-heading.user")),1),u("th",tC,P(v.$t("interfaces.table-heading.ip")),1),Z(t).GetSelected.Mode==="client"?(e1(),o1("th",sC,P(v.$t("interfaces.table-heading.endpoint")),1)):$1("",!0),Z(s).hasStatistics?(e1(),o1("th",lC,P(v.$t("interfaces.table-heading.status")),1)):$1("",!0),aC])]),u("tbody",null,[(e1(!0),o1(W1,null,C2(Z(s).FilteredAndPaged,y=>(e1(),o1("tr",{key:y.Identifier},[nC,u("td",rC,[y.Disabled?(e1(),o1("span",{key:0,class:"text-danger",title:v.$t("interfaces.peer-disabled")+" "+y.DisabledReason},uC,8,iC)):$1("",!0),!y.Disabled&&y.ExpiresAt?(e1(),o1("span",{key:1,class:"text-warning",title:v.$t("interfaces.peer-expiring")+" "+y.ExpiresAt},hC,8,fC)):$1("",!0)]),u("td",null,[y.DisplayName?(e1(),o1("span",{key:0,title:y.Identifier},P(y.DisplayName),9,mC)):(e1(),o1("span",{key:1,title:y.Identifier},P(v.$filters.truncate(y.Identifier,10)),9,zC))]),u("td",null,P(y.UserIdentifier),1),u("td",null,[(e1(!0),o1(W1,null,C2(y.Addresses,T=>(e1(),o1("span",{key:T,class:"badge bg-light me-1"},P(T),1))),128))]),Z(t).GetSelected.Mode==="client"?(e1(),o1("td",pC,P(y.Endpoint.Value),1)):$1("",!0),Z(s).hasStatistics?(e1(),o1("td",vC,[Z(s).Statistics(y.Identifier).IsConnected?(e1(),o1("div",HC,[u("span",{class:"badge rounded-pill bg-success",title:v.$t("interfaces.peer-connected")},MC,8,VC),n2(),u("span",{title:v.$t("interfaces.peer-handshake")+" "+Z(s).Statistics(y.Identifier).LastHandshake},P(v.$t("interfaces.peer-connected")),9,CC)])):(e1(),o1("div",LC,[u("span",{class:"badge rounded-pill bg-light",title:v.$t("interfaces.peer-not-connected")},yC,8,bC)]))])):$1("",!0),u("td",wC,[u("a",{href:"#",title:v.$t("interfaces.button-show-peer"),onClick:Y1(T=>l.value=y.Identifier,["prevent"])},kC,8,EC),u("a",{href:"#",title:v.$t("interfaces.button-edit-peer"),onClick:Y1(T=>a.value=y.Identifier,["prevent"])},TC,8,SC)])]))),128))])])):$1("",!0)])):$1("",!0),Z(t).Count!==0?(e1(),o1("hr",IC)):$1("",!0),Z(t).Count!==0?(e1(),o1("div",$C,[u("div",OC,[u("div",xC,[u("ul",NC,[u("li",{class:V2([{disabled:Z(s).pageOffset===0},"page-item"])},[u("a",{class:"page-link",onClick:_[14]||(_[14]=(...y)=>Z(s).previousPage&&Z(s).previousPage(...y))},"«")],2),(e1(!0),o1(W1,null,C2(Z(s).pages,y=>(e1(),o1("li",{key:y,class:V2([{active:Z(s).currentPage===y},"page-item"])},[u("a",{class:"page-link",onClick:T=>Z(s).gotoPage(y)},P(y),9,DC)],2))),128)),u("li",{class:V2([{disabled:!Z(s).hasNextPage},"page-item"])},[u("a",{class:"page-link",onClick:_[15]||(_[15]=(...y)=>Z(s).nextPage&&Z(s).nextPage(...y))},"»")],2)])]),u("div",RC,[u("div",FC,[u("label",UC,P(v.$t("general.pagination.size"))+":",1),u("div",jC,[I1(u("select",{"onUpdate:modelValue":_[16]||(_[16]=y=>Z(s).pageSize=y),class:"form-select",onClick:_[17]||(_[17]=y=>Z(s).afterPageSizeChange())},[WC,qC,KC,BC,u("option",GC,P(v.$t("general.pagination.all")),1)],512),[[$7,Z(s).pageSize,void 0,{number:!0}]])])])])])])):$1("",!0)],64))}},YC=Object.freeze(Object.defineProperty({__proto__:null,default:xa},Symbol.toStringTag,{value:"Module"})),g6=Rf({history:sf(),routes:[{path:"/",name:"home",component:Ud},{path:"/login",name:"login",component:vh},{path:"/interface",name:"interface",component:xa},{path:"/interfaces",name:"interfaces",component:()=>J5(()=>Promise.resolve().then(()=>YC),void 0)},{path:"/users",name:"users",component:()=>J5(()=>import("./UserView-s51HLNTa.js"),__vite__mapDeps([]))},{path:"/profile",name:"profile",component:()=>J5(()=>import("./ProfileView-7h9_sssB.js"),__vite__mapDeps([]))}],linkActiveClass:"active",linkExactActiveClass:"exact-active"});g6.beforeEach(async c=>{const e=P3();if("wgLoginState"in c.query&&!e.IsAuthenticated){const l=c.query.wgLoginState,a=e.ReturnUrl;if(console.log("Oauth login callback:",l),l==="success")try{const n=await e.LoadSession();return console.log("Oauth login completed for UID:",n),console.log("Continuing to:",a),D1({title:"Logged in",text:"Authentication suceeded!",type:"success"}),e.ResetReturnUrl(),a}catch{return D1({title:"Login failed!",text:"Oauth session is invalid!",type:"error"}),"/login"}else return D1({title:"Login failed!",text:"Authentication via Oauth failed!",type:"error"}),"/login"}if(!["/","/login"].includes(c.path)&&!e.IsAuthenticated)return e.SetReturnUrl(c.fullPath),"/login"});const P3=F6({id:"auth",state:()=>({user:JSON.parse(localStorage.getItem("user")),providers:[],returnUrl:localStorage.getItem("returnUrl")}),getters:{UserIdentifier:c=>{var e;return((e=c.user)==null?void 0:e.Identifier)||"unknown"},User:c=>c.user,LoginProviders:c=>c.providers,IsAuthenticated:c=>c.user!=null,IsAdmin:c=>{var e;return((e=c.user)==null?void 0:e.IsAdmin)||!1},ReturnUrl:c=>c.returnUrl||"/"},actions:{SetReturnUrl(c){this.returnUrl=c,localStorage.setItem("returnUrl",c)},ResetReturnUrl(){this.returnUrl=null,localStorage.removeItem("returnUrl")},async LoadProviders(){c2.get("/auth/providers").then(c=>this.providers=c).catch(c=>{this.providers=[],console.log("Failed to load auth providers: ",c),D1({title:"Backend Connection Failure",text:"Failed to load external authentication providers!"})})},async LoadSession(){return c2.get("/auth/session").then(c=>c.LoggedIn===!0?(this.ResetReturnUrl(),this.setUserInfo(c),c.UserIdentifier):(this.setUserInfo(null),Promise.reject(new Error("session not authenticated")))).catch(c=>(this.setUserInfo(null),Promise.reject(c)))},async Login(c,e){return c2.post("/auth/login",{username:c,password:e}).then(t=>(this.ResetReturnUrl(),this.setUserInfo(t),t.Identifier)).catch(t=>(console.log("Login failed:",t),this.setUserInfo(null),Promise.reject(new Error("login failed"))))},async Logout(){this.setUserInfo(null),this.ResetReturnUrl();try{await c2.post("/auth/logout")}catch(c){console.log("Logout request failed:",c)}D1({title:"Logged Out",text:"Logout successful!",type:"warn"}),await g6.push("/login")},setUserInfo(c){c?("UserIdentifier"in c?this.user={Identifier:c.UserIdentifier,Firstname:c.UserFirstname,Lastname:c.UserLastname,Email:c.UserEmail,IsAdmin:c.IsAdmin}:this.user={Identifier:c.Identifier,Firstname:c.Firstname,Lastname:c.Lastname,Email:c.Email,IsAdmin:c.IsAdmin},localStorage.setItem("user",JSON.stringify(this.user))):(this.user=null,localStorage.removeItem("user"))}}}),ZC={class:"navbar navbar-expand-lg navbar-dark bg-primary"},XC={class:"container-fluid"},QC=u("a",{class:"navbar-brand",href:"/"},[u("img",{alt:"WireGuard Portal",src:Nu})],-1),JC=u("button",{"aria-controls":"navbarColor01","aria-expanded":"false","aria-label":"Toggle navigation",class:"navbar-toggler","data-bs-target":"#navbarTop","data-bs-toggle":"collapse",type:"button"},[u("span",{class:"navbar-toggler-icon"})],-1),cL={id:"navbarTop",class:"collapse navbar-collapse"},eL={class:"navbar-nav me-auto"},tL={class:"nav-item"},sL={key:0,class:"nav-item"},lL={key:1,class:"nav-item"},aL={class:"navbar-nav d-flex justify-content-end"},nL={key:0,class:"nav-item dropdown"},rL={"aria-expanded":"false","aria-haspopup":"true",class:"nav-link dropdown-toggle","data-bs-toggle":"dropdown",href:"#",role:"button"},iL={class:"dropdown-menu"},oL=u("i",{class:"fas fa-user"},null,-1),uL=u("div",{class:"dropdown-divider"},null,-1),fL=u("i",{class:"fas fa-sign-out-alt"},null,-1),dL={key:1,class:"nav-item"},hL=u("i",{class:"fas fa-sign-in-alt fa-sm fa-fw me-2"},null,-1),mL={class:"container mt-5 flex-shrink-0"},zL={class:"page-footer mt-auto"},pL={class:"container mt-5"},vL={class:"row align-items-center"},HL={class:"col-6"},VL={key:0},gL={class:"col-6 text-end"},ML=["aria-label"],CL={class:"btn-group",role:"group"},LL={"aria-expanded":"false","aria-haspopup":"true",class:"btn btn btn-secondary pe-0","data-bs-toggle":"dropdown",type:"button"},bL={"aria-labelledby":"btnGroupDrop3",class:"dropdown-menu",style:{}},_L=u("span",{class:"fi fi-us"},null,-1),yL=u("span",{class:"fi fi-de"},null,-1),wL=u("span",{class:"fi fi-ru"},null,-1),EL={__name:"App",setup(c){const e=F4().appContext.config.globalProperties,t=P3(),s=Yl(),l=a5();R6(async()=>{console.log("Starting WireGuard Portal frontend..."),await s.LoadSecurityProperties(),await t.LoadProviders();let d=t.IsAuthenticated;try{await t.LoadSession(),await l.LoadSettings(),console.log("WireGuard Portal session is valid")}catch{d&&(console.log("WireGuard Portal invalid - logging out"),await t.Logout())}console.log("WireGuard Portal ready!")});const a=function(d){e.$i18n.locale!==d&&(localStorage.setItem("wgLang",d),e.$i18n.locale=d)},n=x1(()=>{let d=e.$i18n.locale.toLowerCase();return d==="en"&&(d="us"),"fi-"+d}),r=Z1(WGPORTAL_SITE_COMPANY_NAME),i=Z1(WGPORTAL_VERSION),o=Z1(new Date().getFullYear());return(d,f)=>{const v=b9("notifications");return e1(),o1(W1,null,[w1(v,{duration:3e3,"ignore-duplicates":!0,position:"top right"}),u("nav",ZC,[u("div",XC,[QC,JC,u("div",cL,[u("ul",eL,[u("li",tL,[w1(Z(E3),{to:{name:"home"},class:"nav-link"},{default:o2(()=>[n2(P(d.$t("menu.home")),1)]),_:1})]),Z(t).IsAuthenticated&&Z(t).IsAdmin?(e1(),o1("li",sL,[w1(Z(E3),{to:{name:"interfaces"},class:"nav-link"},{default:o2(()=>[n2(P(d.$t("menu.interfaces")),1)]),_:1})])):$1("",!0),Z(t).IsAuthenticated&&Z(t).IsAdmin?(e1(),o1("li",lL,[w1(Z(E3),{to:{name:"users"},class:"nav-link"},{default:o2(()=>[n2(P(d.$t("menu.users")),1)]),_:1})])):$1("",!0)]),u("div",aL,[Z(t).IsAuthenticated?(e1(),o1("div",nL,[u("a",rL,P(Z(t).User.Firstname)+" "+P(Z(t).User.Lastname),1),u("div",iL,[w1(Z(E3),{to:{name:"profile"},class:"dropdown-item"},{default:o2(()=>[oL,n2(" "+P(d.$t("menu.profile")),1)]),_:1}),uL,u("a",{class:"dropdown-item",href:"#",onClick:f[0]||(f[0]=Y1((..._)=>Z(t).Logout&&Z(t).Logout(..._),["prevent"]))},[fL,n2(" "+P(d.$t("menu.logout")),1)])])])):$1("",!0),Z(t).IsAuthenticated?$1("",!0):(e1(),o1("div",dL,[w1(Z(E3),{to:{name:"login"},class:"nav-link"},{default:o2(()=>[hL,n2(P(d.$t("menu.login")),1)]),_:1})]))])])])]),u("div",mL,[w1(Z(Bl))]),u("footer",zL,[u("div",pL,[u("div",vL,[u("div",HL,[n2("Copyright © "+P(r.value)+" "+P(o.value)+" ",1),Z(t).IsAuthenticated?(e1(),o1("span",VL," - version "+P(i.value),1)):$1("",!0)]),u("div",gL,[u("div",{"aria-label":d.$t("menu.lang"),class:"btn-group",role:"group"},[u("div",CL,[u("button",LL,[u("span",{class:V2([n.value,"fi"])},null,2)]),u("div",bL,[u("a",{class:"dropdown-item",href:"#",onClick:f[1]||(f[1]=Y1(_=>a("en"),["prevent"]))},[_L,n2("English")]),u("a",{class:"dropdown-item",href:"#",onClick:f[2]||(f[2]=Y1(_=>a("de"),["prevent"]))},[yL,n2("Deutsch")]),u("a",{class:"dropdown-item",href:"#",onClick:f[3]||(f[3]=Y1(_=>a("ru"),["prevent"]))},[wL,n2("Русский")])])])],8,ML)])])])])],64)}}},AL={pagination:{size:"Anzahl an Elementen",all:"Alle (langsam)"},search:{placeholder:"Suche...",button:"Suchen"},"select-all":"Alle auswählen",yes:"Ja",no:"Nein",cancel:"Abbrechen",close:"Schließen",save:"Speichern",delete:"Löschen"},kL={headline:"Bitte melden Sie sich an",username:{label:"Benutzername",placeholder:"Bitte geben Sie Ihren Benutzernamen ein"},password:{label:"Kennwort",placeholder:"Bitte geben Sie Ihr Passwort ein"},button:"Anmelden"},SL={home:"Home",interfaces:"Schnittstellen",users:"Benutzer",lang:"Sprache ändern",profile:"Mein Profil",login:"Anmelden",logout:"Abmelden"},PL={headline:"WireGuard® VPN Portal","info-headline":"Mehr Informationen",abstract:"WireGuard® ist ein extrem einfaches, aber dennoch schnelles und modernes VPN, das modernste Kryptographie nutzt. Es zielt darauf ab, schneller, einfacher, schlanker und nützlicher als IPsec zu sein, während es die massiven Kopfschmerzen vermeidet. Es soll wesentlich leistungsfähiger sein als OpenVPN.",installation:{"box-header":"WireGuard Installation",headline:"Installation",content:"Die Installationsanweisungen für die Client-Software finden Sie auf der offiziellen WireGuard-Website.",btn:"Anleitung öffnen"},"about-wg":{"box-header":"Über WireGuard",headline:"Über",content:"WireGuard® ist ein extrem einfaches, aber schnelles und modernes VPN, das modernste Kryptographie verwendet.",button:"Details"},"about-portal":{"box-header":"Über WireGuard Portal",headline:"WireGuard Portal",content:"WireGuard Portal ist ein einfaches, webbasiertes Konfigurationsportal für WireGuard.",button:"Details"},profiles:{headline:"VPN Profile",abstract:"Über Ihr Benutzerprofil können Sie auf Ihre persönlichen VPN-Konfigurationen zugreifen und diese herunterladen.",content:"Um alle Ihre konfigurierten Profile zu finden, klicken Sie auf die Schaltfläche unten.",button:"Mein Profil öffnen"},admin:{headline:"Verwaltungsbereich",abstract:"Im Administrationsbereich können Sie VPN-Zugänge und die Serverschnittstelle sowie die Benutzer, die sich am VPN-Portal anmelden dürfen, verwalten.",content:"","button-admin":"Schnittstellenverwaltung","button-user":"Benutzerverwaltung"}},TL={headline:"Schnittstellenverwaltung","headline-peers":"Current VPN Peers","headline-endpoints":"Current Endpoints","no-interface":{"default-selection":"No Interface available",headline:"No interfaces found...",abstract:"Click the plus button above to create a new WireGuard interface."},"no-peer":{headline:"No peers available",abstract:"Currently, there are no peers available for the selected WireGuard interface."},"table-heading":{name:"Name",user:"User",ip:"IP's",endpoint:"Endpoint",status:"Status"},interface:{headline:"Interface status for",mode:"mode",key:"Public Key",endpoint:"Public Endpoint",port:"Listening Port",peers:"Enabled Peers","total-peers":"Total Peers",endpoints:"Enabled Endpoints","total-endpoints":"Total Endpoints",ip:"IP Address","default-allowed-ip":"Default allowed IPs",dns:"DNS Servers",mtu:"MTU","default-keep-alive":"Default Keepalive Interval","button-show-config":"Show configuration","button-download-config":"Download configuration","button-store-config":"Store configuration for wg-quick","button-edit":"Edit interface"},"button-add-interface":"Add Interface","button-add-peer":"Add Peer","button-add-peers":"Add Multiple Peers","button-show-peer":"Show Peer","button-edit-peer":"Edit Peer","peer-disabled":"Peer is disabled, reason:","peer-expiring":"Peer is expiring at","peer-connected":"Connected","peer-not-connected":"Not Connected","peer-handshake":"Last handshake:"},IL={headline:"Benutzerverwaltung","table-heading":{id:"ID",email:"E-Mail",firstname:"Firstname",lastname:"Lastname",source:"Source",peers:"Peers",admin:"Admin"},"no-user":{headline:"No users available",abstract:"Currently, there are no users registered with WireGuard Portal."},"button-add-user":"Add User","button-show-user":"Show User","button-edit-user":"Edit User","user-disabled":"User is disabled, reason:","user-locked":"Account is locked, reason:",admin:"User has administrator privileges","no-admin":"User has no administrator privileges"},$L={headline:"Meine VPN-Konfigurationen","table-heading":{name:"Name",ip:"IP's",stats:"Status",interface:"Server Interface"},"no-peer":{headline:"No peers available",abstract:"Currently, there are no peers associated with your user profile."},"peer-connected":"Connected","button-add-peer":"Add Peer","button-show-peer":"Show Peer","button-edit-peer":"Edit Peer"},OL={"user-view":{headline:"User Account:","tab-user":"Information","tab-peers":"Peers","headline-info":"User Information:","headline-notes":"Notes:",email:"E-Mail",firstname:"Firstname",lastname:"Lastname",phone:"Phone number",department:"Department",disabled:"Account Disabled",locked:"Account Locked","no-peers":"User has no associated peers.",peers:{name:"Name",interface:"Interface",ip:"IP's"}},"user-edit":{"headline-edit":"Edit user:","headline-new":"New user","header-general":"General","header-personal":"User Information","header-notes":"Notes","header-state":"State",identifier:{label:"Identifier",placeholder:"The unique user identifier"},source:{label:"Source",placeholder:"The user source"},password:{label:"Password",placeholder:"A super secret password",description:"Leave this field blank to keep current password."},email:{label:"Email",placeholder:"The email address"},phone:{label:"Phone",placeholder:"The phone number"},department:{label:"Department",placeholder:"The department"},firstname:{label:"Firstname",placeholder:"Firstname"},lastname:{label:"Lastname",placeholder:"Lastname"},notes:{label:"Notes",placeholder:""},disabled:{label:"Disabled (no WireGuard connection and no login possible)"},locked:{label:"Locked (no login possible, WireGuard connections still work)"},admin:{label:"Is Admin"}},"interface-view":{headline:"Config for Interface:"},"interface-edit":{"headline-edit":"Edit Interface:","headline-new":"New Interface","tab-interface":"Interface","tab-peerdef":"Peer Defaults","header-general":"General","header-network":"Network","header-crypto":"Cryptography","header-hooks":"Interface Hooks","header-peer-hooks":"Hooks","header-state":"State",identifier:{label:"Identifier",placeholder:"The unique interface identifier"},mode:{label:"Interface Mode",server:"Server Mode",client:"Client Mode",any:"Unknown Mode"},"display-name":{label:"Display Name",placeholder:"The descriptive name for the interface"},"private-key":{label:"Private Key",placeholder:"The private key"},"public-key":{label:"Public Key",placeholder:"The public key"},ip:{label:"IP Addresses",placeholder:"IP Addresses (CIDR format)"},"listen-port":{label:"Listen Port",placeholder:"The listening port"},dns:{label:"DNS Server",placeholder:"The DNS servers that should be used"},"dns-search":{label:"DNS Search Domains",placeholder:"DNS search prefixes"},mtu:{label:"MTU",placeholder:"The interface MTU (0 = keep default)"},"firewall-mark":{label:"Firewall Mark",placeholder:"Firewall mark that is applied to outgoing traffic. (0 = automatic)"},"routing-table":{label:"Routing Table",placeholder:"The routing table ID",description:"Special cases: off = do not manage routes, 0 = automatic"},"pre-up":{label:"Pre-Up",placeholder:"One or multiple bash commands separated by ;"},"post-up":{label:"Post-Up",placeholder:"One or multiple bash commands separated by ;"},"pre-down":{label:"Pre-Down",placeholder:"One or multiple bash commands separated by ;"},"post-down":{label:"Post-Down",placeholder:"One or multiple bash commands separated by ;"},disabled:{label:"Interface Disabled"},"save-config":{label:"Automatically save wg-quick config"},defaults:{endpoint:{label:"Endpoint Address",placeholder:"Endpoint Address",description:"The endpoint address that peers will connect to."},networks:{label:"IP Networks",placeholder:"Network Addresses",description:"Peers will get IP addresses from those subnets."},"allowed-ip":{label:"Allowed IP Addresses",placeholder:"Default Allowed IP Addresses"},mtu:{label:"MTU",placeholder:"The client MTU (0 = keep default)"},"keep-alive":{label:"Keep Alive Interval",placeholder:"Persistent Keepalive (0 = default)"}},"button-apply-defaults":"Apply Peer Defaults"},"peer-view":{"headline-peer":"Peer:","headline-endpoint":"Endpoint:","section-info":"Peer Information","section-status":"Current Status","section-config":"Configuration",identifier:"Identifier",ip:"IP Addresses",user:"Associated User",notes:"Notes","expiry-status":"Expires At","disabled-status":"Disabled At",traffic:"Traffic","connection-status":"Connection Stats",upload:"Uploaded Bytes (from Server to Peer)",download:"Downloaded Bytes (from Peer to Server)",pingable:"Is Pingable",handshake:"Last Handshake","connected-since":"Connected since",endpoint:"Endpoint","button-download":"Download configuration","button-email":"Send configuration via E-Mail"},"peer-edit":{"headline-edit-peer":"Edit peer:","headline-edit-endpoint":"Edit endpoint:","headline-new-peer":"Create peer","headline-new-endpoint":"Create endpoint","header-general":"General","header-network":"Network","header-crypto":"Cryptography","header-hooks":"Hooks (Executed on Peer)","header-state":"State","display-name":{label:"Display Name",placeholder:"The descriptive name for the peer"},"linked-user":{label:"Linked User",placeholder:"The user account which owns this peer"},"private-key":{label:"Private Key",placeholder:"The private key"},"public-key":{label:"Public Key",placeholder:"The public key"},"preshared-key":{label:"Preshared Key",placeholder:"Optional pre-shared key"},"endpoint-public-key":{label:"Endpoint public Key",placeholder:"The public key of the remote endpoint"},endpoint:{label:"Endpoint Address",placeholder:"The address of the remote endpoint"},ip:{label:"IP Addresses",placeholder:"IP Addresses (CIDR format)"},"allowed-ip":{label:"Allowed IP Addresses",placeholder:"Allowed IP Addresses (CIDR format)"},"extra-allowed-ip":{label:"Extra allowed IP Addresses",placeholder:"Extra allowed IP's (Server Sided)",description:"Those IP's will be added on the remote WireGuard interface as allowed IP's."},dns:{label:"DNS Server",placeholder:"The DNS servers that should be used"},"dns-search":{label:"DNS Search Domains",placeholder:"DNS search prefixes"},"keep-alive":{label:"Keep Alive Interval",placeholder:"Persistent Keepalive (0 = default)"},mtu:{label:"MTU",placeholder:"The client MTU (0 = keep default)"},"pre-up":{label:"Pre-Up",placeholder:"One or multiple bash commands separated by ;"},"post-up":{label:"Post-Up",placeholder:"One or multiple bash commands separated by ;"},"pre-down":{label:"Pre-Down",placeholder:"One or multiple bash commands separated by ;"},"post-down":{label:"Post-Down",placeholder:"One or multiple bash commands separated by ;"},disabled:{label:"Peer Disabled"},"ignore-global":{label:"Ignore global settings"},"expires-at":{label:"Expiry date"}},"peer-multi-create":{"headline-peer":"Create multiple peers","headline-endpoint":"Create multiple endpoints",identifiers:{label:"User Identifiers",placeholder:"User Identifiers",description:"A user identifier (the username) for which a peer should be created."},prefix:{"headline-peer":"Peer:","headline-endpoint":"Endpoint:",label:"Display Name Prefix",placeholder:"The prefix",description:"A prefix that is added to the peers display name."}}},xL={general:AL,login:kL,menu:SL,home:PL,interfaces:TL,users:IL,profile:$L,modals:OL},NL={pagination:{size:"Количество элементов",all:"Все (медленно)"},search:{placeholder:"Поиск...",button:"Поиск"},"select-all":"Выбрать все",yes:"Да",no:"Нет",cancel:"Отмена",close:"Закрыть",save:"Сохранить",delete:"Удалить"},DL={headline:"Пожалуйста, войдите в систему",username:{label:"Имя пользователя",placeholder:"Пожалуйста, введите ваше имя пользователя"},password:{label:"Пароль",placeholder:"Пожалуйста, введите ваш пароль"},button:"Войти"},RL={home:"Главная",interfaces:"Интерфейсы",users:"Пользователи",lang:"Сменить язык",profile:"Мой профиль",login:"Вход",logout:"Выход"},FL={headline:"Портал VPN WireGuard®","info-headline":"Дополнительная информация",abstract:"WireGuard® - это чрезвычайно простой, но быстрый и современный VPN, использующий передовую криптографию. Он стремится быть быстрее, проще, компактнее и полезнее, чем IPsec, избегая при этом значительных сложностей. Он предназначен для значительного повышения производительности по сравнению с OpenVPN.",installation:{"box-header":"Установка WireGuard",headline:"Установка",content:"Инструкции по установке клиентского программного обеспечения можно найти на официальном сайте WireGuard.",btn:"Открыть инструкции",button:"Открыть инструкции"},"about-wg":{"box-header":"О WireGuard",headline:"О программе",content:"WireGuard® - это чрезвычайно простой, но быстрый и современный VPN, использующий передовую криптографию.",button:"Подробнее"},"about-portal":{"box-header":"О портале WireGuard",headline:"Портал WireGuard",content:"Портал WireGuard - это простой веб-портал для настройки WireGuard.",button:"Подробнее"},profiles:{headline:"VPN Профили",abstract:"Вы можете получить доступ и загрузить свои личные конфигурации VPN через свой пользовательский профиль.",content:"Чтобы найти все сконфигурированные профили, нажмите на кнопку ниже.",button:"Открыть мой профиль"},admin:{headline:"Административная зона",abstract:"В административной зоне вы можете управлять узлами и серверным интерфейсом WireGuard, а также пользователями, которым разрешен вход в портал WireGuard.",content:"","button-admin":"Открыть администрирование сервера","button-user":"Открыть администрирование пользователей"}},UL={headline:"Администрирование интерфейсов","headline-peers":"Текущие VPN пиры","headline-endpoints":"Текущие конечные точки","no-interface":{"default-selection":"Интерфейсы отсутствуют",headline:"Интерфейсы не найдены...",abstract:"Нажмите на кнопку со знаком плюса выше, чтобы создать новый интерфейс WireGuard."},"no-peer":{headline:"Пиры отсутствуют",abstract:"В настоящее время для выбранного интерфейса WireGuard нет доступных пиров."},"table-heading":{name:"Имя",user:"Пользователь",ip:"IP-адреса",endpoint:"Конечная точка",status:"Статус"},interface:{headline:"Статус интерфейса для",mode:"режим",key:"Публичный ключ",endpoint:"Публичная конечная точка",port:"Порт прослушивания",peers:"Активные пиры","total-peers":"Всего пиров",endpoints:"Активные конечные точки","total-endpoints":"Всего конечных точек",ip:"IP-адрес","default-allowed-ip":"Разрешенные IP по умолчанию",dns:"DNS-серверы",mtu:"MTU","default-keep-alive":"Интервал поддержания активности по умолчанию","button-show-config":"Показать конфигурацию","button-download-config":"Скачать конфигурацию","button-store-config":"Сохранить конфигурацию для wg-quick","button-edit":"Редактировать интерфейс"},"button-add-interface":"Добавить интерфейс","button-add-peer":"Добавить пира","button-add-peers":"Добавить несколько пиров","button-show-peer":"Показать пира","button-edit-peer":"Редактировать пира","peer-disabled":"Пир отключен, причина:","peer-expiring":"Пир истекает в","peer-connected":"Подключено","peer-not-connected":"Не подключено","peer-handshake":"Последнее рукопожатие:"},jL={headline:"Администрирование пользователей","table-heading":{id:"ID",email:"Электронная почта",firstname:"Имя",lastname:"Фамилия",source:"Источник",peers:"Пиры",admin:"Админ"},"no-user":{headline:"Пользователи отсутствуют",abstract:"В настоящее время в портале WireGuard не зарегистрировано ни одного пользователя."},"button-add-user":"Добавить пользователя","button-show-user":"Показать пользователя","button-edit-user":"Редактировать пользователя","user-disabled":"Пользователь отключен, причина:","user-locked":"Учетная запись заблокирована, причина:",admin:"Пользователь имеет права администратора","no-admin":"Пользователь не имеет прав администратора"},WL={headline:"Мои VPN пиры","table-heading":{name:"Имя",ip:"IP-адреса",stats:"Статус",interface:"Интерфейс сервера"},"no-peer":{headline:"Пиров нет",abstract:"В настоящее время у вашего профиля пользователя нет связанных пиров."},"peer-connected":"Подключено","button-add-peer":"Добавить пира","button-show-peer":"Показать пира","button-edit-peer":"Редактировать пира"},qL={"user-view":{headline:"Учетная запись пользователя:","tab-user":"Информация","tab-peers":"Пиры","headline-info":"Информация о пользователе:","headline-notes":"Заметки:",email:"Электронная почта",firstname:"Имя",lastname:"Фамилия",phone:"Номер телефона",department:"Отдел",disabled:"Учетная запись отключена",locked:"Учетная запись заблокирована","no-peers":"У пользователя нет связанных пиров.",peers:{name:"Имя",interface:"Интерфейс",ip:"IP-адреса"}},"user-edit":{"headline-edit":"Редактировать пользователя:","headline-new":"Новый пользователь","header-general":"Общее","header-personal":"Информация о пользователе","header-notes":"Заметки","header-state":"Состояние",identifier:{label:"Идентификатор",placeholder:"Уникальный идентификатор пользователя"},source:{label:"Источник",placeholder:"Источник пользователя"},password:{label:"Пароль",placeholder:"Надежный пароль",description:"Оставьте это поле пустым, чтобы сохранить текущий пароль."},email:{label:"Электронная почта",placeholder:"Адрес электронной почты"},phone:{label:"Телефон",placeholder:"Номер телефона"},department:{label:"Отдел",placeholder:"Отдел"},firstname:{label:"Имя",placeholder:"Имя"},lastname:{label:"Фамилия",placeholder:"Фамилия"},notes:{label:"Заметки",placeholder:""},disabled:{label:"Отключен (нет возможности подключения к WireGuard и входа в систему)"},locked:{label:"Заблокирован (вход в систему невозможен, подключения WireGuard работают)"},admin:{label:"Является администратором"}},"interface-view":{headline:"Конфигурация интерфейса:"},"interface-edit":{"headline-edit":"Редактировать интерфейс:","headline-new":"Новый интерфейс","tab-interface":"Интерфейс","tab-peerdef":"Настройки пира по умолчанию","header-general":"Общие","header-network":"Сеть","header-crypto":"Криптография","header-hooks":"Хуки интерфейса","header-peer-hooks":"Хуки","header-state":"Состояние",identifier:{label:"Идентификатор",placeholder:"Уникальный идентификатор интерфейса"},mode:{label:"Режим интерфейса",server:"Режим сервера",client:"Режим клиента",any:"Неизвестный режим"},"display-name":{label:"Отображаемое имя",placeholder:"Описательное имя для интерфейса"},"private-key":{label:"Приватный ключ",placeholder:"Приватный ключ"},"public-key":{label:"Публичный ключ",placeholder:"Публичный ключ"},ip:{label:"IP-адреса",placeholder:"IP-адреса (в формате CIDR)"},"listen-port":{label:"Порт прослушивания",placeholder:"Порт для прослушивания"},dns:{label:"DNS-сервер",placeholder:"Используемые DNS-серверы"},"dns-search":{label:"Поисковые домены DNS",placeholder:"Префиксы поиска DNS"},mtu:{label:"MTU",placeholder:"MTU интерфейса (0 = использовать значение по умолчанию)"},"firewall-mark":{label:"Метка брандмауэра",placeholder:"Метка брандмауэра, применяемая к исходящему трафику (0 = автоматически)"},"routing-table":{label:"Таблица маршрутизации",placeholder:"ID таблицы маршрутизации",description:"Особые случаи: off = не управлять маршрутами, 0 = автоматически"},"pre-up":{label:"Pre-Up",placeholder:"Одна или несколько команд bash, разделенных ;"},"post-up":{label:"Post-Up",placeholder:"Одна или несколько команд bash, разделенных ;"},"pre-down":{label:"Pre-Down",placeholder:"Одна или несколько команд bash, разделенных ;"},"post-down":{label:"Post-Down",placeholder:"Одна или несколько команд bash, разделенных ;"},disabled:{label:"Интерфейс отключен"},"save-config":{label:"Автоматически сохранять конфигурацию wg-quick"},defaults:{endpoint:{label:"Адрес конечной точки",placeholder:"Адрес конечной точки",description:"Адрес конечной точки, к которой будут подключаться пиры."},networks:{label:"IP-сети",placeholder:"Сетевые адреса",description:"Пиры будут получать IP-адреса из этих подсетей."},"allowed-ip":{label:"Разрешенные IP-адреса",placeholder:"Разрешенные IP-адреса по умолчанию"},mtu:{label:"MTU",placeholder:"MTU клиента (0 = использовать значение по умолчанию)"},"keep-alive":{label:"Интервал поддержания активности",placeholder:"Постоянное поддержание активности (0 = значение по умолчанию)"}},"button-apply-defaults":"Применить настройки пира по умолчанию"},"peer-view":{"headline-peer":"Пир:","headline-endpoint":"Конечная точка:","section-info":"Информация о пире","section-status":"Текущий статус","section-config":"Конфигурация",identifier:"Идентификатор",ip:"IP-адреса",user:"Связанный пользователь",notes:"Заметки","expiry-status":"Истекает в","disabled-status":"Отключено в",traffic:"Трафик","connection-status":"Статус соединения",upload:"Загружено байт (от сервера к пиру)",download:"Скачано байт (от пира к серверу)",pingable:"Доступность пинга",handshake:"Последнее рукопожатие","connected-since":"Подключен с",endpoint:"Конечная точка","button-download":"Скачать конфигурацию","button-email":"Отправить конфигурацию по электронной почте"},"peer-edit":{"headline-edit-peer":"Редактировать пира:","headline-edit-endpoint":"Редактировать конечную точку:","headline-new-peer":"Создать пира","headline-new-endpoint":"Создать конечную точку","header-general":"Общее","header-network":"Сеть","header-crypto":"Криптография","header-hooks":"Хуки (Выполняются на пире)","header-state":"Состояние","display-name":{label:"Отображаемое имя",placeholder:"Описательное имя для пира"},"linked-user":{label:"Связанный пользователь",placeholder:"Учетная запись пользователя, которой принадлежит этот пир"},"private-key":{label:"Приватный ключ",placeholder:"Приватный ключ"},"public-key":{label:"Публичный ключ",placeholder:"Публичный ключ"},"preshared-key":{label:"Предварительно разделяемый ключ",placeholder:"Необязательный предварительно разделяемый ключ"},"endpoint-public-key":{label:"Публичный ключ конечной точки",placeholder:"Публичный ключ удаленной конечной точки"},endpoint:{label:"Адрес конечной точки",placeholder:"Адрес удаленной конечной точки"},ip:{label:"IP-адреса",placeholder:"IP-адреса (в формате CIDR)"},"allowed-ip":{label:"Разрешенные IP-адреса",placeholder:"Разрешенные IP-адреса (в формате CIDR)"},"extra-allowed-ip":{label:"Дополнительно разрешенные IP-адреса",placeholder:"Дополнительные разрешенные IP-адреса (на стороне сервера)",description:"Эти IP-адреса будут добавлены в удаленный интерфейс WireGuard как разрешенные IP-адреса."},dns:{label:"DNS Server",placeholder:"The DNS servers that should be used"},"dns-search":{label:"DNS Search Domains",placeholder:"DNS search prefixes"},"keep-alive":{label:"Keep Alive Interval",placeholder:"Persistent Keepalive (0 = default)"},mtu:{label:"MTU",placeholder:"The client MTU (0 = keep default)"},"pre-up":{label:"Pre-Up",placeholder:"One or multiple bash commands separated by ;"},"post-up":{label:"Post-Up",placeholder:"One or multiple bash commands separated by ;"},"pre-down":{label:"Pre-Down",placeholder:"One or multiple bash commands separated by ;"},"post-down":{label:"Post-Down",placeholder:"One or multiple bash commands separated by ;"},disabled:{label:"Peer Disabled"},"ignore-global":{label:"Ignore global settings"},"expires-at":{label:"Expiry date"}},"peer-multi-create":{"headline-peer":"Create multiple peers","headline-endpoint":"Create multiple endpoints",identifiers:{label:"User Identifiers",placeholder:"User Identifiers",description:"A user identifier (the username) for which a peer should be created."},prefix:{"headline-peer":"Peer:","headline-endpoint":"Endpoint:",label:"Display Name Prefix",placeholder:"The prefix",description:"A prefix that is added to the peers display name."}}},KL={general:NL,login:DL,menu:RL,home:FL,interfaces:UL,users:jL,profile:WL,modals:qL},BL={pagination:{size:"Number of Elements",all:"All (slow)"},search:{placeholder:"Search...",button:"Search"},"select-all":"Select all",yes:"Yes",no:"No",cancel:"Cancel",close:"Close",save:"Save",delete:"Delete"},GL={headline:"Please sign in",username:{label:"Username",placeholder:"Please enter your username"},password:{label:"Password",placeholder:"Please enter your password"},button:"Sign in"},YL={home:"Home",interfaces:"Interfaces",users:"Users",lang:"Toggle Language",profile:"My Profile",login:"Login",logout:"Logout"},ZL={headline:"WireGuard® VPN Portal","info-headline":"More Information",abstract:"WireGuard® is an extremely simple yet fast and modern VPN that utilizes state-of-the-art cryptography. It aims to be faster, simpler, leaner, and more useful than IPsec, while avoiding the massive headache. It intends to be considerably more performant than OpenVPN.",installation:{"box-header":"WireGuard Installation",headline:"Installation",content:"Installation instructions for client software can be found on the official WireGuard website.",btn:"Open Instructions",button:"Open Instructions"},"about-wg":{"box-header":"About WireGuard",headline:"About",content:"WireGuard® is an extremely simple yet fast and modern VPN that utilizes state-of-the-art cryptography.",button:"More"},"about-portal":{"box-header":"About WireGuard Portal",headline:"WireGuard Portal",content:"WireGuard Portal is a simple, web based configuration portal for WireGuard.",button:"More"},profiles:{headline:"VPN Profiles",abstract:"You can access and download your personal VPN configurations via your Userprofile.",content:"To find all your configured profiles click on the button below.",button:"Open my profile"},admin:{headline:"Administration Area",abstract:"In the administration area you can manage WireGuard peers and the server interface as well as users that are allowed to log in to the WireGuard Portal.",content:"","button-admin":"Open Server Administration","button-user":"Open User Administration"}},XL={headline:"Interface Administration","headline-peers":"Current VPN Peers","headline-endpoints":"Current Endpoints","no-interface":{"default-selection":"No Interface available",headline:"No interfaces found...",abstract:"Click the plus button above to create a new WireGuard interface."},"no-peer":{headline:"No peers available",abstract:"Currently, there are no peers available for the selected WireGuard interface."},"table-heading":{name:"Name",user:"User",ip:"IP's",endpoint:"Endpoint",status:"Status"},interface:{headline:"Interface status for",mode:"mode",key:"Public Key",endpoint:"Public Endpoint",port:"Listening Port",peers:"Enabled Peers","total-peers":"Total Peers",endpoints:"Enabled Endpoints","total-endpoints":"Total Endpoints",ip:"IP Address","default-allowed-ip":"Default allowed IPs",dns:"DNS Servers",mtu:"MTU","default-keep-alive":"Default Keepalive Interval","button-show-config":"Show configuration","button-download-config":"Download configuration","button-store-config":"Store configuration for wg-quick","button-edit":"Edit interface"},"button-add-interface":"Add Interface","button-add-peer":"Add Peer","button-add-peers":"Add Multiple Peers","button-show-peer":"Show Peer","button-edit-peer":"Edit Peer","peer-disabled":"Peer is disabled, reason:","peer-expiring":"Peer is expiring at","peer-connected":"Connected","peer-not-connected":"Not Connected","peer-handshake":"Last handshake:"},QL={headline:"User Administration","table-heading":{id:"ID",email:"E-Mail",firstname:"Firstname",lastname:"Lastname",source:"Source",peers:"Peers",admin:"Admin"},"no-user":{headline:"No users available",abstract:"Currently, there are no users registered with WireGuard Portal."},"button-add-user":"Add User","button-show-user":"Show User","button-edit-user":"Edit User","user-disabled":"User is disabled, reason:","user-locked":"Account is locked, reason:",admin:"User has administrator privileges","no-admin":"User has no administrator privileges"},JL={headline:"My VPN Peers","table-heading":{name:"Name",ip:"IP's",stats:"Status",interface:"Server Interface"},"no-peer":{headline:"No peers available",abstract:"Currently, there are no peers associated with your user profile."},"peer-connected":"Connected","button-add-peer":"Add Peer","button-show-peer":"Show Peer","button-edit-peer":"Edit Peer"},cb={"user-view":{headline:"User Account:","tab-user":"Information","tab-peers":"Peers","headline-info":"User Information:","headline-notes":"Notes:",email:"E-Mail",firstname:"Firstname",lastname:"Lastname",phone:"Phone number",department:"Department",disabled:"Account Disabled",locked:"Account Locked","no-peers":"User has no associated peers.",peers:{name:"Name",interface:"Interface",ip:"IP's"}},"user-edit":{"headline-edit":"Edit user:","headline-new":"New user","header-general":"General","header-personal":"User Information","header-notes":"Notes","header-state":"State",identifier:{label:"Identifier",placeholder:"The unique user identifier"},source:{label:"Source",placeholder:"The user source"},password:{label:"Password",placeholder:"A super secret password",description:"Leave this field blank to keep current password."},email:{label:"Email",placeholder:"The email address"},phone:{label:"Phone",placeholder:"The phone number"},department:{label:"Department",placeholder:"The department"},firstname:{label:"Firstname",placeholder:"Firstname"},lastname:{label:"Lastname",placeholder:"Lastname"},notes:{label:"Notes",placeholder:""},disabled:{label:"Disabled (no WireGuard connection and no login possible)"},locked:{label:"Locked (no login possible, WireGuard connections still work)"},admin:{label:"Is Admin"}},"interface-view":{headline:"Config for Interface:"},"interface-edit":{"headline-edit":"Edit Interface:","headline-new":"New Interface","tab-interface":"Interface","tab-peerdef":"Peer Defaults","header-general":"General","header-network":"Network","header-crypto":"Cryptography","header-hooks":"Interface Hooks","header-peer-hooks":"Hooks","header-state":"State",identifier:{label:"Identifier",placeholder:"The unique interface identifier"},mode:{label:"Interface Mode",server:"Server Mode",client:"Client Mode",any:"Unknown Mode"},"display-name":{label:"Display Name",placeholder:"The descriptive name for the interface"},"private-key":{label:"Private Key",placeholder:"The private key"},"public-key":{label:"Public Key",placeholder:"The public key"},ip:{label:"IP Addresses",placeholder:"IP Addresses (CIDR format)"},"listen-port":{label:"Listen Port",placeholder:"The listening port"},dns:{label:"DNS Server",placeholder:"The DNS servers that should be used"},"dns-search":{label:"DNS Search Domains",placeholder:"DNS search prefixes"},mtu:{label:"MTU",placeholder:"The interface MTU (0 = keep default)"},"firewall-mark":{label:"Firewall Mark",placeholder:"Firewall mark that is applied to outgoing traffic. (0 = automatic)"},"routing-table":{label:"Routing Table",placeholder:"The routing table ID",description:"Special cases: off = do not manage routes, 0 = automatic"},"pre-up":{label:"Pre-Up",placeholder:"One or multiple bash commands separated by ;"},"post-up":{label:"Post-Up",placeholder:"One or multiple bash commands separated by ;"},"pre-down":{label:"Pre-Down",placeholder:"One or multiple bash commands separated by ;"},"post-down":{label:"Post-Down",placeholder:"One or multiple bash commands separated by ;"},disabled:{label:"Interface Disabled"},"save-config":{label:"Automatically save wg-quick config"},defaults:{endpoint:{label:"Endpoint Address",placeholder:"Endpoint Address",description:"The endpoint address that peers will connect to."},networks:{label:"IP Networks",placeholder:"Network Addresses",description:"Peers will get IP addresses from those subnets."},"allowed-ip":{label:"Allowed IP Addresses",placeholder:"Default Allowed IP Addresses"},mtu:{label:"MTU",placeholder:"The client MTU (0 = keep default)"},"keep-alive":{label:"Keep Alive Interval",placeholder:"Persistent Keepalive (0 = default)"}},"button-apply-defaults":"Apply Peer Defaults"},"peer-view":{"headline-peer":"Peer:","headline-endpoint":"Endpoint:","section-info":"Peer Information","section-status":"Current Status","section-config":"Configuration",identifier:"Identifier",ip:"IP Addresses",user:"Associated User",notes:"Notes","expiry-status":"Expires At","disabled-status":"Disabled At",traffic:"Traffic","connection-status":"Connection Stats",upload:"Uploaded Bytes (from Server to Peer)",download:"Downloaded Bytes (from Peer to Server)",pingable:"Is Pingable",handshake:"Last Handshake","connected-since":"Connected since",endpoint:"Endpoint","button-download":"Download configuration","button-email":"Send configuration via E-Mail"},"peer-edit":{"headline-edit-peer":"Edit peer:","headline-edit-endpoint":"Edit endpoint:","headline-new-peer":"Create peer","headline-new-endpoint":"Create endpoint","header-general":"General","header-network":"Network","header-crypto":"Cryptography","header-hooks":"Hooks (Executed on Peer)","header-state":"State","display-name":{label:"Display Name",placeholder:"The descriptive name for the peer"},"linked-user":{label:"Linked User",placeholder:"The user account which owns this peer"},"private-key":{label:"Private Key",placeholder:"The private key"},"public-key":{label:"Public Key",placeholder:"The public key"},"preshared-key":{label:"Preshared Key",placeholder:"Optional pre-shared key"},"endpoint-public-key":{label:"Endpoint public Key",placeholder:"The public key of the remote endpoint"},endpoint:{label:"Endpoint Address",placeholder:"The address of the remote endpoint"},ip:{label:"IP Addresses",placeholder:"IP Addresses (CIDR format)"},"allowed-ip":{label:"Allowed IP Addresses",placeholder:"Allowed IP Addresses (CIDR format)"},"extra-allowed-ip":{label:"Extra allowed IP Addresses",placeholder:"Extra allowed IP's (Server Sided)",description:"Those IP's will be added on the remote WireGuard interface as allowed IP's."},dns:{label:"DNS Server",placeholder:"The DNS servers that should be used"},"dns-search":{label:"DNS Search Domains",placeholder:"DNS search prefixes"},"keep-alive":{label:"Keep Alive Interval",placeholder:"Persistent Keepalive (0 = default)"},mtu:{label:"MTU",placeholder:"The client MTU (0 = keep default)"},"pre-up":{label:"Pre-Up",placeholder:"One or multiple bash commands separated by ;"},"post-up":{label:"Post-Up",placeholder:"One or multiple bash commands separated by ;"},"pre-down":{label:"Pre-Down",placeholder:"One or multiple bash commands separated by ;"},"post-down":{label:"Post-Down",placeholder:"One or multiple bash commands separated by ;"},disabled:{label:"Peer Disabled"},"ignore-global":{label:"Ignore global settings"},"expires-at":{label:"Expiry date"}},"peer-multi-create":{"headline-peer":"Create multiple peers","headline-endpoint":"Create multiple endpoints",identifiers:{label:"User Identifiers",placeholder:"User Identifiers",description:"A user identifier (the username) for which a peer should be created."},prefix:{"headline-peer":"Peer:","headline-endpoint":"Endpoint:",label:"Display Name Prefix",placeholder:"The prefix",description:"A prefix that is added to the peers display name."}}},eb={general:BL,login:GL,menu:YL,home:ZL,interfaces:XL,users:QL,profile:JL,modals:cb};function tb(){let c=localStorage.getItem("wgLang");return c||(c="en"),c}const sb=iz({legacy:!1,globalInjection:!0,allowComposition:!0,locale:tb(),fallbackLocale:"en",messages:{de:xL,ru:KL,en:eb}});var A2="top",R2="bottom",F2="right",k2="left",u5="auto",j6=[A2,R2,F2,k2],W4="start",k6="end",Na="clippingParents",K9="viewport",i6="popper",Da="reference",t9=j6.reduce(function(c,e){return c.concat([e+"-"+W4,e+"-"+k6])},[]),B9=[].concat(j6,[u5]).reduce(function(c,e){return c.concat([e,e+"-"+W4,e+"-"+k6])},[]),Ra="beforeRead",Fa="read",Ua="afterRead",ja="beforeMain",Wa="main",qa="afterMain",Ka="beforeWrite",Ba="write",Ga="afterWrite",Ya=[Ra,Fa,Ua,ja,Wa,qa,Ka,Ba,Ga];function V3(c){return c?(c.nodeName||"").toLowerCase():null}function U2(c){if(c==null)return window;if(c.toString()!=="[object Window]"){var e=c.ownerDocument;return e&&e.defaultView||window}return c}function q4(c){var e=U2(c).Element;return c instanceof e||c instanceof Element}function B2(c){var e=U2(c).HTMLElement;return c instanceof e||c instanceof HTMLElement}function G9(c){if(typeof ShadowRoot>"u")return!1;var e=U2(c).ShadowRoot;return c instanceof e||c instanceof ShadowRoot}function lb(c){var e=c.state;Object.keys(e.elements).forEach(function(t){var s=e.styles[t]||{},l=e.attributes[t]||{},a=e.elements[t];!B2(a)||!V3(a)||(Object.assign(a.style,s),Object.keys(l).forEach(function(n){var r=l[n];r===!1?a.removeAttribute(n):a.setAttribute(n,r===!0?"":r)}))})}function ab(c){var e=c.state,t={popper:{position:e.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(e.elements.popper.style,t.popper),e.styles=t,e.elements.arrow&&Object.assign(e.elements.arrow.style,t.arrow),function(){Object.keys(e.elements).forEach(function(s){var l=e.elements[s],a=e.attributes[s]||{},n=Object.keys(e.styles.hasOwnProperty(s)?e.styles[s]:t[s]),r=n.reduce(function(i,o){return i[o]="",i},{});!B2(l)||!V3(l)||(Object.assign(l.style,r),Object.keys(a).forEach(function(i){l.removeAttribute(i)}))})}}const Y9={name:"applyStyles",enabled:!0,phase:"write",fn:lb,effect:ab,requires:["computeStyles"]};function p3(c){return c.split("-")[0]}var N4=Math.max,F0=Math.min,S6=Math.round;function s9(){var c=navigator.userAgentData;return c!=null&&c.brands&&Array.isArray(c.brands)?c.brands.map(function(e){return e.brand+"/"+e.version}).join(" "):navigator.userAgent}function Za(){return!/^((?!chrome|android).)*safari/i.test(s9())}function P6(c,e,t){e===void 0&&(e=!1),t===void 0&&(t=!1);var s=c.getBoundingClientRect(),l=1,a=1;e&&B2(c)&&(l=c.offsetWidth>0&&S6(s.width)/c.offsetWidth||1,a=c.offsetHeight>0&&S6(s.height)/c.offsetHeight||1);var n=q4(c)?U2(c):window,r=n.visualViewport,i=!Za()&&t,o=(s.left+(i&&r?r.offsetLeft:0))/l,d=(s.top+(i&&r?r.offsetTop:0))/a,f=s.width/l,v=s.height/a;return{width:f,height:v,top:d,right:o+f,bottom:d+v,left:o,x:o,y:d}}function Z9(c){var e=P6(c),t=c.offsetWidth,s=c.offsetHeight;return Math.abs(e.width-t)<=1&&(t=e.width),Math.abs(e.height-s)<=1&&(s=e.height),{x:c.offsetLeft,y:c.offsetTop,width:t,height:s}}function Xa(c,e){var t=e.getRootNode&&e.getRootNode();if(c.contains(e))return!0;if(t&&G9(t)){var s=e;do{if(s&&c.isSameNode(s))return!0;s=s.parentNode||s.host}while(s)}return!1}function O3(c){return U2(c).getComputedStyle(c)}function nb(c){return["table","td","th"].indexOf(V3(c))>=0}function H4(c){return((q4(c)?c.ownerDocument:c.document)||window.document).documentElement}function f5(c){return V3(c)==="html"?c:c.assignedSlot||c.parentNode||(G9(c)?c.host:null)||H4(c)}function Dt(c){return!B2(c)||O3(c).position==="fixed"?null:c.offsetParent}function rb(c){var e=/firefox/i.test(s9()),t=/Trident/i.test(s9());if(t&&B2(c)){var s=O3(c);if(s.position==="fixed")return null}var l=f5(c);for(G9(l)&&(l=l.host);B2(l)&&["html","body"].indexOf(V3(l))<0;){var a=O3(l);if(a.transform!=="none"||a.perspective!=="none"||a.contain==="paint"||["transform","perspective"].indexOf(a.willChange)!==-1||e&&a.willChange==="filter"||e&&a.filter&&a.filter!=="none")return l;l=l.parentNode}return null}function F8(c){for(var e=U2(c),t=Dt(c);t&&nb(t)&&O3(t).position==="static";)t=Dt(t);return t&&(V3(t)==="html"||V3(t)==="body"&&O3(t).position==="static")?e:t||rb(c)||e}function X9(c){return["top","bottom"].indexOf(c)>=0?"x":"y"}function v8(c,e,t){return N4(c,F0(e,t))}function ib(c,e,t){var s=v8(c,e,t);return s>t?t:s}function Qa(){return{top:0,right:0,bottom:0,left:0}}function Ja(c){return Object.assign({},Qa(),c)}function cn(c,e){return e.reduce(function(t,s){return t[s]=c,t},{})}var ob=function(e,t){return e=typeof e=="function"?e(Object.assign({},t.rects,{placement:t.placement})):e,Ja(typeof e!="number"?e:cn(e,j6))};function ub(c){var e,t=c.state,s=c.name,l=c.options,a=t.elements.arrow,n=t.modifiersData.popperOffsets,r=p3(t.placement),i=X9(r),o=[k2,F2].indexOf(r)>=0,d=o?"height":"width";if(!(!a||!n)){var f=ob(l.padding,t),v=Z9(a),_=i==="y"?A2:k2,y=i==="y"?R2:F2,T=t.rects.reference[d]+t.rects.reference[i]-n[i]-t.rects.popper[d],$=n[i]-t.rects.reference[i],E=F8(a),z=E?i==="y"?E.clientHeight||0:E.clientWidth||0:0,C=T/2-$/2,h=f[_],m=z-v[d]-f[y],M=z/2-v[d]/2+C,b=v8(h,M,m),N=i;t.modifiersData[s]=(e={},e[N]=b,e.centerOffset=b-M,e)}}function fb(c){var e=c.state,t=c.options,s=t.element,l=s===void 0?"[data-popper-arrow]":s;l!=null&&(typeof l=="string"&&(l=e.elements.popper.querySelector(l),!l)||Xa(e.elements.popper,l)&&(e.elements.arrow=l))}const en={name:"arrow",enabled:!0,phase:"main",fn:ub,effect:fb,requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function T6(c){return c.split("-")[1]}var db={top:"auto",right:"auto",bottom:"auto",left:"auto"};function hb(c,e){var t=c.x,s=c.y,l=e.devicePixelRatio||1;return{x:S6(t*l)/l||0,y:S6(s*l)/l||0}}function Rt(c){var e,t=c.popper,s=c.popperRect,l=c.placement,a=c.variation,n=c.offsets,r=c.position,i=c.gpuAcceleration,o=c.adaptive,d=c.roundOffsets,f=c.isFixed,v=n.x,_=v===void 0?0:v,y=n.y,T=y===void 0?0:y,$=typeof d=="function"?d({x:_,y:T}):{x:_,y:T};_=$.x,T=$.y;var E=n.hasOwnProperty("x"),z=n.hasOwnProperty("y"),C=k2,h=A2,m=window;if(o){var M=F8(t),b="clientHeight",N="clientWidth";if(M===U2(t)&&(M=H4(t),O3(M).position!=="static"&&r==="absolute"&&(b="scrollHeight",N="scrollWidth")),M=M,l===A2||(l===k2||l===F2)&&a===k6){h=R2;var I=f&&M===m&&m.visualViewport?m.visualViewport.height:M[b];T-=I-s.height,T*=i?1:-1}if(l===k2||(l===A2||l===R2)&&a===k6){C=F2;var F=f&&M===m&&m.visualViewport?m.visualViewport.width:M[N];_-=F-s.width,_*=i?1:-1}}var U=Object.assign({position:r},o&&db),q=d===!0?hb({x:_,y:T},U2(t)):{x:_,y:T};if(_=q.x,T=q.y,i){var f1;return Object.assign({},U,(f1={},f1[h]=z?"0":"",f1[C]=E?"0":"",f1.transform=(m.devicePixelRatio||1)<=1?"translate("+_+"px, "+T+"px)":"translate3d("+_+"px, "+T+"px, 0)",f1))}return Object.assign({},U,(e={},e[h]=z?T+"px":"",e[C]=E?_+"px":"",e.transform="",e))}function mb(c){var e=c.state,t=c.options,s=t.gpuAcceleration,l=s===void 0?!0:s,a=t.adaptive,n=a===void 0?!0:a,r=t.roundOffsets,i=r===void 0?!0:r,o={placement:p3(e.placement),variation:T6(e.placement),popper:e.elements.popper,popperRect:e.rects.popper,gpuAcceleration:l,isFixed:e.options.strategy==="fixed"};e.modifiersData.popperOffsets!=null&&(e.styles.popper=Object.assign({},e.styles.popper,Rt(Object.assign({},o,{offsets:e.modifiersData.popperOffsets,position:e.options.strategy,adaptive:n,roundOffsets:i})))),e.modifiersData.arrow!=null&&(e.styles.arrow=Object.assign({},e.styles.arrow,Rt(Object.assign({},o,{offsets:e.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:i})))),e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-placement":e.placement})}const Q9={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:mb,data:{}};var z0={passive:!0};function zb(c){var e=c.state,t=c.instance,s=c.options,l=s.scroll,a=l===void 0?!0:l,n=s.resize,r=n===void 0?!0:n,i=U2(e.elements.popper),o=[].concat(e.scrollParents.reference,e.scrollParents.popper);return a&&o.forEach(function(d){d.addEventListener("scroll",t.update,z0)}),r&&i.addEventListener("resize",t.update,z0),function(){a&&o.forEach(function(d){d.removeEventListener("scroll",t.update,z0)}),r&&i.removeEventListener("resize",t.update,z0)}}const J9={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:zb,data:{}};var pb={left:"right",right:"left",bottom:"top",top:"bottom"};function w0(c){return c.replace(/left|right|bottom|top/g,function(e){return pb[e]})}var vb={start:"end",end:"start"};function Ft(c){return c.replace(/start|end/g,function(e){return vb[e]})}function cc(c){var e=U2(c),t=e.pageXOffset,s=e.pageYOffset;return{scrollLeft:t,scrollTop:s}}function ec(c){return P6(H4(c)).left+cc(c).scrollLeft}function Hb(c,e){var t=U2(c),s=H4(c),l=t.visualViewport,a=s.clientWidth,n=s.clientHeight,r=0,i=0;if(l){a=l.width,n=l.height;var o=Za();(o||!o&&e==="fixed")&&(r=l.offsetLeft,i=l.offsetTop)}return{width:a,height:n,x:r+ec(c),y:i}}function Vb(c){var e,t=H4(c),s=cc(c),l=(e=c.ownerDocument)==null?void 0:e.body,a=N4(t.scrollWidth,t.clientWidth,l?l.scrollWidth:0,l?l.clientWidth:0),n=N4(t.scrollHeight,t.clientHeight,l?l.scrollHeight:0,l?l.clientHeight:0),r=-s.scrollLeft+ec(c),i=-s.scrollTop;return O3(l||t).direction==="rtl"&&(r+=N4(t.clientWidth,l?l.clientWidth:0)-a),{width:a,height:n,x:r,y:i}}function tc(c){var e=O3(c),t=e.overflow,s=e.overflowX,l=e.overflowY;return/auto|scroll|overlay|hidden/.test(t+l+s)}function tn(c){return["html","body","#document"].indexOf(V3(c))>=0?c.ownerDocument.body:B2(c)&&tc(c)?c:tn(f5(c))}function H8(c,e){var t;e===void 0&&(e=[]);var s=tn(c),l=s===((t=c.ownerDocument)==null?void 0:t.body),a=U2(s),n=l?[a].concat(a.visualViewport||[],tc(s)?s:[]):s,r=e.concat(n);return l?r:r.concat(H8(f5(n)))}function l9(c){return Object.assign({},c,{left:c.x,top:c.y,right:c.x+c.width,bottom:c.y+c.height})}function gb(c,e){var t=P6(c,!1,e==="fixed");return t.top=t.top+c.clientTop,t.left=t.left+c.clientLeft,t.bottom=t.top+c.clientHeight,t.right=t.left+c.clientWidth,t.width=c.clientWidth,t.height=c.clientHeight,t.x=t.left,t.y=t.top,t}function Ut(c,e,t){return e===K9?l9(Hb(c,t)):q4(e)?gb(e,t):l9(Vb(H4(c)))}function Mb(c){var e=H8(f5(c)),t=["absolute","fixed"].indexOf(O3(c).position)>=0,s=t&&B2(c)?F8(c):c;return q4(s)?e.filter(function(l){return q4(l)&&Xa(l,s)&&V3(l)!=="body"}):[]}function Cb(c,e,t,s){var l=e==="clippingParents"?Mb(c):[].concat(e),a=[].concat(l,[t]),n=a[0],r=a.reduce(function(i,o){var d=Ut(c,o,s);return i.top=N4(d.top,i.top),i.right=F0(d.right,i.right),i.bottom=F0(d.bottom,i.bottom),i.left=N4(d.left,i.left),i},Ut(c,n,s));return r.width=r.right-r.left,r.height=r.bottom-r.top,r.x=r.left,r.y=r.top,r}function sn(c){var e=c.reference,t=c.element,s=c.placement,l=s?p3(s):null,a=s?T6(s):null,n=e.x+e.width/2-t.width/2,r=e.y+e.height/2-t.height/2,i;switch(l){case A2:i={x:n,y:e.y-t.height};break;case R2:i={x:n,y:e.y+e.height};break;case F2:i={x:e.x+e.width,y:r};break;case k2:i={x:e.x-t.width,y:r};break;default:i={x:e.x,y:e.y}}var o=l?X9(l):null;if(o!=null){var d=o==="y"?"height":"width";switch(a){case W4:i[o]=i[o]-(e[d]/2-t[d]/2);break;case k6:i[o]=i[o]+(e[d]/2-t[d]/2);break}}return i}function I6(c,e){e===void 0&&(e={});var t=e,s=t.placement,l=s===void 0?c.placement:s,a=t.strategy,n=a===void 0?c.strategy:a,r=t.boundary,i=r===void 0?Na:r,o=t.rootBoundary,d=o===void 0?K9:o,f=t.elementContext,v=f===void 0?i6:f,_=t.altBoundary,y=_===void 0?!1:_,T=t.padding,$=T===void 0?0:T,E=Ja(typeof $!="number"?$:cn($,j6)),z=v===i6?Da:i6,C=c.rects.popper,h=c.elements[y?z:v],m=Cb(q4(h)?h:h.contextElement||H4(c.elements.popper),i,d,n),M=P6(c.elements.reference),b=sn({reference:M,element:C,strategy:"absolute",placement:l}),N=l9(Object.assign({},C,b)),I=v===i6?N:M,F={top:m.top-I.top+E.top,bottom:I.bottom-m.bottom+E.bottom,left:m.left-I.left+E.left,right:I.right-m.right+E.right},U=c.modifiersData.offset;if(v===i6&&U){var q=U[l];Object.keys(F).forEach(function(f1){var v1=[F2,R2].indexOf(f1)>=0?1:-1,L1=[A2,R2].indexOf(f1)>=0?"y":"x";F[f1]+=q[L1]*v1})}return F}function Lb(c,e){e===void 0&&(e={});var t=e,s=t.placement,l=t.boundary,a=t.rootBoundary,n=t.padding,r=t.flipVariations,i=t.allowedAutoPlacements,o=i===void 0?B9:i,d=T6(s),f=d?r?t9:t9.filter(function(y){return T6(y)===d}):j6,v=f.filter(function(y){return o.indexOf(y)>=0});v.length===0&&(v=f);var _=v.reduce(function(y,T){return y[T]=I6(c,{placement:T,boundary:l,rootBoundary:a,padding:n})[p3(T)],y},{});return Object.keys(_).sort(function(y,T){return _[y]-_[T]})}function bb(c){if(p3(c)===u5)return[];var e=w0(c);return[Ft(c),e,Ft(e)]}function _b(c){var e=c.state,t=c.options,s=c.name;if(!e.modifiersData[s]._skip){for(var l=t.mainAxis,a=l===void 0?!0:l,n=t.altAxis,r=n===void 0?!0:n,i=t.fallbackPlacements,o=t.padding,d=t.boundary,f=t.rootBoundary,v=t.altBoundary,_=t.flipVariations,y=_===void 0?!0:_,T=t.allowedAutoPlacements,$=e.options.placement,E=p3($),z=E===$,C=i||(z||!y?[w0($)]:bb($)),h=[$].concat(C).reduce(function(K,Q){return K.concat(p3(Q)===u5?Lb(e,{placement:Q,boundary:d,rootBoundary:f,padding:o,flipVariations:y,allowedAutoPlacements:T}):Q)},[]),m=e.rects.reference,M=e.rects.popper,b=new Map,N=!0,I=h[0],F=0;F=0,L1=v1?"width":"height",z1=I6(e,{placement:U,boundary:d,rootBoundary:f,altBoundary:v,padding:o}),d1=v1?f1?F2:k2:f1?R2:A2;m[L1]>M[L1]&&(d1=w0(d1));var r1=w0(d1),g1=[];if(a&&g1.push(z1[q]<=0),r&&g1.push(z1[d1]<=0,z1[r1]<=0),g1.every(function(K){return K})){I=U,N=!1;break}b.set(U,g1)}if(N)for(var y1=y?3:1,T1=function(Q){var M1=h.find(function(G){var u1=b.get(G);if(u1)return u1.slice(0,Q).every(function(n1){return n1})});if(M1)return I=M1,"break"},O=y1;O>0;O--){var X=T1(O);if(X==="break")break}e.placement!==I&&(e.modifiersData[s]._skip=!0,e.placement=I,e.reset=!0)}}const ln={name:"flip",enabled:!0,phase:"main",fn:_b,requiresIfExists:["offset"],data:{_skip:!1}};function jt(c,e,t){return t===void 0&&(t={x:0,y:0}),{top:c.top-e.height-t.y,right:c.right-e.width+t.x,bottom:c.bottom-e.height+t.y,left:c.left-e.width-t.x}}function Wt(c){return[A2,F2,R2,k2].some(function(e){return c[e]>=0})}function yb(c){var e=c.state,t=c.name,s=e.rects.reference,l=e.rects.popper,a=e.modifiersData.preventOverflow,n=I6(e,{elementContext:"reference"}),r=I6(e,{altBoundary:!0}),i=jt(n,s),o=jt(r,l,a),d=Wt(i),f=Wt(o);e.modifiersData[t]={referenceClippingOffsets:i,popperEscapeOffsets:o,isReferenceHidden:d,hasPopperEscaped:f},e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-reference-hidden":d,"data-popper-escaped":f})}const an={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:yb};function wb(c,e,t){var s=p3(c),l=[k2,A2].indexOf(s)>=0?-1:1,a=typeof t=="function"?t(Object.assign({},e,{placement:c})):t,n=a[0],r=a[1];return n=n||0,r=(r||0)*l,[k2,F2].indexOf(s)>=0?{x:r,y:n}:{x:n,y:r}}function Eb(c){var e=c.state,t=c.options,s=c.name,l=t.offset,a=l===void 0?[0,0]:l,n=B9.reduce(function(d,f){return d[f]=wb(f,e.rects,a),d},{}),r=n[e.placement],i=r.x,o=r.y;e.modifiersData.popperOffsets!=null&&(e.modifiersData.popperOffsets.x+=i,e.modifiersData.popperOffsets.y+=o),e.modifiersData[s]=n}const nn={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:Eb};function Ab(c){var e=c.state,t=c.name;e.modifiersData[t]=sn({reference:e.rects.reference,element:e.rects.popper,strategy:"absolute",placement:e.placement})}const sc={name:"popperOffsets",enabled:!0,phase:"read",fn:Ab,data:{}};function kb(c){return c==="x"?"y":"x"}function Sb(c){var e=c.state,t=c.options,s=c.name,l=t.mainAxis,a=l===void 0?!0:l,n=t.altAxis,r=n===void 0?!1:n,i=t.boundary,o=t.rootBoundary,d=t.altBoundary,f=t.padding,v=t.tether,_=v===void 0?!0:v,y=t.tetherOffset,T=y===void 0?0:y,$=I6(e,{boundary:i,rootBoundary:o,padding:f,altBoundary:d}),E=p3(e.placement),z=T6(e.placement),C=!z,h=X9(E),m=kb(h),M=e.modifiersData.popperOffsets,b=e.rects.reference,N=e.rects.popper,I=typeof T=="function"?T(Object.assign({},e.rects,{placement:e.placement})):T,F=typeof I=="number"?{mainAxis:I,altAxis:I}:Object.assign({mainAxis:0,altAxis:0},I),U=e.modifiersData.offset?e.modifiersData.offset[e.placement]:null,q={x:0,y:0};if(M){if(a){var f1,v1=h==="y"?A2:k2,L1=h==="y"?R2:F2,z1=h==="y"?"height":"width",d1=M[h],r1=d1+$[v1],g1=d1-$[L1],y1=_?-N[z1]/2:0,T1=z===W4?b[z1]:N[z1],O=z===W4?-N[z1]:-b[z1],X=e.elements.arrow,K=_&&X?Z9(X):{width:0,height:0},Q=e.modifiersData["arrow#persistent"]?e.modifiersData["arrow#persistent"].padding:Qa(),M1=Q[v1],G=Q[L1],u1=v8(0,b[z1],K[z1]),n1=C?b[z1]/2-y1-u1-M1-F.mainAxis:T1-u1-M1-F.mainAxis,m1=C?-b[z1]/2+y1+u1+G+F.mainAxis:O+u1+G+F.mainAxis,k1=e.elements.arrow&&F8(e.elements.arrow),S=k1?h==="y"?k1.clientTop||0:k1.clientLeft||0:0,V=(f1=U==null?void 0:U[h])!=null?f1:0,H=d1+n1-V-S,A=d1+m1-V,D=v8(_?F0(r1,H):r1,d1,_?N4(g1,A):g1);M[h]=D,q[h]=D-d1}if(r){var B,c1=h==="x"?A2:k2,t1=h==="x"?R2:F2,l1=M[m],s1=m==="y"?"height":"width",b1=l1+$[c1],h1=l1-$[t1],R=[A2,k2].indexOf(E)!==-1,Y=(B=U==null?void 0:U[m])!=null?B:0,H1=R?b1:l1-b[s1]-N[s1]-Y+F.altAxis,S1=R?l1+b[s1]+N[s1]-Y-F.altAxis:h1,F1=_&&R?ib(H1,l1,S1):v8(_?H1:b1,l1,_?S1:h1);M[m]=F1,q[m]=F1-l1}e.modifiersData[s]=q}}const rn={name:"preventOverflow",enabled:!0,phase:"main",fn:Sb,requiresIfExists:["offset"]};function Pb(c){return{scrollLeft:c.scrollLeft,scrollTop:c.scrollTop}}function Tb(c){return c===U2(c)||!B2(c)?cc(c):Pb(c)}function Ib(c){var e=c.getBoundingClientRect(),t=S6(e.width)/c.offsetWidth||1,s=S6(e.height)/c.offsetHeight||1;return t!==1||s!==1}function $b(c,e,t){t===void 0&&(t=!1);var s=B2(e),l=B2(e)&&Ib(e),a=H4(e),n=P6(c,l,t),r={scrollLeft:0,scrollTop:0},i={x:0,y:0};return(s||!s&&!t)&&((V3(e)!=="body"||tc(a))&&(r=Tb(e)),B2(e)?(i=P6(e,!0),i.x+=e.clientLeft,i.y+=e.clientTop):a&&(i.x=ec(a))),{x:n.left+r.scrollLeft-i.x,y:n.top+r.scrollTop-i.y,width:n.width,height:n.height}}function Ob(c){var e=new Map,t=new Set,s=[];c.forEach(function(a){e.set(a.name,a)});function l(a){t.add(a.name);var n=[].concat(a.requires||[],a.requiresIfExists||[]);n.forEach(function(r){if(!t.has(r)){var i=e.get(r);i&&l(i)}}),s.push(a)}return c.forEach(function(a){t.has(a.name)||l(a)}),s}function xb(c){var e=Ob(c);return Ya.reduce(function(t,s){return t.concat(e.filter(function(l){return l.phase===s}))},[])}function Nb(c){var e;return function(){return e||(e=new Promise(function(t){Promise.resolve().then(function(){e=void 0,t(c())})})),e}}function Db(c){var e=c.reduce(function(t,s){var l=t[s.name];return t[s.name]=l?Object.assign({},l,s,{options:Object.assign({},l.options,s.options),data:Object.assign({},l.data,s.data)}):s,t},{});return Object.keys(e).map(function(t){return e[t]})}var qt={placement:"bottom",modifiers:[],strategy:"absolute"};function Kt(){for(var c=arguments.length,e=new Array(c),t=0;t - + diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 3131efe..0000000 --- a/package-lock.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "wg-portal", - "lockfileVersion": 3, - "requires": true, - "packages": {} -}