mirror of
https://github.com/mealie-recipes/mealie.git
synced 2025-12-28 05:05:12 -05:00
Feature/event notifications (#399)
* additional server events * sort 'recent recipes' by updated * remove duplicate code * fixes #396 * set color * consolidate tag/category pages * set colors * list unorganized recipes * cleanup old code * remove flash message, switch to global snackbar * cancel to close * cleanup * notifications first pass * test notification * complete notification feature * use background tasks * add url param * update documentation Co-authored-by: hay-kot <hay-kot@pm.me>
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
from fastapi import APIRouter, Depends, Request, status
|
||||
from fastapi import APIRouter, BackgroundTasks, Depends, Request, status
|
||||
from fastapi.exceptions import HTTPException
|
||||
from fastapi.security import OAuth2PasswordRequestForm
|
||||
from mealie.core import security
|
||||
@@ -15,6 +15,7 @@ router = APIRouter(prefix="/api/auth", tags=["Authentication"])
|
||||
@router.post("/token/long")
|
||||
@router.post("/token")
|
||||
def get_token(
|
||||
background_tasks: BackgroundTasks,
|
||||
request: Request,
|
||||
data: OAuth2PasswordRequestForm = Depends(),
|
||||
session: Session = Depends(generate_session),
|
||||
@@ -25,7 +26,9 @@ def get_token(
|
||||
user = authenticate_user(session, email, password)
|
||||
|
||||
if not user:
|
||||
create_user_event("Failed Login", f"Username: {email}, Source IP: '{request.client.host}'")
|
||||
background_tasks.add_task(
|
||||
create_user_event, "Failed Login", f"Username: {email}, Source IP: '{request.client.host}'"
|
||||
)
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_401_UNAUTHORIZED,
|
||||
headers={"WWW-Authenticate": "Bearer"},
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import shutil
|
||||
|
||||
from fastapi import APIRouter, Depends, File, HTTPException, UploadFile, status
|
||||
from fastapi import APIRouter, BackgroundTasks, Depends, File, HTTPException, UploadFile, status
|
||||
from fastapi.responses import FileResponse
|
||||
from mealie.core import security
|
||||
from mealie.core.config import app_dirs, settings
|
||||
@@ -17,13 +17,16 @@ router = APIRouter(prefix="/api/users", tags=["Users"])
|
||||
|
||||
@router.post("", response_model=UserOut, status_code=201)
|
||||
async def create_user(
|
||||
background_tasks: BackgroundTasks,
|
||||
new_user: UserIn,
|
||||
current_user=Depends(get_current_user),
|
||||
session: Session = Depends(generate_session),
|
||||
):
|
||||
|
||||
new_user.password = get_password_hash(new_user.password)
|
||||
create_user_event("User Created", f"Created by {current_user.full_name}", session=session)
|
||||
background_tasks.add_task(
|
||||
create_user_event, "User Created", f"Created by {current_user.full_name}", session=session
|
||||
)
|
||||
return db.users.create(session, new_user.dict())
|
||||
|
||||
|
||||
@@ -138,6 +141,7 @@ async def update_password(
|
||||
|
||||
@router.delete("/{id}")
|
||||
async def delete_user(
|
||||
background_tasks: BackgroundTasks,
|
||||
id: int,
|
||||
current_user: UserInDB = Depends(get_current_user),
|
||||
session: Session = Depends(generate_session),
|
||||
@@ -150,6 +154,6 @@ async def delete_user(
|
||||
if current_user.id == id or current_user.admin:
|
||||
try:
|
||||
db.users.delete(session, id)
|
||||
create_user_event("User Deleted", f"User ID: {id}", session=session)
|
||||
background_tasks.add_task(create_user_event, "User Deleted", f"User ID: {id}", session=session)
|
||||
except Exception:
|
||||
raise HTTPException(status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import uuid
|
||||
|
||||
from fastapi import APIRouter, Depends, HTTPException, status
|
||||
from fastapi import APIRouter, BackgroundTasks, Depends, HTTPException, status
|
||||
from mealie.core.security import get_password_hash
|
||||
from mealie.db.database import db
|
||||
from mealie.db.db_setup import generate_session
|
||||
@@ -25,6 +25,7 @@ async def get_all_open_sign_ups(
|
||||
|
||||
@router.post("", response_model=SignUpToken)
|
||||
async def create_user_sign_up_key(
|
||||
background_tasks: BackgroundTasks,
|
||||
key_data: SignUpIn,
|
||||
current_user: UserInDB = Depends(get_current_user),
|
||||
session: Session = Depends(generate_session),
|
||||
@@ -39,12 +40,16 @@ async def create_user_sign_up_key(
|
||||
"name": key_data.name,
|
||||
"admin": key_data.admin,
|
||||
}
|
||||
create_user_event("Sign-up Token Created", f"Created by {current_user.full_name}", session=session)
|
||||
|
||||
background_tasks.add_task(
|
||||
create_user_event, "Sign-up Token Created", f"Created by {current_user.full_name}", session=session
|
||||
)
|
||||
return db.sign_ups.create(session, sign_up)
|
||||
|
||||
|
||||
@router.post("/{token}")
|
||||
async def create_user_with_token(
|
||||
background_tasks: BackgroundTasks,
|
||||
token: str,
|
||||
new_user: UserIn,
|
||||
session: Session = Depends(generate_session),
|
||||
@@ -62,7 +67,9 @@ async def create_user_with_token(
|
||||
db.users.create(session, new_user.dict())
|
||||
|
||||
# DeleteToken
|
||||
create_user_event("Sign-up Token Used", f"New User {new_user.full_name}", session=session)
|
||||
background_tasks.add_task(
|
||||
create_user_event, "Sign-up Token Used", f"New User {new_user.full_name}", session=session
|
||||
)
|
||||
db.sign_ups.delete(session, token)
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user