Files
Depl0y-Custom/src/frontend/dist/assets/ISOImages-BihK9fce.js
T
Alphaeus Mote be6d358086 Initial Commit
2025-11-19 08:09:34 -05:00

2 lines
14 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{_ as G,c as d,o as r,a as o,d as w,F as X,p as K,t as n,m as j,w as I,e as m,v as h,A as U,B as N,n as H,x as J,r as u,k as Q,l as y}from"./index-DpP9cWht.js";const Y={name:"ISOImages",setup(){const p=J(),e=u([]),k=u(!1),t=u(!1),x=u(!1),c=u(0),a=u(0),f=u(0),g=u(0),D=u(!1),B=u(!1),F=u(null);let V=null;const b=u({name:"",os_type:"",version:"",architecture:"amd64"}),M=u({url:"",name:"",os_type:"",version:"",architecture:"amd64"}),_=async()=>{k.value=!0;try{const l=await y.isos.list();e.value=l.data}catch(l){console.error("Failed to fetch ISOs:",l)}finally{k.value=!1}},P=l=>{const s=l.target.files[0];s&&(F.value=s,b.value.name||(b.value.name=s.name.replace(".iso","")))},A=async()=>{if(F.value){t.value=!0,c.value=0,V=Date.now();try{const l=new FormData;l.append("file",F.value),l.append("name",b.value.name),l.append("os_type",b.value.os_type),l.append("version",b.value.version),l.append("architecture",b.value.architecture);const s=i=>{if(i.total){const S=Math.round(i.loaded*50/i.total);c.value=S,a.value=i.loaded,f.value=i.total;const T=(Date.now()-V)/1e3;T>0&&(g.value=i.loaded/T)}},O=(await y.isos.upload(l,s)).data.id;p.info("Upload complete, processing file...",{timeout:2e3});let C=!1;for(;!C;){await new Promise(i=>setTimeout(i,500));try{const S=(await y.isos.getProgress(O)).data;if(S.status==="completed")c.value=100,C=!0,p.success("ISO uploaded and processed successfully");else{if(S.status==="error")throw new Error(S.message||"Processing failed");c.value=50+Math.round(S.progress/2)}}catch(i){console.warn("Failed to get progress, assuming complete:",i),C=!0,c.value=100}}await new Promise(i=>setTimeout(i,500)),D.value=!1,b.value={name:"",os_type:"",version:"",architecture:"amd64"},F.value=null,a.value=0,f.value=0,g.value=0,await _()}catch(l){console.error("Failed to upload ISO:",l),p.error("Failed to upload ISO: "+(l.message||"Unknown error"))}finally{t.value=!1,c.value=0,a.value=0,f.value=0,g.value=0}}},W=async l=>{const s=p.info("Checking ISO checksum...",{timeout:!1});try{const v=await y.isos.verify(l);p.dismiss(s),v.data.status==="valid"?p.success("ISO checksum is valid"):p.error("ISO checksum verification failed")}catch(v){p.dismiss(s),console.error("Failed to verify ISO:",v)}},L=async l=>{if(confirm("Are you sure you want to delete this ISO image?"))try{await y.isos.delete(l),p.success("ISO deleted successfully"),await _()}catch(s){console.error("Failed to delete ISO:",s)}},R=l=>({ubuntu:"Ubuntu",debian:"Debian",centos:"CentOS",rocky:"Rocky Linux",alma:"AlmaLinux",windows_server_2019:"Windows Server 2019",windows_server_2022:"Windows Server 2022",windows_10:"Windows 10",windows_11:"Windows 11"})[l]||l,q=l=>{if(!l)return"0 B";const s=["B","KB","MB","GB","TB"],v=Math.floor(Math.log(l)/Math.log(1024));return Math.round(l/Math.pow(1024,v)*100)/100+" "+s[v]},z=()=>{if(g.value===0||a.value===0)return"Calculating...";const s=(f.value-a.value)/g.value;if(s<60)return Math.ceil(s)+"s";if(s<3600){const v=Math.floor(s/60),O=Math.ceil(s%60);return`${v}m ${O}s`}else{const v=Math.floor(s/3600),O=Math.ceil(s%3600/60);return`${v}h ${O}m`}},E=async()=>{x.value=!0;try{await y.isos.downloadFromUrl(M.value),p.success("ISO download started successfully"),B.value=!1,M.value={url:"",name:"",os_type:"",version:"",architecture:"amd64"},await _()}catch(l){console.error("Failed to download ISO:",l)}finally{x.value=!1}};return Q(()=>{_()}),{isos:e,loading:k,uploading:t,downloading:x,uploadProgress:c,uploadedBytes:a,totalBytes:f,uploadSpeed:g,showUploadModal:D,showDownloadModal:B,selectedFile:F,uploadForm:b,downloadForm:M,onFileSelected:P,uploadISO:A,downloadFromUrl:E,verifyISO:W,deleteISO:L,formatOSType:R,formatBytes:q,formatTimeRemaining:z}}},Z={class:"iso-images-page"},$={class:"card"},oo={class:"card-header"},eo={class:"flex gap-1"},to={key:0,class:"loading-spinner"},ao={key:1,class:"text-center text-muted"},lo={key:2,class:"table-container"},so={class:"table"},no={class:"badge badge-info"},io={class:"text-xs text-muted"},ro={class:"flex gap-1"},uo=["onClick"],po=["onClick"],vo={class:"modal-header"},mo={class:"form-group"},co={key:0,class:"text-sm text-muted mt-1"},bo={class:"form-group"},fo={class:"form-group"},wo={class:"grid grid-cols-2 gap-2"},go={class:"form-group"},So={class:"form-group"},yo={key:0,class:"upload-progress"},Fo={class:"upload-stats"},Oo={class:"stat-row"},ho={class:"stat-value"},ko={class:"stat-row"},xo={class:"stat-value"},_o={key:0,class:"stat-row"},Io={class:"stat-value"},Uo={key:1,class:"stat-row"},Mo={class:"stat-value"},Co={class:"progress-bar"},Do={class:"flex gap-1 mt-2"},Bo=["disabled"],Vo=["disabled"],To={class:"modal-header"},No={class:"form-group"},Po={class:"form-group"},Ao={class:"form-group"},Wo={class:"grid grid-cols-2 gap-2"},Lo={class:"form-group"},Ro={class:"form-group"},qo={key:0,class:"upload-progress"},zo={class:"flex gap-1 mt-2"},Eo=["disabled"],Go=["disabled"];function Xo(p,e,k,t,x,c){return r(),d("div",Z,[o("div",$,[o("div",oo,[e[22]||(e[22]=o("h3",null,"ISO Images",-1)),o("div",eo,[o("button",{onClick:e[0]||(e[0]=a=>t.showUploadModal=!0),class:"btn btn-primary"},"+ Upload ISO"),o("button",{onClick:e[1]||(e[1]=a=>t.showDownloadModal=!0),class:"btn btn-outline"},"Download from URL")])]),t.loading?(r(),d("div",to)):t.isos.length===0?(r(),d("div",ao,[...e[23]||(e[23]=[o("p",null,"No ISO images uploaded yet.",-1),o("p",{class:"text-sm"},"Upload ISOs to deploy VMs.",-1)])])):(r(),d("div",lo,[o("table",so,[e[24]||(e[24]=o("thead",null,[o("tr",null,[o("th",null,"Name"),o("th",null,"OS Type"),o("th",null,"Version"),o("th",null,"Architecture"),o("th",null,"Size"),o("th",null,"Checksum"),o("th",null,"Status"),o("th",null,"Actions")])],-1)),o("tbody",null,[(r(!0),d(X,null,K(t.isos,a=>(r(),d("tr",{key:a.id},[o("td",null,n(a.name),1),o("td",null,[o("span",no,n(t.formatOSType(a.os_type)),1)]),o("td",null,n(a.version||"N/A"),1),o("td",null,n(a.architecture),1),o("td",null,n(t.formatBytes(a.file_size)),1),o("td",io,n(a.checksum?a.checksum.substring(0,16)+"...":"N/A"),1),o("td",null,[o("span",{class:j(["badge",a.is_available?"badge-success":"badge-danger"])},n(a.is_available?"Available":"Unavailable"),3)]),o("td",null,[o("div",ro,[o("button",{onClick:f=>t.verifyISO(a.id),class:"btn btn-outline btn-sm"},"Verify",8,uo),o("button",{onClick:f=>t.deleteISO(a.id),class:"btn btn-danger btn-sm"},"Delete",8,po)])])]))),128))])])]))]),t.showUploadModal?(r(),d("div",{key:0,class:"modal",onClick:e[11]||(e[11]=a=>t.showUploadModal=!1)},[o("div",{class:"modal-content",onClick:e[10]||(e[10]=I(()=>{},["stop"]))},[o("div",vo,[e[25]||(e[25]=o("h3",null,"Upload ISO Image",-1)),o("button",{onClick:e[2]||(e[2]=a=>t.showUploadModal=!1),class:"btn-close"},"×")]),o("form",{onSubmit:e[9]||(e[9]=I((...a)=>t.uploadISO&&t.uploadISO(...a),["prevent"])),class:"modal-body"},[o("div",mo,[e[26]||(e[26]=o("label",{class:"form-label"},"ISO File *",-1)),o("input",{type:"file",onChange:e[3]||(e[3]=(...a)=>t.onFileSelected&&t.onFileSelected(...a)),accept:".iso",class:"form-control",required:""},null,32),t.selectedFile?(r(),d("p",co," Selected: "+n(t.selectedFile.name)+" ("+n(t.formatBytes(t.selectedFile.size))+") ",1)):w("",!0)]),o("div",bo,[e[27]||(e[27]=o("label",{class:"form-label"},"Display Name *",-1)),m(o("input",{"onUpdate:modelValue":e[4]||(e[4]=a=>t.uploadForm.name=a),class:"form-control",required:""},null,512),[[h,t.uploadForm.name]])]),o("div",fo,[e[29]||(e[29]=o("label",{class:"form-label"},"OS Type *",-1)),m(o("select",{"onUpdate:modelValue":e[5]||(e[5]=a=>t.uploadForm.os_type=a),class:"form-control",required:""},[...e[28]||(e[28]=[N('<option value="" data-v-295eeb95>Select OS</option><optgroup label="Linux Server" data-v-295eeb95><option value="ubuntu" data-v-295eeb95>Ubuntu Server</option><option value="debian" data-v-295eeb95>Debian</option><option value="centos" data-v-295eeb95>CentOS</option><option value="rocky" data-v-295eeb95>Rocky Linux</option><option value="alma" data-v-295eeb95>AlmaLinux</option><option value="fedora" data-v-295eeb95>Fedora Server</option><option value="opensuse" data-v-295eeb95>openSUSE</option></optgroup><optgroup label="Windows" data-v-295eeb95><option value="windows_server_2019" data-v-295eeb95>Windows Server 2019</option><option value="windows_server_2022" data-v-295eeb95>Windows Server 2022</option><option value="windows_10" data-v-295eeb95>Windows 10</option><option value="windows_11" data-v-295eeb95>Windows 11</option></optgroup><optgroup label="Firewall / Network" data-v-295eeb95><option value="pfsense" data-v-295eeb95>pfSense</option><option value="opnsense" data-v-295eeb95>OPNsense</option><option value="sophos" data-v-295eeb95>Sophos Firewall</option><option value="fortinet" data-v-295eeb95>FortiGate</option><option value="vyos" data-v-295eeb95>VyOS</option></optgroup><optgroup label="Other" data-v-295eeb95><option value="freebsd" data-v-295eeb95>FreeBSD</option><option value="truenas" data-v-295eeb95>TrueNAS</option><option value="proxmox" data-v-295eeb95>Proxmox VE</option><option value="esxi" data-v-295eeb95>VMware ESXi</option><option value="other" data-v-295eeb95>Other / Custom</option></optgroup>',5)])],512),[[U,t.uploadForm.os_type]])]),o("div",wo,[o("div",go,[e[30]||(e[30]=o("label",{class:"form-label"},"Version",-1)),m(o("input",{"onUpdate:modelValue":e[6]||(e[6]=a=>t.uploadForm.version=a),class:"form-control",placeholder:"22.04"},null,512),[[h,t.uploadForm.version]])]),o("div",So,[e[32]||(e[32]=o("label",{class:"form-label"},"Architecture",-1)),m(o("select",{"onUpdate:modelValue":e[7]||(e[7]=a=>t.uploadForm.architecture=a),class:"form-control"},[...e[31]||(e[31]=[o("option",{value:"amd64"},"amd64 (x86_64)",-1),o("option",{value:"arm64"},"arm64",-1)])],512),[[U,t.uploadForm.architecture]])])]),t.uploading?(r(),d("div",yo,[o("div",Fo,[o("div",Oo,[e[33]||(e[33]=o("span",{class:"stat-label"},"Progress:",-1)),o("span",ho,n(t.uploadProgress)+"%",1)]),o("div",ko,[e[34]||(e[34]=o("span",{class:"stat-label"},"Transferred:",-1)),o("span",xo,n(t.formatBytes(t.uploadedBytes))+" / "+n(t.formatBytes(t.totalBytes)),1)]),t.uploadSpeed>0?(r(),d("div",_o,[e[35]||(e[35]=o("span",{class:"stat-label"},"Speed:",-1)),o("span",Io,n(t.formatBytes(t.uploadSpeed))+"/s",1)])):w("",!0),t.uploadSpeed>0&&t.uploadProgress<100?(r(),d("div",Uo,[e[36]||(e[36]=o("span",{class:"stat-label"},"Time remaining:",-1)),o("span",Mo,n(t.formatTimeRemaining()),1)])):w("",!0)]),o("div",Co,[o("div",{class:"progress-fill",style:H({width:t.uploadProgress+"%"})},null,4)])])):w("",!0),o("div",Do,[o("button",{type:"submit",class:"btn btn-primary",disabled:t.uploading||!t.selectedFile},n(t.uploading?"Uploading...":"Upload ISO"),9,Bo),o("button",{type:"button",onClick:e[8]||(e[8]=a=>t.showUploadModal=!1),class:"btn btn-outline",disabled:t.uploading}," Cancel ",8,Vo)])],32)])])):w("",!0),t.showDownloadModal?(r(),d("div",{key:1,class:"modal",onClick:e[21]||(e[21]=a=>t.showDownloadModal=!1)},[o("div",{class:"modal-content",onClick:e[20]||(e[20]=I(()=>{},["stop"]))},[o("div",To,[e[37]||(e[37]=o("h3",null,"Download ISO from URL",-1)),o("button",{onClick:e[12]||(e[12]=a=>t.showDownloadModal=!1),class:"btn-close"},"×")]),o("form",{onSubmit:e[19]||(e[19]=I((...a)=>t.downloadFromUrl&&t.downloadFromUrl(...a),["prevent"])),class:"modal-body"},[o("div",No,[e[38]||(e[38]=o("label",{class:"form-label"},"ISO URL *",-1)),m(o("input",{"onUpdate:modelValue":e[13]||(e[13]=a=>t.downloadForm.url=a),type:"url",class:"form-control",placeholder:"https://example.com/path/to/image.iso",required:""},null,512),[[h,t.downloadForm.url]]),e[39]||(e[39]=o("p",{class:"text-xs text-muted mt-1"},"Direct link to the ISO file",-1))]),o("div",Po,[e[40]||(e[40]=o("label",{class:"form-label"},"Display Name *",-1)),m(o("input",{"onUpdate:modelValue":e[14]||(e[14]=a=>t.downloadForm.name=a),class:"form-control",required:""},null,512),[[h,t.downloadForm.name]])]),o("div",Ao,[e[42]||(e[42]=o("label",{class:"form-label"},"OS Type *",-1)),m(o("select",{"onUpdate:modelValue":e[15]||(e[15]=a=>t.downloadForm.os_type=a),class:"form-control",required:""},[...e[41]||(e[41]=[N('<option value="" data-v-295eeb95>Select OS</option><optgroup label="Linux Server" data-v-295eeb95><option value="ubuntu" data-v-295eeb95>Ubuntu Server</option><option value="debian" data-v-295eeb95>Debian</option><option value="centos" data-v-295eeb95>CentOS</option><option value="rocky" data-v-295eeb95>Rocky Linux</option><option value="alma" data-v-295eeb95>AlmaLinux</option><option value="fedora" data-v-295eeb95>Fedora Server</option><option value="opensuse" data-v-295eeb95>openSUSE</option></optgroup><optgroup label="Windows" data-v-295eeb95><option value="windows_server_2019" data-v-295eeb95>Windows Server 2019</option><option value="windows_server_2022" data-v-295eeb95>Windows Server 2022</option><option value="windows_10" data-v-295eeb95>Windows 10</option><option value="windows_11" data-v-295eeb95>Windows 11</option></optgroup><optgroup label="Firewall / Network" data-v-295eeb95><option value="pfsense" data-v-295eeb95>pfSense</option><option value="opnsense" data-v-295eeb95>OPNsense</option><option value="sophos" data-v-295eeb95>Sophos Firewall</option><option value="fortinet" data-v-295eeb95>FortiGate</option><option value="vyos" data-v-295eeb95>VyOS</option></optgroup><optgroup label="Other" data-v-295eeb95><option value="freebsd" data-v-295eeb95>FreeBSD</option><option value="truenas" data-v-295eeb95>TrueNAS</option><option value="proxmox" data-v-295eeb95>Proxmox VE</option><option value="esxi" data-v-295eeb95>VMware ESXi</option><option value="other" data-v-295eeb95>Other / Custom</option></optgroup>',5)])],512),[[U,t.downloadForm.os_type]])]),o("div",Wo,[o("div",Lo,[e[43]||(e[43]=o("label",{class:"form-label"},"Version",-1)),m(o("input",{"onUpdate:modelValue":e[16]||(e[16]=a=>t.downloadForm.version=a),class:"form-control",placeholder:"22.04"},null,512),[[h,t.downloadForm.version]])]),o("div",Ro,[e[45]||(e[45]=o("label",{class:"form-label"},"Architecture",-1)),m(o("select",{"onUpdate:modelValue":e[17]||(e[17]=a=>t.downloadForm.architecture=a),class:"form-control"},[...e[44]||(e[44]=[o("option",{value:"amd64"},"amd64 (x86_64)",-1),o("option",{value:"arm64"},"arm64",-1)])],512),[[U,t.downloadForm.architecture]])])]),t.downloading?(r(),d("div",qo,[...e[46]||(e[46]=[o("p",{class:"text-center text-muted"},"Downloading ISO from URL...",-1),o("div",{class:"loading-spinner"},null,-1)])])):w("",!0),o("div",zo,[o("button",{type:"submit",class:"btn btn-primary",disabled:t.downloading},n(t.downloading?"Downloading...":"Download ISO"),9,Eo),o("button",{type:"button",onClick:e[18]||(e[18]=a=>t.showDownloadModal=!1),class:"btn btn-outline",disabled:t.downloading}," Cancel ",8,Go)])],32)])])):w("",!0)])}const jo=G(Y,[["render",Xo],["__scopeId","data-v-295eeb95"]]);export{jo as default};