mirror of
https://github.com/donaldzou/WGDashboard.git
synced 2025-12-14 15:36:18 +00:00
2 lines
25 KiB
JavaScript
2 lines
25 KiB
JavaScript
import{_ as A,c as r,a as i,b as e,m as h,d as l,h as y,y as _,n as $,t as x,z as w,D as k,A as K,e as g,v as D,f as C,j as v,F as S,w as V,T as F,k as M,g as T,i as E,o as N,r as I,u as m,C as U}from"./index-BuOf6BZp.js";import{L as c}from"./localeText-CzYZfO0n.js";import{d as P}from"./dayjs.min-BzBvZaAI.js";import{Q as Y}from"./vue-datepicker-B81xP9h3.js";const H={name:"accountSettingsInputUsername",components:{LocaleText:c},props:{targetData:String,title:String},setup(){const t=k(),s=`input_${K()}`;return{store:t,uuid:s}},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(t){this.changed&&(this.updating=!0,await w("/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,5e3)):(this.isValid=!1,this.showInvalidFeedback=!0,this.invalidFeedback=s.message),this.changed=!1,this.updating=!1}))}}},R={class:"form-group mb-2"},j=["for"],q=["id","disabled"],B={class:"invalid-feedback"};function z(t,s,p,b,u,f){const o=y("LocaleText");return i(),r("div",R,[e("label",{for:this.uuid,class:"text-muted mb-1"},[e("strong",null,[e("small",null,[l(o,{t:this.title},null,8,["t"])])])],8,j),h(e("input",{type:"text",class:$(["form-control",{"is-invalid":u.showInvalidFeedback,"is-valid":u.isValid}]),id:this.uuid,"onUpdate:modelValue":s[0]||(s[0]=a=>this.value=a),onKeydown:s[1]||(s[1]=a=>this.changed=!0),onBlur:s[2]||(s[2]=a=>f.useValidation()),disabled:this.updating},null,42,q),[[_,this.value]]),e("div",B,x(this.invalidFeedback),1)])}const ft=A(H,[["render",z]]),G={name:"accountSettingsInputPassword",components:{LocaleText:c},props:{targetData:String,warning:!1,warningText:""},setup(){const t=k(),s=`input_${K()}`;return{store:t,uuid:s}},data(){return{value:{currentPassword:"",newPassword:"",repeatNewPassword:""},invalidFeedback:"",showInvalidFeedback:!1,isValid:!1,timeout:void 0}},methods:{async useValidation(){Object.values(this.value).find(t=>t.length===0)===void 0?this.value.newPassword===this.value.repeatNewPassword?await w("/api/updateDashboardConfigurationItem",{section:"Account",key:this.targetData,value:this.value},t=>{t.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=t.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(t=>t.length===0)===void 0&&this.value.newPassword===this.value.repeatNewPassword}}},W={class:"d-flex flex-column gap-2"},O={class:"row g-2"},Q={class:"col-sm"},J={class:"form-group"},X=["for"],Z=["id"],ee={key:0,class:"invalid-feedback d-block"},se={class:"col-sm"},te={class:"form-group"},ae=["for"],ie=["id"],oe={class:"col-sm"},ne={class:"form-group"},le=["for"],de=["id"],re=["disabled"];function ue(t,s,p,b,u,f){const o=y("LocaleText");return i(),r("div",null,[e("h6",null,[l(o,{t:"Update Password"})]),e("form",W,[e("div",O,[e("div",Q,[e("div",J,[e("label",{for:"currentPassword_"+this.uuid,class:"text-muted mb-1"},[e("strong",null,[e("small",null,[l(o,{t:"Current Password"})])])],8,X),h(e("input",{type:"password",class:$(["form-control",{"is-invalid":u.showInvalidFeedback,"is-valid":u.isValid}]),autocomplete:"current-password","onUpdate:modelValue":s[0]||(s[0]=a=>this.value.currentPassword=a),id:"currentPassword_"+this.uuid},null,10,Z),[[_,this.value.currentPassword]]),u.showInvalidFeedback?(i(),r("div",ee,x(this.invalidFeedback),1)):g("",!0)])]),e("div",se,[e("div",te,[e("label",{for:"newPassword_"+this.uuid,class:"text-muted mb-1"},[e("strong",null,[e("small",null,[l(o,{t:"New Password"})])])],8,ae),h(e("input",{type:"password",class:$(["form-control",{"is-invalid":u.showInvalidFeedback,"is-valid":u.isValid}]),autocomplete:"new-password","onUpdate:modelValue":s[1]||(s[1]=a=>this.value.newPassword=a),id:"newPassword_"+this.uuid},null,10,ie),[[_,this.value.newPassword]])])]),e("div",oe,[e("div",ne,[e("label",{for:"repeatNewPassword_"+this.uuid,class:"text-muted mb-1"},[e("strong",null,[e("small",null,[l(o,{t:"Repeat New Password"})])])],8,le),h(e("input",{type:"password",class:$(["form-control",{"is-invalid":u.showInvalidFeedback,"is-valid":u.isValid}]),autocomplete:"new-password","onUpdate:modelValue":s[2]||(s[2]=a=>this.value.repeatNewPassword=a),id:"repeatNewPassword_"+this.uuid},null,10,de),[[_,this.value.repeatNewPassword]])])])]),e("button",{disabled:!this.passwordValid,class:"ms-auto btn bg-success-subtle text-success-emphasis border-1 border-success-subtle rounded-3 shadow-sm",onClick:s[3]||(s[3]=a=>this.useValidation())},[s[4]||(s[4]=e("i",{class:"bi bi-save2-fill me-2"},null,-1)),l(o,{t:"Save"})],8,re)])])}const gt=A(G,[["render",ue]]),ce={name:"dashboardTheme",components:{LocaleText:c},setup(){return{dashboardConfigurationStore:k()}},methods:{async switchTheme(t){await w("/api/updateDashboardConfigurationItem",{section:"Server",key:"dashboard_theme",value:t},s=>{s.status&&(this.dashboardConfigurationStore.Configuration.Server.dashboard_theme=t)})}}},me={class:"text-muted mb-1 d-block"},he={class:"d-flex gap-1"};function pe(t,s,p,b,u,f){const o=y("LocaleText");return i(),r("div",null,[e("small",me,[e("strong",null,[l(o,{t:"Theme"})])]),e("div",he,[e("button",{class:$(["btn bg-primary-subtle text-primary-emphasis flex-grow-1",{active:this.dashboardConfigurationStore.Configuration.Server.dashboard_theme==="light"}]),onClick:s[0]||(s[0]=a=>this.switchTheme("light"))},[s[2]||(s[2]=e("i",{class:"bi bi-sun-fill me-2"},null,-1)),l(o,{t:"Light"})],2),e("button",{class:$(["btn bg-primary-subtle text-primary-emphasis flex-grow-1",{active:this.dashboardConfigurationStore.Configuration.Server.dashboard_theme==="dark"}]),onClick:s[1]||(s[1]=a=>this.switchTheme("dark"))},[s[3]||(s[3]=e("i",{class:"bi bi-moon-fill me-2"},null,-1)),l(o,{t:"Dark"})],2)])])}const _t=A(ce,[["render",pe]]),be={name:"newDashboardAPIKey",components:{LocaleText:c,VueDatePicker:Y},data(){return{newKeyData:{ExpiredAt:P().add(7,"d").format("YYYY-MM-DD HH:mm:ss"),NeverExpire:!1},submitting:!1}},setup(){return{store:k()}},mounted(){console.log(this.newKeyData.ExpiredAt)},methods:{submitNewAPIKey(){this.submitting=!0,w("/api/newDashboardAPIKey",this.newKeyData,t=>{t.status?(this.$emit("created",t.data),this.store.newMessage("Server","API Key created","success"),this.$emit("close")):this.store.newMessage("Server",t.message,"danger"),this.submitting=!1})},fixDate(t){return console.log(P(t).format("YYYY-MM-DDTHH:mm:ss")),P(t).format("YYYY-MM-DDTHH:mm:ss")},parseTime(t){t?this.newKeyData.ExpiredAt=P(t).format("YYYY-MM-DD HH:mm:ss"):this.newKeyData.ExpiredAt=void 0}}},fe={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)","z-index":"9999"}},ge={class:"card m-auto rounded-3 mt-5"},_e={class:"card-header bg-transparent d-flex align-items-center gap-2 border-0 p-4 pb-0"},ve={class:"mb-0"},ye={class:"card-body d-flex gap-2 p-4 flex-column"},we={class:"text-muted"},$e={class:"d-flex align-items-center gap-2"},ke={class:"form-check"},xe=["disabled"],Ae={class:"form-check-label",for:"neverExpire"},Pe={key:0,class:"bi bi-check-lg me-2"};function Ce(t,s,p,b,u,f){const o=y("LocaleText"),a=y("VueDatePicker");return i(),r("div",fe,[e("div",ge,[e("div",_e,[e("h6",ve,[l(o,{t:"Create API Key"})]),e("button",{type:"button",class:"btn-close ms-auto",onClick:s[0]||(s[0]=n=>this.$emit("close"))})]),e("div",ye,[e("small",we,[l(o,{t:"When should this API Key expire?"})]),e("div",$e,[l(a,{style:{"z-index":"9999"},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"])]),e("div",ke,[h(e("input",{class:"form-check-input",type:"checkbox","onUpdate:modelValue":s[1]||(s[1]=n=>this.newKeyData.NeverExpire=n),id:"neverExpire",disabled:this.submitting},null,8,xe),[[D,this.newKeyData.NeverExpire]]),e("label",Ae,[l(o,{t:"Never Expire"}),s[3]||(s[3]=C(" (",-1)),s[4]||(s[4]=e("i",{class:"bi bi-emoji-grimace-fill me-2"},null,-1)),l(o,{t:"Don't think that's a good idea"}),s[5]||(s[5]=C(") ",-1))])]),e("button",{class:$(["ms-auto btn bg-success-subtle text-success-emphasis border-1 border-success-subtle rounded-3 shadow-sm",{disabled:this.submitting}]),onClick:s[2]||(s[2]=n=>this.submitNewAPIKey())},[this.submitting?g("",!0):(i(),r("i",Pe)),this.submitting?(i(),v(o,{key:1,t:"Creating..."})):(i(),v(o,{key:2,t:"Create"}))],2)])])])}const De=A(be,[["render",Ce]]),Ie={name:"dashboardAPIKey",components:{LocaleText:c},props:{apiKey:Object},setup(){return{store:k()}},data(){return{confirmDelete:!1}},methods:{deleteAPIKey(){w("/api/deleteDashboardAPIKey",{Key:this.apiKey.Key},t=>{t.status?(this.$emit("deleted",t.data),this.store.newMessage("Server","API Key deleted","success")):this.store.newMessage("Server",t.message,"danger")})}}},Ke={class:"card rounded-3 shadow-sm"},Se={key:0,class:"card-body d-flex gap-3 align-items-center apiKey-card-body"},Te={class:"d-flex align-items-center gap-2"},Ve={class:"text-muted"},Ee={style:{"word-break":"break-all"}},Le={class:"d-flex align-items-center gap-2 ms-auto"},Fe={class:"text-muted"},Me={key:0,class:"card-body d-flex gap-3 align-items-center justify-content-end"};function Ne(t,s,p,b,u,f){const o=y("LocaleText");return i(),r("div",Ke,[this.confirmDelete?(i(),r(S,{key:1},[this.store.getActiveCrossServer()?g("",!0):(i(),r("div",Me,[l(o,{t:"Are you sure to delete this API key?"}),e("a",{role:"button",class:"btn btn-sm bg-success-subtle text-success-emphasis rounded-3",onClick:s[1]||(s[1]=a=>this.deleteAPIKey())},[...s[4]||(s[4]=[e("i",{class:"bi bi-check-lg"},null,-1)])]),e("a",{role:"button",class:"btn btn-sm bg-secondary-subtle text-secondary-emphasis rounded-3",onClick:s[2]||(s[2]=a=>this.confirmDelete=!1)},[...s[5]||(s[5]=[e("i",{class:"bi bi-x-lg"},null,-1)])])]))],64)):(i(),r("div",Se,[e("div",Te,[e("small",Ve,[l(o,{t:"Key"})]),e("span",Ee,x(this.apiKey.Key),1)]),e("div",Le,[e("small",Fe,[l(o,{t:"Expire At"})]),this.apiKey.ExpiredAt?g("",!0):(i(),v(o,{key:0,t:"Never Expire"})),e("span",null,x(this.apiKey.ExpiredAt),1)]),this.store.getActiveCrossServer()?g("",!0):(i(),r("a",{key:0,role:"button",class:"btn btn-sm bg-danger-subtle text-danger-emphasis rounded-3",onClick:s[0]||(s[0]=a=>this.confirmDelete=!0)},[...s[3]||(s[3]=[e("i",{class:"bi bi-trash-fill"},null,-1)])]))]))])}const Ue=A(Ie,[["render",Ne],["__scopeId","data-v-a76253c8"]]),Ye={name:"dashboardAPIKeys",components:{LocaleText:c,DashboardAPIKey:Ue,NewDashboardAPIKey:De},setup(){return{store:k()}},data(){return{value:this.store.Configuration.Server.dashboard_api_key,apiKeys:[],newDashboardAPIKey:!1}},methods:{async toggleDashboardAPIKeys(){await w("/api/updateDashboardConfigurationItem",{section:"Server",key:"dashboard_api_key",value:this.value},t=>{t.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(t){t?T("/api/getDashboardAPIKeys",{},s=>{s.status?this.apiKeys=s.data:(this.apiKeys=[],this.store.newMessage("Server",s.message,"danger"))}):this.apiKeys=[]}}}},He={class:"card rounded-3"},Re={class:"my-2"},je={key:0,class:"form-check form-switch ms-auto"},qe={class:"form-check-label",for:"allowAPIKeysSwitch"},Be={key:0,class:"card-body position-relative d-flex flex-column gap-2"},ze={key:1,class:"card",style:{height:"300px"}},Ge={class:"card-body d-flex text-muted"},We={class:"m-auto"},Oe={key:2,class:"d-flex flex-column gap-2 position-relative",style:{"min-height":"300px"}};function Qe(t,s,p,b,u,f){const o=y("LocaleText"),a=y("DashboardAPIKey"),n=y("NewDashboardAPIKey");return i(),r("div",He,[e("div",{class:$(["card-header d-flex align-items-center",{"border-bottom-0 rounded-3":!this.value}])},[e("h6",Re,[s[6]||(s[6]=e("i",{class:"bi bi-key-fill me-2"},null,-1)),l(o,{t:"API Keys"})]),this.store.getActiveCrossServer()?g("",!0):(i(),r("div",je,[h(e("input",{class:"form-check-input",type:"checkbox","onUpdate:modelValue":s[0]||(s[0]=d=>this.value=d),onChange:s[1]||(s[1]=d=>this.toggleDashboardAPIKeys()),role:"switch",id:"allowAPIKeysSwitch"},null,544),[[D,this.value]]),e("label",qe,[this.value?(i(),v(o,{key:0,t:"Enabled"})):(i(),v(o,{key:1,t:"Disabled"}))])]))],2),this.value?(i(),r("div",Be,[this.store.getActiveCrossServer()?g("",!0):(i(),r("button",{key:0,class:"btn bg-primary-subtle text-primary-emphasis border-1 border-primary-subtle rounded-3 shadow-sm",onClick:s[2]||(s[2]=d=>this.newDashboardAPIKey=!0)},[s[7]||(s[7]=e("i",{class:"bi bi-plus-circle-fill me-2"},null,-1)),l(o,{t:"API Key"})])),this.apiKeys.length===0?(i(),r("div",ze,[e("div",Ge,[e("span",We,[l(o,{t:"No WGDashboard API Key"})])])])):(i(),r("div",Oe,[l(F,{name:"apiKey"},{default:V(()=>[(i(!0),r(S,null,E(this.apiKeys,d=>(i(),v(a,{apiKey:d,key:d.Key,onDeleted:s[3]||(s[3]=L=>this.apiKeys=L)},null,8,["apiKey"]))),128))]),_:1})])),l(M,{name:"zoomReversed"},{default:V(()=>[this.newDashboardAPIKey?(i(),v(n,{key:0,onCreated:s[4]||(s[4]=d=>this.apiKeys=d),onClose:s[5]||(s[5]=d=>this.newDashboardAPIKey=!1)})):g("",!0)]),_:1})])):g("",!0)])}const vt=A(Ye,[["render",Qe],["__scopeId","data-v-f7e62927"]]),Je={name:"accountSettingsMFA",components:{LocaleText:c},setup(){const t=k(),s=`input_${K()}`;return{store:t,uuid:s}},data(){return{status:!1}},mounted(){this.status=this.store.Configuration.Account.enable_totp},methods:{async resetMFA(){await w("/api/updateDashboardConfigurationItem",{section:"Account",key:"totp_verified",value:"false"},async t=>{await w("/api/updateDashboardConfigurationItem",{section:"Account",key:"enable_totp",value:"false"},s=>{s.status&&this.$router.push("/2FASetup")})})}}},Xe={class:"d-flex align-items-center"},Ze={class:"form-check form-switch"},es={for:"allowMFAKeysSwitch"};function ss(t,s,p,b,u,f){const o=y("LocaleText");return i(),r("div",null,[e("div",Xe,[e("div",Ze,[h(e("input",{class:"form-check-input",type:"checkbox","onUpdate:modelValue":s[0]||(s[0]=a=>this.status=a),role:"switch",id:"allowMFAKeysSwitch"},null,512),[[D,this.status]]),e("label",es,[this.status?(i(),v(o,{key:0,t:"Enabled"})):(i(),v(o,{key:1,t:"Disabled"}))])]),this.status?(i(),r("button",{key:0,class:"btn bg-warning-subtle text-warning-emphasis border-1 border-warning-subtle ms-auto rounded-3 shadow-sm",onClick:s[1]||(s[1]=a=>this.resetMFA())},[s[2]||(s[2]=e("i",{class:"bi bi-shield-lock-fill me-2"},null,-1)),this.store.Configuration.Account.totp_verified?(i(),v(o,{key:0,t:"Reset"})):(i(),v(o,{key:1,t:"Setup"})),s[3]||(s[3]=C(" MFA ",-1))])):g("",!0)])])}const yt=A(Je,[["render",ss]]),ts={name:"dashboardLanguage",components:{LocaleText:c},setup(){return{store:k()}},data(){return{languages:void 0}},mounted(){T("/api/locale/available",{},t=>{this.languages=t.data})},methods:{changeLanguage(t){w("/api/locale/update",{lang_id:t},s=>{s.status?(this.store.Configuration.Server.dashboard_language=t,this.store.Locale=s.data):this.store.newMessage("Server","WGDashboard language update failed","danger")})}},computed:{currentLanguage(){let t=this.store.Configuration.Server.dashboard_language;return this.languages.find(s=>s.lang_id===t)}}},as={class:"text-muted d-block mb-1"},is={class:"d-flex gap-2"},os={class:"dropdown w-100"},ns=["disabled"],ls={key:1},ds={class:"dropdown-menu rounded-3 shadow",style:{"max-height":"500px","overflow-y":"scroll"}},rs=["onClick"],us={class:"me-auto mb-0"},cs={class:"d-block",style:{"font-size":"0.8rem"}},ms={key:0,class:"bi bi-check text-primary fs-5"};function hs(t,s,p,b,u,f){const o=y("LocaleText");return i(),r("div",null,[e("small",as,[e("strong",null,[l(o,{t:"Language"})])]),e("div",is,[e("div",os,[e("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?(i(),r("span",ls,x(f.currentLanguage?.lang_name_localized),1)):(i(),v(o,{key:0,t:"Loading..."}))],8,ns),e("ul",ds,[(i(!0),r(S,null,E(this.languages,a=>(i(),r("li",null,[e("a",{class:"dropdown-item d-flex align-items-center",role:"button",onClick:n=>this.changeLanguage(a.lang_id)},[e("p",us,[C(x(a.lang_name_localized)+" ",1),e("small",cs,x(a.lang_name),1)]),f.currentLanguage?.lang_id===a.lang_id?(i(),r("i",ms)):g("",!0)],8,rs)]))),256))])])])])}const wt=A(ts,[["render",hs],["__scopeId","data-v-4e34593e"]]),ps={name:"dashboardIPPortInput",components:{LocaleText:c},setup(){return{store:k()}},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(t,s,p){this.changed&&(this.updating=!0,await w("/api/updateDashboardConfigurationItem",{section:"Server",key:s,value:p},b=>{b.status?(t.target.classList.add("is-valid"),this.showInvalidFeedback=!1,this.store.Configuration.Server[s]=p,clearTimeout(this.timeout),this.timeout=setTimeout(()=>{t.target.classList.remove("is-valid")},5e3)):(this.isValid=!1,this.showInvalidFeedback=!0,this.invalidFeedback=b.message),this.changed=!1,this.updating=!1}))}}},bs={class:"row g-2"},fs={class:"col-sm"},gs={class:"form-group"},_s={for:"input_dashboard_ip",class:"text-muted mb-1"},vs=["disabled"],ys={class:"invalid-feedback"},ws={class:"col-sm"},$s={class:"form-group"},ks={for:"input_dashboard_ip",class:"text-muted mb-1"},xs=["disabled"],As={class:"invalid-feedback"},Ps={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 Cs(t,s,p,b,u,f){const o=y("LocaleText");return i(),r("div",null,[e("div",bs,[e("div",fs,[e("div",gs,[e("label",_s,[e("strong",null,[e("small",null,[l(o,{t:"IP Address / Hostname"})])])]),h(e("input",{type:"text",class:$(["form-control",{"is-invalid":u.showInvalidFeedback,"is-valid":u.isValid}]),id:"input_dashboard_ip","onUpdate:modelValue":s[0]||(s[0]=a=>this.ipAddress=a),onKeydown:s[1]||(s[1]=a=>this.changed=!0),onBlur:s[2]||(s[2]=a=>f.useValidation(a,"app_ip",this.ipAddress)),disabled:this.updating},null,42,vs),[[_,this.ipAddress]]),e("div",ys,x(this.invalidFeedback),1)])]),e("div",ws,[e("div",$s,[e("label",ks,[e("strong",null,[e("small",null,[l(o,{t:"Listen Port"})])])]),h(e("input",{type:"number",class:$(["form-control",{"is-invalid":u.showInvalidFeedback,"is-valid":u.isValid}]),id:"input_dashboard_ip","onUpdate:modelValue":s[3]||(s[3]=a=>this.port=a),onKeydown:s[4]||(s[4]=a=>this.changed=!0),onBlur:s[5]||(s[5]=a=>f.useValidation(a,"app_port",this.port)),disabled:this.updating},null,42,xs),[[_,this.port]]),e("div",As,x(this.invalidFeedback),1)])])]),e("div",Ps,[e("small",null,[s[6]||(s[6]=e("i",{class:"bi bi-exclamation-triangle-fill me-2"},null,-1)),l(o,{t:"Manual restart of WGDashboard is needed to apply changes on IP Address and Listen Port"})])])])}const $t=A(ps,[["render",Cs]]),Ds={class:"card"},Is={class:"card-header"},Ks={class:"my-2 d-flex"},Ss={key:0,class:"text-success ms-auto"},Ts={class:"card-body d-flex flex-column gap-3"},Vs={class:"row gx-2 gy-2"},Es={class:"col-12"},Ls={class:"form-check mb-2 form-switch"},Fs={class:"form-check-label",for:"authentication_required"},Ms={class:"col-12 col-lg-4"},Ns={class:"form-group"},Us={for:"server",class:"text-muted mb-1"},Ys={class:"col-12 col-lg-4"},Hs={class:"form-group"},Rs={for:"port",class:"text-muted mb-1"},js={class:"col-12 col-lg-4"},qs={class:"form-group"},Bs={for:"encryption",class:"text-muted mb-1"},zs={value:"NOTLS"},Gs={key:0,class:"col-12 col-lg-4"},Ws={class:"form-group"},Os={for:"username",class:"text-muted mb-1"},Qs={key:1,class:"col-12 col-lg-4"},Js={class:"form-group"},Xs={for:"email_password",class:"text-muted mb-1"},Zs={class:"col-12 col-lg-4"},et={class:"form-group"},st={for:"send_from",class:"text-muted mb-1"},tt={key:0},at={key:1},it={class:"text-muted mb-1",for:"test_email"},ot={class:"fw-bold"},nt=["disabled"],lt=["disabled"],dt={key:0,class:"bi bi-send me-2"},rt={key:1,class:"spinner-border spinner-border-sm me-2"},ut={class:"text-muted mb-1",for:"email_template"},ct={class:"fw-bold"},kt={__name:"dashboardEmailSettings",setup(t){const s=k();N(()=>{f(),document.querySelectorAll("#emailAccount input, #emailAccount select, #email_template").forEach(a=>{a.addEventListener("change",async()=>{let n=a.attributes.getNamedItem("id").value;await w("/api/updateDashboardConfigurationItem",{section:"Email",key:n,value:s.Configuration.Email[n]},d=>{d.status?(a.classList.remove("is-invalid"),a.classList.add("is-valid")):(a.classList.remove("is-valid"),a.classList.add("is-invalid")),f()})})})});const p=I(!1),b=I(""),u=I(!1),f=async()=>{await T("/api/email/ready",{},a=>{p.value=a.status})},o=async()=>{u.value=!0,await w("/api/email/send",{Receiver:b.value,Subject:"WGDashboard Testing Email",Body:"Test 1, 2, 3! Hello World :)"},a=>{a.status?s.newMessage("Server","Test email sent successfully!","success"):s.newMessage("Server",`Test email sent failed! Reason: ${a.message}`,"danger"),u.value=!1})};return(a,n)=>(i(),r("div",Ds,[e("div",Is,[e("h6",Ks,[n[12]||(n[12]=e("i",{class:"bi bi-envelope-fill me-2"},null,-1)),l(c,{t:"Email Account"}),p.value?(i(),r("span",Ss,[n[11]||(n[11]=e("i",{class:"bi bi-check-circle-fill me-2"},null,-1)),l(c,{t:"Ready"})])):g("",!0)])]),e("div",Ts,[e("form",{onSubmit:n[7]||(n[7]=d=>d.preventDefault(d)),id:"emailAccount"},[e("div",Vs,[e("div",Es,[e("div",Ls,[h(e("input",{class:"form-check-input",type:"checkbox",role:"switch","onUpdate:modelValue":n[0]||(n[0]=d=>m(s).Configuration.Email.authentication_required=d),id:"authentication_required"},null,512),[[D,m(s).Configuration.Email.authentication_required]]),e("label",Fs,[l(c,{t:"Require SMTP Authentication"})])])]),e("div",Ms,[e("div",Ns,[e("label",Us,[e("strong",null,[e("small",null,[l(c,{t:"Server"})])])]),h(e("input",{id:"server","onUpdate:modelValue":n[1]||(n[1]=d=>m(s).Configuration.Email.server=d),type:"text",class:"form-control rounded-3"},null,512),[[_,m(s).Configuration.Email.server]])])]),e("div",Ys,[e("div",Hs,[e("label",Rs,[e("strong",null,[e("small",null,[l(c,{t:"Port"})])])]),h(e("input",{id:"port","onUpdate:modelValue":n[2]||(n[2]=d=>m(s).Configuration.Email.port=d),type:"text",class:"form-control rounded-3"},null,512),[[_,m(s).Configuration.Email.port]])])]),e("div",js,[e("div",qs,[e("label",Bs,[e("strong",null,[e("small",null,[l(c,{t:"Encryption"})])])]),h(e("select",{class:"form-select rounded-3","onUpdate:modelValue":n[3]||(n[3]=d=>m(s).Configuration.Email.encryption=d),id:"encryption"},[n[13]||(n[13]=e("option",{value:"STARTTLS"}," STARTTLS ",-1)),e("option",zs,[l(c,{t:"No Encryption"})])],512),[[U,m(s).Configuration.Email.encryption]])])]),m(s).Configuration.Email.authentication_required?(i(),r("div",Gs,[e("div",Ws,[e("label",Os,[e("strong",null,[e("small",null,[l(c,{t:"Username"})])])]),h(e("input",{id:"username","onUpdate:modelValue":n[4]||(n[4]=d=>m(s).Configuration.Email.username=d),type:"text",class:"form-control rounded-3"},null,512),[[_,m(s).Configuration.Email.username]])])])):g("",!0),m(s).Configuration.Email.authentication_required?(i(),r("div",Qs,[e("div",Js,[e("label",Xs,[e("strong",null,[e("small",null,[l(c,{t:"Password"})])])]),h(e("input",{id:"email_password","onUpdate:modelValue":n[5]||(n[5]=d=>m(s).Configuration.Email.email_password=d),type:"password",class:"form-control rounded-3"},null,512),[[_,m(s).Configuration.Email.email_password]])])])):g("",!0),e("div",Zs,[e("div",et,[e("label",st,[e("strong",null,[e("small",null,[l(c,{t:"Send From"})])])]),h(e("input",{id:"send_from","onUpdate:modelValue":n[6]||(n[6]=d=>m(s).Configuration.Email.send_from=d),type:"text",class:"form-control rounded-3"},null,512),[[_,m(s).Configuration.Email.send_from]])])])])],32),p.value?(i(),r("hr",tt)):g("",!0),p.value?(i(),r("div",at,[e("label",it,[e("small",ot,[l(c,{t:"Send Test Email"})])]),e("form",{onSubmit:n[9]||(n[9]=d=>{d.preventDefault(),o()}),class:"input-group"},[h(e("input",{type:"email",class:"form-control rounded-start-3",id:"test_email",placeholder:"john@example.com","onUpdate:modelValue":n[8]||(n[8]=d=>b.value=d),disabled:u.value},null,8,nt),[[_,b.value]]),e("button",{class:"btn bg-primary-subtle text-primary-emphasis border-primary-subtle rounded-end-3",type:"submit",value:"Submit",disabled:b.value.length===0||u.value,id:"button-addon2"},[u.value?(i(),r("span",rt)):(i(),r("i",dt)),l(c,{t:u.value?"Sending...":"Send"},null,8,["t"])],8,lt)],32)])):g("",!0),n[14]||(n[14]=e("hr",null,null,-1)),e("div",null,[e("label",ut,[e("small",ct,[l(c,{t:"Email Body Template"})])]),h(e("textarea",{class:"form-control rounded-3 font-monospace","onUpdate:modelValue":n[10]||(n[10]=d=>m(s).Configuration.Email.email_template=d),id:"email_template",style:{"min-height":"400px"}},null,512),[[_,m(s).Configuration.Email.email_template]])])])]))}};export{ft as A,_t as D,kt as _,gt as a,vt as b,yt as c,wt as d,$t as e};
|