mirror of
https://github.com/eigent-ai/eigent.git
synced 2026-04-28 19:50:34 +00:00
update
This commit is contained in:
parent
a83484cce3
commit
983f2d00f8
13 changed files with 44 additions and 192 deletions
|
|
@ -8,20 +8,13 @@ from app.component.encrypt import password_verify
|
|||
from app.component.stack_auth import StackAuth
|
||||
from app.exception.exception import UserException
|
||||
from app.model.user.user import LoginByPasswordIn, LoginResponse, Status, User, RegisterIn
|
||||
from pydantic import BaseModel
|
||||
from loguru import logger
|
||||
from app.component.environment import env
|
||||
from datetime import datetime
|
||||
import jwt
|
||||
|
||||
|
||||
router = APIRouter(tags=["Login/Registration"])
|
||||
|
||||
|
||||
class RefreshTokenRequest(BaseModel):
|
||||
refresh_token: str
|
||||
|
||||
|
||||
@router.post("/login", name="login by email or password")
|
||||
async def by_password(data: LoginByPasswordIn, session: Session = Depends(session)) -> LoginResponse:
|
||||
"""
|
||||
|
|
@ -30,11 +23,7 @@ async def by_password(data: LoginByPasswordIn, session: Session = Depends(sessio
|
|||
user = User.by(User.email == data.email, s=session).one_or_none()
|
||||
if not user or not password_verify(data.password, user.password):
|
||||
raise UserException(code.password, _("Account or password error"))
|
||||
return LoginResponse(
|
||||
access_token=Auth.create_access_token(user.id),
|
||||
refresh_token=Auth.create_refresh_token(user.id),
|
||||
email=user.email
|
||||
)
|
||||
return LoginResponse(token=Auth.create_access_token(user.id), email=user.email)
|
||||
|
||||
|
||||
@router.post("/login-by_stack", name="login by stack")
|
||||
|
|
@ -68,11 +57,7 @@ async def by_stack_auth(
|
|||
s.add(user)
|
||||
s.commit()
|
||||
session.refresh(user)
|
||||
return LoginResponse(
|
||||
access_token=Auth.create_access_token(user.id),
|
||||
refresh_token=Auth.create_refresh_token(user.id),
|
||||
email=user.email
|
||||
)
|
||||
return LoginResponse(token=Auth.create_access_token(user.id), email=user.email)
|
||||
except Exception as e:
|
||||
s.rollback()
|
||||
logger.error(f"Failed to register: {e}")
|
||||
|
|
@ -80,11 +65,7 @@ async def by_stack_auth(
|
|||
else:
|
||||
if user.status == Status.Block:
|
||||
raise UserException(code.error, _("Your account has been blocked."))
|
||||
return LoginResponse(
|
||||
access_token=Auth.create_access_token(user.id),
|
||||
refresh_token=Auth.create_refresh_token(user.id),
|
||||
email=user.email
|
||||
)
|
||||
return LoginResponse(token=Auth.create_access_token(user.id), email=user.email)
|
||||
|
||||
|
||||
@router.post("/register", name="register by email/password")
|
||||
|
|
@ -107,40 +88,3 @@ async def register(data: RegisterIn, session: Session = Depends(session)):
|
|||
logger.error(f"Failed to register: {e}")
|
||||
raise UserException(code.error, _("Failed to register"))
|
||||
return {"status": "success"}
|
||||
|
||||
|
||||
@router.post("/refresh", name="refresh access token")
|
||||
async def refresh_token(data: RefreshTokenRequest, session: Session = Depends(session)) -> LoginResponse:
|
||||
"""
|
||||
Refresh the access token using a valid refresh token.
|
||||
"""
|
||||
try:
|
||||
# Decode the refresh token
|
||||
payload = jwt.decode(data.refresh_token, Auth.SECRET_KEY, algorithms=["HS256"])
|
||||
|
||||
# Verify it's a refresh token
|
||||
if payload.get("type") != "refresh":
|
||||
raise HTTPException(status_code=401, detail="Invalid token type")
|
||||
|
||||
# Check if expired
|
||||
if payload["exp"] < int(datetime.now().timestamp()):
|
||||
raise HTTPException(status_code=401, detail="Refresh token expired")
|
||||
|
||||
# Get the user
|
||||
user_id = payload["id"]
|
||||
user = session.get(User, user_id)
|
||||
if not user:
|
||||
raise HTTPException(status_code=401, detail="User not found")
|
||||
|
||||
# Check if user is blocked
|
||||
if user.status == Status.Block:
|
||||
raise HTTPException(status_code=401, detail="User account is blocked")
|
||||
|
||||
# Generate new tokens
|
||||
return LoginResponse(
|
||||
access_token=Auth.create_access_token(user.id),
|
||||
refresh_token=Auth.create_refresh_token(user.id),
|
||||
email=user.email
|
||||
)
|
||||
except jwt.InvalidTokenError:
|
||||
raise HTTPException(status_code=401, detail="Invalid refresh token")
|
||||
|
|
|
|||
|
|
@ -50,7 +50,7 @@ def get_privacy(session: Session = Depends(session), auth: Auth = Depends(auth_m
|
|||
|
||||
if not model:
|
||||
return UserPrivacySettings.default_settings()
|
||||
return model.privacy_setting
|
||||
return model.pricacy_setting
|
||||
|
||||
|
||||
@router.put("/user/privacy", name="update user privacy")
|
||||
|
|
@ -61,13 +61,13 @@ def put_privacy(data: UserPrivacySettings, session: Session = Depends(session),
|
|||
default_settings = UserPrivacySettings.default_settings()
|
||||
|
||||
if model:
|
||||
model.privacy_setting = {**model.privacy_setting, **data.model_dump()}
|
||||
model.pricacy_setting = {**model.pricacy_setting, **data.model_dump()}
|
||||
model.save(session)
|
||||
else:
|
||||
model = UserPrivacy(user_id=user_id, privacy_setting={**default_settings, **data.model_dump()})
|
||||
model = UserPrivacy(user_id=user_id, pricacy_setting={**default_settings, **data.model_dump()})
|
||||
model.save(session)
|
||||
|
||||
return model.privacy_setting
|
||||
return model.pricacy_setting
|
||||
|
||||
|
||||
@router.get("/user/current_credits", name="get user current credits")
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue