8357d9d76e
- All 7 pages rewritten: Dashboard, Terminal, Snippets, Keychain, SFTP, Settings, Brief - Apply consistent Lumina glassmorphic theme (rounded-2xl, shadows, borders, tracking) - Fix SVG icons not rendering — return template.HTML instead of string - Fix Alpine x-data scoping: terminal tabs, SFTP modals, snippet tag buttons - Fix dashboard search sending literal ?q=... - Rebuild CSS with all new Tailwind classes (62KB) - Add .air.toml with hot-reload config, docs/PERBAIKANUI.md checklist - Remove unused backup partials
83 lines
2.0 KiB
Go
83 lines
2.0 KiB
Go
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,
|
|
})
|
|
}
|