mirror of
https://github.com/donaldzou/WGDashboard.git
synced 2025-07-19 03:26:59 +00:00
2 lines
33 KiB
JavaScript
2 lines
33 KiB
JavaScript
import{_ as w,D as v,y as P,z as f,a as n,c as l,b as t,d as i,m as g,x as b,n as y,t as k,e as _,j as c,W as L,f as I,v as F,i as $,F as C,g as E,w as T,h as K,k as B,T as M,r as R,p as z,o as O,A as D}from"./index-Dv7fDh6w.js";import{L as m}from"./localeText-C-3_pE2W.js";import{d as S}from"./dayjs.min-Be5JU_dU.js";import{V as q}from"./vue-datepicker-DgHA9RCn.js";import{p as Q}from"./Event-4cBx5ORO.js";const J={components:{LocaleText:m},props:{targetData:String,title:String,warning:!1,warningText:""},setup(){const s=v(),e=`input_${P()}`;return{store:s,uuid:e}},data(){return{value:"",invalidFeedback:"",showInvalidFeedback:!1,isValid:!1,timeout:void 0,changed:!1,updating:!1}},mounted(){this.value=this.store.Configuration.Peers[this.targetData]},methods:{async useValidation(){this.changed&&await f("/api/updateDashboardConfigurationItem",{section:"Peers",key:this.targetData,value:this.value},s=>{s.status?(this.isValid=!0,this.showInvalidFeedback=!1,this.store.Configuration.Peers[this.targetData]=this.value,clearTimeout(this.timeout),this.timeout=setTimeout(()=>this.isValid=!1,5e3)):(this.isValid=!1,this.showInvalidFeedback=!0,this.invalidFeedback=s.message),this.changed=!1,this.updating=!1})}}},X={class:"form-group mb-2"},Z=["for"],tt=["id","disabled"],et={class:"invalid-feedback"},st={key:0,class:"px-2 py-1 text-warning-emphasis bg-warning-subtle border border-warning-subtle rounded-2 d-inline-block mt-1"};function at(s,e,u,r,d,h){const a=c("LocaleText");return n(),l("div",X,[t("label",{for:this.uuid,class:"text-muted mb-1"},[t("strong",null,[t("small",null,[i(a,{t:this.title},null,8,["t"])])])],8,Z),g(t("input",{type:"text",class:y(["form-control",{"is-invalid":d.showInvalidFeedback,"is-valid":d.isValid}]),id:this.uuid,"onUpdate:modelValue":e[0]||(e[0]=o=>this.value=o),onKeydown:e[1]||(e[1]=o=>this.changed=!0),onBlur:e[2]||(e[2]=o=>h.useValidation()),disabled:this.updating},null,42,tt),[[b,this.value]]),t("div",et,k(this.invalidFeedback),1),u.warning?(n(),l("div",st,[t("small",null,[e[3]||(e[3]=t("i",{class:"bi bi-exclamation-triangle-fill me-2"},null,-1)),i(a,{t:u.warningText},null,8,["t"])])])):_("",!0)])}const it=w(J,[["render",at]]),ot=s=>{},nt={name:"accountSettingsInputUsername",components:{LocaleText:m},props:{targetData:String,title:String},setup(){const s=v(),e=`input_${P()}`;return{store:s,uuid:e}},data(){return{value:"",invalidFeedback:"",showInvalidFeedback:!1,isValid:!1,timeout:void 0,changed:!1,updating:!1}},mounted(){this.value=this.store.Configuration.Account[this.targetData]},methods:{async useValidation(s){this.changed&&(this.updating=!0,await f("/api/updateDashboardConfigurationItem",{section:"Account",key:this.targetData,value:this.value},e=>{e.status?(this.isValid=!0,this.showInvalidFeedback=!1,this.store.Configuration.Account[this.targetData]=this.value,clearTimeout(this.timeout),this.timeout=setTimeout(()=>this.isValid=!1,5e3)):(this.isValid=!1,this.showInvalidFeedback=!0,this.invalidFeedback=e.message),this.changed=!1,this.updating=!1}))}}},dt={class:"form-group mb-2"},lt=["for"],rt=["id","disabled"],ut={class:"invalid-feedback"};function ct(s,e,u,r,d,h){const a=c("LocaleText");return n(),l("div",dt,[t("label",{for:this.uuid,class:"text-muted mb-1"},[t("strong",null,[t("small",null,[i(a,{t:this.title},null,8,["t"])])])],8,lt),g(t("input",{type:"text",class:y(["form-control",{"is-invalid":d.showInvalidFeedback,"is-valid":d.isValid}]),id:this.uuid,"onUpdate:modelValue":e[0]||(e[0]=o=>this.value=o),onKeydown:e[1]||(e[1]=o=>this.changed=!0),onBlur:e[2]||(e[2]=o=>h.useValidation()),disabled:this.updating},null,42,rt),[[b,this.value]]),t("div",ut,k(this.invalidFeedback),1)])}const ht=w(nt,[["render",ct]]),pt={name:"accountSettingsInputPassword",components:{LocaleText:m},props:{targetData:String,warning:!1,warningText:""},setup(){const s=v(),e=`input_${P()}`;return{store:s,uuid:e}},data(){return{value:{currentPassword:"",newPassword:"",repeatNewPassword:""},invalidFeedback:"",showInvalidFeedback:!1,isValid:!1,timeout:void 0}},methods:{async useValidation(){Object.values(this.value).find(s=>s.length===0)===void 0?this.value.newPassword===this.value.repeatNewPassword?await f("/api/updateDashboardConfigurationItem",{section:"Account",key:this.targetData,value:this.value},s=>{s.status?(this.isValid=!0,this.showInvalidFeedback=!1,this.store.Configuration.Account[this.targetData]=this.value,clearTimeout(this.timeout),this.timeout=setTimeout(()=>{this.isValid=!1,this.value={currentPassword:"",newPassword:"",repeatNewPassword:""}},5e3)):(this.isValid=!1,this.showInvalidFeedback=!0,this.invalidFeedback=s.message)}):(this.showInvalidFeedback=!0,this.invalidFeedback="New passwords does not match"):(this.showInvalidFeedback=!0,this.invalidFeedback="Please fill in all required fields.")}},computed:{passwordValid(){return Object.values(this.value).find(s=>s.length===0)===void 0&&this.value.newPassword===this.value.repeatNewPassword}}},mt={class:"d-flex flex-column gap-2"},gt={class:"row g-2"},bt={class:"col-sm"},_t={class:"form-group"},ft=["for"],vt=["id"],yt={key:0,class:"invalid-feedback d-block"},wt={class:"col-sm"},$t={class:"form-group"},kt=["for"],xt=["id"],Dt={class:"col-sm"},It={class:"form-group"},Pt=["for"],Ct=["id"],At=["disabled"];function St(s,e,u,r,d,h){const a=c("LocaleText");return n(),l("form",mt,[t("div",gt,[t("div",bt,[t("div",_t,[t("label",{for:"currentPassword_"+this.uuid,class:"text-muted mb-1"},[t("strong",null,[t("small",null,[i(a,{t:"Current Password"})])])],8,ft),g(t("input",{type:"password",class:y(["form-control",{"is-invalid":d.showInvalidFeedback,"is-valid":d.isValid}]),autocomplete:"current-password","onUpdate:modelValue":e[0]||(e[0]=o=>this.value.currentPassword=o),id:"currentPassword_"+this.uuid},null,10,vt),[[b,this.value.currentPassword]]),d.showInvalidFeedback?(n(),l("div",yt,k(this.invalidFeedback),1)):_("",!0)])]),t("div",wt,[t("div",$t,[t("label",{for:"newPassword_"+this.uuid,class:"text-muted mb-1"},[t("strong",null,[t("small",null,[i(a,{t:"New Password"})])])],8,kt),g(t("input",{type:"password",class:y(["form-control",{"is-invalid":d.showInvalidFeedback,"is-valid":d.isValid}]),autocomplete:"new-password","onUpdate:modelValue":e[1]||(e[1]=o=>this.value.newPassword=o),id:"newPassword_"+this.uuid},null,10,xt),[[b,this.value.newPassword]])])]),t("div",Dt,[t("div",It,[t("label",{for:"repeatNewPassword_"+this.uuid,class:"text-muted mb-1"},[t("strong",null,[t("small",null,[i(a,{t:"Repeat New Password"})])])],8,Pt),g(t("input",{type:"password",class:y(["form-control",{"is-invalid":d.showInvalidFeedback,"is-valid":d.isValid}]),autocomplete:"new-password","onUpdate:modelValue":e[2]||(e[2]=o=>this.value.repeatNewPassword=o),id:"repeatNewPassword_"+this.uuid},null,10,Ct),[[b,this.value.repeatNewPassword]])])])]),t("button",{disabled:!this.passwordValid,class:"ms-auto btn bg-success-subtle text-success-emphasis border-1 border-success-subtle rounded-3 shadow-sm",onClick:e[3]||(e[3]=o=>this.useValidation())},[e[4]||(e[4]=t("i",{class:"bi bi-save2-fill me-2"},null,-1)),i(a,{t:"Update Password"})],8,At)])}const Kt=w(pt,[["render",St]]),Vt={name:"dashboardSettingsInputWireguardConfigurationPath",components:{LocaleText:m},props:{targetData:String,title:String,warning:!1,warningText:""},setup(){const s=v(),e=L(),u=`input_${P()}`;return{store:s,uuid:u,WireguardConfigurationStore:e}},data(){return{value:"",invalidFeedback:"",showInvalidFeedback:!1,isValid:!1,timeout:void 0,changed:!1,updating:!1}},mounted(){this.value=this.store.Configuration.Server[this.targetData]},methods:{async useValidation(){this.changed&&(this.updating=!0,await f("/api/updateDashboardConfigurationItem",{section:"Server",key:this.targetData,value:this.value},s=>{s.status?(this.isValid=!0,this.showInvalidFeedback=!1,this.store.Configuration.Account[this.targetData]=this.value,clearTimeout(this.timeout),this.timeout=setTimeout(()=>this.isValid=!1,5e3),this.WireguardConfigurationStore.getConfigurations(),this.store.newMessage("Server","WireGuard configuration path saved","success")):(this.isValid=!1,this.showInvalidFeedback=!0,this.invalidFeedback=s.message),this.changed=!1,this.updating=!1}))}}},Tt={class:"card"},Ft={class:"card-header"},Lt={class:"my-2"},Et={class:"card-body"},Mt={class:"form-group"},Ut=["for"],Wt={class:"d-flex gap-2 align-items-start"},Nt={class:"flex-grow-1"},Yt=["id","disabled"],Gt={class:"invalid-feedback fw-bold"},Ht=["disabled"],jt={key:0,class:"bi bi-save2-fill"},Bt={key:1,class:"spinner-border spinner-border-sm"},Rt={key:0,class:"px-2 py-1 text-warning-emphasis bg-warning-subtle border border-warning-subtle rounded-2 d-inline-block mt-1 mb-2"};function zt(s,e,u,r,d,h){const a=c("LocaleText");return n(),l("div",Tt,[t("div",Ft,[t("h6",Lt,[i(a,{t:"Path"})])]),t("div",Et,[t("div",Mt,[t("label",{for:this.uuid,class:"text-muted mb-1"},[t("strong",null,[t("small",null,[i(a,{t:this.title},null,8,["t"])])])],8,Ut),t("div",Wt,[t("div",Nt,[g(t("input",{type:"text",class:y(["form-control rounded-3",{"is-invalid":this.showInvalidFeedback,"is-valid":this.isValid}]),id:this.uuid,"onUpdate:modelValue":e[0]||(e[0]=o=>this.value=o),onKeydown:e[1]||(e[1]=o=>this.changed=!0),disabled:this.updating},null,42,Yt),[[b,this.value]]),t("div",Gt,k(this.invalidFeedback),1)]),t("button",{onClick:e[2]||(e[2]=o=>this.useValidation()),disabled:!this.changed,class:"ms-auto btn rounded-3 border-success-subtle bg-success-subtle text-success-emphasis"},[this.updating?(n(),l("span",Bt)):(n(),l("i",jt))],8,Ht)]),u.warning?(n(),l("div",Rt,[t("small",null,[e[3]||(e[3]=t("i",{class:"bi bi-exclamation-triangle-fill me-2"},null,-1)),i(a,{t:u.warningText},null,8,["t"])])])):_("",!0)])])])}const Ot=w(Vt,[["render",zt]]),qt={name:"dashboardTheme",components:{LocaleText:m},setup(){return{dashboardConfigurationStore:v()}},methods:{async switchTheme(s){await f("/api/updateDashboardConfigurationItem",{section:"Server",key:"dashboard_theme",value:s},e=>{e.status&&(this.dashboardConfigurationStore.Configuration.Server.dashboard_theme=s)})}}},Qt={class:"text-muted mb-1 d-block"},Jt={class:"d-flex gap-1"};function Xt(s,e,u,r,d,h){const a=c("LocaleText");return n(),l("div",null,[t("small",Qt,[t("strong",null,[i(a,{t:"Theme"})])]),t("div",Jt,[t("button",{class:y(["btn bg-primary-subtle text-primary-emphasis flex-grow-1",{active:this.dashboardConfigurationStore.Configuration.Server.dashboard_theme==="light"}]),onClick:e[0]||(e[0]=o=>this.switchTheme("light"))},[e[2]||(e[2]=t("i",{class:"bi bi-sun-fill me-2"},null,-1)),i(a,{t:"Light"})],2),t("button",{class:y(["btn bg-primary-subtle text-primary-emphasis flex-grow-1",{active:this.dashboardConfigurationStore.Configuration.Server.dashboard_theme==="dark"}]),onClick:e[1]||(e[1]=o=>this.switchTheme("dark"))},[e[3]||(e[3]=t("i",{class:"bi bi-moon-fill me-2"},null,-1)),i(a,{t:"Dark"})],2)])])}const Zt=w(qt,[["render",Xt]]),te={name:"dashboardSettingsInputIPAddressAndPort",props:{},setup(){const s=v(),e=`input_${P()}`;return{store:s,uuid:e}},data(){return{app_ip:"",app_port:"",invalidFeedback:"",showInvalidFeedback:!1,isValid:!1,timeout:void 0,changed:!1,updating:!1}},mounted(){this.app_ip=this.store.Configuration.Server.app_ip,this.app_port=this.store.Configuration.Server.app_port},methods:{async useValidation(){this.changed&&await f("/api/updateDashboardConfigurationItem",{section:"Server",key:this.targetData,value:this.value},s=>{s.status?(this.isValid=!0,this.showInvalidFeedback=!1,this.store.Configuration.Account[this.targetData]=this.value,clearTimeout(this.timeout),this.timeout=setTimeout(()=>this.isValid=!1,5e3)):(this.isValid=!1,this.showInvalidFeedback=!0,this.invalidFeedback=s.message)})}}},ee={class:"invalid-feedback d-block mt-0"},se={class:"row"},ae={class:"form-group mb-2 col-sm"},ie=["for"],oe=["id"],ne={class:"form-group col-sm"},de=["for"],le=["id"];function re(s,e,u,r,d,h){return n(),l("div",null,[t("div",ee,k(this.invalidFeedback),1),t("div",se,[t("div",ae,[t("label",{for:"app_ip_"+this.uuid,class:"text-muted mb-1"},e[2]||(e[2]=[t("strong",null,[t("small",null,"Dashboard IP Address")],-1)]),8,ie),g(t("input",{type:"text",class:"form-control mb-2",id:"app_ip_"+this.uuid,"onUpdate:modelValue":e[0]||(e[0]=a=>this.app_ip=a)},null,8,oe),[[b,this.app_ip]]),e[3]||(e[3]=t("div",{class:"px-2 py-1 text-warning-emphasis bg-warning-subtle border border-warning-subtle rounded-2 d-inline-block"},[t("small",null,[t("i",{class:"bi bi-exclamation-triangle-fill me-2"}),t("code",null,"0.0.0.0"),I(" means it can be access by anyone with your server IP Address.")])],-1))]),t("div",ne,[t("label",{for:"app_port_"+this.uuid,class:"text-muted mb-1"},e[4]||(e[4]=[t("strong",null,[t("small",null,"Dashboard Port")],-1)]),8,de),g(t("input",{type:"text",class:"form-control mb-2",id:"app_port_"+this.uuid,"onUpdate:modelValue":e[1]||(e[1]=a=>this.app_port=a)},null,8,le),[[b,this.app_port]])])]),e[5]||(e[5]=t("button",{class:"btn btn-success btn-sm fw-bold rounded-3"},[t("i",{class:"bi bi-floppy-fill me-2"}),I("Update Dashboard Settings & Restart ")],-1))])}const ue=w(te,[["render",re]]),ce={name:"newDashboardAPIKey",components:{LocaleText:m,VueDatePicker:q},data(){return{newKeyData:{ExpiredAt:S().add(7,"d").format("YYYY-MM-DD HH:mm:ss"),neverExpire:!1},submitting:!1}},setup(){return{store:v()}},mounted(){console.log(this.newKeyData.ExpiredAt)},methods:{submitNewAPIKey(){this.submitting=!0,f("/api/newDashboardAPIKey",this.newKeyData,s=>{s.status?(this.$emit("created",s.data),this.store.newMessage("Server","API Key created","success"),this.$emit("close")):this.store.newMessage("Server",s.message,"danger"),this.submitting=!1})},fixDate(s){return console.log(S(s).format("YYYY-MM-DDTHH:mm:ss")),S(s).format("YYYY-MM-DDTHH:mm:ss")},parseTime(s){s?this.newKeyData.ExpiredAt=S(s).format("YYYY-MM-DD HH:mm:ss"):this.newKeyData.ExpiredAt=void 0}}},he={class:"position-absolute w-100 h-100 top-0 start-0 rounded-bottom-3 p-3 d-flex",style:{"background-color":"#00000060","backdrop-filter":"blur(3px)"}},pe={class:"card m-auto rounded-3 mt-5"},me={class:"card-header bg-transparent d-flex align-items-center gap-2 border-0 p-4 pb-0"},ge={class:"mb-0"},be={class:"card-body d-flex gap-2 p-4 flex-column"},_e={class:"text-muted"},fe={class:"d-flex align-items-center gap-2"},ve={class:"form-check"},ye=["disabled"],we={class:"form-check-label",for:"neverExpire"},$e={key:0,class:"bi bi-check-lg me-2"};function ke(s,e,u,r,d,h){const a=c("LocaleText"),o=c("VueDatePicker");return n(),l("div",he,[t("div",pe,[t("div",me,[t("h6",ge,[i(a,{t:"Create API Key"})]),t("button",{type:"button",class:"btn-close ms-auto",onClick:e[0]||(e[0]=x=>this.$emit("close"))})]),t("div",be,[t("small",_e,[i(a,{t:"When should this API Key expire?"})]),t("div",fe,[i(o,{is24:!0,"min-date":new Date,"model-value":this.newKeyData.ExpiredAt,"onUpdate:modelValue":this.parseTime,"time-picker-inline":"",format:"yyyy-MM-dd HH:mm:ss","preview-format":"yyyy-MM-dd HH:mm:ss",clearable:!1,disabled:this.newKeyData.neverExpire||this.submitting,dark:this.store.Configuration.Server.dashboard_theme==="dark"},null,8,["min-date","model-value","onUpdate:modelValue","disabled","dark"])]),t("div",ve,[g(t("input",{class:"form-check-input",type:"checkbox","onUpdate:modelValue":e[1]||(e[1]=x=>this.newKeyData.neverExpire=x),id:"neverExpire",disabled:this.submitting},null,8,ye),[[F,this.newKeyData.neverExpire]]),t("label",we,[i(a,{t:"Never Expire"}),e[3]||(e[3]=I(" (")),e[4]||(e[4]=t("i",{class:"bi bi-emoji-grimace-fill me-2"},null,-1)),i(a,{t:"Don't think that's a good idea"}),e[5]||(e[5]=I(") "))])]),t("button",{class:y(["ms-auto btn bg-success-subtle text-success-emphasis border-1 border-success-subtle rounded-3 shadow-sm",{disabled:this.submitting}]),onClick:e[2]||(e[2]=x=>this.submitNewAPIKey())},[this.submitting?_("",!0):(n(),l("i",$e)),this.submitting?(n(),$(a,{key:1,t:"Creating..."})):(n(),$(a,{key:2,t:"Create"}))],2)])])])}const xe=w(ce,[["render",ke]]),De={name:"dashboardAPIKey",components:{LocaleText:m},props:{apiKey:Object},setup(){return{store:v()}},data(){return{confirmDelete:!1}},methods:{deleteAPIKey(){f("/api/deleteDashboardAPIKey",{Key:this.apiKey.Key},s=>{s.status?(this.$emit("deleted",s.data),this.store.newMessage("Server","API Key deleted","success")):this.store.newMessage("Server",s.message,"danger")})}}},Ie={class:"card rounded-3 shadow-sm"},Pe={key:0,class:"card-body d-flex gap-3 align-items-center apiKey-card-body"},Ce={class:"d-flex align-items-center gap-2"},Ae={class:"text-muted"},Se={style:{"word-break":"break-all"}},Ke={class:"d-flex align-items-center gap-2 ms-auto"},Ve={class:"text-muted"},Te={key:0,class:"card-body d-flex gap-3 align-items-center justify-content-end"};function Fe(s,e,u,r,d,h){const a=c("LocaleText");return n(),l("div",Ie,[this.confirmDelete?(n(),l(C,{key:1},[this.store.getActiveCrossServer()?_("",!0):(n(),l("div",Te,[i(a,{t:"Are you sure to delete this API key?"}),t("a",{role:"button",class:"btn btn-sm bg-success-subtle text-success-emphasis rounded-3",onClick:e[1]||(e[1]=o=>this.deleteAPIKey())},e[4]||(e[4]=[t("i",{class:"bi bi-check-lg"},null,-1)])),t("a",{role:"button",class:"btn btn-sm bg-secondary-subtle text-secondary-emphasis rounded-3",onClick:e[2]||(e[2]=o=>this.confirmDelete=!1)},e[5]||(e[5]=[t("i",{class:"bi bi-x-lg"},null,-1)]))]))],64)):(n(),l("div",Pe,[t("div",Ce,[t("small",Ae,[i(a,{t:"Key"})]),t("span",Se,k(this.apiKey.Key),1)]),t("div",Ke,[t("small",Ve,[i(a,{t:"Expire At"})]),this.apiKey.ExpiredAt?_("",!0):(n(),$(a,{key:0,t:"Never Expire"})),t("span",null,k(this.apiKey.ExpiredAt),1)]),this.store.getActiveCrossServer()?_("",!0):(n(),l("a",{key:0,role:"button",class:"btn btn-sm bg-danger-subtle text-danger-emphasis rounded-3",onClick:e[0]||(e[0]=o=>this.confirmDelete=!0)},e[3]||(e[3]=[t("i",{class:"bi bi-trash-fill"},null,-1)])))]))])}const Le=w(De,[["render",Fe],["__scopeId","data-v-a76253c8"]]),Ee={name:"dashboardAPIKeys",components:{LocaleText:m,DashboardAPIKey:Le,NewDashboardAPIKey:xe},setup(){return{store:v()}},data(){return{value:this.store.Configuration.Server.dashboard_api_key,apiKeys:[],newDashboardAPIKey:!1}},methods:{async toggleDashboardAPIKeys(){await f("/api/updateDashboardConfigurationItem",{section:"Server",key:"dashboard_api_key",value:this.value},s=>{s.status?(this.store.Configuration.Peers[this.targetData]=this.value,this.store.newMessage("Server",`API Keys function is successfully ${this.value?"enabled":"disabled"}`,"success")):(this.value=this.store.Configuration.Peers[this.targetData],this.store.newMessage("Server",`API Keys function is failed to ${this.value?"enabled":"disabled"}`,"danger"))})}},watch:{value:{immediate:!0,handler(s){s?E("/api/getDashboardAPIKeys",{},e=>{e.status?this.apiKeys=e.data:(this.apiKeys=[],this.store.newMessage("Server",e.message,"danger"))}):this.apiKeys=[]}}}},Me={class:"card rounded-3"},Ue={class:"my-2"},We={key:0,class:"form-check form-switch ms-auto"},Ne={class:"form-check-label",for:"allowAPIKeysSwitch"},Ye={key:0,class:"card-body position-relative d-flex flex-column gap-2"},Ge={key:1,class:"card",style:{height:"300px"}},He={class:"card-body d-flex text-muted"},je={class:"m-auto"},Be={key:2,class:"d-flex flex-column gap-2 position-relative",style:{"min-height":"300px"}};function Re(s,e,u,r,d,h){const a=c("LocaleText"),o=c("DashboardAPIKey"),x=c("NewDashboardAPIKey");return n(),l("div",Me,[t("div",{class:y(["card-header d-flex align-items-center",{"border-bottom-0 rounded-3":!this.value}])},[t("h6",Ue,[i(a,{t:"API Keys"})]),this.store.getActiveCrossServer()?_("",!0):(n(),l("div",We,[g(t("input",{class:"form-check-input",type:"checkbox","onUpdate:modelValue":e[0]||(e[0]=p=>this.value=p),onChange:e[1]||(e[1]=p=>this.toggleDashboardAPIKeys()),role:"switch",id:"allowAPIKeysSwitch"},null,544),[[F,this.value]]),t("label",Ne,[this.value?(n(),$(a,{key:0,t:"Enabled"})):(n(),$(a,{key:1,t:"Disabled"}))])]))],2),this.value?(n(),l("div",Ye,[this.store.getActiveCrossServer()?_("",!0):(n(),l("button",{key:0,class:"btn bg-primary-subtle text-primary-emphasis border-1 border-primary-subtle rounded-3 shadow-sm",onClick:e[2]||(e[2]=p=>this.newDashboardAPIKey=!0)},[e[6]||(e[6]=t("i",{class:"bi bi-plus-circle-fill me-2"},null,-1)),i(a,{t:"API Key"})])),this.apiKeys.length===0?(n(),l("div",Ge,[t("div",He,[t("span",je,[i(a,{t:"No WGDashboard API Key"})])])])):(n(),l("div",Be,[i(B,{name:"apiKey"},{default:T(()=>[(n(!0),l(C,null,K(this.apiKeys,p=>(n(),$(o,{apiKey:p,key:p.Key,onDeleted:e[3]||(e[3]=A=>this.apiKeys=A)},null,8,["apiKey"]))),128))]),_:1})])),i(M,{name:"zoomReversed"},{default:T(()=>[this.newDashboardAPIKey?(n(),$(x,{key:0,onCreated:e[4]||(e[4]=p=>this.apiKeys=p),onClose:e[5]||(e[5]=p=>this.newDashboardAPIKey=!1)})):_("",!0)]),_:1})])):_("",!0)])}const ze=w(Ee,[["render",Re],["__scopeId","data-v-100ee9f9"]]),Oe={name:"accountSettingsMFA",components:{LocaleText:m},setup(){const s=v(),e=`input_${P()}`;return{store:s,uuid:e}},data(){return{status:!1}},mounted(){this.status=this.store.Configuration.Account.enable_totp},methods:{async resetMFA(){await f("/api/updateDashboardConfigurationItem",{section:"Account",key:"totp_verified",value:"false"},async s=>{await f("/api/updateDashboardConfigurationItem",{section:"Account",key:"enable_totp",value:"false"},e=>{e.status&&this.$router.push("/2FASetup")})})}}},qe={class:"d-flex align-items-center"},Qe={class:"form-check form-switch"},Je={for:"allowMFAKeysSwitch"};function Xe(s,e,u,r,d,h){const a=c("LocaleText");return n(),l("div",null,[t("div",qe,[t("div",Qe,[g(t("input",{class:"form-check-input",type:"checkbox","onUpdate:modelValue":e[0]||(e[0]=o=>this.status=o),role:"switch",id:"allowMFAKeysSwitch"},null,512),[[F,this.status]]),t("label",Je,[this.status?(n(),$(a,{key:0,t:"Enabled"})):(n(),$(a,{key:1,t:"Disabled"}))])]),this.status?(n(),l("button",{key:0,class:"btn bg-warning-subtle text-warning-emphasis border-1 border-warning-subtle ms-auto rounded-3 shadow-sm",onClick:e[1]||(e[1]=o=>this.resetMFA())},[e[2]||(e[2]=t("i",{class:"bi bi-shield-lock-fill me-2"},null,-1)),this.store.Configuration.Account.totp_verified?(n(),$(a,{key:0,t:"Reset"})):(n(),$(a,{key:1,t:"Setup"})),e[3]||(e[3]=I(" MFA "))])):_("",!0)])])}const Ze=w(Oe,[["render",Xe]]),ts={name:"dashboardLanguage",components:{LocaleText:m},setup(){return{store:v()}},data(){return{languages:void 0}},mounted(){E("/api/locale/available",{},s=>{this.languages=s.data})},methods:{changeLanguage(s){f("/api/locale/update",{lang_id:s},e=>{e.status?(this.store.Configuration.Server.dashboard_language=s,this.store.Locale=e.data):this.store.newMessage("Server","WGDashboard language update failed","danger")})}},computed:{currentLanguage(){let s=this.store.Configuration.Server.dashboard_language;return this.languages.find(e=>e.lang_id===s)}}},es={class:"text-muted d-block mb-1"},ss={class:"d-flex gap-2"},as={class:"dropdown w-100"},is=["disabled"],os={key:1},ns={class:"dropdown-menu rounded-3 shadow"},ds=["onClick"],ls={class:"me-auto mb-0"},rs={class:"d-block",style:{"font-size":"0.8rem"}},us={key:0,class:"bi bi-check text-primary fs-5"};function cs(s,e,u,r,d,h){const a=c("LocaleText");return n(),l("div",null,[t("small",es,[t("strong",null,[i(a,{t:"Language"})])]),t("div",ss,[t("div",as,[t("button",{class:"btn bg-primary-subtle text-primary-emphasis dropdown-toggle w-100 rounded-3",disabled:!this.languages,type:"button","data-bs-toggle":"dropdown","aria-expanded":"false"},[this.languages?(n(),l("span",os,k(h.currentLanguage?.lang_name_localized),1)):(n(),$(a,{key:0,t:"Loading..."}))],8,is),t("ul",ns,[(n(!0),l(C,null,K(this.languages,o=>(n(),l("li",null,[t("a",{class:"dropdown-item d-flex align-items-center",role:"button",onClick:x=>this.changeLanguage(o.lang_id)},[t("p",ls,[I(k(o.lang_name_localized)+" ",1),t("small",rs,k(o.lang_name),1)]),h.currentLanguage?.lang_id===o.lang_id?(n(),l("i",us)):_("",!0)],8,ds)]))),256))])])])])}const hs=w(ts,[["render",cs],["__scopeId","data-v-0f26916d"]]),ps={name:"dashboardIPPortInput",components:{LocaleText:m},setup(){return{store:v()}},data(){return{ipAddress:"",port:0,invalidFeedback:"",showInvalidFeedback:!1,isValid:!1,timeout:void 0,changed:!1,updating:!1}},mounted(){this.ipAddress=this.store.Configuration.Server.app_ip,this.port=this.store.Configuration.Server.app_port},methods:{async useValidation(s,e,u){this.changed&&(this.updating=!0,await f("/api/updateDashboardConfigurationItem",{section:"Server",key:e,value:u},r=>{r.status?(s.target.classList.add("is-valid"),this.showInvalidFeedback=!1,this.store.Configuration.Server[e]=u,clearTimeout(this.timeout),this.timeout=setTimeout(()=>{s.target.classList.remove("is-valid")},5e3)):(this.isValid=!1,this.showInvalidFeedback=!0,this.invalidFeedback=r.message),this.changed=!1,this.updating=!1}))}}},ms={class:"row g-2"},gs={class:"col-sm"},bs={class:"form-group"},_s={for:"input_dashboard_ip",class:"text-muted mb-1"},fs=["disabled"],vs={class:"invalid-feedback"},ys={class:"col-sm"},ws={class:"form-group"},$s={for:"input_dashboard_ip",class:"text-muted mb-1"},ks=["disabled"],xs={class:"invalid-feedback"},Ds={class:"px-2 py-1 text-warning-emphasis bg-warning-subtle border border-warning-subtle rounded-2 d-inline-block mb-2 mt-2"};function Is(s,e,u,r,d,h){const a=c("LocaleText");return n(),l("div",null,[t("div",ms,[t("div",gs,[t("div",bs,[t("label",_s,[t("strong",null,[t("small",null,[i(a,{t:"IP Address / Hostname"})])])]),g(t("input",{type:"text",class:y(["form-control",{"is-invalid":d.showInvalidFeedback,"is-valid":d.isValid}]),id:"input_dashboard_ip","onUpdate:modelValue":e[0]||(e[0]=o=>this.ipAddress=o),onKeydown:e[1]||(e[1]=o=>this.changed=!0),onBlur:e[2]||(e[2]=o=>h.useValidation(o,"app_ip",this.ipAddress)),disabled:this.updating},null,42,fs),[[b,this.ipAddress]]),t("div",vs,k(this.invalidFeedback),1)])]),t("div",ys,[t("div",ws,[t("label",$s,[t("strong",null,[t("small",null,[i(a,{t:"Listen Port"})])])]),g(t("input",{type:"number",class:y(["form-control",{"is-invalid":d.showInvalidFeedback,"is-valid":d.isValid}]),id:"input_dashboard_ip","onUpdate:modelValue":e[3]||(e[3]=o=>this.port=o),onKeydown:e[4]||(e[4]=o=>this.changed=!0),onBlur:e[5]||(e[5]=o=>h.useValidation(o,"app_port",this.port)),disabled:this.updating},null,42,ks),[[b,this.port]]),t("div",xs,k(this.invalidFeedback),1)])])]),t("div",Ds,[t("small",null,[e[6]||(e[6]=t("i",{class:"bi bi-exclamation-triangle-fill me-2"},null,-1)),i(a,{t:"Manual restart of WGDashboard is needed to apply changes on IP Address and Listen Port"})])])])}const Ps=w(ps,[["render",Is]]),Cs={class:"card rounded-3"},As={class:"card-header"},Ss={class:"my-2"},Ks={class:"card-body d-flex gap-2"},Vs={class:"list-group w-100"},Ts=["onClick"],Fs={__name:"dashboardSettingsWireguardConfigurationAutostart",setup(s){const e=v(),u=L(),r=R(e.Configuration.WireGuardConfiguration.autostart),d=z(()=>u.Configurations.map(o=>o.Name)),h=async()=>{await f("/api/updateDashboardConfigurationItem",{section:"WireGuardConfiguration",key:"autostart",value:r.value},async o=>{o.status?(e.newMessage("Server","Start up configurations saved","success"),r.value=o.data):e.newMessage("Server","Start up configurations failed to save","danger")})},a=o=>{r.value.includes(o)?r.value=r.value.filter(x=>x!==o):r.value.push(o),h()};return(o,x)=>(n(),l("div",Cs,[t("div",As,[t("h6",Ss,[i(m,{t:"Toggle When Start Up"})])]),t("div",Ks,[t("div",Vs,[(n(!0),l(C,null,K(d.value,p=>(n(),l("button",{type:"button",key:p,onClick:A=>a(p),class:"list-group-item list-group-item-action py-2 w-100 d-flex align-items-center"},[t("samp",null,k(p),1),t("i",{class:y(["ms-auto",[r.value.includes(p)?"bi-check-circle-fill":"bi-circle"]])},null,2)],8,Ts))),128))])])]))}},Ls=w(Fs,[["__scopeId","data-v-4aa2aed9"]]),Es={class:"card",id:"emailAccount"},Ms={class:"card-header"},Us={class:"my-2"},Ws={class:"card-body"},Ns={class:"row gx-2 gy-2"},Ys={class:"col-12 col-lg-4"},Gs={class:"form-group"},Hs={for:"server",class:"text-muted mb-1"},js={class:"col-12 col-lg-4"},Bs={class:"form-group"},Rs={for:"port",class:"text-muted mb-1"},zs={class:"col-12 col-lg-4"},Os={class:"form-group"},qs={for:"encryption",class:"text-muted mb-1"},Qs={class:"col-12 col-lg-6"},Js={class:"form-group"},Xs={for:"username",class:"text-muted mb-1"},Zs={class:"col-12 col-lg-6"},ta={class:"form-group"},ea={for:"email_password",class:"text-muted mb-1"},sa={__name:"dashboardEmailSettings",setup(s){const e=v();return O(()=>{document.querySelectorAll("#emailAccount input").forEach(u=>{u.addEventListener("blur",async()=>{let r=u.attributes.getNamedItem("id").value;await f("/api/updateDashboardConfigurationItem",{section:"Email",key:r,value:u.value},d=>{d.status?(u.classList.remove("is-invalid"),u.classList.add("is-valid")):(u.classList.remove("is-valid"),u.classList.add("is-invalid"))})})})}),(u,r)=>(n(),l("div",Es,[t("div",Ms,[t("h6",Us,[i(m,{t:"Email Account"})])]),t("div",Ws,[t("form",{onSubmit:r[5]||(r[5]=d=>D(Q)(d))},[t("div",Ns,[t("div",Ys,[t("div",Gs,[t("label",Hs,[t("strong",null,[t("small",null,[i(m,{t:"Server"})])])]),g(t("input",{id:"server","onUpdate:modelValue":r[0]||(r[0]=d=>D(e).Configuration.Email.server=d),type:"text",class:"form-control"},null,512),[[b,D(e).Configuration.Email.server]])])]),t("div",js,[t("div",Bs,[t("label",Rs,[t("strong",null,[t("small",null,[i(m,{t:"Port"})])])]),g(t("input",{id:"port","onUpdate:modelValue":r[1]||(r[1]=d=>D(e).Configuration.Email.port=d),type:"text",class:"form-control"},null,512),[[b,D(e).Configuration.Email.port]])])]),t("div",zs,[t("div",Os,[t("label",qs,[t("strong",null,[t("small",null,[i(m,{t:"Encryption"})])])]),g(t("input",{id:"encryption","onUpdate:modelValue":r[2]||(r[2]=d=>D(e).Configuration.Email.encryption=d),type:"text",class:"form-control"},null,512),[[b,D(e).Configuration.Email.encryption]])])]),t("div",Qs,[t("div",Js,[t("label",Xs,[t("strong",null,[t("small",null,[i(m,{t:"Username"})])])]),g(t("input",{id:"username","onUpdate:modelValue":r[3]||(r[3]=d=>D(e).Configuration.Email.username=d),type:"text",class:"form-control"},null,512),[[b,D(e).Configuration.Email.username]])])]),t("div",Zs,[t("div",ta,[t("label",ea,[t("strong",null,[t("small",null,[i(m,{t:"Password"})])])]),g(t("input",{id:"email_password","onUpdate:modelValue":r[4]||(r[4]=d=>D(e).Configuration.Email.email_password=d),type:"password",class:"form-control"},null,512),[[b,D(e).Configuration.Email.email_password]])])])])],32)])]))}},aa={name:"settings",methods:{ipV46RegexCheck:ot},components:{DashboardEmailSettings:sa,DashboardSettingsWireguardConfigurationAutostart:Ls,DashboardIPPortInput:Ps,DashboardLanguage:hs,LocaleText:m,AccountSettingsMFA:Ze,DashboardAPIKeys:ze,DashboardSettingsInputIPAddressAndPort:ue,DashboardTheme:Zt,DashboardSettingsInputWireguardConfigurationPath:Ot,AccountSettingsInputPassword:Kt,AccountSettingsInputUsername:ht,PeersDefaultSettingsInput:it},setup(){return{dashboardConfigurationStore:v()}},data(){return{activeTab:"WGDashboard",tabs:[{id:"WGDashboard",title:"WGDashboard Settings"},{id:"Peers",title:"Peers Settings"},{id:"WireGuardConfiguration",title:"WireGuard Configuration Settings"}]}}},ia={class:"mt-md-5 mt-3 text-body mb-3"},oa={class:"container-md d-flex flex-column gap-4"},na={class:"nav nav-pills nav-justified align-items-center gap-2"},da={class:"nav-item"},la=["onClick"],ra={class:"my-2"},ua={key:0,class:"d-flex gap-3 flex-column"},ca={key:1,class:"d-flex gap-3 flex-column"},ha={class:"card rounded-3"},pa={class:"card-header"},ma={class:"my-2"},ga={class:"card-body"},ba={key:2,class:"d-flex gap-3 flex-column"},_a={class:"card rounded-3"},fa={class:"card-header"},va={class:"my-2"},ya={class:"card-body"},wa={class:"row g-2"},$a={class:"col-sm"},ka={class:"col-sm"},xa={class:"card"},Da={class:"card-header"},Ia={class:"my-2"},Pa={class:"card-body"},Ca={class:"card"},Aa={class:"card-header"},Sa={class:"my-2"},Ka={class:"card-body d-flex flex-column gap-3"},Va={class:"card"},Ta={class:"card-header"},Fa={class:"my-2"},La={class:"card-body"};function Ea(s,e,u,r,d,h){const a=c("LocaleText"),o=c("DashboardSettingsInputWireguardConfigurationPath"),x=c("DashboardSettingsWireguardConfigurationAutostart"),p=c("PeersDefaultSettingsInput"),A=c("DashboardTheme"),U=c("DashboardLanguage"),W=c("DashboardIPPortInput"),N=c("AccountSettingsInputUsername"),Y=c("AccountSettingsInputPassword"),G=c("AccountSettingsMFA"),H=c("DashboardAPIKeys"),j=c("DashboardEmailSettings");return n(),l("div",ia,[t("div",oa,[t("div",null,[t("ul",na,[(n(!0),l(C,null,K(this.tabs,V=>(n(),l("li",da,[t("a",{class:y(["nav-link rounded-3",{active:this.activeTab===V.id}]),onClick:Ma=>this.activeTab=V.id,role:"button"},[t("h6",ra,[i(a,{t:V.title},null,8,["t"])])],10,la)]))),256))]),e[1]||(e[1]=t("hr",null,null,-1)),t("div",null,[i(M,{name:"fade2",mode:"out-in"},{default:T(()=>[d.activeTab==="WireGuardConfiguration"?(n(),l("div",ua,[i(o,{targetData:"wg_conf_path",title:"Configurations Directory",warning:!0,"warning-text":"Remember to remove / at the end of your path. e.g /etc/wireguard"}),i(x)])):d.activeTab==="Peers"?(n(),l("div",ca,[t("div",ha,[t("div",pa,[t("h6",ma,[i(a,{t:"Peer Default Settings"})])]),t("div",ga,[t("div",null,[i(p,{targetData:"peer_global_dns",title:"DNS"}),i(p,{targetData:"peer_endpoint_allowed_ip",title:"Endpoint Allowed IPs"}),i(p,{targetData:"peer_mtu",title:"MTU"}),i(p,{targetData:"peer_keep_alive",title:"Persistent Keepalive"}),i(p,{targetData:"remote_endpoint",title:"Peer Remote Endpoint",warning:!0,warningText:"This will be changed globally, and will be apply to all peer's QR code and configuration file."})])])])])):d.activeTab==="WGDashboard"?(n(),l("div",ba,[t("div",_a,[t("div",fa,[t("h6",va,[i(a,{t:"Appearance"})])]),t("div",ya,[t("div",wa,[t("div",$a,[i(A)]),t("div",ka,[i(U)])])])]),t("div",xa,[t("div",Da,[t("h6",Ia,[i(a,{t:"Dashboard IP Address & Listen Port"})])]),t("div",Pa,[i(W)])]),t("div",Ca,[t("div",Aa,[t("h6",Sa,[i(a,{t:"Account Settings"})])]),t("div",Ka,[t("div",null,[i(N,{targetData:"username",title:"Username"})]),e[0]||(e[0]=t("hr",null,null,-1)),t("div",null,[i(Y,{targetData:"password"})])])]),t("div",Va,[t("div",Ta,[t("h6",Fa,[i(a,{t:"Multi-Factor Authentication (MFA)"})])]),t("div",La,[this.dashboardConfigurationStore.getActiveCrossServer()?_("",!0):(n(),$(G,{key:0}))])]),i(H),i(j)])):_("",!0)]),_:1})])])])])}const Ha=w(aa,[["render",Ea]]);export{Ha as default};
|