antigravity_privacy_service.go 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. package service
  2. import (
  3. "context"
  4. "log/slog"
  5. "strings"
  6. "time"
  7. "github.com/Wei-Shaw/sub2api/internal/pkg/antigravity"
  8. )
  9. const (
  10. AntigravityPrivacySet = "privacy_set"
  11. AntigravityPrivacyFailed = "privacy_set_failed"
  12. )
  13. // setAntigravityPrivacy 调用 Antigravity API 设置隐私并验证结果。
  14. // 流程:
  15. // 1. setUserSettings 清空设置 → 检查返回值 {"userSettings":{}}
  16. // 2. fetchUserInfo 二次验证隐私是否已生效(需要 project_id)
  17. //
  18. // 返回 privacy_mode 值:"privacy_set" 成功,"privacy_set_failed" 失败,空串表示无法执行。
  19. func setAntigravityPrivacy(ctx context.Context, accessToken, projectID, proxyURL string) string {
  20. if accessToken == "" {
  21. return ""
  22. }
  23. ctx, cancel := context.WithTimeout(ctx, 10*time.Second)
  24. defer cancel()
  25. client, err := antigravity.NewClient(proxyURL)
  26. if err != nil {
  27. slog.Warn("antigravity_privacy_client_error", "error", err.Error())
  28. return AntigravityPrivacyFailed
  29. }
  30. // 第 1 步:调用 setUserSettings,检查返回值
  31. setResp, err := client.SetUserSettings(ctx, accessToken)
  32. if err != nil {
  33. slog.Warn("antigravity_privacy_set_failed", "error", err.Error())
  34. return AntigravityPrivacyFailed
  35. }
  36. if !setResp.IsSuccess() {
  37. slog.Warn("antigravity_privacy_set_response_not_empty",
  38. "user_settings", setResp.UserSettings,
  39. )
  40. return AntigravityPrivacyFailed
  41. }
  42. // 第 2 步:调用 fetchUserInfo 二次验证隐私是否已生效
  43. if strings.TrimSpace(projectID) == "" {
  44. slog.Warn("antigravity_privacy_missing_project_id")
  45. return AntigravityPrivacyFailed
  46. }
  47. userInfo, err := client.FetchUserInfo(ctx, accessToken, projectID)
  48. if err != nil {
  49. slog.Warn("antigravity_privacy_verify_failed", "error", err.Error())
  50. return AntigravityPrivacyFailed
  51. }
  52. if !userInfo.IsPrivate() {
  53. slog.Warn("antigravity_privacy_verify_not_private",
  54. "user_settings", userInfo.UserSettings,
  55. )
  56. return AntigravityPrivacyFailed
  57. }
  58. slog.Info("antigravity_privacy_set_success")
  59. return AntigravityPrivacySet
  60. }
  61. func applyAntigravityPrivacyMode(account *Account, mode string) {
  62. if account == nil || strings.TrimSpace(mode) == "" {
  63. return
  64. }
  65. extra := make(map[string]any, len(account.Extra)+1)
  66. for k, v := range account.Extra {
  67. extra[k] = v
  68. }
  69. extra["privacy_mode"] = mode
  70. account.Extra = extra
  71. }