feat(auth-files): add file size validation for uploads

This commit is contained in:
Supra4E8C
2026-01-04 18:14:18 +08:00
parent 84b219957e
commit b7e720133d
3 changed files with 29 additions and 15 deletions

View File

@@ -312,6 +312,7 @@
"delete_all_confirm": "Are you sure you want to delete all auth files? This operation cannot be undone!", "delete_all_confirm": "Are you sure you want to delete all auth files? This operation cannot be undone!",
"delete_filtered_confirm": "Are you sure you want to delete all {{type}} auth files? This operation cannot be undone!", "delete_filtered_confirm": "Are you sure you want to delete all {{type}} auth files? This operation cannot be undone!",
"upload_error_json": "Only JSON files are allowed", "upload_error_json": "Only JSON files are allowed",
"upload_error_size": "File size cannot exceed {{maxSize}}",
"upload_success": "File uploaded successfully", "upload_success": "File uploaded successfully",
"download_success": "File downloaded successfully", "download_success": "File downloaded successfully",
"delete_success": "File deleted successfully", "delete_success": "File deleted successfully",

View File

@@ -312,6 +312,7 @@
"delete_all_confirm": "确定要删除所有认证文件吗?此操作不可恢复!", "delete_all_confirm": "确定要删除所有认证文件吗?此操作不可恢复!",
"delete_filtered_confirm": "确定要删除筛选出的 {{type}} 认证文件吗?此操作不可恢复!", "delete_filtered_confirm": "确定要删除筛选出的 {{type}} 认证文件吗?此操作不可恢复!",
"upload_error_json": "只能上传JSON文件", "upload_error_json": "只能上传JSON文件",
"upload_error_size": "文件大小不能超过 {{maxSize}}",
"upload_success": "文件上传成功", "upload_success": "文件上传成功",
"download_success": "文件下载成功", "download_success": "文件下载成功",
"delete_success": "文件删除成功", "delete_success": "文件删除成功",

View File

@@ -81,6 +81,7 @@ const OAUTH_PROVIDER_PRESETS = [
const OAUTH_PROVIDER_EXCLUDES = new Set(['all', 'unknown', 'empty']); const OAUTH_PROVIDER_EXCLUDES = new Set(['all', 'unknown', 'empty']);
const MIN_CARD_PAGE_SIZE = 3; const MIN_CARD_PAGE_SIZE = 3;
const MAX_CARD_PAGE_SIZE = 30; const MAX_CARD_PAGE_SIZE = 30;
const MAX_AUTH_FILE_SIZE = 50 * 1024;
const clampCardPageSize = (value: number) => const clampCardPageSize = (value: number) =>
Math.min(MAX_CARD_PAGE_SIZE, Math.max(MIN_CARD_PAGE_SIZE, Math.round(value))); Math.min(MAX_CARD_PAGE_SIZE, Math.max(MIN_CARD_PAGE_SIZE, Math.round(value)));
@@ -372,18 +373,29 @@ export function AuthFilesPage() {
const filesToUpload = Array.from(fileList); const filesToUpload = Array.from(fileList);
const validFiles: File[] = []; const validFiles: File[] = [];
const invalidFiles: string[] = []; const invalidFiles: string[] = [];
const oversizedFiles: string[] = [];
filesToUpload.forEach((file) => { filesToUpload.forEach((file) => {
if (file.name.endsWith('.json')) { if (!file.name.endsWith('.json')) {
validFiles.push(file);
} else {
invalidFiles.push(file.name); invalidFiles.push(file.name);
return;
} }
if (file.size > MAX_AUTH_FILE_SIZE) {
oversizedFiles.push(file.name);
return;
}
validFiles.push(file);
}); });
if (invalidFiles.length > 0) { if (invalidFiles.length > 0) {
showNotification(t('auth_files.upload_error_json'), 'error'); showNotification(t('auth_files.upload_error_json'), 'error');
} }
if (oversizedFiles.length > 0) {
showNotification(
t('auth_files.upload_error_size', { maxSize: formatFileSize(MAX_AUTH_FILE_SIZE) }),
'error'
);
}
if (validFiles.length === 0) { if (validFiles.length === 0) {
event.target.value = ''; event.target.value = '';