mirror of
https://github.com/pocket-id/pocket-id.git
synced 2026-07-17 16:29:55 +00:00
65 lines
2.2 KiB
Go
65 lines
2.2 KiB
Go
package controller
|
|
|
|
import (
|
|
"context"
|
|
"net/http"
|
|
"time"
|
|
|
|
"github.com/danielgtaylor/huma/v2"
|
|
|
|
"github.com/pocket-id/pocket-id/backend/internal/common"
|
|
"github.com/pocket-id/pocket-id/backend/internal/middleware"
|
|
"github.com/pocket-id/pocket-id/backend/internal/service"
|
|
"github.com/pocket-id/pocket-id/backend/internal/utils"
|
|
httpapi "github.com/pocket-id/pocket-id/backend/internal/utils/huma"
|
|
)
|
|
|
|
type versionOutput struct {
|
|
CacheControl string `header:"Cache-Control"`
|
|
Body map[string]string
|
|
}
|
|
|
|
// NewVersionController registers version-related routes
|
|
func NewVersionController(api huma.API, authMiddleware *middleware.AuthMiddleware, versionService *service.VersionService) {
|
|
vc := &VersionController{versionService: versionService}
|
|
|
|
httpapi.Register(api, huma.Operation{
|
|
OperationID: "get-latest-version",
|
|
Method: http.MethodGet,
|
|
Path: "/api/version/latest",
|
|
Summary: "Get latest available version of Pocket ID",
|
|
Tags: []string{"Version"},
|
|
}, vc.getLatestVersionHandler)
|
|
|
|
currentOperation := huma.Operation{
|
|
OperationID: "get-current-version",
|
|
Method: http.MethodGet,
|
|
Path: "/api/version/current",
|
|
Summary: "Get current deployed version of Pocket ID",
|
|
Tags: []string{"Version"},
|
|
}
|
|
authMiddleware.WithAdminNotRequired().Huma(api)(¤tOperation)
|
|
httpapi.Register(api, currentOperation, vc.getCurrentVersionHandler)
|
|
}
|
|
|
|
type VersionController struct {
|
|
versionService *service.VersionService
|
|
}
|
|
|
|
func (vc *VersionController) getLatestVersionHandler(ctx context.Context, _ *httpapi.EmptyInput) (*versionOutput, error) {
|
|
tag, err := vc.versionService.GetLatestVersion(ctx)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
cacheControl := ""
|
|
if !httpapi.QueryPresent(ctx, "skipCache") {
|
|
cacheControl = utils.CacheControlValue(5*time.Minute, 15*time.Minute)
|
|
}
|
|
return &versionOutput{CacheControl: cacheControl, Body: map[string]string{"latestVersion": tag}}, nil
|
|
}
|
|
|
|
func (vc *VersionController) getCurrentVersionHandler(_ context.Context, _ *httpapi.EmptyInput) (*httpapi.BodyOutput[map[string]string], error) {
|
|
return &httpapi.BodyOutput[map[string]string]{Body: map[string]string{"currentVersion": common.Version}}, nil
|
|
}
|