mirror of
https://github.com/router-for-me/CLIProxyAPI.git
synced 2026-02-03 13:00:52 +08:00
feat(api): add id token claims extraction for codex auth entries
This commit is contained in:
@@ -427,9 +427,59 @@ func (h *Handler) buildAuthFileEntry(auth *coreauth.Auth) gin.H {
|
|||||||
log.WithError(err).Warnf("failed to stat auth file %s", path)
|
log.WithError(err).Warnf("failed to stat auth file %s", path)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if claims := extractCodexIDTokenClaims(auth); claims != nil {
|
||||||
|
entry["id_token"] = claims
|
||||||
|
}
|
||||||
return entry
|
return entry
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func extractCodexIDTokenClaims(auth *coreauth.Auth) gin.H {
|
||||||
|
if auth == nil || auth.Metadata == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
if !strings.EqualFold(strings.TrimSpace(auth.Provider), "codex") {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
idTokenRaw, ok := auth.Metadata["id_token"].(string)
|
||||||
|
if !ok {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
idToken := strings.TrimSpace(idTokenRaw)
|
||||||
|
if idToken == "" {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
claims, err := codex.ParseJWTToken(idToken)
|
||||||
|
if err != nil || claims == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
result := gin.H{}
|
||||||
|
if v := strings.TrimSpace(claims.CodexAuthInfo.ChatgptPlanType); v != "" {
|
||||||
|
result["plan_type"] = v
|
||||||
|
}
|
||||||
|
if v := strings.TrimSpace(claims.CodexAuthInfo.UserID); v != "" {
|
||||||
|
result["user_id"] = v
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(claims.CodexAuthInfo.Organizations) > 0 {
|
||||||
|
orgs := make([]gin.H, 0, len(claims.CodexAuthInfo.Organizations))
|
||||||
|
for _, org := range claims.CodexAuthInfo.Organizations {
|
||||||
|
orgs = append(orgs, gin.H{
|
||||||
|
"id": strings.TrimSpace(org.ID),
|
||||||
|
"title": strings.TrimSpace(org.Title),
|
||||||
|
"role": strings.TrimSpace(org.Role),
|
||||||
|
"is_default": org.IsDefault,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
result["organizations"] = orgs
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(result) == 0 {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
func authEmail(auth *coreauth.Auth) string {
|
func authEmail(auth *coreauth.Auth) string {
|
||||||
if auth == nil {
|
if auth == nil {
|
||||||
return ""
|
return ""
|
||||||
|
|||||||
Reference in New Issue
Block a user