main2.py 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. from fastapi import FastAPI, Depends, HTTPException, status
  2. from sqlalchemy.orm import Session
  3. from fastapi.security import OAuth2PasswordRequestForm
  4. from .oauth_token import create_access_token
  5. from .schemas import User, Token
  6. from .auth2 import get_current_user
  7. from .users import UserModel, get_password_hash, authenticate_user
  8. from .db import get_session
  9. app = FastAPI()
  10. @app.post("/token", response_model=Token)
  11. def login_for_access_token(form_data: OAuth2PasswordRequestForm = Depends(), db: Session = Depends(get_session)):
  12. user = authenticate_user(db, form_data.username, form_data.password)
  13. print(user)
  14. if not user:
  15. raise HTTPException(
  16. status_code=status.HTTP_401_UNAUTHORIZED,
  17. detail="Incorrect username or password",
  18. headers={"WWW-Authenticate": "Bearer"},
  19. )
  20. access_token = create_access_token(data={"sub": user.username})
  21. return {"access_token": access_token, "token_type": "bearer"}
  22. @app.get("/users/me")
  23. def read_users_me(current_user: User = Depends(get_current_user)):
  24. return current_user
  25. @app.post("/users/createUsers")
  26. def create_user(user: User, db: Session = Depends(get_session), current_user: User = Depends(get_current_user)):
  27. # Check if the username already exists
  28. existing_user = db.query(UserModel).filter(UserModel.username == user.username).first()
  29. if existing_user:
  30. raise HTTPException(
  31. status_code=status.HTTP_400_BAD_REQUEST,
  32. detail="Username already exists",
  33. )
  34. hashed_password = get_password_hash(user.hashed_password)
  35. # Create a new user object
  36. new_user = UserModel(username=user.username, email=user.email, hashed_password=hashed_password)
  37. # Add the new user to the database
  38. db.add(new_user)
  39. db.commit()
  40. db.refresh(new_user)
  41. return {"message": "User created successfully", "user_id": new_user.id}