Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 38 additions & 0 deletions harnesses/metadata-coverage/cmd/script/defined_auth.go
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,33 @@ func decodeJWTExpiration(token string) (time.Time, error) {
return time.Unix(claims.Exp, 0), nil
}

// tryTokenService fetches a fresh JWE from the Paris-box sidecar.
func tryTokenService(baseURL string) (string, error) {
client := &http.Client{Timeout: 5 * time.Second}
for _, path := range []string{"/token", "/jwt", "/"} {
resp, err := client.Get(baseURL + path)
if err != nil {
continue
}
body, _ := io.ReadAll(resp.Body)
resp.Body.Close()
if resp.StatusCode != 200 {
continue
}
var parsed struct {
Token string `json:"token"`
}
if err := json.Unmarshal(body, &parsed); err == nil && parsed.Token != "" {
return parsed.Token, nil
}
s := strings.TrimSpace(string(body))
if len(s) > 50 {
return s, nil
}
}
return "", fmt.Errorf("no working path on sidecar")
}

// GetDefinedJWTToken returns a cached JWT token or generates a new one if expired.
// If CODEX_JWT env var is set, it is returned directly (bypasses session-cookie flow).
func GetDefinedJWTToken(sessionCookie string) (string, error) {
Expand All @@ -84,6 +111,17 @@ func GetDefinedJWTToken(sessionCookie string) (string, error) {
return globalTokenCache.token, nil
}

// Sidecar (Paris box, fresh every 8 min via Tor+utls, bypasses Kasada)
if svcURL := os.Getenv("DEFINED_TOKEN_SERVICE_URL"); svcURL != "" {
if tok, err := tryTokenService(svcURL); err == nil && tok != "" {
fmt.Printf("[DEFINED-AUTH] Got token from sidecar (len=%d)\n", len(tok))
globalTokenCache.token = tok
globalTokenCache.expiresAt = time.Now().Add(8 * time.Minute)
globalTokenCache.lastRefresh = time.Now()
return tok, nil
}
}

// Generate new token
token, err := generateDefinedJWTToken(sessionCookie)
if err != nil {
Expand Down
38 changes: 38 additions & 0 deletions harnesses/pm-rate-limits/cmd/script/codex_auth.go
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,18 @@ func GetCodexJWT(sessionCookie string) (string, error) {
if codexTokenCache.token != "" && time.Now().Before(codexTokenCache.expiresAt.Add(-1*time.Hour)) {
return codexTokenCache.token, nil
}

// Sidecar (Paris box, fresh every 8 min via Tor+utls, bypasses Kasada)
if svcURL := os.Getenv("DEFINED_TOKEN_SERVICE_URL"); svcURL != "" {
if tok, err := tryTokenService(svcURL); err == nil && tok != "" {
log.Printf("[codex-auth] Got token from sidecar (len=%d)", len(tok))
codexTokenCache.token = tok
codexTokenCache.expiresAt = time.Now().Add(8 * time.Minute)
codexTokenCache.lastRefresh = time.Now()
return tok, nil
}
}

tok, err := mintCodexJWT(sessionCookie)
if err != nil {
return "", err
Expand All @@ -101,6 +113,32 @@ func InvalidateCodexJWT() {
log.Printf("[codex-auth] JWT cache invalidated")
}

func tryTokenService(baseURL string) (string, error) {
client := &http.Client{Timeout: 5 * time.Second}
for _, path := range []string{"/token", "/jwt", "/"} {
resp, err := client.Get(baseURL + path)
if err != nil {
continue
}
body, _ := io.ReadAll(resp.Body)
resp.Body.Close()
if resp.StatusCode != 200 {
continue
}
var parsed struct {
Token string `json:"token"`
}
if err := json.Unmarshal(body, &parsed); err == nil && parsed.Token != "" {
return parsed.Token, nil
}
s := strings.TrimSpace(string(body))
if len(s) > 50 {
return s, nil
}
}
return "", fmt.Errorf("no working path on sidecar")
}

func mintCodexJWT(sessionCookie string) (string, error) {
// CRITICAL: route through HTTP_PROXY / HTTPS_PROXY (Webshare). Direct
// Railway IPs get stuck in Vercel's bot-ban loop after a few mints.
Expand Down
Loading