boxdd: Add insecure mode

This commit is contained in:
世界
2026-08-30 17:41:43 +08:00
parent b4600dd4f7
commit 0a4e4c8061
60 changed files with 1055 additions and 285 deletions
+6 -4
View File
@@ -2,6 +2,7 @@ package ccm
import (
"bytes"
"context"
"encoding/json"
"io"
"net/http"
@@ -11,6 +12,7 @@ import (
"time"
E "github.com/sagernet/sing/common/exceptions"
"github.com/sagernet/sing/service/filemanager"
)
const (
@@ -42,8 +44,8 @@ func getDefaultCredentialsPath() (string, error) {
return filepath.Join(userInfo.HomeDir, ".claude", ".credentials.json"), nil
}
func readCredentialsFromFile(path string) (*oauthCredentials, error) {
data, err := os.ReadFile(path)
func readCredentialsFromFile(ctx context.Context, path string) (*oauthCredentials, error) {
data, err := filemanager.ReadFile(ctx, path)
if err != nil {
return nil, err
}
@@ -60,14 +62,14 @@ func readCredentialsFromFile(path string) (*oauthCredentials, error) {
return credentialsContainer.ClaudeAIAuth, nil
}
func writeCredentialsToFile(oauthCredentials *oauthCredentials, path string) error {
func writeCredentialsToFile(ctx context.Context, oauthCredentials *oauthCredentials, path string) error {
data, err := json.MarshalIndent(map[string]any{
"claudeAiOauth": oauthCredentials,
}, "", " ")
if err != nil {
return err
}
return os.WriteFile(path, data, 0o600)
return filemanager.WriteFile(ctx, path, data, 0o600)
}
type oauthCredentials struct {
+7 -6
View File
@@ -3,6 +3,7 @@
package ccm
import (
"context"
"crypto/sha256"
"encoding/hex"
"encoding/json"
@@ -33,9 +34,9 @@ func getKeychainServiceName() string {
return "Claude Code-credentials-" + hex.EncodeToString(hash[:])[:8]
}
func platformReadCredentials(customPath string) (*oauthCredentials, error) {
func platformReadCredentials(ctx context.Context, customPath string) (*oauthCredentials, error) {
if customPath != "" {
return readCredentialsFromFile(customPath)
return readCredentialsFromFile(ctx, customPath)
}
userInfo, err := getRealUser()
@@ -66,12 +67,12 @@ func platformReadCredentials(customPath string) (*oauthCredentials, error) {
if err != nil {
return nil, err
}
return readCredentialsFromFile(defaultPath)
return readCredentialsFromFile(ctx, defaultPath)
}
func platformWriteCredentials(oauthCredentials *oauthCredentials, customPath string) error {
func platformWriteCredentials(ctx context.Context, oauthCredentials *oauthCredentials, customPath string) error {
if customPath != "" {
return writeCredentialsToFile(oauthCredentials, customPath)
return writeCredentialsToFile(ctx, oauthCredentials, customPath)
}
userInfo, err := getRealUser()
@@ -112,5 +113,5 @@ func platformWriteCredentials(oauthCredentials *oauthCredentials, customPath str
if err != nil {
return err
}
return writeCredentialsToFile(oauthCredentials, defaultPath)
return writeCredentialsToFile(ctx, oauthCredentials, defaultPath)
}
+6 -4
View File
@@ -2,7 +2,9 @@
package ccm
func platformReadCredentials(customPath string) (*oauthCredentials, error) {
import "context"
func platformReadCredentials(ctx context.Context, customPath string) (*oauthCredentials, error) {
if customPath == "" {
var err error
customPath, err = getDefaultCredentialsPath()
@@ -10,10 +12,10 @@ func platformReadCredentials(customPath string) (*oauthCredentials, error) {
return nil, err
}
}
return readCredentialsFromFile(customPath)
return readCredentialsFromFile(ctx, customPath)
}
func platformWriteCredentials(oauthCredentials *oauthCredentials, customPath string) error {
func platformWriteCredentials(ctx context.Context, oauthCredentials *oauthCredentials, customPath string) error {
if customPath == "" {
var err error
customPath, err = getDefaultCredentialsPath()
@@ -21,5 +23,5 @@ func platformWriteCredentials(oauthCredentials *oauthCredentials, customPath str
return err
}
}
return writeCredentialsToFile(oauthCredentials, customPath)
return writeCredentialsToFile(ctx, oauthCredentials, customPath)
}
+3 -2
View File
@@ -160,6 +160,7 @@ func NewService(ctx context.Context, logger log.ContextLogger, tag string, optio
usageTracker = &AggregatedUsage{
LastUpdated: time.Now(),
Combinations: make([]CostCombination, 0),
ctx: ctx,
filePath: options.UsagesPath,
logger: logger,
}
@@ -201,7 +202,7 @@ func (s *Service) Start(stage adapter.StartStage) error {
s.userManager.UpdateUsers(s.users)
credentials, err := platformReadCredentials(s.credentialPath)
credentials, err := platformReadCredentials(s.ctx, s.credentialPath)
if err != nil {
return E.Cause(err, "read credentials")
}
@@ -271,7 +272,7 @@ func (s *Service) getAccessToken() (string, error) {
s.credentials = newCredentials
err = platformWriteCredentials(newCredentials, s.credentialPath)
err = platformWriteCredentials(s.ctx, newCredentials, s.credentialPath)
if err != nil {
s.logger.Warn("persist refreshed token: ", err)
}
+7 -4
View File
@@ -1,6 +1,7 @@
package ccm
import (
"context"
"encoding/json"
"fmt"
"math"
@@ -11,6 +12,7 @@ import (
"github.com/sagernet/sing-box/log"
E "github.com/sagernet/sing/common/exceptions"
"github.com/sagernet/sing/service/filemanager"
)
type UsageStats struct {
@@ -36,6 +38,7 @@ type AggregatedUsage struct {
LastUpdated time.Time `json:"last_updated"`
Combinations []CostCombination `json:"combinations"`
mutex sync.Mutex
ctx context.Context
filePath string
logger log.ContextLogger
lastSaveTime time.Time
@@ -567,7 +570,7 @@ func (u *AggregatedUsage) Load() error {
u.LastUpdated = time.Time{}
u.Combinations = nil
data, err := os.ReadFile(u.filePath)
data, err := filemanager.ReadFile(u.ctx, u.filePath)
if err != nil {
if os.IsNotExist(err) {
return nil
@@ -601,12 +604,12 @@ func (u *AggregatedUsage) Save() error {
}
tmpFile := u.filePath + ".tmp"
err = os.WriteFile(tmpFile, data, 0o644)
err = filemanager.WriteFile(u.ctx, tmpFile, data, 0o644)
if err != nil {
return err
}
defer os.Remove(tmpFile)
err = os.Rename(tmpFile, u.filePath)
defer filemanager.Remove(u.ctx, tmpFile)
err = filemanager.Rename(u.ctx, tmpFile, u.filePath)
if err == nil {
u.saveMutex.Lock()
u.lastSaveTime = time.Now()