fix main
This commit is contained in:
35
main.py
35
main.py
@ -10,6 +10,9 @@ from typing import List, Optional
|
||||
import uvicorn
|
||||
from utils import save_image, delete_image
|
||||
import json
|
||||
from datetime import timedelta
|
||||
import auth
|
||||
from fastapi.middleware.cors import CORSMiddleware
|
||||
|
||||
# Создание таблиц в БД
|
||||
models.Base.metadata.create_all(bind=engine)
|
||||
@ -27,6 +30,33 @@ app.add_middleware(
|
||||
# Добавляем обработку статических файлов
|
||||
app.mount("/static", StaticFiles(directory="static"), name="static")
|
||||
|
||||
# Эндпоинты для авторизации
|
||||
@app.post("/token", response_model=schemas.Token)
|
||||
async def login_for_access_token(form_data: OAuth2PasswordRequestForm = Depends(), db: Session = Depends(get_db)):
|
||||
admin = auth.authenticate_admin(db, form_data.username, form_data.password)
|
||||
if not admin:
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_401_UNAUTHORIZED,
|
||||
detail="Неверное имя пользователя или пароль",
|
||||
headers={"WWW-Authenticate": "Bearer"},
|
||||
)
|
||||
access_token_expires = timedelta(minutes=auth.ACCESS_TOKEN_EXPIRE_MINUTES)
|
||||
access_token = auth.create_access_token(
|
||||
data={"sub": admin.username}, expires_delta=access_token_expires
|
||||
)
|
||||
return {"access_token": access_token, "token_type": "bearer"}
|
||||
|
||||
@app.post("/admins", response_model=schemas.Admin, status_code=status.HTTP_201_CREATED)
|
||||
def create_admin(admin: schemas.AdminCreate, db: Session = Depends(get_db), current_admin: models.Admin = Depends(auth.get_current_admin)):
|
||||
# Проверка, что создать админа может только существующий админ
|
||||
db_admin = crud.get_admin_by_username(db, username=admin.username)
|
||||
if db_admin:
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_400_BAD_REQUEST,
|
||||
detail="Пользователь с таким именем уже существует"
|
||||
)
|
||||
return crud.create_admin(db=db, admin=admin)
|
||||
|
||||
# Эндпоинты для авторизации
|
||||
@app.post("/token", response_model=schemas.Token)
|
||||
async def login_for_access_token(form_data: OAuth2PasswordRequestForm = Depends(), db: Session = Depends(get_db)):
|
||||
@ -190,6 +220,11 @@ def delete_car(
|
||||
def read_users_me(current_admin: models.Admin = Depends(auth.get_current_admin)):
|
||||
return current_admin
|
||||
|
||||
# Эндпоинт для проверки текущего пользователя (только для отладки)
|
||||
@app.get("/users/me", response_model=schemas.Admin)
|
||||
def read_users_me(current_admin: models.Admin = Depends(auth.get_current_admin)):
|
||||
return current_admin
|
||||
|
||||
if __name__ == "__main__":
|
||||
uvicorn.run(app, host="0.0.0.0", port=3000)
|
||||
|
||||
|
Reference in New Issue
Block a user