修改优化开箱显示图片

This commit is contained in:
HibiKier
2023-04-01 01:50:34 +08:00
parent 4e35090ba6
commit 0c7c7f3987
16 changed files with 202 additions and 106 deletions
+6 -5
View File
@@ -1,4 +1,5 @@
from pydantic.error_wrappers import ValidationError
from services.log import logger
from utils.manager import group_manager
from utils.utils import get_bot
@@ -7,8 +8,8 @@ from ..auth import Depends, User, token_to_user
from ..config import *
@app.get("/webui/group")
async def _(user: User = Depends(token_to_user)) -> Result:
@router.get("/group", dependencies=[token_to_user()])
async def _() -> Result:
"""
获取群信息
"""
@@ -47,8 +48,8 @@ async def _(user: User = Depends(token_to_user)) -> Result:
return Result(code=200, data=group_list_result)
@app.post("/webui/group")
async def _(group: GroupResult, user: User = Depends(token_to_user)) -> Result:
@router.post("/group", dependencies=[token_to_user()])
async def _(group: GroupResult) -> Result:
"""
修改群信息
"""
@@ -58,4 +59,4 @@ async def _(group: GroupResult, user: User = Depends(token_to_user)) -> Result:
group_manager.turn_on_group_bot_status(group_id)
else:
group_manager.shutdown_group_bot_status(group_id)
return Result(code=200, data="修改成功!")
return Result(data="修改成功!")
+17 -8
View File
@@ -1,9 +1,14 @@
from pydantic import ValidationError
from configs.config import Config
from services.log import logger
from utils.manager import (plugins2block_manager, plugins2cd_manager,
plugins2count_manager, plugins2settings_manager,
plugins_manager)
from utils.manager import (
plugins2block_manager,
plugins2cd_manager,
plugins2count_manager,
plugins2settings_manager,
plugins_manager,
)
from utils.utils import get_matchers
from ..auth import Depends, User, token_to_user
@@ -12,8 +17,8 @@ from ..config import *
plugin_name_list = None
@app.get("/webui/plugins")
def _(type_: Optional[str], user: User = Depends(token_to_user)) -> Result:
@router.get("/plugins", dependencies=[token_to_user()])
def _(type_: Optional[str]) -> Result:
"""
获取插件列表
:param type_: 类型 normal, superuser, hidden, admin
@@ -101,7 +106,7 @@ def _(type_: Optional[str], user: User = Depends(token_to_user)) -> Result:
return Result(code=200, data=plugin_list)
@app.post("/webui/plugins")
@router.post("/plugins", dependencies=[token_to_user()])
def _(plugin: Plugin, user: User = Depends(token_to_user)) -> Result:
"""
修改插件信息
@@ -126,7 +131,9 @@ def _(plugin: Plugin, user: User = Depends(token_to_user)) -> Result:
) or isinstance(c.default_value, float):
c.value = float(c.value)
elif isinstance(c.value, str) and (
isinstance(Config.get_config(plugin.model, c.key, c.value), (list, tuple))
isinstance(
Config.get_config(plugin.model, c.key, c.value), (list, tuple)
)
or isinstance(c.default_value, (list, tuple))
):
default_value = Config.get_config(plugin.model, c.key, c.value)
@@ -161,7 +168,9 @@ def _(plugin: Plugin, user: User = Depends(token_to_user)) -> Result:
)
for key in plugins2settings_manager.keys():
if isinstance(plugins2settings_manager[key].cmd, str):
plugins2settings_manager[key].cmd = plugins2settings_manager[key].cmd.split(',')
plugins2settings_manager[key].cmd = plugins2settings_manager[key].cmd.split(
","
)
plugins2settings_manager.save()
plugins_manager.save()
return Result(code=200, data="修改成功!")
+6 -6
View File
@@ -6,8 +6,8 @@ from ..auth import Depends, User, token_to_user
from ..config import *
@app.get("/webui/request")
def _(type_: Optional[str], user: User = Depends(token_to_user)) -> Result:
@router.get("/webui/request", dependencies=[token_to_user()])
def _(type_: Optional[str]) -> Result:
req_data = requests_manager.get_data()
req_list = []
if type_ in ["group", "private"]:
@@ -19,8 +19,8 @@ def _(type_: Optional[str], user: User = Depends(token_to_user)) -> Result:
return Result(code=200, data=req_list)
@app.delete("/webui/request")
def _(type_: Optional[str], user: User = Depends(token_to_user)) -> Result:
@router.delete("/webui/request", dependencies=[token_to_user()])
def _(type_: Optional[str]) -> Result:
"""
清空请求
:param type_: 类型
@@ -29,8 +29,8 @@ def _(type_: Optional[str], user: User = Depends(token_to_user)) -> Result:
return Result(code=200)
@app.post("/webui/request")
async def _(parma: RequestParma, user: User = Depends(token_to_user)) -> Result:
@router.post("/webui/request", dependencies=[token_to_user()])
async def _(parma: RequestParma) -> Result:
"""
操作请求
:param parma: 参数
+11 -10
View File
@@ -4,6 +4,7 @@ from pathlib import Path
import psutil
import ujson as json
from configs.path_config import (
DATA_PATH,
FONT_PATH,
@@ -28,21 +29,21 @@ memory_data = {"data": []}
disk_data = {"data": []}
@app.get("/webui/system")
@router.get("/system", dependencies=[token_to_user()])
async def _() -> Result:
return await get_system_data()
@app.get("/webui/system/status")
async def _(user: User = Depends(token_to_user)) -> Result:
@router.get("/webui/system/status", dependencies=[token_to_user()])
async def _() -> Result:
return Result(
code=200,
data=await asyncio.get_event_loop().run_in_executor(None, _get_system_status),
)
@app.get("/webui/system/disk")
async def _(type_: Optional[str] = None, user: User = Depends(token_to_user)) -> Result:
@router.get("/webui/system/disk", dependencies=[token_to_user()])
async def _(type_: Optional[str] = None) -> Result:
return Result(
code=200,
data=await asyncio.get_event_loop().run_in_executor(
@@ -51,8 +52,8 @@ async def _(type_: Optional[str] = None, user: User = Depends(token_to_user)) ->
)
@app.get("/webui/system/statusList")
async def _(user: User = Depends(token_to_user)) -> Result:
@router.get("/webui/system/statusList", dependencies=[token_to_user()])
async def _() -> Result:
global cpu_data, memory_data, disk_data
await asyncio.get_event_loop().run_in_executor(None, _get_system_status)
cpu_rst = cpu_data["data"][-10:] if len(cpu_data["data"]) > 10 else cpu_data["data"]
@@ -74,7 +75,7 @@ async def _(user: User = Depends(token_to_user)) -> Result:
)
async def get_system_data(user: User = Depends(token_to_user)):
async def get_system_data():
"""
说明:
获取系统信息,资源文件大小,网络状态等
@@ -105,7 +106,7 @@ async def get_system_data(user: User = Depends(token_to_user)):
)
def _get_system_status(user: User = Depends(token_to_user)) -> SystemStatus:
def _get_system_status() -> SystemStatus:
"""
说明:
获取系统信息等
@@ -123,7 +124,7 @@ def _get_system_status(user: User = Depends(token_to_user)) -> SystemStatus:
def _get_system_disk(
type_: Optional[str], user: User = Depends(token_to_user)
type_: Optional[str],
) -> Union[SystemFolderSize, Dict[str, Union[float, datetime]]]:
"""
说明:
+23 -23
View File
@@ -1,16 +1,18 @@
import json
from datetime import datetime, timedelta
from configs.path_config import DATA_PATH
from typing import Optional
from starlette import status
import nonebot
from fastapi import Depends, HTTPException
from fastapi.security import OAuth2PasswordBearer, OAuth2PasswordRequestForm
from pydantic import BaseModel
from configs.config import Config
from jose import JWTError, jwt
import nonebot
from pydantic import BaseModel
from starlette import status
from ..config import Result
from configs.config import Config
from configs.path_config import DATA_PATH
from ..config import Result, router
app = nonebot.get_app()
@@ -19,14 +21,14 @@ SECRET_KEY = "09d25e094faa6ca2556c818166b7a9563b93f7099f6f0f4caa6cf63b88e8d3e7"
ALGORITHM = "HS256"
ACCESS_TOKEN_EXPIRE_MINUTES = 30
oauth2_scheme = OAuth2PasswordBearer(tokenUrl="webui/login")
oauth2_scheme = OAuth2PasswordBearer(tokenUrl="api/login")
token_file = DATA_PATH / "web_ui" / "token.json"
token_file.parent.mkdir(parents=True, exist_ok=True)
token_data = {"token": []}
if token_file.exists():
token_data = json.load(open(token_file, 'r', encoding='utf8'))
token_data = json.load(open(token_file, "r", encoding="utf8"))
class User(BaseModel):
@@ -39,11 +41,6 @@ class Token(BaseModel):
token_type: str
# USER_LIST = [
# User(username="admin", password="123")
# ]
def get_user(uname: str) -> Optional[User]:
username = Config.get_config("web-ui", "username")
password = Config.get_config("web-ui", "password")
@@ -59,24 +56,26 @@ form_exception = HTTPException(
def create_token(user: User, expires_delta: Optional[timedelta] = None):
expire = datetime.utcnow() + expires_delta or timedelta(minutes=15)
expire = datetime.utcnow() + (expires_delta or timedelta(minutes=15))
return jwt.encode(
claims={"sub": user.username, "exp": expire},
key=SECRET_KEY,
algorithm=ALGORITHM
algorithm=ALGORITHM,
)
@app.post("/webui/login")
@router.post("/login")
async def login_get_token(form_data: OAuth2PasswordRequestForm = Depends()):
user: User = get_user(form_data.username)
user = get_user(form_data.username)
if not user or user.password != form_data.password:
raise form_exception
access_token = create_token(user=user, expires_delta=timedelta(minutes=ACCESS_TOKEN_EXPIRE_MINUTES))
access_token = create_token(
user=user, expires_delta=timedelta(minutes=ACCESS_TOKEN_EXPIRE_MINUTES)
)
token_data["token"].append(access_token)
if len(token_data["token"]) > 3:
token_data["token"] = token_data["token"][1:]
with open(token_file, 'w', encoding="utf8") as f:
with open(token_file, "w", encoding="utf8") as f:
json.dump(token_data, f, ensure_ascii=False, indent=4)
return {"access_token": access_token, "token_type": "bearer"}
@@ -88,20 +87,21 @@ credentials_exception = HTTPException(
)
@app.post("/webui/auth")
@app.post("/auth")
def token_to_user(token: str = Depends(oauth2_scheme)):
if token not in token_data["token"]:
try:
payload = jwt.decode(token, SECRET_KEY, algorithms=[ALGORITHM])
username, expire = payload.get("sub"), payload.get("exp")
user = get_user(username)
user = get_user(username) # type: ignore
if user is None:
raise JWTError
except JWTError:
return Result(code=401)
return Result(code=200, data="ok")
return Result(code=200, info="登录成功")
if __name__ == '__main__':
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="127.0.0.1", port=8080)
+28 -6
View File
@@ -1,9 +1,10 @@
from typing import Optional, List, Any, Union, Dict
from pydantic import BaseModel
from fastapi.middleware.cors import CORSMiddleware
from datetime import datetime
import nonebot
from typing import Any, Dict, List, Optional, Union
import nonebot
from fastapi import APIRouter
from fastapi.middleware.cors import CORSMiddleware
from pydantic import BaseModel
app = nonebot.get_app()
@@ -17,11 +18,14 @@ app.add_middleware(
allow_headers=["*"],
)
router = APIRouter(tags=["api"])
class CdLimit(BaseModel):
"""
Cd 限制
"""
cd: int
status: bool
check_type: str
@@ -33,6 +37,7 @@ class BlockLimit(BaseModel):
"""
Block限制
"""
status: bool
check_type: str
limit_type: str
@@ -43,6 +48,7 @@ class CountLimit(BaseModel):
"""
Count限制
"""
max_count: int
status: bool
limit_type: str
@@ -53,6 +59,7 @@ class PluginManager(BaseModel):
"""
插件信息
"""
plugin_name: str # 插件名称
status: Optional[bool] # 插件状态
error: Optional[bool] # 加载状态
@@ -65,6 +72,7 @@ class PluginSettings(BaseModel):
"""
插件基本设置
"""
level: Optional[int] # 群权限等级
default_status: Optional[bool] # 默认开关
limit_superuser: Optional[bool] # 是否限制超级用户
@@ -77,6 +85,7 @@ class PluginConfig(BaseModel):
"""
插件配置项
"""
id: int
key: str
value: Optional[Any]
@@ -88,6 +97,7 @@ class Plugin(BaseModel):
"""
插件
"""
model: str # 模块
plugin_settings: Optional[PluginSettings]
plugin_manager: Optional[PluginManager]
@@ -101,6 +111,7 @@ class Group(BaseModel):
"""
群组信息
"""
group_id: int
group_name: str
member_count: int
@@ -111,6 +122,7 @@ class Task(BaseModel):
"""
被动技能
"""
name: str
nameZh: str
status: bool
@@ -120,6 +132,7 @@ class GroupResult(BaseModel):
"""
群组返回数据
"""
group: Group
level: int
status: bool
@@ -131,6 +144,7 @@ class RequestResult(BaseModel):
"""
好友/群组请求管理
"""
oid: str
id: int
flag: str
@@ -148,6 +162,7 @@ class RequestParma(BaseModel):
"""
操作请求接收数据
"""
id: int
handle: str
type: str
@@ -157,6 +172,7 @@ class SystemStatus(BaseModel):
"""
系统状态
"""
cpu: int
memory: int
disk: int
@@ -167,6 +183,7 @@ class SystemNetwork(BaseModel):
"""
系统网络状态
"""
baidu: int
google: int
@@ -175,6 +192,7 @@ class SystemFolderSize(BaseModel):
"""
资源文件占比
"""
font_dir_size: float
image_dir_size: float
text_dir_size: float
@@ -189,6 +207,7 @@ class SystemStatusList(BaseModel):
"""
状态记录
"""
cpu_data: List[Dict[str, Union[float, str]]]
memory_data: List[Dict[str, Union[float, str]]]
disk_data: List[Dict[str, Union[float, str]]]
@@ -198,6 +217,7 @@ class SystemResult(BaseModel):
"""
系统api返回
"""
status: SystemStatus
network: SystemNetwork
disk: SystemFolderSize
@@ -208,5 +228,7 @@ class Result(BaseModel):
"""
总体返回
"""
code: int
data: Any
code: int = 200
info: str = "操作成功"
data: Any = None