From 21c8d6601a274262074e39845be24d8020d2e5aa Mon Sep 17 00:00:00 2001 From: Julien Dessaux Date: Tue, 28 Jan 2025 00:30:30 +0100 Subject: feat(webui): bootstrap state version page --- pkg/webui/html/version.html | 10 ++++++++ pkg/webui/routes.go | 1 + pkg/webui/version.go | 58 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 69 insertions(+) create mode 100644 pkg/webui/html/version.html create mode 100644 pkg/webui/version.go (limited to 'pkg/webui') diff --git a/pkg/webui/html/version.html b/pkg/webui/html/version.html new file mode 100644 index 0000000..b849783 --- /dev/null +++ b/pkg/webui/html/version.html @@ -0,0 +1,10 @@ +{{ define "main" }} +
+

+ Created by + {{ .Account.Username }} + at {{ .Version.Created }} +

+
{{ .VersionData }}
+
+{{ end }} diff --git a/pkg/webui/routes.go b/pkg/webui/routes.go index 4330630..84017dd 100644 --- a/pkg/webui/routes.go +++ b/pkg/webui/routes.go @@ -19,5 +19,6 @@ func addRoutes( mux.Handle("GET /states", requireLogin(handleStatesGET(db))) mux.Handle("GET /state/{id}", requireLogin(handleStateGET(db))) mux.Handle("GET /static/", cache(http.FileServer(http.FS(staticFS)))) + mux.Handle("GET /version/{id}", requireLogin(handleVersionGET(db))) mux.Handle("GET /", requireLogin(handleIndexGET())) } diff --git a/pkg/webui/version.go b/pkg/webui/version.go new file mode 100644 index 0000000..04c3e6d --- /dev/null +++ b/pkg/webui/version.go @@ -0,0 +1,58 @@ +package webui + +import ( + "fmt" + "html/template" + "net/http" + "strconv" + + "git.adyxax.org/adyxax/tfstated/pkg/database" + "git.adyxax.org/adyxax/tfstated/pkg/model" +) + +var versionTemplate = template.Must(template.ParseFS(htmlFS, "html/base.html", "html/version.html")) + +func handleVersionGET(db *database.DB) http.Handler { + type VersionsData struct { + Page + Account *model.Account + State *model.State + Version *model.Version + VersionData string + } + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + versionIdStr := r.PathValue("id") + versionId, err := strconv.Atoi(versionIdStr) + if err != nil { + errorResponse(w, http.StatusBadRequest, err) + return + } + version, err := db.LoadVersionById(versionId) + if err != nil { + errorResponse(w, http.StatusInternalServerError, err) + return + } + state, err := db.LoadStateById(version.StateId) + if err != nil { + errorResponse(w, http.StatusInternalServerError, err) + return + } + account, err := db.LoadAccountById(version.AccountId) + if err != nil { + errorResponse(w, http.StatusInternalServerError, err) + return + } + versionData := string(version.Data[:]) + render(w, versionTemplate, http.StatusOK, VersionsData{ + Page: Page{ + Precedent: fmt.Sprintf("/state/%d", state.Id), + Section: "versions", + Title: state.Path, + }, + Account: account, + State: state, + Version: version, + VersionData: versionData, + }) + }) +} -- cgit v1.2.3