Files
HostKeeper/app/backend/internal/handler/keychain.go
T
swanadiva fd7361aa14 Sprint 6: JSON file persistence + real SSH terminal + V1 crypto/knownhosts integration
- go.mod replace directive for git.tukangketik.id/swanadiva/hostkeeper → ../../v1
- store/ package: JSON file persistence for hosts, snippets, keys, settings
  (~/Library/Application Support/hostkeeper/v2/)
- model SSH fields: Hostname, Port, Username, AuthType, Password, KeyID
- sshconn/ package: real SSH client via golang.org/x/crypto/ssh
- Terminal WS: real SSH connection with fallback to mock shell
- Dynamic host list in terminal (server-rendered JSON script tag)
- All mock data defaults removed from model packages
- Settings persist via store/settings.go
2026-07-07 13:53:50 +07:00

42 lines
987 B
Go

package handler
import (
"github.com/gofiber/fiber/v2"
"git.tukangketik.id/swanadiva/hostkeeper/v2/internal/store"
)
var keyStore = store.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})
}