mirror of
https://github.com/warmbly/warmbly.git
synced 2026-09-05 08:01:23 +00:00
55 lines
1.8 KiB
Go
55 lines
1.8 KiB
Go
package handler
|
|
|
|
import (
|
|
"net/http"
|
|
"time"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
"github.com/warmbly/warmbly/internal/config"
|
|
"github.com/warmbly/warmbly/internal/version"
|
|
)
|
|
|
|
// InstanceVersion answers GET /v1/auth/instance for any signed-in member of a
|
|
// self-hosted instance: which Warmbly this is and whether a newer one exists.
|
|
// It carries no updater detail and no log; applying the update lives in the
|
|
// admin panel. Hosted deployments answer self_hosted=false and nothing else,
|
|
// so the dashboard has nothing to show there.
|
|
type instanceVersionResponse struct {
|
|
SelfHosted bool `json:"self_hosted"`
|
|
Version string `json:"version,omitempty"`
|
|
Commit string `json:"commit,omitempty"`
|
|
UpdateAvailable bool `json:"update_available"`
|
|
Latest *instanceLatestRelease `json:"latest,omitempty"`
|
|
CheckedAt *time.Time `json:"checked_at,omitempty"`
|
|
}
|
|
|
|
type instanceLatestRelease struct {
|
|
Tag string `json:"tag"`
|
|
HTMLURL string `json:"html_url,omitempty"`
|
|
PublishedAt time.Time `json:"published_at,omitempty"`
|
|
}
|
|
|
|
func (h *Handler) InstanceVersion(c *gin.Context) {
|
|
if !config.SelfHosted() {
|
|
c.JSON(http.StatusOK, instanceVersionResponse{SelfHosted: false})
|
|
return
|
|
}
|
|
resp := instanceVersionResponse{
|
|
SelfHosted: true,
|
|
Version: version.String(),
|
|
Commit: version.ShortCommit(),
|
|
}
|
|
if h.UpdatesService != nil {
|
|
st := h.UpdatesService.State(c.Request.Context(), false)
|
|
resp.UpdateAvailable = st.UpdateAvailable
|
|
if st.Latest != nil {
|
|
resp.Latest = &instanceLatestRelease{Tag: st.Latest.Tag, HTMLURL: st.Latest.HTMLURL, PublishedAt: st.Latest.PublishedAt}
|
|
}
|
|
if !st.CheckedAt.IsZero() {
|
|
t := st.CheckedAt
|
|
resp.CheckedAt = &t
|
|
}
|
|
}
|
|
c.JSON(http.StatusOK, resp)
|
|
}
|