fix(console): testMode auth — X-Auth-Token accepted as sub v0.8.1

This commit is contained in:
Naeel
2026-04-20 15:09:49 +03:00
parent 9997dce2bb
commit d76aa53f73
+27 -12
View File
@@ -10,12 +10,12 @@ import (
"encoding/json"
"errors"
"fmt"
"go/parser"
"go/token"
"io"
"log"
"net"
"net/http"
"go/parser"
"go/token"
"os"
"os/exec"
"regexp"
@@ -174,8 +174,11 @@ func main() {
if s.testMode {
// TEST_MODE: deck API не вызывается.
// X-Test-Sub задаёт произвольный sub → разные namespace-ы для тестирования.
// X-Test-Sub или X-Auth-Token задают sub → разные namespace-ы для тестирования.
sub := strings.TrimSpace(r.Header.Get("X-Test-Sub"))
if sub == "" {
sub = strings.TrimSpace(r.Header.Get("X-Auth-Token"))
}
if sub == "" {
writeJSONError(w, http.StatusUnauthorized, "test mode: X-Test-Sub required")
return
@@ -1450,14 +1453,24 @@ func (s *server) handleAuth(w http.ResponseWriter, r *http.Request) {
if _, ok := deckAPIs[env]; !ok {
env = "test"
}
if err := s.validateDeckToken(body.Token, env); err != nil {
writeJSONError(w, http.StatusUnauthorized, "invalid token")
return
}
ns, err := namespaceFromJWT(body.Token)
if err != nil {
log.Printf("handleAuth: namespaceFromJWT: %v", err)
ns = s.ns
var ns string
if s.testMode {
// testMode: токен — это sub (email), Deck не вызывается
ns = func() string {
h32 := sha256.Sum256([]byte(body.Token))
return "fission-" + hex.EncodeToString(h32[:8])
}()
} else {
if err := s.validateDeckToken(body.Token, env); err != nil {
writeJSONError(w, http.StatusUnauthorized, "invalid token")
return
}
var err error
ns, err = namespaceFromJWT(body.Token)
if err != nil {
log.Printf("handleAuth: namespaceFromJWT: %v", err)
ns = s.ns
}
}
ctx, cancel := context.WithTimeout(r.Context(), 10*time.Second)
defer cancel()
@@ -1966,7 +1979,9 @@ func (s *server) handleAIAsk(w http.ResponseWriter, r *http.Request) {
Content string `json:"content"`
} `json:"message"`
} `json:"choices"`
Error *struct{ Message string `json:"message"` } `json:"error"`
Error *struct {
Message string `json:"message"`
} `json:"error"`
}
if err := json.NewDecoder(io.LimitReader(resp.Body, 64*1024)).Decode(&llmResp); err != nil {
writeJSONError(w, http.StatusBadGateway, "parse error: "+err.Error())