diff --git a/console/main.go b/console/main.go index 5600794..9650d5b 100644 --- a/console/main.go +++ b/console/main.go @@ -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())