more index cleanups to optimise space
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
2026-02-08 15:40:42 +11:00
parent a993aedf79
commit c66679a71f
13 changed files with 590 additions and 61 deletions

View File

@@ -3,21 +3,22 @@ package handler
import (
"fmt"
"net/http"
"os"
"strings"
)
const legacyAPIEnvVar = "VCTP_ENABLE_LEGACY_API"
const legacyAPISetting = "settings.enable_legacy_api"
func legacyAPIEnabled() bool {
return strings.TrimSpace(os.Getenv(legacyAPIEnvVar)) == "1"
func (h *Handler) legacyAPIEnabled() bool {
if h == nil || h.Settings == nil || h.Settings.Values == nil {
return false
}
return h.Settings.Values.Settings.EnableLegacyAPI
}
func (h *Handler) denyLegacyAPI(w http.ResponseWriter, endpoint string) bool {
if legacyAPIEnabled() {
if h.legacyAPIEnabled() {
return false
}
h.Logger.Warn("legacy endpoint request blocked", "endpoint", endpoint, "env_var", legacyAPIEnvVar)
writeJSONError(w, http.StatusGone, fmt.Sprintf("%s is deprecated and disabled; set %s=1 to temporarily re-enable", endpoint, legacyAPIEnvVar))
h.Logger.Warn("legacy endpoint request blocked", "endpoint", endpoint, "setting", legacyAPISetting)
writeJSONError(w, http.StatusGone, fmt.Sprintf("%s is deprecated and disabled; set %s=true to temporarily re-enable", endpoint, legacyAPISetting))
return true
}

View File

@@ -5,11 +5,20 @@ import (
"net/http/httptest"
"strings"
"testing"
"vctp/internal/settings"
)
func newLegacyGateHandler(enabled bool) *Handler {
cfg := &settings.Settings{Values: &settings.SettingsYML{}}
cfg.Values.Settings.EnableLegacyAPI = enabled
return &Handler{
Logger: newTestLogger(),
Settings: cfg,
}
}
func TestDenyLegacyAPIDisabledByDefault(t *testing.T) {
t.Setenv(legacyAPIEnvVar, "")
h := &Handler{Logger: newTestLogger()}
h := newLegacyGateHandler(false)
rr := httptest.NewRecorder()
denied := h.denyLegacyAPI(rr, "/api/event/vm/create")
@@ -24,14 +33,13 @@ func TestDenyLegacyAPIDisabledByDefault(t *testing.T) {
}
}
func TestDenyLegacyAPIEnabledViaEnv(t *testing.T) {
t.Setenv(legacyAPIEnvVar, "1")
h := &Handler{Logger: newTestLogger()}
func TestDenyLegacyAPIEnabledViaSettings(t *testing.T) {
h := newLegacyGateHandler(true)
rr := httptest.NewRecorder()
denied := h.denyLegacyAPI(rr, "/api/event/vm/create")
if denied {
t.Fatal("expected legacy API to be allowed when env var is set")
t.Fatal("expected legacy API to be allowed when setting is enabled")
}
if rr.Body.Len() != 0 {
t.Fatalf("expected no response body write, got: %s", rr.Body.String())
@@ -39,10 +47,8 @@ func TestDenyLegacyAPIEnabledViaEnv(t *testing.T) {
}
func TestVmCreateEventHonorsLegacyGate(t *testing.T) {
h := &Handler{Logger: newTestLogger()}
t.Run("disabled", func(t *testing.T) {
t.Setenv(legacyAPIEnvVar, "")
h := newLegacyGateHandler(false)
req := httptest.NewRequest(http.MethodPost, "/api/event/vm/create", strings.NewReader("{invalid"))
rr := httptest.NewRecorder()
h.VmCreateEvent(rr, req)
@@ -52,7 +58,7 @@ func TestVmCreateEventHonorsLegacyGate(t *testing.T) {
})
t.Run("enabled", func(t *testing.T) {
t.Setenv(legacyAPIEnvVar, "1")
h := newLegacyGateHandler(true)
req := httptest.NewRequest(http.MethodPost, "/api/event/vm/create", strings.NewReader("{invalid"))
rr := httptest.NewRecorder()
h.VmCreateEvent(rr, req)