mirror of
https://github.com/router-for-me/CLIProxyAPIPlus.git
synced 2026-03-30 01:06:39 +00:00
66 lines
2.5 KiB
Go
66 lines
2.5 KiB
Go
// Package codebuddy provides authentication and token management functionality
|
|
// for CodeBuddy AI services. It handles OAuth2 token storage, serialization,
|
|
// and retrieval for maintaining authenticated sessions with the CodeBuddy API.
|
|
package codebuddy
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"os"
|
|
"path/filepath"
|
|
|
|
"github.com/router-for-me/CLIProxyAPI/v6/internal/misc"
|
|
)
|
|
|
|
// CodeBuddyTokenStorage stores OAuth token information for CodeBuddy API authentication.
|
|
// It maintains compatibility with the existing auth system while adding CodeBuddy-specific fields
|
|
// for managing access tokens and user account information.
|
|
type CodeBuddyTokenStorage struct {
|
|
// AccessToken is the OAuth2 access token used for authenticating API requests.
|
|
AccessToken string `json:"access_token"`
|
|
// RefreshToken is the OAuth2 refresh token used to obtain new access tokens.
|
|
RefreshToken string `json:"refresh_token"`
|
|
// ExpiresIn is the number of seconds until the access token expires.
|
|
ExpiresIn int64 `json:"expires_in"`
|
|
// RefreshExpiresIn is the number of seconds until the refresh token expires.
|
|
RefreshExpiresIn int64 `json:"refresh_expires_in,omitempty"`
|
|
// TokenType is the type of token, typically "bearer".
|
|
TokenType string `json:"token_type"`
|
|
// Domain is the CodeBuddy service domain/region.
|
|
Domain string `json:"domain"`
|
|
// UserID is the user ID associated with this token.
|
|
UserID string `json:"user_id"`
|
|
// Type indicates the authentication provider type, always "codebuddy" for this storage.
|
|
Type string `json:"type"`
|
|
}
|
|
|
|
// SaveTokenToFile serializes the CodeBuddy token storage to a JSON file.
|
|
// This method creates the necessary directory structure and writes the token
|
|
// data in JSON format to the specified file path for persistent storage.
|
|
//
|
|
// Parameters:
|
|
// - authFilePath: The full path where the token file should be saved
|
|
//
|
|
// Returns:
|
|
// - error: An error if the operation fails, nil otherwise
|
|
func (s *CodeBuddyTokenStorage) SaveTokenToFile(authFilePath string) error {
|
|
misc.LogSavingCredentials(authFilePath)
|
|
s.Type = "codebuddy"
|
|
if err := os.MkdirAll(filepath.Dir(authFilePath), 0700); err != nil {
|
|
return fmt.Errorf("failed to create directory: %w", err)
|
|
}
|
|
|
|
f, err := os.OpenFile(authFilePath, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0600)
|
|
if err != nil {
|
|
return fmt.Errorf("failed to create token file: %w", err)
|
|
}
|
|
defer func() {
|
|
_ = f.Close()
|
|
}()
|
|
|
|
if err = json.NewEncoder(f).Encode(s); err != nil {
|
|
return fmt.Errorf("failed to write token to file: %w", err)
|
|
}
|
|
return nil
|
|
}
|