| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- package service
- import (
- "context"
- "time"
- )
- type GeminiTokenRefresher struct {
- geminiOAuthService *GeminiOAuthService
- }
- func NewGeminiTokenRefresher(geminiOAuthService *GeminiOAuthService) *GeminiTokenRefresher {
- return &GeminiTokenRefresher{geminiOAuthService: geminiOAuthService}
- }
- // CacheKey 返回用于分布式锁的缓存键
- func (r *GeminiTokenRefresher) CacheKey(account *Account) string {
- return GeminiTokenCacheKey(account)
- }
- func (r *GeminiTokenRefresher) CanRefresh(account *Account) bool {
- return account.Platform == PlatformGemini && account.Type == AccountTypeOAuth
- }
- func (r *GeminiTokenRefresher) NeedsRefresh(account *Account, refreshWindow time.Duration) bool {
- if !r.CanRefresh(account) {
- return false
- }
- expiresAt := account.GetCredentialAsTime("expires_at")
- if expiresAt == nil {
- return false
- }
- return time.Until(*expiresAt) < refreshWindow
- }
- func (r *GeminiTokenRefresher) Refresh(ctx context.Context, account *Account) (map[string]any, error) {
- tokenInfo, err := r.geminiOAuthService.RefreshAccountToken(ctx, account)
- if err != nil {
- return nil, err
- }
- newCredentials := r.geminiOAuthService.BuildAccountCredentials(tokenInfo)
- newCredentials = MergeCredentials(account.Credentials, newCredentials)
- return newCredentials, nil
- }
|