cursor_auth_manager.py 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. import sqlite3
  2. import os
  3. import sys
  4. class CursorAuthManager:
  5. """Cursor认证信息管理器"""
  6. def __init__(self):
  7. # 判断操作系统
  8. if sys.platform == "win32": # Windows
  9. appdata = os.getenv("APPDATA")
  10. if appdata is None:
  11. raise EnvironmentError("APPDATA 环境变量未设置")
  12. self.db_path = os.path.join(
  13. appdata, "Cursor", "User", "globalStorage", "state.vscdb"
  14. )
  15. elif sys.platform == "darwin": # macOS
  16. self.db_path = os.path.abspath(os.path.expanduser(
  17. "~/Library/Application Support/Cursor/User/globalStorage/state.vscdb"
  18. ))
  19. elif sys.platform == "linux" : # Linux 和其他类Unix系统
  20. self.db_path = os.path.abspath(os.path.expanduser(
  21. "~/.config/Cursor/User/globalStorage/state.vscdb"
  22. ))
  23. else:
  24. raise NotImplementedError(f"不支持的操作系统: {sys.platform}")
  25. def update_auth(self, email=None, access_token=None, refresh_token=None):
  26. """
  27. 更新Cursor的认证信息
  28. :param email: 新的邮箱地址
  29. :param access_token: 新的访问令牌
  30. :param refresh_token: 新的刷新令牌
  31. :return: bool 是否成功更新
  32. """
  33. updates = []
  34. # 登录状态
  35. updates.append(("cursorAuth/cachedSignUpType", "Auth_0"))
  36. if email is not None:
  37. updates.append(("cursorAuth/cachedEmail", email))
  38. if access_token is not None:
  39. updates.append(("cursorAuth/accessToken", access_token))
  40. if refresh_token is not None:
  41. updates.append(("cursorAuth/refreshToken", refresh_token))
  42. if not updates:
  43. print("没有提供任何要更新的值")
  44. return False
  45. conn = None
  46. try:
  47. conn = sqlite3.connect(self.db_path)
  48. cursor = conn.cursor()
  49. for key, value in updates:
  50. # 如果没有更新任何行,说明key不存在,执行插入
  51. # 检查 accessToken 是否存在
  52. check_query = f"SELECT COUNT(*) FROM itemTable WHERE key = ?"
  53. cursor.execute(check_query, (key,))
  54. if cursor.fetchone()[0] == 0:
  55. insert_query = "INSERT INTO itemTable (key, value) VALUES (?, ?)"
  56. cursor.execute(insert_query, (key, value))
  57. else:
  58. update_query = "UPDATE itemTable SET value = ? WHERE key = ?"
  59. cursor.execute(update_query, (value, key))
  60. if cursor.rowcount > 0:
  61. print(f"成功更新 {key.split('/')[-1]}")
  62. else:
  63. print(f"未找到 {key.split('/')[-1]} 或值未变化")
  64. conn.commit()
  65. return True
  66. except sqlite3.Error as e:
  67. print("数据库错误:", str(e))
  68. return False
  69. except Exception as e:
  70. print("发生错误:", str(e))
  71. return False
  72. finally:
  73. if conn:
  74. conn.close()