diff --git a/internal/models/html.go b/internal/models/html.go index fc8d8681f..41aa1d633 100644 --- a/internal/models/html.go +++ b/internal/models/html.go @@ -3,7 +3,10 @@ package models // HTMLData is a list of HTML fields to be rendered. // It is exported so that the HTML template engine can render it. type HTMLData struct { - Rows []HTMLRow + Rows []HTMLRow + Version string + UpdateAvailable bool + LatestVersion string } // HTMLRow contains HTML fields to be rendered diff --git a/internal/provider/providers/porkbun/provider.go b/internal/provider/providers/porkbun/provider.go index 45d32534a..a2702fde4 100644 --- a/internal/provider/providers/porkbun/provider.go +++ b/internal/provider/providers/porkbun/provider.go @@ -103,7 +103,7 @@ func (p *Provider) HTML() models.HTMLRow { return models.HTMLRow{ Domain: fmt.Sprintf("%s", p.BuildDomainName(), p.BuildDomainName()), Owner: p.Owner(), - Provider: "Porkbun DNS", + Provider: "Porkbun", IPVersion: p.ipVersion.String(), } } diff --git a/internal/server/index.go b/internal/server/index.go index 090721572..ca3c09a1f 100644 --- a/internal/server/index.go +++ b/internal/server/index.go @@ -12,7 +12,20 @@ func (h *handlers) index(w http.ResponseWriter, _ *http.Request) { row := record.HTML(h.timeNow()) htmlData.Rows = append(htmlData.Rows, row) } - err := h.indexTemplate.ExecuteTemplate(w, "index.html", htmlData) + + currentVersion := getCurrentVersion() + latestVersion, err := getLatestRelease() + if err != nil { + httpError(w, http.StatusInternalServerError, "failed getting latest release: "+err.Error()) + return + } + htmlData.Version = currentVersion + if currentVersion != latestVersion { + htmlData.UpdateAvailable = true + htmlData.LatestVersion = latestVersion + } + + err = h.indexTemplate.ExecuteTemplate(w, "index.html", htmlData) if err != nil { httpError(w, http.StatusInternalServerError, "failed generating webpage: "+err.Error()) } diff --git a/internal/server/ui/index.html b/internal/server/ui/index.html index 92c88fbfb..ccde52d7d 100644 --- a/internal/server/ui/index.html +++ b/internal/server/ui/index.html @@ -48,6 +48,8 @@ +
{{.Version}} {{if .UpdateAvailable}} (Update Available: {{.LatestVersion}}){{end}}
by Quentin McGaw / UI reworked by Gottfried Mayer
diff --git a/internal/server/version.go b/internal/server/version.go new file mode 100644 index 000000000..2608cfcf1 --- /dev/null +++ b/internal/server/version.go @@ -0,0 +1,31 @@ +package server + +import ( + "encoding/json" + "net/http" +) + +type GitHubRelease struct { + TagName string `json:"tag_name"` +} + +func getLatestRelease() (string, error) { + resp, err := http.Get("https://api.github.com/repos/qdm12/ddns-updater/releases/latest") + if err != nil { + return "", err + } + defer resp.Body.Close() + + var release GitHubRelease + if err := json.NewDecoder(resp.Body).Decode(&release); err != nil { + return "", err + } + + return release.TagName, nil +} + +// Add a function to get the current version +func getCurrentVersion() string { + // Replace with actual logic to get the current version + return "v2.9.0" +}