Skip to content

Commit 94c9c30

Browse files
committed
Merge remote-tracking branch 'origin/master'
2 parents 69fc66e + 4d7c9de commit 94c9c30

File tree

125 files changed

+1081
-7746
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

125 files changed

+1081
-7746
lines changed

.github/FUNDING.yml

Lines changed: 0 additions & 2 deletions
This file was deleted.

apps/admin/dependencies.py

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -18,16 +18,15 @@ def create_token(data: dict, expires_in: int = 3600 * 24) -> str:
1818
:param data: 数据负载
1919
:param expires_in: 过期时间(秒)
2020
"""
21-
header = base64.b64encode(json.dumps({"alg": "HS256", "typ": "JWT"}).encode()).decode()
22-
payload = base64.b64encode(json.dumps({
23-
**data,
24-
"exp": int(time.time()) + expires_in
25-
}).encode()).decode()
21+
header = base64.b64encode(
22+
json.dumps({"alg": "HS256", "typ": "JWT"}).encode()
23+
).decode()
24+
payload = base64.b64encode(
25+
json.dumps({**data, "exp": int(time.time()) + expires_in}).encode()
26+
).decode()
2627

2728
signature = hmac.new(
28-
settings.admin_token.encode(),
29-
f"{header}.{payload}".encode(),
30-
'sha256'
29+
settings.admin_token.encode(), f"{header}.{payload}".encode(), "sha256"
3130
).digest()
3231
signature = base64.b64encode(signature).decode()
3332

@@ -41,13 +40,13 @@ def verify_token(token: str) -> dict:
4140
:return: 解码后的数据
4241
"""
4342
try:
44-
header_b64, payload_b64, signature_b64 = token.split('.')
43+
header_b64, payload_b64, signature_b64 = token.split(".")
4544

4645
# 验证签名
4746
expected_signature = hmac.new(
4847
settings.admin_token.encode(),
4948
f"{header_b64}.{payload_b64}".encode(),
50-
'sha256'
49+
"sha256",
5150
).digest()
5251
expected_signature_b64 = base64.b64encode(expected_signature).decode()
5352

@@ -66,7 +65,9 @@ def verify_token(token: str) -> dict:
6665
raise ValueError(f"token验证失败: {str(e)}")
6766

6867

69-
async def admin_required(authorization: str = Header(default=None), request: Request = None):
68+
async def admin_required(
69+
authorization: str = Header(default=None), request: Request = None
70+
):
7071
"""
7172
验证管理员权限
7273
"""
@@ -81,12 +82,14 @@ async def admin_required(authorization: str = Header(default=None), request: Req
8182
except ValueError as e:
8283
is_admin = False
8384

84-
if request.url.path.startswith('/share/'):
85+
if request.url.path.startswith("/share/"):
8586
if not settings.openUpload and not is_admin:
86-
raise HTTPException(status_code=403, detail='本站未开启游客上传,如需上传请先登录后台')
87+
raise HTTPException(
88+
status_code=403, detail="本站未开启游客上传,如需上传请先登录后台"
89+
)
8790
else:
8891
if not is_admin:
89-
raise HTTPException(status_code=401, detail='未授权或授权校验失败')
92+
raise HTTPException(status_code=401, detail="未授权或授权校验失败")
9093
return is_admin
9194
except ValueError as e:
9295
raise HTTPException(status_code=401, detail=str(e))

apps/admin/schemas.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ class IDData(BaseModel):
77

88
class ShareItem(BaseModel):
99
expire_value: int
10-
expire_style: str = 'day'
10+
expire_style: str = "day"
1111
filename: str
1212

1313

apps/admin/services.py

Lines changed: 39 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -19,16 +19,18 @@ async def delete_file(self, file_id: int):
1919
await self.file_storage.delete_file(file_code)
2020
await file_code.delete()
2121

22-
async def list_files(self, page: int, size: int, keyword: str = ''):
22+
async def list_files(self, page: int, size: int, keyword: str = ""):
2323
offset = (page - 1) * size
24-
files = await FileCodes.filter(prefix__icontains=keyword).limit(size).offset(offset)
24+
files = (
25+
await FileCodes.filter(prefix__icontains=keyword).limit(size).offset(offset)
26+
)
2527
total = await FileCodes.filter(prefix__icontains=keyword).count()
2628
return files, total
2729

2830
async def download_file(self, file_id: int):
2931
file_code = await FileCodes.filter(id=file_id).first()
3032
if not file_code:
31-
raise HTTPException(status_code=404, detail='文件不存在')
33+
raise HTTPException(status_code=404, detail="文件不存在")
3234
if file_code.text:
3335
return APIResponse(detail=file_code.text)
3436
else:
@@ -37,10 +39,12 @@ async def download_file(self, file_id: int):
3739
async def share_local_file(self, item):
3840
local_file = LocalFileClass(item.filename)
3941
if not await local_file.exists():
40-
raise HTTPException(status_code=404, detail='文件不存在')
42+
raise HTTPException(status_code=404, detail="文件不存在")
4143

4244
text = await local_file.read()
43-
expired_at, expired_count, used_count, code = await get_expire_info(item.expire_value, item.expire_style)
45+
expired_at, expired_count, used_count, code = await get_expire_info(
46+
item.expire_value, item.expire_style
47+
)
4448
path, suffix, prefix, uuid_file_name, save_path = await get_file_path_name(item)
4549

4650
await self.file_storage.save_file(text, save_path)
@@ -58,8 +62,8 @@ async def share_local_file(self, item):
5862
)
5963

6064
return {
61-
'code': code,
62-
'name': local_file.file,
65+
"code": code,
66+
"name": local_file.file,
6367
}
6468

6569

@@ -68,54 +72,67 @@ def get_config(self):
6872
return settings.items()
6973

7074
async def update_config(self, data: dict):
71-
admin_token = data.get('admin_token')
72-
if admin_token is None or admin_token == '':
73-
raise HTTPException(status_code=400, detail='管理员密码不能为空')
75+
admin_token = data.get("admin_token")
76+
if admin_token is None or admin_token == "":
77+
raise HTTPException(status_code=400, detail="管理员密码不能为空")
7478

7579
for key, value in data.items():
7680
if key not in settings.default_config:
7781
continue
78-
if key in ['errorCount', 'errorMinute', 'max_save_seconds', 'onedrive_proxy', 'openUpload', 'port', 's3_proxy', 'uploadCount', 'uploadMinute', 'uploadSize']:
82+
if key in [
83+
"errorCount",
84+
"errorMinute",
85+
"max_save_seconds",
86+
"onedrive_proxy",
87+
"openUpload",
88+
"port",
89+
"s3_proxy",
90+
"uploadCount",
91+
"uploadMinute",
92+
"uploadSize",
93+
]:
7994
data[key] = int(value)
80-
elif key in ['opacity']:
95+
elif key in ["opacity"]:
8196
data[key] = float(value)
8297
else:
8398
data[key] = value
8499

85-
await KeyValue.filter(key='settings').update(value=data)
100+
await KeyValue.filter(key="settings").update(value=data)
86101
for k, v in data.items():
87102
settings.__setattr__(k, v)
88103

89104

90105
class LocalFileService:
91106
async def list_files(self):
92107
files = []
93-
if not os.path.exists(data_root / 'local'):
94-
os.makedirs(data_root / 'local')
95-
for file in os.listdir(data_root / 'local'):
108+
if not os.path.exists(data_root / "local"):
109+
os.makedirs(data_root / "local")
110+
for file in os.listdir(data_root / "local"):
96111
files.append(LocalFileClass(file))
97112
return files
98113

99114
async def delete_file(self, filename: str):
100115
file = LocalFileClass(filename)
101116
if await file.exists():
102117
await file.delete()
103-
return '删除成功'
104-
raise HTTPException(status_code=404, detail='文件不存在')
118+
return "删除成功"
119+
raise HTTPException(status_code=404, detail="文件不存在")
105120

106121

107122
class LocalFileClass:
108123
def __init__(self, file):
109124
self.file = file
110-
self.path = data_root / 'local' / file
111-
self.ctime = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(os.path.getctime(self.path)))
125+
self.path = data_root / "local" / file
126+
self.ctime = time.strftime(
127+
"%Y-%m-%d %H:%M:%S", time.localtime(os.path.getctime(self.path))
128+
)
112129
self.size = os.path.getsize(self.path)
113130

114131
async def read(self):
115-
return open(self.path, 'rb')
132+
return open(self.path, "rb")
116133

117134
async def write(self, data):
118-
with open(self.path, 'w') as f:
135+
with open(self.path, "w") as f:
119136
f.write(data)
120137

121138
async def delete(self):

0 commit comments

Comments
 (0)