Files
WGDashboard/src/static/dist/WGDashboardAdmin/assets/clientViewer-D31Zh_x0.js
Donald Zou 41975973dc Build
2025-09-01 22:36:00 +08:00

13 lines
12 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import{B as $,q as M,r as p,h as V,c as i,f as l,a as e,d as k,t as _,F as C,i as L,b as d,w as O,n as N,u as I,e as S,m as G,y as z,j as w,D as j,z as R,J as E,g as T,K as q,H as F,I as H,L as Y,_ as J}from"./index-DUyYv-wF.js";import{D as B}from"./DashboardClientAssignmentStore-BLo5V0Kw.js";import{L as c}from"./localeText-DOAWxDtC.js";const K={class:"card rounded-0 border-0"},Q={role:"button",class:"ms-auto text-white"},X={key:0,class:"bi bi-chevron-compact-down"},Z={key:1,class:"bi bi-chevron-compact-up"},ee={key:0,class:"card-body p-0"},se={class:"list-group list-group-flush"},te={key:0},le={class:"text-body"},ne={class:"text-muted"},ae={key:1},ie={class:"text-body"},oe={class:"text-muted"},re=["onClick"],de=["onClick"],U=$({__name:"availablePeersGroup",props:["configuration","peers","clientAssignedPeers","availablePeerSearchString"],emits:["assign","unassign"],setup(u,{emit:h}){const a=u,g=h,r=B(),m=M(()=>a.clientAssignedPeers&&Object.keys(a.clientAssignedPeers).includes(a.configuration)?a.peers.filter(n=>!a.clientAssignedPeers[a.configuration].map(t=>t.id).includes(n.id)&&(!a.availablePeerSearchString||a.availablePeerSearchString&&(n.id.includes(a.availablePeerSearchString)||n.name.includes(a.availablePeerSearchString)))):a.availablePeerSearchString?a.peers.filter(n=>n.id.includes(a.availablePeerSearchString)||n.name.includes(a.availablePeerSearchString)):a.peers),y=p(!1),v=p(!1);return(n,t)=>{const o=V("RouterLink");return l(),i("div",K,[e("div",{onClick:t[0]||(t[0]=s=>v.value=!v.value),role:"button",class:"card-header rounded-0 sticky-top z-5 bg-body-secondary border-0 border-bottom text-white d-flex"},[e("small",null,[e("samp",null,_(u.configuration),1)]),e("a",Q,[v.value?(l(),i("i",X)):(l(),i("i",Z))])]),v.value?k("",!0):(l(),i("div",ee,[e("div",se,[(l(!0),i(C,null,L(m.value,s=>(l(),i("div",{class:"list-group-item d-flex border-bottom list-group-item-action d-flex align-items-center gap-3",key:s.id},[y.value?(l(),i("div",ae,[e("small",ie,[d(c,{t:"Are you sure to remove this peer?"})]),t[2]||(t[2]=e("br",null,null,-1)),e("small",oe,[e("samp",null,_(s.id),1)])])):(l(),i("div",te,[e("small",le,[d(o,{class:"text-decoration-none",target:"_blank",to:"/configuration/"+u.configuration+"/peers?id="+encodeURIComponent(s.id)},{default:O(()=>[e("samp",null,_(s.id),1)]),_:2},1032,["to"])]),t[1]||(t[1]=e("br",null,null,-1)),e("small",ne,_(s.name?s.name:"Untitled Peer"),1)])),u.clientAssignedPeers?(l(),i("button",{key:2,onClick:b=>g("assign",s.id),class:N([{disabled:I(r).assigning},"btn bg-success-subtle text-success-emphasis ms-auto"])},t[3]||(t[3]=[e("i",{class:"bi bi-plus-circle-fill"},null,-1)]),10,re)):(l(),i("button",{key:3,onClick:b=>g("unassign",s.assignment_id),class:N([{disabled:I(r).unassigning},"btn bg-danger-subtle text-danger-emphasis ms-auto"]),"aria-label":"Delete Assignment"},t[4]||(t[4]=[e("i",{class:"bi bi-trash-fill"},null,-1)]),10,de))]))),128))])]))])}}}),ce={key:0,class:"d-flex rounded-0 border-0 flex-column d-flex flex-column border-bottom pb-1"},ue={class:"d-flex flex-column p-3 gap-3"},me={class:"d-flex align-items-center"},be={class:"mb-0"},ge={class:"text-bg-primary badge ms-2"},ve={class:"text-bg-info badge ms-2"},fe={class:"rounded-3 availablePeers border h-100 overflow-scroll flex-grow-1 d-flex flex-column"},pe={key:0,class:"text-muted m-auto p-3"},he={key:0,style:{height:"500px"},class:"d-flex flex-column p-3"},ye={class:"availablePeers border h-100 card rounded-3"},xe={class:"card-header sticky-top p-3"},_e={class:"mb-0 d-flex align-items-center"},ke={class:"card-body p-0 overflow-scroll"},we={key:0,class:"text-muted m-auto"},Ce={class:"card-footer d-flex gap-2 p-3 align-items-center justify-content-end"},Pe={key:1},Se=$({__name:"clientAssignedPeers",props:["client","clientAssignedPeers"],emits:["refresh"],setup(u,{emit:h}){const a=u,g=p(!1),r=B(),m=p(!1),y=h,v=async(o,s,b)=>{await r.assignClient(o,s,b,!1),y("refresh")},n=async o=>{await r.unassignClient(void 0,void 0,o),y("refresh")},t=p("");return(o,s)=>(l(),i("div",null,[g.value?(l(),i("div",Pe,s[8]||(s[8]=[e("div",{class:"p-3 placeholder-glow border-bottom"},[e("h6",{class:"placeholder w-100 rounded-3"}),e("div",{class:"placeholder w-100 rounded-3",style:{height:"400px"}})],-1)]))):(l(),i("div",ce,[e("div",ue,[e("div",me,[e("h6",be,[d(c,{t:"Assigned Peers"}),e("span",ge,[S(_(Object.keys(u.clientAssignedPeers).length)+" ",1),d(c,{t:Object.keys(u.clientAssignedPeers).length>1?"Configurations":"Configuration"},null,8,["t"])]),e("span",ve,[S(_(Object.values(u.clientAssignedPeers).flat().length)+" ",1),d(c,{t:Object.values(u.clientAssignedPeers).flat().length>1?"Peers":"Peer"},null,8,["t"])])]),e("button",{class:"btn btn-sm bg-primary-subtle text-primary-emphasis rounded-3 ms-auto",onClick:s[0]||(s[0]=b=>m.value=!m.value)},[m.value?(l(),i(C,{key:1},[s[5]||(s[5]=e("i",{class:"bi bi-check me-2"},null,-1)),s[6]||(s[6]=S("Done "))],64)):(l(),i(C,{key:0},[s[3]||(s[3]=e("i",{class:"bi bi-list-check me-2"},null,-1)),s[4]||(s[4]=S("Manage "))],64))])]),e("div",fe,[(l(!0),i(C,null,L(u.clientAssignedPeers,(b,x)=>(l(),w(U,{configuration:x,peers:b,onUnassign:s[1]||(s[1]=async P=>await n(P))},null,8,["configuration","peers"]))),256)),Object.keys(u.clientAssignedPeers).length===0?(l(),i("h6",pe,[d(c,{t:"No peer assigned to this client"})])):k("",!0)])]),m.value?(l(),i("div",he,[e("div",ye,[e("div",xe,[e("h6",_e,[d(c,{t:"Available Peers"})])]),e("div",ke,[(l(!0),i(C,null,L(I(r).allConfigurationsPeers,(b,x)=>(l(),w(U,{availablePeerSearchString:t.value,configuration:x,clientAssignedPeers:u.clientAssignedPeers,peers:b,key:x,onAssign:async P=>await v(x,P,a.client.ClientID)},null,8,["availablePeerSearchString","configuration","clientAssignedPeers","peers","onAssign"]))),128)),Object.keys(I(r).allConfigurationsPeers).length===0?(l(),i("h6",we,[d(c,{t:"No peer is available to assign"})])):k("",!0)]),e("div",Ce,[s[7]||(s[7]=e("label",{for:"availablePeerSearchString"},[e("i",{class:"bi bi-search me-2"})],-1)),G(e("input",{id:"availablePeerSearchString","onUpdate:modelValue":s[2]||(s[2]=b=>t.value=b),class:"form-control form-control-sm rounded-3 w-auto",type:"text"},null,512),[[z,t.value]])])])])):k("",!0)]))]))}}),$e={class:"p-3 d-flex gap-3 flex-column border-bottom"},De={class:"d-flex align-items-center"},Ae={class:"mb-0"},Ne=$({__name:"clientResetPassword",props:["client"],setup(u){const h=u,a=p(!1),g=p(!1),r=p(!1),m=p(!1),y=j();E();const v=t=>{const o=y.getActiveCrossServer();return o?new URL("/client/#/reset_password?token="+t,o.host).href:new URL("/client/#/reset_password?token="+t,window.location.href).href},n=async()=>{m.value=!0;let t=!1,o;await R("/api/clients/generatePasswordResetLink",{ClientID:h.client.ClientID},async s=>{if(s.status)if(o=s.data,g.value=!0,await T("/api/email/ready",{},b=>{t=b.status}),t){let b={Receiver:h.client.Email,Subject:"[WGDashboard | Client] Reset Password",Body:`Hi${h.client.Name?" "+h.client.Name:""},
We received a request to reset the password for your account. You can reset your password by visiting the link below:
${v(o)}
This link will expire in 30 minutes for your security. If you didnt request a password reset, you can safely ignore this email—your current password will remain unchanged.
If you need help, feel free to contact support.
Best regards,
WGDashboard`};await R("/api/email/send",b,x=>{x.status?(r.value="Send email success.",a.value=!0):(r.value="Send email failed.",g.value=!1,a.value=!0)})}else r.value=`Please share this URL to your client to reset the password: ${v(o)}`,a.value=!0;else g.value=!1,r.value=s.message,a.value=!0}),m.value=!1};return(t,o)=>(l(),i("div",$e,[e("div",De,[e("h6",Ae,[d(c,{t:"Reset Password"})]),e("button",{class:N(["btn btn-sm bg-primary-subtle text-primary-emphasis rounded-3 ms-auto",{disabled:m.value}]),onClick:o[0]||(o[0]=s=>n())},[o[1]||(o[1]=e("i",{class:"bi bi-send me-2"},null,-1)),m.value?(l(),w(c,{key:1,t:"Sending..."})):(l(),w(c,{key:0,t:"Send Password Reset Link"}))],2)]),a.value?(l(),i("div",{key:0,class:N(["alert rounded-3 mb-0",[g.value?"alert-success":"alert-danger"]])},_(r.value),3)):k("",!0)]))}}),Ie={class:"p-3 d-flex gap-3 flex-column border-bottom"},Re={class:"d-flex align-items-center gap-2"},Le={class:"mb-0"},je=$({__name:"clientDelete",props:["client"],emits:["refresh"],setup(u,{emit:h}){const a=u,g=p(!1),r=p(!1),m=h,y=j(),v=async()=>{g.value=!0,await R("/api/clients/deleteClient",{ClientID:a.client.ClientID},n=>{g.value=!1,n.status?(m("deleteSuccess"),y.newMessage("Server","Delete client successfully","success")):y.newMessage("Server","Failed to delete client","danger")})};return(n,t)=>(l(),i("div",Ie,[e("div",Re,[e("h6",Le,[r.value?(l(),w(c,{key:1,t:"Are you sure to delete this client?"})):(l(),w(c,{key:0,t:"Delete Client"}))]),r.value?k("",!0):(l(),i("button",{key:0,class:"btn btn-sm bg-danger-subtle text-danger-emphasis rounded-3 ms-auto",onClick:t[0]||(t[0]=o=>r.value=!0)},[t[2]||(t[2]=e("i",{class:"bi bi-trash-fill me-2"},null,-1)),d(c,{t:"Delete"})])),r.value?(l(),i(C,{key:1},[e("button",{onClick:v,class:"btn btn-sm bg-danger-subtle text-danger-emphasis rounded-3 ms-auto"},[t[3]||(t[3]=e("i",{class:"bi bi-trash-fill me-2"},null,-1)),d(c,{t:"Yes"})]),r.value?(l(),i("button",{key:0,class:"btn btn-sm bg-secondary-subtle text-secondary-emphasis rounded-3",onClick:t[1]||(t[1]=o=>r.value=!1)},[t[4]||(t[4]=e("i",{class:"bi bi-x-lg me-2"},null,-1)),d(c,{t:"No"})])):k("",!0)],64)):k("",!0)])]))}}),Be={class:"p-4 border-bottom bg-body-tertiary z-0"},Ue={class:"mb-3 backLink"},Me={class:"text-muted"},Ve={class:"d-flex flex-column gap-2"},Oe={class:"d-flex align-items-center"},Ge={class:"text-muted"},ze={class:"ms-auto"},Ee={class:"d-flex align-items-center gap-2"},Te={class:"text-muted"},We={style:{flex:"1 0 0","overflow-y":"scroll"}},qe={key:1,class:"d-flex w-100 h-100 text-muted"},Fe={class:"m-auto text-center"},He=$({__name:"clientViewer",emits:["deleteSuccess"],async setup(u,{emit:h}){let a,g;const r=B(),m=j(),y=q(),v=E(),n=M(()=>r.getClientById(y.params.id)),t=p({}),o=async()=>{await T("/api/clients/assignedPeers",{ClientID:n.value.ClientID},D=>{t.value=D.data})},s=F({Name:void 0});n.value?(H(()=>n.value.ClientID,async()=>{s.Name=n.value.Name,await o()}),[a,g]=Y(()=>o()),await a,g(),s.Name=n.value.Name):(v.push("/clients"),m.newMessage("WGDashboard","Client does not exist","danger"));const b=p(!1),x=async()=>{b.value=!0,await R("/api/clients/updateProfileName",{ClientID:n.value.ClientID,Name:s.Name},D=>{D.status?(n.value.Name=s.Name,m.newMessage("Server","Client name update success","success")):(s.Name=n.value.Name,m.newMessage("Server","Client name update failed","danger")),b.value=!1})},P=async()=>{await v.push("/clients"),await r.getClients()};return(D,f)=>{const W=V("RouterLink");return n.value?(l(),i("div",{class:"text-body d-flex flex-column overflow-y-scroll h-100",key:n.value.ClientID},[e("div",Be,[e("div",Ue,[d(W,{to:"/clients",class:"text-body text-decoration-none"},{default:O(()=>f[4]||(f[4]=[e("i",{class:"bi bi-arrow-left me-2"},null,-1),S(" Back")])),_:1,__:[4]})]),e("small",Me,[d(c,{t:"Email"})]),e("h1",null,_(n.value.Email),1),e("div",Ve,[e("div",Oe,[e("small",Ge,[d(c,{t:"Client ID"})]),e("small",ze,[e("samp",null,_(n.value.ClientID),1)])]),e("div",Ee,[e("small",Te,[d(c,{t:"Client Name"})]),G(e("input",{class:"form-control form-control-sm rounded-3 ms-auto",style:{width:"300px"},type:"text","onUpdate:modelValue":f[0]||(f[0]=A=>s.Name=A)},null,512),[[z,s.Name]]),e("button",{onClick:f[1]||(f[1]=A=>x()),"aria-label":"Save Client Name",class:"btn btn-sm rounded-3 bg-success-subtle border-success-subtle text-success-emphasis"},f[5]||(f[5]=[e("i",{class:"bi bi-save-fill"},null,-1)]))])])]),e("div",We,[d(Se,{onRefresh:f[2]||(f[2]=A=>o()),clientAssignedPeers:t.value,client:n.value},null,8,["clientAssignedPeers","client"]),n.value.ClientGroup==="Local"?(l(),w(Ne,{key:0,client:n.value},null,8,["client"])):k("",!0),d(je,{onDeleteSuccess:f[3]||(f[3]=A=>P()),client:n.value},null,8,["client"])])])):(l(),i("div",qe,[e("div",Fe,[f[6]||(f[6]=e("h1",null,[e("i",{class:"bi bi-person-x"})],-1)),e("p",null,[d(c,{t:"Client does not exist"})])])]))}}}),Qe=J(He,[["__scopeId","data-v-a5483fac"]]);export{Qe as default};