Files
ros-dpi/backend/app/routers/auth.py
T
Su YijunandClaude Opus 5.5 f3e9fdb2af feat: ROS-DPI v0.1.0:RouterOS 终端流量与应用统计面板
- IPFIX / NetFlow v9 采集 + TZSP DNS 嗅探识别应用,可选 ROS 只读 REST 轮询
- 内置 100+ 应用规则库,支持自定义域名 / IP 段 / 端口规则
- 按分钟 / 小时 / 天汇总写入 MySQL
- 全网概览、主机监控、应用统计、流量流向(桑基图)、识别规则、系统设置
- 中英双语,深浅色主题,T568B 线色设计语言
- Docker 多架构镜像,GitHub Actions 测试与发布

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 23:51:02 +08:00

62 lines
1.9 KiB
Python

from fastapi import APIRouter, Depends, HTTPException
from pydantic import BaseModel, Field
from sqlalchemy.orm import Session
from app.database import get_db
from app.models import User
from app.security import current_user, make_token, pwd
router = APIRouter(prefix="/api/auth", tags=["auth"])
class Creds(BaseModel):
username: str = "admin"
password: str = Field(min_length=1)
class SetupReq(BaseModel):
username: str = Field("admin", min_length=1, max_length=64)
password: str = Field(min_length=6)
class PwChange(BaseModel):
old_password: str
new_password: str = Field(min_length=6)
@router.get("/status")
def status(db: Session = Depends(get_db)):
return {"initialized": db.query(User).count() > 0}
@router.post("/setup")
def setup(req: SetupReq, db: Session = Depends(get_db)):
if db.query(User).count() > 0:
raise HTTPException(400, "管理员已存在")
db.add(User(username=req.username, password_hash=pwd.hash(req.password)))
db.commit()
return {"token": make_token(req.username), "username": req.username}
@router.post("/login")
def login(req: Creds, db: Session = Depends(get_db)):
u = db.query(User).filter(User.username == req.username).first()
if not u or not pwd.verify(req.password, u.password_hash):
raise HTTPException(401, "用户名或密码错误")
return {"token": make_token(u.username), "username": u.username}
@router.get("/me")
def me(user: str = Depends(current_user)):
return {"username": user}
@router.post("/password")
def change_password(req: PwChange, user: str = Depends(current_user), db: Session = Depends(get_db)):
u = db.query(User).filter(User.username == user).first()
if not u or not pwd.verify(req.old_password, u.password_hash):
raise HTTPException(400, "原密码错误")
u.password_hash = pwd.hash(req.new_password)
db.commit()
return {"ok": True}