| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- package service
- import (
- "context"
- "log/slog"
- "strings"
- "time"
- "github.com/Wei-Shaw/sub2api/internal/pkg/antigravity"
- )
- const (
- AntigravityPrivacySet = "privacy_set"
- AntigravityPrivacyFailed = "privacy_set_failed"
- )
- // setAntigravityPrivacy 调用 Antigravity API 设置隐私并验证结果。
- // 流程:
- // 1. setUserSettings 清空设置 → 检查返回值 {"userSettings":{}}
- // 2. fetchUserInfo 二次验证隐私是否已生效(需要 project_id)
- //
- // 返回 privacy_mode 值:"privacy_set" 成功,"privacy_set_failed" 失败,空串表示无法执行。
- func setAntigravityPrivacy(ctx context.Context, accessToken, projectID, proxyURL string) string {
- if accessToken == "" {
- return ""
- }
- ctx, cancel := context.WithTimeout(ctx, 10*time.Second)
- defer cancel()
- client, err := antigravity.NewClient(proxyURL)
- if err != nil {
- slog.Warn("antigravity_privacy_client_error", "error", err.Error())
- return AntigravityPrivacyFailed
- }
- // 第 1 步:调用 setUserSettings,检查返回值
- setResp, err := client.SetUserSettings(ctx, accessToken)
- if err != nil {
- slog.Warn("antigravity_privacy_set_failed", "error", err.Error())
- return AntigravityPrivacyFailed
- }
- if !setResp.IsSuccess() {
- slog.Warn("antigravity_privacy_set_response_not_empty",
- "user_settings", setResp.UserSettings,
- )
- return AntigravityPrivacyFailed
- }
- // 第 2 步:调用 fetchUserInfo 二次验证隐私是否已生效
- if strings.TrimSpace(projectID) == "" {
- slog.Warn("antigravity_privacy_missing_project_id")
- return AntigravityPrivacyFailed
- }
- userInfo, err := client.FetchUserInfo(ctx, accessToken, projectID)
- if err != nil {
- slog.Warn("antigravity_privacy_verify_failed", "error", err.Error())
- return AntigravityPrivacyFailed
- }
- if !userInfo.IsPrivate() {
- slog.Warn("antigravity_privacy_verify_not_private",
- "user_settings", userInfo.UserSettings,
- )
- return AntigravityPrivacyFailed
- }
- slog.Info("antigravity_privacy_set_success")
- return AntigravityPrivacySet
- }
- func applyAntigravityPrivacyMode(account *Account, mode string) {
- if account == nil || strings.TrimSpace(mode) == "" {
- return
- }
- extra := make(map[string]any, len(account.Extra)+1)
- for k, v := range account.Extra {
- extra[k] = v
- }
- extra["privacy_mode"] = mode
- account.Extra = extra
- }
|