76 lines
2.3 KiB
Go
76 lines
2.3 KiB
Go
package executor
|
|
|
|
import (
|
|
"context"
|
|
"net/http"
|
|
"strings"
|
|
"time"
|
|
|
|
xaiauth "github.com/router-for-me/CLIProxyAPI/v7/internal/auth/xai"
|
|
"github.com/router-for-me/CLIProxyAPI/v7/internal/runtime/executor/helps"
|
|
cliproxyauth "github.com/router-for-me/CLIProxyAPI/v7/sdk/cliproxy/auth"
|
|
log "github.com/sirupsen/logrus"
|
|
)
|
|
|
|
// Refresh refreshes xAI OAuth credentials using the stored refresh token.
|
|
func (e *XAIExecutor) Refresh(ctx context.Context, auth *cliproxyauth.Auth) (*cliproxyauth.Auth, error) {
|
|
log.Debugf("xai executor: refresh called")
|
|
if refreshed, handled, err := helps.RefreshAuthViaHome(ctx, e.cfg, auth); handled {
|
|
return refreshed, err
|
|
}
|
|
if auth == nil {
|
|
return nil, statusErr{code: http.StatusInternalServerError, msg: "xai executor: auth is nil"}
|
|
}
|
|
refreshToken := xaiMetadataString(auth.Metadata, "refresh_token")
|
|
if refreshToken == "" {
|
|
return auth, nil
|
|
}
|
|
tokenEndpoint := xaiMetadataString(auth.Metadata, "token_endpoint")
|
|
svc := xaiauth.NewXAIAuthWithProxyURL(e.cfg, auth.ProxyURL)
|
|
td, err := svc.RefreshTokens(ctx, refreshToken, tokenEndpoint)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if auth.Metadata == nil {
|
|
auth.Metadata = make(map[string]any)
|
|
}
|
|
auth.Metadata["type"] = "xai"
|
|
auth.Metadata["auth_kind"] = "oauth"
|
|
auth.Metadata["access_token"] = td.AccessToken
|
|
if td.RefreshToken != "" {
|
|
auth.Metadata["refresh_token"] = td.RefreshToken
|
|
}
|
|
if td.IDToken != "" {
|
|
auth.Metadata["id_token"] = td.IDToken
|
|
}
|
|
if td.TokenType != "" {
|
|
auth.Metadata["token_type"] = td.TokenType
|
|
}
|
|
if td.ExpiresIn > 0 {
|
|
auth.Metadata["expires_in"] = td.ExpiresIn
|
|
}
|
|
if td.Expire != "" {
|
|
auth.Metadata["expired"] = td.Expire
|
|
}
|
|
if td.Email != "" {
|
|
auth.Metadata["email"] = td.Email
|
|
}
|
|
if td.Subject != "" {
|
|
auth.Metadata["sub"] = td.Subject
|
|
}
|
|
if tokenEndpoint != "" {
|
|
auth.Metadata["token_endpoint"] = tokenEndpoint
|
|
}
|
|
if xaiMetadataString(auth.Metadata, "base_url") == "" {
|
|
auth.Metadata["base_url"] = xaiauth.DefaultAPIBaseURL
|
|
}
|
|
auth.Metadata["last_refresh"] = time.Now().UTC().Format(time.RFC3339)
|
|
if auth.Attributes == nil {
|
|
auth.Attributes = make(map[string]string)
|
|
}
|
|
auth.Attributes["auth_kind"] = "oauth"
|
|
if strings.TrimSpace(auth.Attributes["base_url"]) == "" {
|
|
auth.Attributes["base_url"] = xaiauth.DefaultAPIBaseURL
|
|
}
|
|
return auth, nil
|
|
}
|