fix(console): testMode auth — X-Auth-Token accepted as sub v0.8.1
This commit is contained in:
+27
-12
@@ -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())
|
||||
|
||||
Reference in New Issue
Block a user