fix main
This commit is contained in:
35
main.py
35
main.py
@ -10,6 +10,9 @@ from typing import List, Optional
|
|||||||
import uvicorn
|
import uvicorn
|
||||||
from utils import save_image, delete_image
|
from utils import save_image, delete_image
|
||||||
import json
|
import json
|
||||||
|
from datetime import timedelta
|
||||||
|
import auth
|
||||||
|
from fastapi.middleware.cors import CORSMiddleware
|
||||||
|
|
||||||
# Создание таблиц в БД
|
# Создание таблиц в БД
|
||||||
models.Base.metadata.create_all(bind=engine)
|
models.Base.metadata.create_all(bind=engine)
|
||||||
@ -27,6 +30,33 @@ app.add_middleware(
|
|||||||
# Добавляем обработку статических файлов
|
# Добавляем обработку статических файлов
|
||||||
app.mount("/static", StaticFiles(directory="static"), name="static")
|
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)
|
@app.post("/token", response_model=schemas.Token)
|
||||||
async def login_for_access_token(form_data: OAuth2PasswordRequestForm = Depends(), db: Session = Depends(get_db)):
|
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)):
|
def read_users_me(current_admin: models.Admin = Depends(auth.get_current_admin)):
|
||||||
return 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__":
|
if __name__ == "__main__":
|
||||||
uvicorn.run(app, host="0.0.0.0", port=3000)
|
uvicorn.run(app, host="0.0.0.0", port=3000)
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user