package handler import ( "github.com/gofiber/fiber/v2" "git.tukangketik.id/swanadiva/hostkeeper/v2/internal/model" ) var fileStore = model.NewFileStore() func SFTP(c *fiber.Ctx) error { local, remote := fileStore.All() data := fiber.Map{ "View": "sftp", "Title": "SFTP", "LocalFiles": local, "RemoteFiles": remote, "LocalBreadcrumb": fileStore.LocalBreadcrumb, "RemoteBreadcrumb": fileStore.RemoteBreadcrumb, "NavItems": navItems, } if c.Get("HX-Request") != "" { return c.Render("sftp_content", data) } return c.Render("sftp", data) } func SFTPPane(c *fiber.Ctx) error { pane := c.Query("pane", "local") dir := c.Query("dir", "/") local, remote := fileStore.All() files := local breadcrumb := fileStore.LocalBreadcrumb if pane == "remote" { files = remote breadcrumb = fileStore.RemoteBreadcrumb } return c.Render("sftp_pane", fiber.Map{ "Pane": pane, "Files": files, "Breadcrumb": breadcrumb, "CurrentDir": dir, }) } func CreateFolder(c *fiber.Ctx) error { pane := c.FormValue("pane", "local") name := c.FormValue("name") if name != "" { item := model.FileItem{ Name: name, Size: "—", Modified: "Just now", Type: "folder", Permissions: "drwxr-xr-x", } if pane == "remote" { fileStore.Remote = append([]model.FileItem{item}, fileStore.Remote...) } else { fileStore.Local = append([]model.FileItem{item}, fileStore.Local...) } } files := fileStore.Local if pane == "remote" { files = fileStore.Remote } return c.Render("sftp_pane", fiber.Map{ "Pane": pane, "Files": files, "Breadcrumb": fileStore.LocalBreadcrumb, }) } func DeleteFile(c *fiber.Ctx) error { pane := c.Query("pane", "local") name := c.Query("name") files := &fileStore.Local if pane == "remote" { files = &fileStore.Remote } for i, f := range *files { if f.Name == name { *files = append((*files)[:i], (*files)[i+1:]...) break } } return c.Render("sftp_pane", fiber.Map{ "Pane": pane, "Files": *files, "Breadcrumb": fileStore.LocalBreadcrumb, }) }