Skip to content

Commit 9f0530f

Browse files
committed
Optimize plugin、token api
1 parent 5aefef7 commit 9f0530f

File tree

2 files changed

+31
-28
lines changed

2 files changed

+31
-28
lines changed

backend/app/admin/api/v1/sys/plugin.py

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -52,16 +52,17 @@ async def install_plugin(file: Annotated[UploadFile, File()]) -> ResponseModel:
5252
full_plugin_path = os.path.join(PLUGIN_DIR, plugin_name)
5353
if os.path.exists(full_plugin_path):
5454
raise errors.ForbiddenError(msg='此插件已安装')
55-
os.makedirs(full_plugin_path)
55+
else:
56+
os.makedirs(full_plugin_path, exist_ok=True)
5657

57-
# 解压安装
58+
# 解压(安装)
5859
members = []
5960
for member in zf.infolist():
6061
if member.filename.startswith(plugin_dir_in_zip):
61-
member.filename = member.filename.replace(plugin_dir_in_zip, '')
62-
if not member.filename:
63-
continue
64-
members.append(member)
62+
new_filename = member.filename.replace(plugin_dir_in_zip, '')
63+
if new_filename:
64+
member.filename = new_filename
65+
members.append(member)
6566
zf.extractall(PLUGIN_DIR, members)
6667
if os.path.exists(os.path.join(full_plugin_path, 'requirements.txt')):
6768
await install_requirements_async()
@@ -81,6 +82,7 @@ async def build_plugin_zip(plugin: Annotated[str, Query()]):
8182
plugin_dir = os.path.join(PLUGIN_DIR, plugin)
8283
if not os.path.exists(plugin_dir):
8384
raise errors.ForbiddenError(msg='插件不存在')
85+
8486
bio = io.BytesIO()
8587
with zipfile.ZipFile(bio, 'w') as zf:
8688
for root, dirs, files in os.walk(plugin_dir):
@@ -89,6 +91,7 @@ async def build_plugin_zip(plugin: Annotated[str, Query()]):
8991
file_path = os.path.join(root, file)
9092
arcname = os.path.relpath(file_path, start=plugin_dir)
9193
zf.write(file_path, arcname)
94+
9295
bio.seek(0)
9396
return StreamingResponse(
9497
bio,

backend/app/admin/api/v1/sys/token.py

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,24 @@
2121
@router.get('', summary='获取令牌列表', dependencies=[DependsJwtAuth])
2222
async def get_tokens(username: Annotated[str | None, Query()] = None) -> ResponseSchemaModel[list[GetTokenDetail]]:
2323
token_keys = await redis_client.keys(f'{settings.TOKEN_REDIS_PREFIX}:*')
24-
token_online = await redis_client.smembers(settings.TOKEN_ONLINE_REDIS_PREFIX)
25-
data = []
24+
online_clients = await redis_client.smembers(settings.TOKEN_ONLINE_REDIS_PREFIX)
25+
data: list[GetTokenDetail] = []
26+
27+
def append_token_detail() -> None:
28+
data.append(
29+
token_detail.model_copy(
30+
update={
31+
'username': extra_info.get('username', '未知'),
32+
'nickname': extra_info.get('nickname', '未知'),
33+
'ip': extra_info.get('ip', '未知'),
34+
'os': extra_info.get('os', '未知'),
35+
'browser': extra_info.get('browser', '未知'),
36+
'device': extra_info.get('device', '未知'),
37+
'last_login_time': extra_info.get('last_login_time', '未知'),
38+
}
39+
)
40+
)
41+
2642
for key in token_keys:
2743
token = await redis_client.get(key)
2844
token_payload = jwt_decode(token)
@@ -36,31 +52,15 @@ async def get_tokens(username: Annotated[str | None, Query()] = None) -> Respons
3652
os='未知',
3753
browser='未知',
3854
device='未知',
39-
status=StatusType.disable if session_uuid not in token_online else StatusType.enable,
55+
status=StatusType.enable if session_uuid in online_clients else StatusType.disable,
4056
last_login_time='未知',
4157
expire_time=token_payload.expire_time,
4258
)
4359
extra_info = await redis_client.get(f'{settings.TOKEN_EXTRA_INFO_REDIS_PREFIX}:{session_uuid}')
4460
if extra_info:
45-
46-
def append_token_detail():
47-
data.append(
48-
token_detail.model_copy(
49-
update={
50-
'username': extra_info.get('username'),
51-
'nickname': extra_info.get('nickname'),
52-
'ip': extra_info.get('ip'),
53-
'os': extra_info.get('os'),
54-
'browser': extra_info.get('browser'),
55-
'device': extra_info.get('device'),
56-
'last_login_time': extra_info.get('last_login_time'),
57-
}
58-
)
59-
)
60-
6161
extra_info = json.loads(extra_info)
6262
if extra_info.get('login_type') != 'swagger':
63-
if username:
63+
if username is not None:
6464
if username == extra_info.get('username'):
6565
append_token_detail()
6666
else:
@@ -79,8 +79,8 @@ def append_token_detail():
7979
],
8080
)
8181
async def kick_out(
82-
request: Request, pk: Annotated[int, Path(..., description='用户 ID')], session_uuid: KickOutToken
82+
request: Request, pk: Annotated[int, Path(..., description='用户 ID')], obj: KickOutToken
8383
) -> ResponseModel:
8484
superuser_verify(request)
85-
await revoke_token(pk)
85+
await revoke_token(str(pk), obj.session_uuid)
8686
return response_base.success()

0 commit comments

Comments
 (0)