diff options
author | Julien Dessaux | 2025-02-23 22:06:46 +0100 |
---|---|---|
committer | Julien Dessaux | 2025-02-23 22:06:46 +0100 |
commit | a83296b79ac7eb851a44600fb7ccf6c1a200e2bc (patch) | |
tree | 25d69d9c8a0b4905761d6089acacc454fecf55dd /pkg/webui | |
parent | chore(tfstated): change database state id and version id formats to uuidv7 (diff) | |
download | tfstated-a83296b79ac7eb851a44600fb7ccf6c1a200e2bc.tar.gz tfstated-a83296b79ac7eb851a44600fb7ccf6c1a200e2bc.tar.bz2 tfstated-a83296b79ac7eb851a44600fb7ccf6c1a200e2bc.zip |
[webui] refactored states and versions routes
Diffstat (limited to 'pkg/webui')
-rw-r--r-- | pkg/webui/html/states.html | 6 | ||||
-rw-r--r-- | pkg/webui/html/statesId.html (renamed from pkg/webui/html/state.html) | 4 | ||||
-rw-r--r-- | pkg/webui/html/version.html | 10 | ||||
-rw-r--r-- | pkg/webui/html/versions.html | 23 | ||||
-rw-r--r-- | pkg/webui/routes.go | 4 | ||||
-rw-r--r-- | pkg/webui/state.go | 53 | ||||
-rw-r--r-- | pkg/webui/states.go | 45 | ||||
-rw-r--r-- | pkg/webui/versions.go (renamed from pkg/webui/version.go) | 8 |
8 files changed, 78 insertions, 75 deletions
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 @@ <tbody> {{ range .States }} <tr> - <td><a href="/state/{{ .Id }}">{{ .Path }}</a></td> - <td><a href="/state/{{ .Id }}">{{ .Updated }}</a></td> + <td><a href="/states/{{ .Id }}">{{ .Path }}</a></td> + <td><a href="/states/{{ .Id }}">{{ .Updated }}</a></td> <td> - <a href="/state/{{ .Id }}"> + <a href="/states/{{ .Id }}"> {{ if eq .Lock nil }}no{{ else }} <span>yes</span> <div class="tooltip left max"> diff --git a/pkg/webui/html/state.html b/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 @@ <tbody> {{ range .Versions }} <tr> - <td><a href="/version/{{ .Id }}">{{ index $.Usernames .AccountId }}</a></td> - <td><a href="/version/{{ .Id }}">{{ .Created }}</a></td> + <td><a href="/versions/{{ .Id }}">{{ index $.Usernames .AccountId }}</a></td> + <td><a href="/versions/{{ .Id }}">{{ .Created }}</a></td> </tr> {{ end }} </tbody> 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" }} -<main class="responsive" id="main"> - <p> - Created by - <a href="/users/{{ .Account.Id }}">{{ .Account.Username }}</a> - at {{ .Version.Created }} - </p> - <pre>{{ .VersionData }}</pre> -</main> -{{ 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" }} +<main class="responsive" id="main"> + <p> + Created by + <a href="/users/{{ .Account.Id }}">{{ .Account.Username }}</a> + at {{ .Version.Created }} + </p> + <div> + <div class="tabs"> + <a data-ui="#explorer" class="active">Explorer</a> + <a data-ui="#raw">Raw</a> + </div> + <div id="explorer" class="page padding active"> + <article class="border medium no-padding center-align middle-align"> + <progress class="circle large"></progress> + </article> + </div> + <div id="raw" class="page padding"> + <pre><code id="raw-state">{{ .VersionData }}</code></pre> + </div> + </div> +</main> +{{ 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 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, }), |