diff --git a/apps/admin/depends.py b/apps/admin/depends.py new file mode 100644 index 0000000..6333480 --- /dev/null +++ b/apps/admin/depends.py @@ -0,0 +1,15 @@ +# @Time : 2023/8/15 17:43 +# @Author : Lan +# @File : depends.py +# @Software: PyCharm +from typing import Union + +from fastapi import Header, HTTPException +from fastapi.requests import Request +from core.settings import settings + + +async def admin_required(authorization: Union[str, None] = Header(default=None), request: Request = None): + if authorization != settings.admin_token: + raise HTTPException(status_code=401, detail='未授权或授权校验失败') + return True diff --git a/apps/admin/views.py b/apps/admin/views.py index a762abd..22b3bb4 100644 --- a/apps/admin/views.py +++ b/apps/admin/views.py @@ -2,8 +2,9 @@ # @Author : Lan # @File : views.py # @Software: PyCharm -from fastapi import APIRouter +from fastapi import APIRouter, Depends +from apps.admin.depends import admin_required from apps.admin.pydantics import IDData from apps.base.models import FileCodes from core.response import APIResponse @@ -16,7 +17,12 @@ admin_api = APIRouter( ) -@admin_api.delete('/file/delete') +@admin_api.post('/login', dependencies=[Depends(admin_required)]) +async def login(): + return APIResponse() + + +@admin_api.delete('/file/delete', dependencies=[Depends(admin_required)]) async def file_delete(data: IDData): file_code = await FileCodes.get(id=data.id) await file_storage.delete_file(file_code) @@ -24,7 +30,7 @@ async def file_delete(data: IDData): return APIResponse() -@admin_api.get('/file/list') +@admin_api.get('/file/list', dependencies=[Depends(admin_required)]) async def file_list(page: int = 1, size: int = 10): data = await FileCodes.all().limit(size).offset((page - 1) * size) return APIResponse(detail={ @@ -35,12 +41,12 @@ async def file_list(page: int = 1, size: int = 10): }) -@admin_api.get('/config/get') +@admin_api.get('/config/get', dependencies=[Depends(admin_required)]) async def get_config(): return APIResponse(detail=settings.__dict__) -@admin_api.patch('/config/update') +@admin_api.patch('/config/update', dependencies=[Depends(admin_required)]) async def update_config(data: dict): for k, v in data.items(): settings.__setattr__(k, v) diff --git a/apps/base/depends.py b/apps/base/depends.py index e768266..324bf0f 100644 --- a/apps/base/depends.py +++ b/apps/base/depends.py @@ -10,10 +10,6 @@ from fastapi import Header, HTTPException, Request from core.response import APIResponse -async def admin_required(pwd: Union[str, None] = Header(default=None), request: Request = None): - return False - - class IPRateLimit: def __init__(self, count, minutes): self.ips = {} diff --git a/core/settings.py b/core/settings.py index 1625eef..2dc6a21 100644 --- a/core/settings.py +++ b/core/settings.py @@ -17,6 +17,7 @@ default_value = { 's3_secret_access_key': '', 's3_bucket_name': '', 's3_endpoint_url': '', + 'admin_token': 'FileCodeBox2023', 'openUpload': 1, 'uploadSize': 1024 * 1024 * 10, 'uploadMinute': 1, diff --git a/fcb-fronted/src/stores/adminData.ts b/fcb-fronted/src/stores/adminData.ts new file mode 100644 index 0000000..059fa0c --- /dev/null +++ b/fcb-fronted/src/stores/adminData.ts @@ -0,0 +1,11 @@ +import { defineStore } from 'pinia'; +import {ref} from "vue"; + +export const useAdminData = defineStore('adminData', () => { + const adminPassword = ref(localStorage.getItem('adminPassword') || ''); + function updateAdminPwd(pwd: string) { + adminPassword.value = pwd; + localStorage.setItem('adminPassword', pwd); + } + return { adminPassword,updateAdminPwd }; +}); diff --git a/fcb-fronted/src/utils/request.ts b/fcb-fronted/src/utils/request.ts index 92c0dbf..3d6b62f 100644 --- a/fcb-fronted/src/utils/request.ts +++ b/fcb-fronted/src/utils/request.ts @@ -1,15 +1,17 @@ // @ts-ignore import axios from "axios"; import { ElMessage } from "element-plus"; - const instance = axios.create({ baseURL: import.meta.env.DEV ? "http://localhost:12345" : "/", timeout: 6000000, - headers:{ - 'Authorization':localStorage.getItem('auth') - } }); -// 对响应进行拦截 +instance.interceptors.request.use( + (config: any) => { + config.headers= { + 'Authorization': localStorage.getItem('adminPassword') || '', + } + return config; + }); instance.interceptors.response.use( (response:any) => { if (response.data.code === 200) { diff --git a/fcb-fronted/src/views/Admin/AdminView.vue b/fcb-fronted/src/views/Admin/AdminView.vue index 04cb03d..d7377f0 100644 --- a/fcb-fronted/src/views/Admin/AdminView.vue +++ b/fcb-fronted/src/views/Admin/AdminView.vue @@ -1,5 +1,5 @@ \ No newline at end of file diff --git a/fcb-fronted/src/views/Admin/SettingView.vue b/fcb-fronted/src/views/Admin/SettingView.vue index 2afc252..34b579b 100644 --- a/fcb-fronted/src/views/Admin/SettingView.vue +++ b/fcb-fronted/src/views/Admin/SettingView.vue @@ -9,6 +9,9 @@ + + + @@ -80,6 +83,7 @@ const config = ref({ name: '', description: '', file_storage: '', + admin_token: '', keywords: '', openUpload: 1, uploadSize: 1,