From a83296b79ac7eb851a44600fb7ccf6c1a200e2bc Mon Sep 17 00:00:00 2001 From: Julien Dessaux Date: Sun, 23 Feb 2025 22:06:46 +0100 Subject: [PATCH] [webui] refactored states and versions routes --- pkg/webui/html/states.html | 6 +-- pkg/webui/html/{state.html => statesId.html} | 4 +- pkg/webui/html/version.html | 10 ---- pkg/webui/html/versions.html | 23 +++++++++ pkg/webui/routes.go | 4 +- pkg/webui/state.go | 53 -------------------- pkg/webui/states.go | 45 ++++++++++++++++- pkg/webui/{version.go => versions.go} | 8 +-- 8 files changed, 78 insertions(+), 75 deletions(-) rename pkg/webui/html/{state.html => statesId.html} (77%) delete mode 100644 pkg/webui/html/version.html create mode 100644 pkg/webui/html/versions.html delete mode 100644 pkg/webui/state.go rename pkg/webui/{version.go => versions.go} (82%) diff --git a/pkg/webui/html/states.html b/pkg/webui/html/states.html index be8329a..b56dcd8 100644 --- a/pkg/webui/html/states.html +++ b/pkg/webui/html/states.html @@ -17,10 +17,10 @@ {{ range .States }} - {{ .Path }} - {{ .Updated }} + {{ .Path }} + {{ .Updated }} - + {{ if eq .Lock nil }}no{{ else }} yes
diff --git a/pkg/webui/html/state.html b/pkg/webui/html/statesId.html similarity index 77% rename from pkg/webui/html/state.html rename to pkg/webui/html/statesId.html index 4439d9e..3691bb6 100644 --- a/pkg/webui/html/state.html +++ b/pkg/webui/html/statesId.html @@ -20,8 +20,8 @@ {{ range .Versions }} - {{ index $.Usernames .AccountId }} - {{ .Created }} + {{ index $.Usernames .AccountId }} + {{ .Created }} {{ end }} diff --git a/pkg/webui/html/version.html b/pkg/webui/html/version.html deleted file mode 100644 index b849783..0000000 --- a/pkg/webui/html/version.html +++ /dev/null @@ -1,10 +0,0 @@ -{{ define "main" }} -
-

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

-
{{ .VersionData }}
-
-{{ end }} diff --git a/pkg/webui/html/versions.html b/pkg/webui/html/versions.html new file mode 100644 index 0000000..ea65647 --- /dev/null +++ b/pkg/webui/html/versions.html @@ -0,0 +1,23 @@ +{{ define "main" }} +
+

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

+
+
+ Explorer + Raw +
+
+
+ +
+
+
+
{{ .VersionData }}
+
+
+
+{{ end }} diff --git a/pkg/webui/routes.go b/pkg/webui/routes.go index 5c500d2..1fce700 100644 --- a/pkg/webui/routes.go +++ b/pkg/webui/routes.go @@ -20,8 +20,8 @@ func addRoutes( mux.Handle("POST /settings", requireLogin(handleSettingsPOST(db))) mux.Handle("GET /states", requireLogin(handleStatesGET(db))) mux.Handle("POST /states", requireLogin(handleStatesPOST(db))) - mux.Handle("GET /state/{id}", requireLogin(handleStateGET(db))) + mux.Handle("GET /states/{id}", requireLogin(handleStatesIdGET(db))) mux.Handle("GET /static/", cache(http.FileServer(http.FS(staticFS)))) - mux.Handle("GET /version/{id}", requireLogin(handleVersionGET(db))) + mux.Handle("GET /versions/{id}", requireLogin(handleVersionsGET(db))) mux.Handle("GET /", requireLogin(handleIndexGET())) } diff --git a/pkg/webui/state.go b/pkg/webui/state.go deleted file mode 100644 index c12ee03..0000000 --- a/pkg/webui/state.go +++ /dev/null @@ -1,53 +0,0 @@ -package webui - -import ( - "html/template" - "net/http" - - "git.adyxax.org/adyxax/tfstated/pkg/database" - "git.adyxax.org/adyxax/tfstated/pkg/model" - "go.n16f.net/uuid" -) - -var stateTemplate = template.Must(template.ParseFS(htmlFS, "html/base.html", "html/state.html")) - -func handleStateGET(db *database.DB) http.Handler { - type StatesData struct { - Page *Page - State *model.State - Usernames map[string]string - Versions []model.Version - } - return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - var stateId uuid.UUID - if err := stateId.Parse(r.PathValue("id")); err != nil { - errorResponse(w, http.StatusBadRequest, err) - return - } - state, err := db.LoadStateById(stateId) - if err != nil { - errorResponse(w, http.StatusInternalServerError, err) - return - } - versions, err := db.LoadVersionsByState(state) - if err != nil { - errorResponse(w, http.StatusInternalServerError, err) - return - } - usernames, err := db.LoadAccountUsernames() - if err != nil { - errorResponse(w, http.StatusInternalServerError, err) - return - } - render(w, stateTemplate, http.StatusOK, StatesData{ - Page: makePage(r, &Page{ - Precedent: "/states", - Section: "states", - Title: state.Path, - }), - State: state, - Usernames: usernames, - Versions: versions, - }) - }) -} diff --git a/pkg/webui/states.go b/pkg/webui/states.go index c68b2c9..64b7967 100644 --- a/pkg/webui/states.go +++ b/pkg/webui/states.go @@ -10,6 +10,7 @@ import ( "git.adyxax.org/adyxax/tfstated/pkg/database" "git.adyxax.org/adyxax/tfstated/pkg/model" + "go.n16f.net/uuid" ) type StatesPage struct { @@ -22,6 +23,7 @@ type StatesPage struct { } var statesTemplates = template.Must(template.ParseFS(htmlFS, "html/base.html", "html/states.html")) +var statesIdTemplate = template.Must(template.ParseFS(htmlFS, "html/base.html", "html/statesId.html")) func handleStatesGET(db *database.DB) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { @@ -86,7 +88,48 @@ func handleStatesPOST(db *database.DB) http.Handler { }) return } - destination := path.Join("/version", version.Id.String()) + destination := path.Join("/versions", version.Id.String()) http.Redirect(w, r, destination, http.StatusFound) }) } + +func handleStatesIdGET(db *database.DB) http.Handler { + type StatesData struct { + Page *Page + State *model.State + Usernames map[string]string + Versions []model.Version + } + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + var stateId uuid.UUID + if err := stateId.Parse(r.PathValue("id")); err != nil { + errorResponse(w, http.StatusBadRequest, err) + return + } + state, err := db.LoadStateById(stateId) + if err != nil { + errorResponse(w, http.StatusInternalServerError, err) + return + } + versions, err := db.LoadVersionsByState(state) + if err != nil { + errorResponse(w, http.StatusInternalServerError, err) + return + } + usernames, err := db.LoadAccountUsernames() + if err != nil { + errorResponse(w, http.StatusInternalServerError, err) + return + } + render(w, statesIdTemplate, http.StatusOK, StatesData{ + Page: makePage(r, &Page{ + Precedent: "/states", + Section: "states", + Title: state.Path, + }), + State: state, + Usernames: usernames, + Versions: versions, + }) + }) +} diff --git a/pkg/webui/version.go b/pkg/webui/versions.go similarity index 82% rename from pkg/webui/version.go rename to pkg/webui/versions.go index 62a0e22..8cb0a8b 100644 --- a/pkg/webui/version.go +++ b/pkg/webui/versions.go @@ -10,9 +10,9 @@ import ( "go.n16f.net/uuid" ) -var versionTemplate = template.Must(template.ParseFS(htmlFS, "html/base.html", "html/version.html")) +var versionsTemplate = template.Must(template.ParseFS(htmlFS, "html/base.html", "html/versions.html")) -func handleVersionGET(db *database.DB) http.Handler { +func handleVersionsGET(db *database.DB) http.Handler { type VersionsData struct { Page *Page Account *model.Account @@ -46,9 +46,9 @@ func handleVersionGET(db *database.DB) http.Handler { return } versionData := string(version.Data[:]) - render(w, versionTemplate, http.StatusOK, VersionsData{ + render(w, versionsTemplate, http.StatusOK, VersionsData{ Page: makePage(r, &Page{ - Precedent: path.Join("/state/", state.Id.String()), + Precedent: path.Join("/states/", state.Id.String()), Section: "states", Title: state.Path, }),