diff options
Diffstat (limited to 'pkg/webui/versions.go')
-rw-r--r-- | pkg/webui/versions.go | 61 |
1 files changed, 61 insertions, 0 deletions
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, + }) + }) +} |