mirror of
https://github.com/router-for-me/CLIProxyAPIPlus.git
synced 2026-03-07 22:33:30 +00:00
61 lines
1.7 KiB
Go
61 lines
1.7 KiB
Go
// Package kilo provides authentication and token management functionality
|
|
// for Kilo AI services.
|
|
package kilo
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"os"
|
|
"path/filepath"
|
|
|
|
"github.com/router-for-me/CLIProxyAPI/v6/internal/misc"
|
|
log "github.com/sirupsen/logrus"
|
|
)
|
|
|
|
// KiloTokenStorage stores token information for Kilo AI authentication.
|
|
type KiloTokenStorage struct {
|
|
// Token is the Kilo access token.
|
|
Token string `json:"kilocodeToken"`
|
|
|
|
// OrganizationID is the Kilo organization ID.
|
|
OrganizationID string `json:"kilocodeOrganizationId"`
|
|
|
|
// Model is the default model to use.
|
|
Model string `json:"kilocodeModel"`
|
|
|
|
// Email is the email address of the authenticated user.
|
|
Email string `json:"email"`
|
|
|
|
// Type indicates the authentication provider type, always "kilo" for this storage.
|
|
Type string `json:"type"`
|
|
}
|
|
|
|
// SaveTokenToFile serializes the Kilo token storage to a JSON file.
|
|
func (ts *KiloTokenStorage) SaveTokenToFile(authFilePath string) error {
|
|
misc.LogSavingCredentials(authFilePath)
|
|
ts.Type = "kilo"
|
|
if err := os.MkdirAll(filepath.Dir(authFilePath), 0700); err != nil {
|
|
return fmt.Errorf("failed to create directory: %v", err)
|
|
}
|
|
|
|
f, err := os.Create(authFilePath)
|
|
if err != nil {
|
|
return fmt.Errorf("failed to create token file: %w", err)
|
|
}
|
|
defer func() {
|
|
if errClose := f.Close(); errClose != nil {
|
|
log.Errorf("failed to close file: %v", errClose)
|
|
}
|
|
}()
|
|
|
|
if err = json.NewEncoder(f).Encode(ts); err != nil {
|
|
return fmt.Errorf("failed to write token to file: %w", err)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// CredentialFileName returns the filename used to persist Kilo credentials.
|
|
func CredentialFileName(email string) string {
|
|
return fmt.Sprintf("kilo-%s.json", email)
|
|
}
|