Files
LoveACE-EndF/router/invite/__init__.py

119 lines
3.7 KiB
Python
Raw Normal View History

2025-08-03 16:50:56 +08:00
from fastapi import Depends
from fastapi.routing import APIRouter
from database.user import Invite, User
from database.creator import get_db_session
from sqlalchemy.ext.asyncio import AsyncSession
from sqlalchemy import select
from router.invite.model import (
InviteRequest,
RegisterRequest,
InviteResponse,
RegisterResponse,
InviteTokenData,
AuthMeData,
)
from provider.aufe.client import AUFEConnection
from database.user import AuthME
import secrets
invite_router = APIRouter(prefix="/api/v1/user")
invite_tokens = []
@invite_router.post("/veryfy_invite_code", summary="验证邀请码")
async def verify_invite_code(
data: InviteRequest,
asyncsession: AsyncSession = Depends(get_db_session),
) -> InviteResponse:
"""
验证邀请码
:param data: InviteRequest
:return: InviteResponse
"""
async with asyncsession as session:
invite_code = data.invite_code
invite = select(Invite).where(Invite.invite_code == invite_code)
result = await session.execute(invite)
invite_data = result.scalars().first()
if invite_data:
invite_token = secrets.token_urlsafe(128)
invite_tokens.append(invite_token)
return InviteResponse(
code=200,
message="邀请码验证成功",
data=InviteTokenData(invite_token=invite_token),
)
else:
return InviteResponse(
code=400,
message="邀请码无效或已过期",
data=None,
)
@invite_router.post("/register", summary="注册新用户")
async def register_user(
data: RegisterRequest,
asyncsession: AsyncSession = Depends(get_db_session),
) -> RegisterResponse:
"""
注册新用户
:param data: RegisterRequest
:return: RegisterResponse
"""
async with asyncsession as session:
userid = data.userid
password = data.password
easyconnect_password = data.easyconnect_password
invite_token = data.invite_token
if invite_token not in invite_tokens:
return RegisterResponse(
code=400,
message="无效的邀请令牌",
data=None,
)
# 检查用户是否已存在
existing_user = await session.execute(select(User).where(User.userid == userid))
if existing_user.scalars().first():
return RegisterResponse(
code=400,
message="用户已存在",
data=None,
)
# 检查连接
vpn = AUFEConnection.create_or_get_connection("vpn.aufe.edu.cn", userid)
if not await vpn.login(userid, easyconnect_password):
return RegisterResponse(
code=400,
message="VPN登录失败请检查用户名和密码",
data=None,
)
if not await vpn.uaap_login(userid, password):
return RegisterResponse(
code=400,
message="大学登录失败,请检查用户名和密码",
data=None,
)
# 创建新用户
new_user = User(
userid=userid,
password=password,
easyconnect_password=easyconnect_password,
)
session.add(new_user)
await session.commit()
authme_token = secrets.token_urlsafe(128)
new_authme = AuthME(userid=userid, authme_token=authme_token)
session.add(new_authme)
await session.commit()
invite_tokens.remove(invite_token)
return RegisterResponse(
code=200,
message="注册成功",
data=AuthMeData(authme_token=authme_token),
)