feat: Sprint 2 — snippets + keychain CRUD, standalone templates, clipboard/utils JS
This commit is contained in:
@@ -7,6 +7,15 @@ import (
|
||||
|
||||
var store = model.NewHostStore()
|
||||
|
||||
var navItems = []fiber.Map{
|
||||
{"ID": "hosts", "Label": "Hosts", "Icon": "server"},
|
||||
{"ID": "terminal", "Label": "Terminal", "Icon": "terminal"},
|
||||
{"ID": "sftp", "Label": "SFTP", "Icon": "folder-sync"},
|
||||
{"ID": "snippets", "Label": "Snippets", "Icon": "code2"},
|
||||
{"ID": "keychain", "Label": "Keychain", "Icon": "key-round"},
|
||||
{"ID": "settings", "Label": "Settings", "Icon": "settings2"},
|
||||
}
|
||||
|
||||
func Dashboard(c *fiber.Ctx) error {
|
||||
hosts := store.All()
|
||||
return c.Render("index", fiber.Map{
|
||||
@@ -15,14 +24,7 @@ func Dashboard(c *fiber.Ctx) error {
|
||||
"Hosts": hosts,
|
||||
"Active": countByStatus(hosts, "active"),
|
||||
"Offline": countByStatus(hosts, "offline"),
|
||||
"NavItems": []fiber.Map{
|
||||
{"ID": "hosts", "Label": "Hosts", "Icon": "server"},
|
||||
{"ID": "terminal", "Label": "Terminal", "Icon": "terminal"},
|
||||
{"ID": "sftp", "Label": "SFTP", "Icon": "folder-sync"},
|
||||
{"ID": "snippets", "Label": "Snippets", "Icon": "code2"},
|
||||
{"ID": "keychain", "Label": "Keychain", "Icon": "key-round"},
|
||||
{"ID": "settings", "Label": "Settings", "Icon": "settings2"},
|
||||
},
|
||||
"NavItems": navItems,
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
package handler
|
||||
|
||||
import (
|
||||
"github.com/gofiber/fiber/v2"
|
||||
"git.tukangketik.id/swanadiva/hostkeeper/v2/internal/model"
|
||||
)
|
||||
|
||||
var keyStore = model.NewKeyStore()
|
||||
|
||||
func Keychain(c *fiber.Ctx) error {
|
||||
keys := keyStore.All()
|
||||
return c.Render("keychain", fiber.Map{
|
||||
"View": "keychain",
|
||||
"Title": "Keychain",
|
||||
"Keys": keys,
|
||||
"NavItems": navItems,
|
||||
})
|
||||
}
|
||||
|
||||
func KeyGrid(c *fiber.Ctx) error {
|
||||
q := c.Query("q", "")
|
||||
keys := keyStore.Search(q)
|
||||
return c.Render("credential_grid", fiber.Map{"Keys": keys})
|
||||
}
|
||||
|
||||
func CreateKey(c *fiber.Ctx) error {
|
||||
name := c.FormValue("name")
|
||||
username := c.FormValue("username")
|
||||
url := c.FormValue("url")
|
||||
passphrase := c.FormValue("passphrase")
|
||||
keyStore.Add(name, username, url, passphrase)
|
||||
keys := keyStore.All()
|
||||
return c.Render("credential_grid", fiber.Map{"Keys": keys})
|
||||
}
|
||||
|
||||
func DeleteKey(c *fiber.Ctx) error {
|
||||
id := c.Params("id")
|
||||
keyStore.Delete(id)
|
||||
keys := keyStore.All()
|
||||
return c.Render("credential_grid", fiber.Map{"Keys": keys})
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
package handler
|
||||
|
||||
import (
|
||||
"github.com/gofiber/fiber/v2"
|
||||
"git.tukangketik.id/swanadiva/hostkeeper/v2/internal/model"
|
||||
)
|
||||
|
||||
var snippetStore = model.NewSnippetStore()
|
||||
|
||||
func Snippets(c *fiber.Ctx) error {
|
||||
snippets := snippetStore.All()
|
||||
return c.Render("snippets", fiber.Map{
|
||||
"View": "snippets",
|
||||
"Title": "Snippets",
|
||||
"Snippets": snippets,
|
||||
"NavItems": navItems,
|
||||
})
|
||||
}
|
||||
|
||||
func SnippetGrid(c *fiber.Ctx) error {
|
||||
q := c.Query("q", "")
|
||||
snippets := snippetStore.Search(q)
|
||||
return c.Render("snippet_grid", fiber.Map{"Snippets": snippets})
|
||||
}
|
||||
|
||||
func CreateSnippet(c *fiber.Ctx) error {
|
||||
name := c.FormValue("name")
|
||||
content := c.FormValue("content")
|
||||
language := c.FormValue("language")
|
||||
snippetStore.Add(name, content, language, nil)
|
||||
snippets := snippetStore.All()
|
||||
return c.Render("snippet_grid", fiber.Map{"Snippets": snippets})
|
||||
}
|
||||
|
||||
func DeleteSnippet(c *fiber.Ctx) error {
|
||||
id := c.Params("id")
|
||||
snippetStore.Delete(id)
|
||||
snippets := snippetStore.All()
|
||||
return c.Render("snippet_grid", fiber.Map{"Snippets": snippets})
|
||||
}
|
||||
Reference in New Issue
Block a user