// Copyright (c) 2026 Petr BalvĂ­n (https://petrbalvin.org) // SPDX-License-Identifier: PolyForm-Noncommercial-1.0.0 package admin import ( "net/http" ) func (a *Admin) handleSettingsCheckUpdate(w http.ResponseWriter, r *http.Request) { if !a.requireCSRF(w, r) { return } if a.deps.CheckUpdate == nil { a.renderSettings(w, r, "", a.tr(r, "Update checks are not available in this build."), http.StatusOK) return } latest, err := a.deps.CheckUpdate() if err != nil { a.renderSettings(w, r, a.trf(r, "Update check failed: %s", err.Error()), "", http.StatusOK) return } // The hook returns "" when the running version is current, so the // comparison has already been made by the one implementation that // knows how to make it. if latest == "" { a.renderSettings(w, r, "", a.trf(r, "volumen %s is already the latest release.", a.deps.Version), http.StatusOK) return } a.renderSettings(w, r, "", a.trf(r, "volumen %s is available.", latest), http.StatusOK) } func (a *Admin) handleSettingsUpdate(w http.ResponseWriter, r *http.Request) { if !a.requireCSRF(w, r) { return } if a.deps.SelfUpdate == nil { a.renderSettings(w, r, a.tr(r, "Self-update is not available in this build."), "", http.StatusUnprocessableEntity) return } target, err := a.deps.SelfUpdate() if err != nil { message := a.trf(r, "The upgrade failed: %s", err.Error()) if target != "" { message = a.trf2(r, "Upgrade to %s failed: %s", target, err.Error()) } a.renderSettings(w, r, message, "", http.StatusInternalServerError) return } data := a.pageData(r) data.Target = target a.renderPage(w, r, "update.html", data, http.StatusOK) } // --- webhooks and tokens ----------------------------------------------------