mirror of
https://github.com/yeongpin/cursor-free-vip.git
synced 2025-08-02 20:47:35 +08:00
113 lines
4.2 KiB
Python
113 lines
4.2 KiB
Python
import sqlite3
|
||
import os
|
||
import sys
|
||
from colorama import Fore, Style, init
|
||
|
||
# 初始化colorama
|
||
init()
|
||
|
||
# 定义emoji和颜色常量
|
||
EMOJI = {
|
||
'DB': '🗄️',
|
||
'UPDATE': '🔄',
|
||
'SUCCESS': '✅',
|
||
'ERROR': '❌',
|
||
'WARN': '⚠️',
|
||
'INFO': 'ℹ️',
|
||
'KEY': '🔑'
|
||
}
|
||
|
||
class CursorAuth:
|
||
def __init__(self):
|
||
# 判断操作系统
|
||
if os.name == "nt": # Windows
|
||
self.db_path = os.path.join(
|
||
os.getenv("APPDATA"), "Cursor", "User", "globalStorage", "state.vscdb"
|
||
)
|
||
else: # macOS
|
||
self.db_path = os.path.expanduser(
|
||
"~/Library/Application Support/Cursor/User/globalStorage/state.vscdb"
|
||
)
|
||
|
||
def update_auth(self, email=None, access_token=None, refresh_token=None):
|
||
conn = None
|
||
try:
|
||
# 确保目录存在并设置正确权限
|
||
db_dir = os.path.dirname(self.db_path)
|
||
if not os.path.exists(db_dir):
|
||
os.makedirs(db_dir, mode=0o755, exist_ok=True)
|
||
|
||
# 如果数据库文件不存在,创建一个新的
|
||
if not os.path.exists(self.db_path):
|
||
conn = sqlite3.connect(self.db_path)
|
||
cursor = conn.cursor()
|
||
cursor.execute('''
|
||
CREATE TABLE IF NOT EXISTS ItemTable (
|
||
key TEXT PRIMARY KEY,
|
||
value TEXT
|
||
)
|
||
''')
|
||
conn.commit()
|
||
if sys.platform != "win32":
|
||
os.chmod(self.db_path, 0o644)
|
||
conn.close()
|
||
|
||
# 重新连接数据库
|
||
conn = sqlite3.connect(self.db_path)
|
||
print(f"{EMOJI['INFO']} {Fore.GREEN}Successfully connected to database | 成功连接到数据库{Style.RESET_ALL}")
|
||
cursor = conn.cursor()
|
||
|
||
# 增加超时和其他优化设置
|
||
conn.execute("PRAGMA busy_timeout = 5000")
|
||
conn.execute("PRAGMA journal_mode = WAL")
|
||
conn.execute("PRAGMA synchronous = NORMAL")
|
||
|
||
# 设置要更新的键值对
|
||
updates = []
|
||
if email is not None:
|
||
updates.append(("cursorAuth/cachedEmail", email))
|
||
if access_token is not None:
|
||
updates.append(("cursorAuth/accessToken", access_token))
|
||
if refresh_token is not None:
|
||
updates.append(("cursorAuth/refreshToken", refresh_token))
|
||
updates.append(("cursorAuth/cachedSignUpType", "Auth_0"))
|
||
|
||
# 使用事务来确保数据完整性
|
||
cursor.execute("BEGIN TRANSACTION")
|
||
try:
|
||
for key, value in updates:
|
||
# 检查键是否存在
|
||
cursor.execute("SELECT COUNT(*) FROM ItemTable WHERE key = ?", (key,))
|
||
if cursor.fetchone()[0] == 0:
|
||
cursor.execute("""
|
||
INSERT INTO ItemTable (key, value)
|
||
VALUES (?, ?)
|
||
""", (key, value))
|
||
else:
|
||
cursor.execute("""
|
||
UPDATE ItemTable SET value = ?
|
||
WHERE key = ?
|
||
""", (value, key))
|
||
print(f"{EMOJI['INFO']} {Fore.CYAN}Updating {key.split('/')[-1]}...{Style.RESET_ALL}")
|
||
|
||
cursor.execute("COMMIT")
|
||
print(f"{EMOJI['SUCCESS']} {Fore.GREEN}Database updated successfully | 数据库更新成功{Style.RESET_ALL}")
|
||
return True
|
||
|
||
except Exception as e:
|
||
cursor.execute("ROLLBACK")
|
||
raise e
|
||
|
||
except sqlite3.Error as e:
|
||
print(f"\n{EMOJI['ERROR']} {Fore.RED}Database error | 数据库错误: {str(e)}{Style.RESET_ALL}")
|
||
return False
|
||
except Exception as e:
|
||
print(f"\n{EMOJI['ERROR']} {Fore.RED}An error occurred | 发生错误: {str(e)}{Style.RESET_ALL}")
|
||
return False
|
||
finally:
|
||
if conn:
|
||
conn.close()
|
||
print(f"{EMOJI['DB']} {Fore.CYAN}Database connection closed | 数据库连接已关闭{Style.RESET_ALL}")
|
||
|
||
|