fix user manage

This commit is contained in:
jxxghp 2023-07-09 16:14:04 +08:00
parent 3d5fea971a
commit 9d9fde387c
7 changed files with 55 additions and 39 deletions

View File

@ -4,21 +4,14 @@ ENV LANG="C.UTF-8" \
PUID=0 \
PGID=0 \
UMASK=000 \
WORKDIR="/app" \
CONFIG_DIR="/config" \
API_TOKEN="moviepilot" \
SUPERUSER="admin" \
SUPERUSER_PASSWORD="password" \
AUTH_SITE="iyuu" \
LIBRARY_PATH="" \
DOWNLOAD_PATH="/downloads" \
TORRENT_TAG="MOVIEPILOT" \
SEARCH_SOURCE="themoviedb" \
SCRAP_SOURCE="themoviedb" \
COOKIECLOUD_HOST="https://nastool.org/cookiecloud" \
COOKIECLOUD_KEY="" \
COOKIECLOUD_PASSWORD="" \
USER_AGENT="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 Edg/113.0.1774.57" \
MESSAGER="telegram" \
TELEGRAM_TOKEN="" \
TELEGRAM_CHAT_ID="" \
@ -32,7 +25,7 @@ ENV LANG="C.UTF-8" \
FILTER_RULE="!BLU & 4K & CN > !BLU & 1080P & CN > !BLU & 4K > !BLU & 1080P" \
TRANSFER_TYPE="copy" \
DOUBAN_USER_IDS=""
WORKDIR ${WORKDIR}
WORKDIR "/app"
COPY . .
RUN apt-get update \
&& apt-get -y install musl-dev nginx \
@ -40,7 +33,7 @@ RUN apt-get update \
&& cp -f nginx.conf /etc/nginx/nginx.conf \
&& pip install -r requirements.txt \
&& python_ver=$(python3 -V | awk '{print $2}') \
&& echo "${WORKDIR}/" > /usr/local/lib/python${python_ver%.*}/site-packages/app.pth \
&& echo "/app/" > /usr/local/lib/python${python_ver%.*}/site-packages/app.pth \
&& echo 'fs.inotify.max_user_watches=5242880' >> /etc/sysctl.conf \
&& echo 'fs.inotify.max_user_instances=5242880' >> /etc/sysctl.conf \
&& playwright install-deps chromium \

View File

@ -9,6 +9,7 @@ from app import schemas
from app.chain.user import UserChain
from app.core import security
from app.core.config import settings
from app.core.security import get_password_hash
from app.db import get_db
from app.db.models.user import User
from app.log import logger
@ -42,7 +43,8 @@ async def login_access_token(
user = User.get_by_name(db=db, name=form_data.username)
if not user:
logger.info(f"用户不存在,创建用户: {form_data.username}")
user = User(name=form_data.username, is_active=True, is_superuser=False)
user = User(name=form_data.username, is_active=True,
is_superuser=False, hashed_password=get_password_hash(token))
user.create(db)
elif not user.is_active:
raise HTTPException(status_code=403, detail="用户未启用")

View File

@ -1,11 +1,14 @@
import json
import json
import time
from typing import Any
from fastapi import APIRouter, HTTPException
from fastapi import APIRouter, HTTPException, Depends
from fastapi.responses import StreamingResponse
from app import schemas
from app.core.security import verify_token
from app.db.systemconfig_oper import SystemConfigOper
from app.helper.message import MessageHelper
from app.helper.progress import ProgressHelper
@ -34,6 +37,23 @@ def get_progress(process_type: str, token: str):
return StreamingResponse(event_generator(), media_type="text/event-stream")
@router.get("/setting", summary="查询系统设置")
def get_setting(key: str, _: schemas.TokenPayload = Depends(verify_token)):
"""
查询系统设置
"""
return schemas.Response(success=True, data=SystemConfigOper().get(key))
@router.put("/setting", summary="更新系统设置")
def set_setting(key: str, value: Any, _: schemas.TokenPayload = Depends(verify_token)):
"""
更新系统设置
"""
SystemConfigOper().set(key, value)
return schemas.Response(success=True)
@router.get("/message", summary="实时消息")
def get_progress(token: str):
"""

View File

@ -24,7 +24,7 @@ def read_users(
return users
@router.post("/", summary="新增用户", response_model=schemas.User)
@router.post("/", summary="新增用户", response_model=schemas.Response)
def create_user(
*,
db: Session = Depends(get_db),
@ -36,63 +36,64 @@ def create_user(
"""
user = current_user.get_by_name(db, name=user_in.name)
if user:
raise HTTPException(
status_code=400,
detail="用户已存在",
)
return schemas.Response(success=False, message="用户已存在")
user_info = user_in.dict()
if user_info.get("password"):
user_info["hashed_password"] = get_password_hash(user_info["password"])
user_info.pop("password")
user = User(**user_info)
user = user.create(db)
return user
return schemas.Response(success=True)
@router.put("/", summary="更新用户", response_model=schemas.User)
@router.put("/", summary="更新用户", response_model=schemas.Response)
def update_user(
*,
db: Session = Depends(get_db),
user_in: schemas.UserCreate,
current_user: User = Depends(get_current_active_superuser),
_: User = Depends(get_current_active_superuser),
) -> Any:
"""
更新用户
"""
user = current_user.get_by_name(db, name=user_in.name)
if not user:
raise HTTPException(
status_code=404,
detail="用户不存在",
)
user_info = user_in.dict()
if user_info.get("password"):
user_info["hashed_password"] = get_password_hash(user_info["password"])
user_info.pop("password")
user.update(db, **user_info)
return user
user = User.get_by_name(db, name=user_info["name"])
if not user:
return schemas.Response(success=False, message="用户不存在")
user.update(db, user_info)
return schemas.Response(success=True)
@router.delete("/", summary="删除用户", response_model=schemas.Response)
@router.delete("/{user_name}", summary="删除用户", response_model=schemas.Response)
def delete_user(
*,
db: Session = Depends(get_db),
user_in: schemas.UserCreate,
user_name: str,
current_user: User = Depends(get_current_active_superuser),
) -> Any:
"""
删除用户
"""
user = current_user.get_by_name(db, name=user_in.name)
user = current_user.get_by_name(db, name=user_name)
if not user:
raise HTTPException(
status_code=404,
detail="用户不存在",
)
user.delete_by_name(db, user_in.name)
return schemas.Response(success=False, message="用户不存在")
user.delete_by_name(db, user_name)
return schemas.Response(success=True)
@router.get("/current", summary="当前登录用户信息", response_model=schemas.User)
def read_current_user(
current_user: User = Depends(get_current_active_user)
) -> Any:
"""
当前登录用户信息
"""
return current_user
@router.get("/{user_id}", summary="用户详情", response_model=schemas.User)
def read_user_by_id(
user_id: int,

View File

@ -27,7 +27,7 @@ class Settings(BaseSettings):
CONFIG_DIR: str = None
# 超级管理员
SUPERUSER: str = "admin"
# 超级管理员密码
# 超级管理员初始密码
SUPERUSER_PASSWORD: str = "password"
# API密钥需要更换
API_TOKEN: str = "moviepilot"

View File

@ -14,9 +14,9 @@ class User(Base):
# 用户名
name = Column(String, index=True, nullable=False)
# 邮箱,未启用
email = Column(String, unique=True, index=True)
email = Column(String)
# 加密后密码
hashed_password = Column(String, nullable=False)
hashed_password = Column(String)
# 是否启用
is_active = Column(Boolean(), default=True)
# 是否管理员

View File

@ -21,7 +21,7 @@ class UserBase(BaseModel):
class UserCreate(UserBase):
name: str
email: Optional[str] = None
password: str
password: Optional[str] = None
# Properties to receive via API on update