Files
yakpanel-core/YakPanel-server/frontend/dist/assets/FtpPage-DG8coQcY.js
2026-04-07 09:46:22 +05:30

2 lines
5.4 KiB
JavaScript

import{r,j as e,a as x,I as q}from"./index-CRR9sQ49.js";import{M as t}from"./Modal-B7V4w_St.js";import{A as j}from"./AdminAlert-DW1IRWce.js";import{A as D}from"./AdminButton-Bd2cLTu3.js";import{A as B}from"./AdminTable-BLiLxfnS.js";import{E as H}from"./EmptyState-C61VdEFl.js";import{P as b}from"./PageHeader-BcjNf7GG.js";function J(){const[f,F]=r.useState([]),[T,N]=r.useState(!0),[w,g]=r.useState(""),[S,c]=r.useState(!1),[P,y]=r.useState(!1),[v,m]=r.useState(""),[h,i]=r.useState(null),[C,o]=r.useState(""),u=()=>{N(!0),x("/ftp/list").then(F).catch(s=>g(s.message)).finally(()=>N(!1))};r.useEffect(()=>{u()},[]);const A=s=>{s.preventDefault();const a=s.currentTarget,n=a.elements.namedItem("name").value.trim(),l=a.elements.namedItem("password").value,d=a.elements.namedItem("path").value.trim(),p=a.elements.namedItem("ps").value.trim();if(!n||!l||!d){m("Name, password and path are required");return}y(!0),m(""),x("/ftp/create",{method:"POST",body:JSON.stringify({name:n,password:l,path:d,ps:p})}).then(()=>{c(!1),a.reset(),u()}).catch(k=>m(k.message)).finally(()=>y(!1))},E=(s,a)=>{s.preventDefault();const n=s.currentTarget,l=n.elements.namedItem("new_password").value,d=n.elements.namedItem("confirm_password").value;if(!l||l.length<6){o("Password must be at least 6 characters");return}if(l!==d){o("Passwords do not match");return}o(""),q(a,l).then(()=>i(null)).catch(p=>o(p.message))},I=(s,a)=>{confirm(`Delete FTP account "${a}"?`)&&x(`/ftp/${s}`,{method:"DELETE"}).then(u).catch(n=>g(n.message))};return T?e.jsxs(e.Fragment,{children:[e.jsx(b,{title:"FTP"}),e.jsx("div",{className:"text-center py-5 text-muted",children:"Loading…"})]}):w?e.jsxs(e.Fragment,{children:[e.jsx(b,{title:"FTP"}),e.jsx(j,{variant:"danger",children:w})]}):e.jsxs(e.Fragment,{children:[e.jsx(b,{title:"FTP",actions:e.jsxs(D,{onClick:()=>c(!0),children:[e.jsx("i",{className:"ti ti-plus me-1"}),"Add FTP"]})}),e.jsxs("div",{className:"alert alert-secondary",role:"note",children:["FTP accounts use Pure-FTPd (pure-pw). Path must be under www root. Install:"," ",e.jsx("code",{children:"apt install pure-ftpd pure-ftpd-common"})]}),e.jsxs(t,{show:S,onHide:()=>c(!1),centered:!0,children:[e.jsx(t.Header,{closeButton:!0,children:e.jsx(t.Title,{children:"Create FTP Account"})}),e.jsxs("form",{onSubmit:A,children:[e.jsxs(t.Body,{children:[v?e.jsx(j,{variant:"danger",children:v}):null,e.jsxs("div",{className:"mb-3",children:[e.jsx("label",{className:"form-label",children:"Username"}),e.jsx("input",{name:"name",type:"text",placeholder:"ftpuser",className:"form-control",required:!0})]}),e.jsxs("div",{className:"mb-3",children:[e.jsx("label",{className:"form-label",children:"Password"}),e.jsx("input",{name:"password",type:"password",className:"form-control",required:!0})]}),e.jsxs("div",{className:"mb-3",children:[e.jsx("label",{className:"form-label",children:"Path"}),e.jsx("input",{name:"path",type:"text",placeholder:"/www/wwwroot",className:"form-control",required:!0})]}),e.jsxs("div",{className:"mb-0",children:[e.jsx("label",{className:"form-label",children:"Note (optional)"}),e.jsx("input",{name:"ps",type:"text",placeholder:"My FTP",className:"form-control"})]})]}),e.jsxs(t.Footer,{children:[e.jsx("button",{type:"button",className:"btn btn-light",onClick:()=>c(!1),children:"Cancel"}),e.jsx("button",{type:"submit",disabled:P,className:"btn btn-primary",children:P?"Creating…":"Create"})]})]})]}),e.jsx("div",{className:"card shadow-sm border-0",children:e.jsx("div",{className:"card-body p-0",children:e.jsxs(B,{children:[e.jsx("thead",{className:"table-light",children:e.jsxs("tr",{children:[e.jsx("th",{children:"Name"}),e.jsx("th",{children:"Path"}),e.jsx("th",{children:"Note"}),e.jsx("th",{className:"text-end",children:"Actions"})]})}),e.jsx("tbody",{children:f.length===0?e.jsx("tr",{children:e.jsx("td",{colSpan:4,className:"p-0",children:e.jsx(H,{title:"No FTP accounts",description:'Click "Add FTP" to create one.'})})}):f.map(s=>e.jsxs("tr",{children:[e.jsx("td",{className:"align-middle",children:s.name}),e.jsx("td",{className:"align-middle",children:s.path}),e.jsx("td",{className:"align-middle text-muted",children:s.ps||"—"}),e.jsxs("td",{className:"align-middle text-end",children:[e.jsx("button",{type:"button",onClick:()=>i(s.id),className:"btn btn-sm btn-outline-warning me-1",title:"Change password",children:e.jsx("i",{className:"ti ti-key"})}),e.jsx("button",{type:"button",onClick:()=>I(s.id,s.name),className:"btn btn-sm btn-outline-danger",title:"Delete",children:e.jsx("i",{className:"ti ti-trash"})})]})]},s.id))})]})})}),e.jsxs(t,{show:h!=null,onHide:()=>i(null),centered:!0,children:[e.jsx(t.Header,{closeButton:!0,children:e.jsx(t.Title,{children:"Change FTP Password"})}),h!=null?e.jsxs("form",{onSubmit:s=>E(s,h),children:[e.jsxs(t.Body,{children:[C?e.jsx(j,{variant:"danger",children:C}):null,e.jsxs("div",{className:"mb-3",children:[e.jsx("label",{className:"form-label",children:"New Password"}),e.jsx("input",{name:"new_password",type:"password",minLength:6,className:"form-control",required:!0})]}),e.jsxs("div",{className:"mb-0",children:[e.jsx("label",{className:"form-label",children:"Confirm Password"}),e.jsx("input",{name:"confirm_password",type:"password",minLength:6,className:"form-control",required:!0})]})]}),e.jsxs(t.Footer,{children:[e.jsx("button",{type:"button",className:"btn btn-light",onClick:()=>i(null),children:"Cancel"}),e.jsx("button",{type:"submit",className:"btn btn-primary",children:"Update"})]})]}):null]})]})}export{J as FtpPage};