From a83296b79ac7eb851a44600fb7ccf6c1a200e2bc Mon Sep 17 00:00:00 2001 From: Julien Dessaux Date: Sun, 23 Feb 2025 22:06:46 +0100 Subject: [webui] refactored states and versions routes --- pkg/webui/html/state.html | 30 ---------------------- pkg/webui/html/states.html | 6 ++--- pkg/webui/html/statesId.html | 30 ++++++++++++++++++++++ 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 | 61 -------------------------------------------- pkg/webui/versions.go | 61 ++++++++++++++++++++++++++++++++++++++++++++ 10 files changed, 163 insertions(+), 160 deletions(-) delete mode 100644 pkg/webui/html/state.html create mode 100644 pkg/webui/html/statesId.html delete mode 100644 pkg/webui/html/version.html create mode 100644 pkg/webui/html/versions.html delete mode 100644 pkg/webui/state.go delete mode 100644 pkg/webui/version.go create mode 100644 pkg/webui/versions.go (limited to 'pkg/webui') diff --git a/pkg/webui/html/state.html b/pkg/webui/html/state.html deleted file mode 100644 index 4439d9e..0000000 --- a/pkg/webui/html/state.html +++ /dev/null @@ -1,30 +0,0 @@ -{{ define "main" }} -
-

- Locked: - {{ if eq .State.Lock nil }}no{{ else }} - yes -

- Lock -

{{ .State.Lock }}

-
- {{ end }} -

- - - - - - - - - {{ range .Versions }} - - - - - {{ end }} - -
ByCreated
{{ index $.Usernames .AccountId }}{{ .Created }}
-
-{{ end }} 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/statesId.html b/pkg/webui/html/statesId.html new file mode 100644 index 0000000..3691bb6 --- /dev/null +++ b/pkg/webui/html/statesId.html @@ -0,0 +1,30 @@ +{{ define "main" }} +
+

+ Locked: + {{ if eq .State.Lock nil }}no{{ else }} + yes +

+ Lock +

{{ .State.Lock }}

+
+ {{ end }} +

+ + + + + + + + + {{ range .Versions }} + + + + + {{ end }} + +
ByCreated
{{ 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/version.go deleted file mode 100644 index 62a0e22..0000000 --- a/pkg/webui/version.go +++ /dev/null @@ -1,61 +0,0 @@ -package webui - -import ( - "html/template" - "net/http" - "path" - - "git.adyxax.org/adyxax/tfstated/pkg/database" - "git.adyxax.org/adyxax/tfstated/pkg/model" - "go.n16f.net/uuid" -) - -var versionTemplate = template.Must(template.ParseFS(htmlFS, "html/base.html", "html/version.html")) - -func handleVersionGET(db *database.DB) http.Handler { - type VersionsData struct { - Page *Page - Account *model.Account - State *model.State - Version *model.Version - VersionData string - } - return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - var versionId uuid.UUID - if err := versionId.Parse(r.PathValue("id")); err != nil { - errorResponse(w, http.StatusBadRequest, err) - return - } - version, err := db.LoadVersionById(versionId) - if err != nil { - errorResponse(w, http.StatusInternalServerError, err) - return - } - if version == nil { - errorResponse(w, http.StatusNotFound, 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: makePage(r, &Page{ - Precedent: path.Join("/state/", state.Id.String()), - Section: "states", - Title: state.Path, - }), - Account: account, - State: state, - Version: version, - VersionData: versionData, - }) - }) -} diff --git a/pkg/webui/versions.go b/pkg/webui/versions.go new file mode 100644 index 0000000..8cb0a8b --- /dev/null +++ b/pkg/webui/versions.go @@ -0,0 +1,61 @@ +package webui + +import ( + "html/template" + "net/http" + "path" + + "git.adyxax.org/adyxax/tfstated/pkg/database" + "git.adyxax.org/adyxax/tfstated/pkg/model" + "go.n16f.net/uuid" +) + +var versionsTemplate = template.Must(template.ParseFS(htmlFS, "html/base.html", "html/versions.html")) + +func handleVersionsGET(db *database.DB) http.Handler { + type VersionsData struct { + Page *Page + Account *model.Account + State *model.State + Version *model.Version + VersionData string + } + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + var versionId uuid.UUID + if err := versionId.Parse(r.PathValue("id")); err != nil { + errorResponse(w, http.StatusBadRequest, err) + return + } + version, err := db.LoadVersionById(versionId) + if err != nil { + errorResponse(w, http.StatusInternalServerError, err) + return + } + if version == nil { + errorResponse(w, http.StatusNotFound, 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, versionsTemplate, http.StatusOK, VersionsData{ + Page: makePage(r, &Page{ + Precedent: path.Join("/states/", state.Id.String()), + Section: "states", + Title: state.Path, + }), + Account: account, + State: state, + Version: version, + VersionData: versionData, + }) + }) +} -- cgit v1.2.3