新增外链管理功能,完善外链创建、删除和获取接口,优化扫码登录逻辑,添加到期时间支持,更新前端页面以增强用户体验,确保外链使用次数和有效期的正确管理。
This commit is contained in:
@ -13,7 +13,7 @@ class CloudDriveDatabase:
|
||||
self._create_tables()
|
||||
|
||||
def _create_tables(self):
|
||||
"""创建所需的数据库表"""
|
||||
"""创建所需的数据库表并确保表结构是最新的"""
|
||||
# 1. 网盘驱动表
|
||||
self.cursor.execute('''
|
||||
CREATE TABLE IF NOT EXISTS drive_providers (
|
||||
@ -48,8 +48,23 @@ class CloudDriveDatabase:
|
||||
)
|
||||
''')
|
||||
|
||||
# 检查并添加expiry_time列到external_links表
|
||||
self._add_column_if_not_exists('external_links', 'expiry_time', 'TEXT')
|
||||
|
||||
self.conn.commit()
|
||||
|
||||
def _add_column_if_not_exists(self, table_name: str, column_name: str, column_type: str):
|
||||
"""检查表是否存在指定列,如果不存在则添加"""
|
||||
self.cursor.execute(f"PRAGMA table_info({table_name})")
|
||||
columns = [column[1] for column in self.cursor.fetchall()]
|
||||
if column_name not in columns:
|
||||
try:
|
||||
self.cursor.execute(f"ALTER TABLE {table_name} ADD COLUMN {column_name} {column_type}")
|
||||
self.conn.commit()
|
||||
print(f"已成功添加列 '{column_name}' 到表 '{table_name}'")
|
||||
except sqlite3.OperationalError as e:
|
||||
print(f"添加列 '{column_name}' 到表 '{table_name}' 时出错: {e}")
|
||||
|
||||
# 网盘驱动表操作
|
||||
def add_drive_provider(self, provider_name: str, config_vars: Dict[str, Any], remarks: Optional[str] = None) -> bool:
|
||||
"""添加网盘服务商"""
|
||||
@ -202,7 +217,7 @@ class CloudDriveDatabase:
|
||||
return False
|
||||
|
||||
# 外链表操作
|
||||
def create_external_link(self, drive_id: int, total_quota: float, remarks: Optional[str] = None) -> Optional[str]:
|
||||
def create_external_link(self, drive_id: int, total_quota: float, remarks: Optional[str] = None, expiry_time: str = None) -> Optional[str]:
|
||||
"""创建外链"""
|
||||
try:
|
||||
# 检查用户网盘是否存在
|
||||
@ -213,10 +228,15 @@ class CloudDriveDatabase:
|
||||
link_uuid = str(uuid.uuid4())
|
||||
while self.get_external_link_by_uuid(link_uuid):
|
||||
link_uuid = str(uuid.uuid4())
|
||||
|
||||
# 如果没有指定到期时间,默认为24小时后
|
||||
if not expiry_time:
|
||||
from datetime import datetime, timedelta
|
||||
expiry_time = (datetime.now() + timedelta(hours=24)).strftime('%Y-%m-%d %H:%M:%S')
|
||||
|
||||
self.cursor.execute(
|
||||
"INSERT INTO external_links (drive_id, total_quota, used_quota, link_uuid, remarks) VALUES (?, ?, 0, ?, ?)",
|
||||
(drive_id, total_quota, link_uuid, remarks)
|
||||
"INSERT INTO external_links (drive_id, total_quota, used_quota, link_uuid, remarks, expiry_time) VALUES (?, ?, 0, ?, ?, ?)",
|
||||
(drive_id, total_quota, link_uuid, remarks, expiry_time)
|
||||
)
|
||||
self.conn.commit()
|
||||
return link_uuid
|
||||
|
@ -1,15 +1,31 @@
|
||||
import requests
|
||||
import time
|
||||
|
||||
|
||||
import json
|
||||
|
||||
|
||||
def login_quark(token):
|
||||
def login_quark(token,config_vars):
|
||||
"""
|
||||
夸克登录
|
||||
:param token: 登录token
|
||||
:return: 是否登录成功
|
||||
"""
|
||||
aa = {
|
||||
'data': {
|
||||
'client_id': '515',
|
||||
'kps_wg': '',
|
||||
'request_id': '',
|
||||
'sign_wg': '',
|
||||
'token': '',
|
||||
'v': '1.2',
|
||||
'vcode': ''
|
||||
},
|
||||
'kps_wg': '',
|
||||
'redirect_uri': 'https://uop.quark.cn/cas/ajax/loginWithKpsAndQrcodeToken',
|
||||
'sign_wg': ''
|
||||
}
|
||||
if len(config_vars) > 0:
|
||||
_config_vars = config_vars.get("data")
|
||||
s = requests.Session()
|
||||
s.headers = {
|
||||
'Accept': 'application/json, text/plain, */*',
|
||||
@ -22,23 +38,25 @@ def login_quark(token):
|
||||
'sec-ch-ua-mobile': '?1',
|
||||
'sec-ch-ua-platform': '"Android"'
|
||||
}
|
||||
sign_wg = "AAQHaE4ww2nnIPvofH2SfMv3N6OplcPRjxlgScTZozm/ZCMfQP74bsMLyKW883hZCGY="
|
||||
kps_wg = "AARWcp9UM71t5VzV9i5pBJ4dLXjJ7EZL5a9qz2QVVQtkkmcqS4wQGYtk38CRzW6HH4+5c7qsB9/EtUgkWcd8x/k7h9+PmAHUDvxKHUWnX7iL3h2fH86XJ4cEqwvUnQ77QGs=";
|
||||
# sign_wg = "AAQHaE4ww2nnIPvofH2SfMv3N6OplcPRjxlgScTZozm/ZCMfQP74bsMLyKW883hZCGY="
|
||||
# kps_wg = "AARWcp9UM71t5VzV9i5pBJ4dLXjJ7EZL5a9qz2QVVQtkkmcqS4wQGYtk38CRzW6HH4+5c7qsB9/EtUgkWcd8x/k7h9+PmAHUDvxKHUWnX7iL3h2fH86XJ4cEqwvUnQ77QGs="
|
||||
vcode = int(time.time() * 1000) # 相当于JavaScript中的Date.now(),返回当前时间的毫秒数
|
||||
request_id = vcode + 5
|
||||
is_login = False
|
||||
url = 'https://uop.quark.cn/cas/ajax/loginWithKpsAndQrcodeToken'
|
||||
queryParams = 'uc_param_str=dsdnfrpfbivesscpgimibtbmnijblauputogpintnwktprchmt&ds=AANx101uRUMl2l2Ot6hnNFQe%2F%2B%2Fmm2JHIQ2Gw28Yo%2FGa2g%3D%3D&dn=85507213341-12b7840e&fr=android&pf=3300&bi=35825&ve=7.9.2.771&ss=407x853&pc=AASZtg30J6cEZGl0meB9hj0E8U9brcrtYubvdgeP%2BOWEz0vpfLJPZfnxjOm%2Fxul3xW7j9n4com6OOMCVoviOk4QO&gi=bTkwBCbSxTOAXUWiJmZaMx19GVxo&mi=2312DRA50C&ni=bTkwBHemD30PJEvXSga2ki3ciKarGqoowKzIca0Rj7inq8M%3D&la=zh&ut=AANx101uRUMl2l2Ot6hnNFQe%2F%2B%2Fmm2JHIQ2Gw28Yo%2FGa2g%3D%3D&nt=5&nw=0&kt=4&pr=ucpro&ch=kk%40store&mt=73ABKMNLPFhfbAKV15H%2BDiEkS8zWXwui&__dt=31265&__t=' + str(int(time.time() * 1000))
|
||||
queryParams = config_vars.get("queryParams") + str(int(time.time() * 1000))
|
||||
data = {
|
||||
'client_id': '532',
|
||||
'v': '1.2',
|
||||
'client_id': _config_vars.get("client_id"),
|
||||
'v': _config_vars.get("v"),
|
||||
'request_id': request_id,
|
||||
'sign_wg': sign_wg,
|
||||
'kps_wg': kps_wg,
|
||||
'sign_wg': _config_vars.get("sign_wg"),
|
||||
'kps_wg': _config_vars.get("kps_wg"),
|
||||
'vcode': vcode,
|
||||
'token': token
|
||||
}
|
||||
print(data)
|
||||
res =s.post(url, data=data, params=queryParams)
|
||||
print(res.json())
|
||||
if res.json().get('status') == 2000000:
|
||||
is_login = True
|
||||
return is_login
|
Reference in New Issue
Block a user