mirror of
https://github.com/xuthus83/LittlePaimon.git
synced 2024-12-16 13:40:53 +08:00
✨ 优化Web UI
Cookie管理页面
This commit is contained in:
parent
d99e524539
commit
9afea36787
@ -13,7 +13,8 @@ route = APIRouter()
|
|||||||
|
|
||||||
|
|
||||||
class BindCookie(BaseModel):
|
class BindCookie(BaseModel):
|
||||||
user_id: int
|
id: Optional[int]
|
||||||
|
user_id: Optional[int]
|
||||||
uid: Optional[int]
|
uid: Optional[int]
|
||||||
mys_id: Optional[int]
|
mys_id: Optional[int]
|
||||||
cookie: str
|
cookie: str
|
||||||
@ -49,18 +50,26 @@ async def get_public_cookies(status: Optional[int] = None):
|
|||||||
|
|
||||||
|
|
||||||
@route.get('/get_private_cookies', response_class=JSONResponse, dependencies=[authentication()])
|
@route.get('/get_private_cookies', response_class=JSONResponse, dependencies=[authentication()])
|
||||||
async def get_private_cookies(page: int = 1, perPage: int = 10, user_id: Optional[str] = None,
|
async def get_private_cookies(
|
||||||
uid: Optional[str] = None, mys_id: Optional[str] = None, status: Optional[int] = None):
|
page: int = 1,
|
||||||
query = {'user_id__contains': user_id} if user_id else {'uid__contains': uid} if uid else {
|
perPage: int = 10,
|
||||||
'mys_id__contains': mys_id} if mys_id else {}
|
orderBy: str = 'id',
|
||||||
|
orderDir: str = 'asc',
|
||||||
|
status: Optional[int] = None,
|
||||||
|
user_id: Optional[int] = None,
|
||||||
|
uid: Optional[int] = None,
|
||||||
|
mys_id: Optional[int] = None):
|
||||||
|
orderBy = orderBy if orderDir == 'asc' else f'-{orderBy}' if orderBy else 'id'
|
||||||
|
query = {f'{k}__contains': v for k, v in {'user_id': user_id, 'uid': uid, 'mys_id': mys_id}.items() if
|
||||||
|
v is not None}
|
||||||
if status is not None:
|
if status is not None:
|
||||||
query['status'] = status
|
query['status'] = status
|
||||||
data = await PrivateCookie.filter(**query).offset((page - 1) * perPage).limit(perPage).values()
|
|
||||||
return {
|
return {
|
||||||
'status': 0,
|
'status': 0,
|
||||||
'msg': 'ok',
|
'msg': 'ok',
|
||||||
'data': {
|
'data': {
|
||||||
'items': data,
|
'items': await PrivateCookie.filter(**query).order_by(orderBy).offset((page - 1) * perPage).limit(
|
||||||
|
perPage).values(),
|
||||||
'total': await PrivateCookie.filter(**query).count()
|
'total': await PrivateCookie.filter(**query).count()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -71,39 +80,51 @@ async def get_private_cookie(id: int):
|
|||||||
return await PrivateCookie.get_or_none(id=id).values()
|
return await PrivateCookie.get_or_none(id=id).values()
|
||||||
|
|
||||||
|
|
||||||
@route.delete('/delete_public_cookie', response_class=JSONResponse, dependencies=[authentication()])
|
@route.delete('/delete_cookie', response_class=JSONResponse, dependencies=[authentication()])
|
||||||
async def delete_public_cookie(id: int):
|
async def delete_public_cookie(cookie_type: str, id: int):
|
||||||
await PublicCookie.filter(id=id).delete()
|
if cookie_type == 'public':
|
||||||
return {'status': 0, 'msg': f'{id}号公共Cookie删除成功'}
|
await PublicCookie.filter(id=id).delete()
|
||||||
|
return {'status': 0, 'msg': f'{id}号公共Cookie删除成功'}
|
||||||
|
|
||||||
@route.delete('/delete_private_cookie', response_class=JSONResponse, dependencies=[authentication()])
|
|
||||||
async def delete_private_cookie(id: int):
|
|
||||||
await PrivateCookie.filter(id=id).delete()
|
|
||||||
return {'status': 0, 'msg': f'{id}号私人Cookie删除成功'}
|
|
||||||
|
|
||||||
|
|
||||||
@route.post('/add_public_cookie', response_class=JSONResponse, dependencies=[authentication()])
|
|
||||||
async def add_public_cookie(force: bool, data: dict):
|
|
||||||
cookie = data.get('cookie')
|
|
||||||
if not cookie:
|
|
||||||
return {'status': 100, 'msg': '参数错误'}
|
|
||||||
if not force:
|
|
||||||
if await get_bind_game_info(cookie, True):
|
|
||||||
new_cookie = await PublicCookie.create(cookie=cookie)
|
|
||||||
return {'status': 0, 'msg': f'{new_cookie.id}号公共Cookie添加成功'}
|
|
||||||
else:
|
|
||||||
return {'status': 200, 'msg': '该Cookie无效'}
|
|
||||||
else:
|
else:
|
||||||
new_cookie = await PublicCookie.create(cookie=cookie)
|
await PrivateCookie.filter(id=id).delete()
|
||||||
return {'status': 0, 'msg': f'{new_cookie.id}号公共Cookie添加成功'}
|
return {'status': 0, 'msg': f'{id}号私人Cookie删除成功'}
|
||||||
|
|
||||||
|
|
||||||
@route.post('/save_private_cookie', response_class=JSONResponse, dependencies=[authentication()])
|
@route.post('/add_cookie', response_class=JSONResponse, dependencies=[authentication()])
|
||||||
async def save_private_cookie(force: bool, data: BindCookie):
|
async def add_public_cookie(cookie_type: str, force: bool, data: BindCookie):
|
||||||
|
if cookie_type == 'public':
|
||||||
|
if force or await get_bind_game_info(data.cookie, True):
|
||||||
|
new_cookie = await PublicCookie.create(cookie=data.cookie)
|
||||||
|
return {'status': 0, 'msg': f'{new_cookie.id}号公共Cookie添加成功'}
|
||||||
|
elif not force:
|
||||||
|
return {'status': 200, 'msg': '该Cookie无效,请根据教程重新获取'}
|
||||||
|
else:
|
||||||
|
if force:
|
||||||
|
await PrivateCookie.update_or_create(user_id=data.user_id, uid=data.uid, mys_id=data.mys_id,
|
||||||
|
defaults={'cookie': data.cookie, 'stoken': data.stoken})
|
||||||
|
return {'status': 0, 'msg': f'QQ{data.user_id}的UID{data.uid}的Cookie强制修改成功。'}
|
||||||
|
elif game_info := await get_bind_game_info(data.cookie):
|
||||||
|
game_uid = game_info['game_role_id']
|
||||||
|
mys_id = game_info['mys_id']
|
||||||
|
await LastQuery.update_or_create(user_id=data.user_id,
|
||||||
|
defaults={'uid': game_uid, 'last_time': datetime.datetime.now()})
|
||||||
|
if 'login_ticket' in data.cookie and (stoken := await get_stoken_by_cookie(data.cookie)):
|
||||||
|
await PrivateCookie.update_or_create(user_id=data.user_id, uid=game_uid, mys_id=mys_id,
|
||||||
|
defaults={'cookie': data.cookie,
|
||||||
|
'stoken': f'stuid={mys_id};stoken={stoken};'})
|
||||||
|
return {'status': 0, 'msg': f'QQ{data.user_id}的UID{game_uid}的Cookie以及Stoken添加/保存成功。'}
|
||||||
|
else:
|
||||||
|
await PrivateCookie.update_or_create(user_id=data.user_id, uid=game_uid, mys_id=mys_id,
|
||||||
|
defaults={'cookie': data.cookie})
|
||||||
|
return {'status': 0, 'msg': f'QQ{data.user_id}的UID{game_uid}的Cookie添加/保存成功,但未绑定stoken。'}
|
||||||
|
else:
|
||||||
|
return {'status': 200, 'msg': '该Cookie无效,请根据教程重新获取'}
|
||||||
|
|
||||||
|
|
||||||
|
@route.post('/update_private_cookie', response_class=JSONResponse, dependencies=[authentication()])
|
||||||
|
async def update_cookie(force: bool, data: BindCookie):
|
||||||
if force:
|
if force:
|
||||||
await PrivateCookie.update_or_create(user_id=data.user_id, uid=data.uid, mys_id=data.mys_id,
|
await PrivateCookie.filter(id=data.id).update(**data.dict(exclude={'id'}))
|
||||||
defaults={'cookie': data.cookie, 'stoken': data.stoken})
|
|
||||||
return {'status': 0, 'msg': f'QQ{data.user_id}的UID{data.uid}的Cookie强制修改成功。'}
|
return {'status': 0, 'msg': f'QQ{data.user_id}的UID{data.uid}的Cookie强制修改成功。'}
|
||||||
elif game_info := await get_bind_game_info(data.cookie):
|
elif game_info := await get_bind_game_info(data.cookie):
|
||||||
game_uid = game_info['game_role_id']
|
game_uid = game_info['game_role_id']
|
||||||
@ -111,13 +132,12 @@ async def save_private_cookie(force: bool, data: BindCookie):
|
|||||||
await LastQuery.update_or_create(user_id=data.user_id,
|
await LastQuery.update_or_create(user_id=data.user_id,
|
||||||
defaults={'uid': game_uid, 'last_time': datetime.datetime.now()})
|
defaults={'uid': game_uid, 'last_time': datetime.datetime.now()})
|
||||||
if 'login_ticket' in data.cookie and (stoken := await get_stoken_by_cookie(data.cookie)):
|
if 'login_ticket' in data.cookie and (stoken := await get_stoken_by_cookie(data.cookie)):
|
||||||
await PrivateCookie.update_or_create(user_id=data.user_id, uid=game_uid, mys_id=mys_id,
|
await PrivateCookie.filter(id=data.id).update(user_id=data.user_id, uid=game_uid, mys_id=mys_id,
|
||||||
defaults={'cookie': data.cookie,
|
cookie=data.cookie, stoken=f'stuid={mys_id};stoken={stoken};')
|
||||||
'stoken': f'stuid={mys_id};stoken={stoken};'})
|
|
||||||
return {'status': 0, 'msg': f'QQ{data.user_id}的UID{game_uid}的Cookie以及Stoken添加/保存成功。'}
|
return {'status': 0, 'msg': f'QQ{data.user_id}的UID{game_uid}的Cookie以及Stoken添加/保存成功。'}
|
||||||
else:
|
else:
|
||||||
await PrivateCookie.update_or_create(user_id=data.user_id, uid=game_uid, mys_id=mys_id,
|
await PrivateCookie.filter(id=data.id).update(user_id=data.user_id, uid=game_uid, mys_id=mys_id,
|
||||||
defaults={'cookie': data.cookie})
|
cookie=data.cookie, stoken=None)
|
||||||
return {'status': 0, 'msg': f'QQ{data.user_id}的UID{game_uid}的Cookie添加/保存成功,但未绑定stoken。'}
|
return {'status': 0, 'msg': f'QQ{data.user_id}的UID{game_uid}的Cookie添加/保存成功,但未获取到stoken。'}
|
||||||
else:
|
else:
|
||||||
return {'status': 200, 'msg': '该Cookie无效,请根据教程重新获取'}
|
return {'status': 200, 'msg': '该Cookie无效,请根据教程重新获取'}
|
@ -5,20 +5,35 @@ from .constants import status_map, status_filter
|
|||||||
add_button = ActionType.Dialog(label='添加私人Cookie',
|
add_button = ActionType.Dialog(label='添加私人Cookie',
|
||||||
level=LevelEnum.primary,
|
level=LevelEnum.primary,
|
||||||
dialog=Dialog(title='添加私人Cookie',
|
dialog=Dialog(title='添加私人Cookie',
|
||||||
body=Form(api='post:/LittlePaimon/api/save_private_cookie?force=false',
|
body=Form(
|
||||||
|
api='post:/LittlePaimon/api/add_cookie?cookie_type=private&force=false',
|
||||||
|
body=[InputNumber(name='user_id', label='QQ号', required=True),
|
||||||
|
Textarea(name='cookie', label='Cookie', required=True,
|
||||||
|
showCounter=False)])))
|
||||||
|
force_add_button = ActionType.Dialog(label='强制添加私人Cookie',
|
||||||
|
level=LevelEnum.warning,
|
||||||
|
confirmText='强制修改Cookie不会对Cookie有效性和与uid的关联性进行校验,如果你不确定是否正确有效,请不要强制修改。',
|
||||||
|
dialog=Dialog(title='强制添加私人Cookie',
|
||||||
|
body=Form(
|
||||||
|
api='post:/LittlePaimon/api/add_cookie?cookie_type=private&force=true',
|
||||||
body=[InputNumber(name='user_id', label='QQ号', required=True),
|
body=[InputNumber(name='user_id', label='QQ号', required=True),
|
||||||
|
InputNumber(name='uid', label='UID', required=True),
|
||||||
|
InputNumber(name='mys_id', label='米游社ID',
|
||||||
|
required=True),
|
||||||
Textarea(name='cookie', label='Cookie', required=True,
|
Textarea(name='cookie', label='Cookie', required=True,
|
||||||
showCounter=False)])))
|
showCounter=False),
|
||||||
|
Textarea(name='stoken', label='Stoken', showCounter=False)
|
||||||
|
])))
|
||||||
delete_button = ActionType.Ajax(label='删除', level=LevelEnum.danger,
|
delete_button = ActionType.Ajax(label='删除', level=LevelEnum.danger,
|
||||||
confirmText='确认删除该私人Cookie',
|
confirmText='确认删除该私人Cookie',
|
||||||
api='delete:/LittlePaimon/api/delete_private_cookie?id=${id}')
|
api='delete:/LittlePaimon/api/delete_cookie?cookie_type=private&id=${id}')
|
||||||
save_action_button = Action(label='保存修改', level=LevelEnum.warning, type='submit')
|
save_action_button = Action(label='保存修改', level=LevelEnum.warning, type='submit')
|
||||||
cancel_action_button = Action(label='关闭', level=LevelEnum.default, actionType='close')
|
cancel_action_button = Action(label='关闭', level=LevelEnum.default, actionType='close')
|
||||||
detail_button = ActionType.Dialog(label='修改',
|
detail_button = ActionType.Dialog(label='修改',
|
||||||
level=LevelEnum.info,
|
level=LevelEnum.info,
|
||||||
dialog=Dialog(title='Cookie详情',
|
dialog=Dialog(title='Cookie详情',
|
||||||
body=Form(
|
body=Form(
|
||||||
api='post:/LittlePaimon/api/save_private_cookie',
|
api='post:/LittlePaimon/api/update_private_cookie?force=false',
|
||||||
body=[Static(name='id', label='ID'),
|
body=[Static(name='id', label='ID'),
|
||||||
InputNumber(name='user_id', label='QQ号', required=True),
|
InputNumber(name='user_id', label='QQ号', required=True),
|
||||||
Static(name='uid', label='UID'),
|
Static(name='uid', label='UID'),
|
||||||
@ -32,7 +47,7 @@ force_button = ActionType.Dialog(label='强制修改',
|
|||||||
confirmText='强制修改Cookie不会对Cookie有效性和与uid的关联性进行校验,如果你不确定是否正确有效,请不要强制修改。',
|
confirmText='强制修改Cookie不会对Cookie有效性和与uid的关联性进行校验,如果你不确定是否正确有效,请不要强制修改。',
|
||||||
dialog=Dialog(title='Cookie详情强制修改',
|
dialog=Dialog(title='Cookie详情强制修改',
|
||||||
body=Form(
|
body=Form(
|
||||||
api='post:/LittlePaimon/api/save_private_cookie?force=true',
|
api='post:/LittlePaimon/api/update_private_cookie?force=true',
|
||||||
body=[Static(name='id', label='ID'),
|
body=[Static(name='id', label='ID'),
|
||||||
InputNumber(name='user_id', label='QQ号', required=True),
|
InputNumber(name='user_id', label='QQ号', required=True),
|
||||||
InputNumber(name='uid', label='UID', required=True),
|
InputNumber(name='uid', label='UID', required=True),
|
||||||
@ -40,19 +55,24 @@ force_button = ActionType.Dialog(label='强制修改',
|
|||||||
Textarea(name='cookie', label='Cookie', required=True,
|
Textarea(name='cookie', label='Cookie', required=True,
|
||||||
showCounter=False),
|
showCounter=False),
|
||||||
Textarea(name='stoken', label='Stoken', showCounter=False)]),
|
Textarea(name='stoken', label='Stoken', showCounter=False)]),
|
||||||
actions=[cancel_action_button, Action(label='保存修改', level=LevelEnum.warning, type='submit', confirmText='强制修改Cookie不会对Cookie有效性和与uid的关联性进行校验,如果你不确定是否正确有效,请不要强制修改。')]))
|
actions=[cancel_action_button,
|
||||||
|
save_action_button]))
|
||||||
table = TableCRUD(mode='table',
|
table = TableCRUD(mode='table',
|
||||||
title='',
|
title='',
|
||||||
syncLocation=False,
|
syncLocation=False,
|
||||||
api='/LittlePaimon/api/get_private_cookies',
|
api='/LittlePaimon/api/get_private_cookies',
|
||||||
|
footable=True,
|
||||||
columns=[TableColumn(label='ID', name='id'),
|
columns=[TableColumn(label='ID', name='id'),
|
||||||
TableColumn(label='QQ号', name='user_id', searchable=True),
|
TableColumn(label='QQ号', name='user_id', searchable=True),
|
||||||
TableColumn(label='UID', name='uid', searchable=True),
|
TableColumn(label='UID', name='uid', searchable=True),
|
||||||
TableColumn(label='米游社ID', name='mys_id', searchable=True),
|
TableColumn(label='米游社ID', name='mys_id', searchable=True),
|
||||||
TableColumn(type='mapping', label='状态', name='status', filterable=status_filter,
|
TableColumn(type='mapping', label='状态', name='status', filterable=status_filter,
|
||||||
map=status_map),
|
map=status_map),
|
||||||
|
TableColumn(label='Cookie', name='cookie', breakpoint='*'),
|
||||||
|
TableColumn(label='Stoken', name='stoken', breakpoint='*'),
|
||||||
ColumnOperation(label='操作', buttons=[detail_button, force_button, delete_button])],
|
ColumnOperation(label='操作', buttons=[detail_button, force_button, delete_button])],
|
||||||
headerToolbar=[add_button],
|
headerToolbar=[add_button, force_add_button],
|
||||||
footerToolbar=['switch-per-page', 'pagination'])
|
footerToolbar=['switch-per-page', 'pagination'])
|
||||||
|
|
||||||
page = PageSchema(url='/cookie/private', icon='fa fa-key', label='私人Cookie', schema=Page(title='私人Cookie', body=table))
|
page = PageSchema(url='/cookie/private', icon='fa fa-key', label='私人Cookie',
|
||||||
|
schema=Page(title='私人Cookie', body=table))
|
||||||
|
@ -5,20 +5,20 @@ from .constants import status_map, status_filter
|
|||||||
add_button = ActionType.Dialog(label='添加公共Cookie',
|
add_button = ActionType.Dialog(label='添加公共Cookie',
|
||||||
level=LevelEnum.primary,
|
level=LevelEnum.primary,
|
||||||
dialog=Dialog(title='添加公共Cookie',
|
dialog=Dialog(title='添加公共Cookie',
|
||||||
body=Form(api='post:/LittlePaimon/api/add_public_cookie?force=false',
|
body=Form(api='post:/LittlePaimon/api/add_cookie?cookie_type=public&force=false',
|
||||||
body=[Textarea(name='cookie', label='Cookie', required=True,
|
body=[Textarea(name='cookie', label='Cookie', required=True,
|
||||||
showCounter=False)])))
|
showCounter=False)])))
|
||||||
add_button_force = ActionType.Dialog(label='强制添加公共Cookie',
|
add_button_force = ActionType.Dialog(label='强制添加公共Cookie',
|
||||||
level=LevelEnum.warning,
|
level=LevelEnum.warning,
|
||||||
confirmText='强制添加公共Cookie不会对Cookie有效性进行校验,如果你不确定是否正确有效,请不要强制添加。',
|
confirmText='强制添加公共Cookie不会对Cookie有效性进行校验,如果你不确定是否正确有效,请不要强制添加。',
|
||||||
dialog=Dialog(title='强制添加公共Cookie',
|
dialog=Dialog(title='强制添加公共Cookie',
|
||||||
body=Form(api='post:/LittlePaimon/api/add_public_cookie?force=true',
|
body=Form(api='post:/LittlePaimon/api/add_cookie?cookie_type=public&force=true',
|
||||||
body=[
|
body=[
|
||||||
Textarea(name='cookie', label='Cookie', required=True,
|
Textarea(name='cookie', label='Cookie', required=True,
|
||||||
showCounter=False)])))
|
showCounter=False)])))
|
||||||
delete_button = ActionType.Ajax(label='删除', level=LevelEnum.danger,
|
delete_button = ActionType.Ajax(label='删除', level=LevelEnum.danger,
|
||||||
confirmText='确认删除该公共Cookie',
|
confirmText='确认删除该公共Cookie',
|
||||||
api='delete:/LittlePaimon/api/delete_public_cookie?id=${id}')
|
api='delete:/LittlePaimon/api/delete_cookie?cookie_type=public&id=${id}')
|
||||||
table = TableCRUD(mode='table',
|
table = TableCRUD(mode='table',
|
||||||
title='',
|
title='',
|
||||||
syncLocation=False,
|
syncLocation=False,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user