Skip to content

Commit 971ebf1

Browse files
committed
Optimize the zip plugin install logic
1 parent 1e54b0b commit 971ebf1

File tree

1 file changed

+14
-8
lines changed

1 file changed

+14
-8
lines changed

backend/app/admin/service/plugin_service.py

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -53,15 +53,21 @@ async def install_zip(*, file: UploadFile) -> None:
5353
raise errors.ForbiddenError(msg='插件压缩包格式非法')
5454
with zipfile.ZipFile(file_bytes) as zf:
5555
# 校验压缩包
56-
plugin_dir_in_zip = file.filename[:-4]
57-
members_in_plugin_dir = [name for name in zf.namelist() if name.startswith(plugin_dir_in_zip)]
56+
plugin_dir = file.filename[:-4]
57+
members_in_plugin_dir = [name for name in zf.namelist() if name.startswith(plugin_dir)]
5858
if not members_in_plugin_dir:
5959
raise errors.ForbiddenError(msg='插件压缩包内容非法')
60-
plugin_name = members_in_plugin_dir[1].replace(plugin_dir_in_zip, '').replace('/', '')
60+
plugin_name = (
61+
members_in_plugin_dir[0]
62+
.replace('/', '')
63+
.replace('-master', '')
64+
.replace('-main', '')
65+
.replace('-dev', '')
66+
)
6167
if (
6268
len(members_in_plugin_dir) <= 3
63-
or f'{plugin_dir_in_zip}/plugin.toml' not in members_in_plugin_dir
64-
or f'{plugin_dir_in_zip}/README.md' not in members_in_plugin_dir
69+
or f'{plugin_dir}/plugin.toml' not in members_in_plugin_dir
70+
or f'{plugin_dir}/README.md' not in members_in_plugin_dir
6571
):
6672
raise errors.ForbiddenError(msg='插件压缩包内缺少必要文件')
6773

@@ -75,12 +81,12 @@ async def install_zip(*, file: UploadFile) -> None:
7581
# 解压(安装)
7682
members = []
7783
for member in zf.infolist():
78-
if member.filename.startswith(plugin_dir_in_zip):
79-
new_filename = member.filename.replace(plugin_dir_in_zip, '')
84+
if member.filename.startswith(plugin_dir):
85+
new_filename = member.filename.replace(plugin_dir, '')
8086
if new_filename:
8187
member.filename = new_filename
8288
members.append(member)
83-
zf.extractall(PLUGIN_DIR, members)
89+
zf.extractall(os.path.join(PLUGIN_DIR, plugin_name), members)
8490

8591
await install_requirements_async(plugin_name)
8692

0 commit comments

Comments
 (0)