additional server events

This commit is contained in:
hay-kot 2021-05-06 21:47:53 -08:00
commit 962861970d
9 changed files with 43 additions and 18 deletions

View file

@ -67,7 +67,7 @@ export default {
color: "primary", color: "primary",
}, },
backup: { backup: {
icon: "mdi-backup-restore", icon: "mdi-database",
color: "primary", color: "primary",
}, },
schedule: { schedule: {
@ -78,9 +78,13 @@ export default {
icon: "mdi-database-import", icon: "mdi-database-import",
color: "primary", color: "primary",
}, },
signup: { user: {
icon: "mdi-account", icon: "mdi-account",
color: "primary", color: "accent",
},
group: {
icon: "mdi-account-group-outline",
color: "accent",
}, },
}, },
}; };

View file

@ -90,7 +90,7 @@ def import_database(file_name: str, import_data: ImportJob, session: Session = D
force_import=import_data.force, force_import=import_data.force,
rebase=import_data.rebase, rebase=import_data.rebase,
) )
create_backup_event("Database Restore", f"Restored Database File {file_name}", session) create_backup_event("Database Restore", f"Restore File: {file_name}", session)
return db_import return db_import

View file

@ -1,8 +1,9 @@
from fastapi import APIRouter, Depends, status, HTTPException from fastapi import APIRouter, Depends, HTTPException, status
from mealie.db.database import db from mealie.db.database import db
from mealie.db.db_setup import generate_session from mealie.db.db_setup import generate_session
from mealie.routes.deps import get_current_user from mealie.routes.deps import get_current_user
from mealie.schema.user import GroupBase, GroupInDB, UpdateGroup, UserInDB from mealie.schema.user import GroupBase, GroupInDB, UpdateGroup, UserInDB
from mealie.services.events import create_group_event
from sqlalchemy.orm.session import Session from sqlalchemy.orm.session import Session
router = APIRouter(prefix="/api/groups", tags=["Groups"]) router = APIRouter(prefix="/api/groups", tags=["Groups"])
@ -39,6 +40,7 @@ async def create_group(
try: try:
db.groups.create(session, group_data.dict()) db.groups.create(session, group_data.dict())
create_group_event("Group Created", f"'{group_data.name}' created")
except Exception: except Exception:
raise HTTPException(status.HTTP_400_BAD_REQUEST) raise HTTPException(status.HTTP_400_BAD_REQUEST)
@ -68,7 +70,8 @@ async def delete_user_group(
if not group: if not group:
raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, detail="GROUP_NOT_FOUND") raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, detail="GROUP_NOT_FOUND")
if not group.users == []: if group.users != []:
raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, detail="GROUP_WITH_USERS") raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, detail="GROUP_WITH_USERS")
create_group_event("Group Deleted", f"'{group.name}' Deleted")
db.groups.delete(session, id) db.groups.delete(session, id)

View file

@ -4,6 +4,7 @@ from mealie.db.db_setup import generate_session
from mealie.routes.deps import get_current_user from mealie.routes.deps import get_current_user
from mealie.schema.meal import MealPlanIn, MealPlanInDB from mealie.schema.meal import MealPlanIn, MealPlanInDB
from mealie.schema.user import GroupInDB, UserInDB from mealie.schema.user import GroupInDB, UserInDB
from mealie.services.events import create_group_event
from mealie.services.image import image from mealie.services.image import image
from mealie.services.meal_services import get_todays_meal, process_meals from mealie.services.meal_services import get_todays_meal, process_meals
from sqlalchemy.orm.session import Session from sqlalchemy.orm.session import Session
@ -24,10 +25,11 @@ def get_all_meals(
@router.post("/create", status_code=status.HTTP_201_CREATED) @router.post("/create", status_code=status.HTTP_201_CREATED)
def create_meal_plan( def create_meal_plan(
data: MealPlanIn, session: Session = Depends(generate_session), current_user=Depends(get_current_user) data: MealPlanIn, session: Session = Depends(generate_session), current_user: UserInDB = Depends(get_current_user)
): ):
""" Creates a meal plan database entry """ """ Creates a meal plan database entry """
processed_plan = process_meals(session, data) processed_plan = process_meals(session, data)
create_group_event("Meal Plan Created", f"Mealplan Created for '{current_user.group}'")
return db.meals.create(session, processed_plan.dict()) return db.meals.create(session, processed_plan.dict())
@ -36,23 +38,29 @@ def update_meal_plan(
plan_id: str, plan_id: str,
meal_plan: MealPlanIn, meal_plan: MealPlanIn,
session: Session = Depends(generate_session), session: Session = Depends(generate_session),
current_user=Depends(get_current_user), current_user: UserInDB = Depends(get_current_user),
): ):
""" Updates a meal plan based off ID """ """ Updates a meal plan based off ID """
processed_plan = process_meals(session, meal_plan) processed_plan = process_meals(session, meal_plan)
processed_plan = MealPlanInDB(uid=plan_id, **processed_plan.dict()) processed_plan = MealPlanInDB(uid=plan_id, **processed_plan.dict())
try: try:
db.meals.update(session, plan_id, processed_plan.dict()) db.meals.update(session, plan_id, processed_plan.dict())
create_group_event("Meal Plan Updated", f"Mealplan Updated for '{current_user.group}'")
except Exception: except Exception:
raise HTTPException(status.HTTP_400_BAD_REQUEST) raise HTTPException(status.HTTP_400_BAD_REQUEST)
@router.delete("/{plan_id}") @router.delete("/{plan_id}")
def delete_meal_plan(plan_id, session: Session = Depends(generate_session), current_user=Depends(get_current_user)): def delete_meal_plan(
plan_id,
session: Session = Depends(generate_session),
current_user: UserInDB = Depends(get_current_user),
):
""" Removes a meal plan from the database """ """ Removes a meal plan from the database """
try: try:
db.meals.delete(session, plan_id) db.meals.delete(session, plan_id)
create_group_event("Meal Plan Deleted", f"Mealplan Deleted for '{current_user.group}'")
except Exception: except Exception:
raise HTTPException(status.HTTP_400_BAD_REQUEST) raise HTTPException(status.HTTP_400_BAD_REQUEST)

View file

@ -1,4 +1,4 @@
from fastapi import APIRouter, Depends, status from fastapi import APIRouter, Depends, Request, status
from fastapi.exceptions import HTTPException from fastapi.exceptions import HTTPException
from fastapi.security import OAuth2PasswordRequestForm from fastapi.security import OAuth2PasswordRequestForm
from mealie.core import security from mealie.core import security
@ -6,6 +6,7 @@ from mealie.core.security import authenticate_user
from mealie.db.db_setup import generate_session from mealie.db.db_setup import generate_session
from mealie.routes.deps import get_current_user from mealie.routes.deps import get_current_user
from mealie.schema.user import UserInDB from mealie.schema.user import UserInDB
from mealie.services.events import create_user_event
from sqlalchemy.orm.session import Session from sqlalchemy.orm.session import Session
router = APIRouter(prefix="/api/auth", tags=["Authentication"]) router = APIRouter(prefix="/api/auth", tags=["Authentication"])
@ -14,6 +15,7 @@ router = APIRouter(prefix="/api/auth", tags=["Authentication"])
@router.post("/token/long") @router.post("/token/long")
@router.post("/token") @router.post("/token")
def get_token( def get_token(
request: Request,
data: OAuth2PasswordRequestForm = Depends(), data: OAuth2PasswordRequestForm = Depends(),
session: Session = Depends(generate_session), session: Session = Depends(generate_session),
): ):
@ -23,6 +25,7 @@ def get_token(
user = authenticate_user(session, email, password) user = authenticate_user(session, email, password)
if not user: if not user:
create_user_event("Failed Login", f"Username: {email}, Source IP: '{request.client.host}'")
raise HTTPException( raise HTTPException(
status_code=status.HTTP_401_UNAUTHORIZED, status_code=status.HTTP_401_UNAUTHORIZED,
headers={"WWW-Authenticate": "Bearer"}, headers={"WWW-Authenticate": "Bearer"},

View file

@ -9,7 +9,7 @@ from mealie.db.database import db
from mealie.db.db_setup import generate_session from mealie.db.db_setup import generate_session
from mealie.routes.deps import get_current_user from mealie.routes.deps import get_current_user
from mealie.schema.user import ChangePassword, UserBase, UserIn, UserInDB, UserOut from mealie.schema.user import ChangePassword, UserBase, UserIn, UserInDB, UserOut
from mealie.services.events import create_sign_up_event from mealie.services.events import create_user_event
from sqlalchemy.orm.session import Session from sqlalchemy.orm.session import Session
router = APIRouter(prefix="/api/users", tags=["Users"]) router = APIRouter(prefix="/api/users", tags=["Users"])
@ -23,7 +23,7 @@ async def create_user(
): ):
new_user.password = get_password_hash(new_user.password) new_user.password = get_password_hash(new_user.password)
create_sign_up_event("User Created", f"Created by {current_user.full_name}", session=session) create_user_event("User Created", f"Created by {current_user.full_name}", session=session)
return db.users.create(session, new_user.dict()) return db.users.create(session, new_user.dict())
@ -150,5 +150,6 @@ async def delete_user(
if current_user.id == id or current_user.admin: if current_user.id == id or current_user.admin:
try: try:
db.users.delete(session, id) db.users.delete(session, id)
create_user_event("User Deleted", f"User ID: {id}", session=session)
except Exception: except Exception:
raise HTTPException(status.HTTP_400_BAD_REQUEST) raise HTTPException(status.HTTP_400_BAD_REQUEST)

View file

@ -7,7 +7,7 @@ from mealie.db.db_setup import generate_session
from mealie.routes.deps import get_current_user from mealie.routes.deps import get_current_user
from mealie.schema.sign_up import SignUpIn, SignUpOut, SignUpToken from mealie.schema.sign_up import SignUpIn, SignUpOut, SignUpToken
from mealie.schema.user import UserIn, UserInDB from mealie.schema.user import UserIn, UserInDB
from mealie.services.events import create_sign_up_event from mealie.services.events import create_user_event
from sqlalchemy.orm.session import Session from sqlalchemy.orm.session import Session
router = APIRouter(prefix="/api/users/sign-ups", tags=["User Signup"]) router = APIRouter(prefix="/api/users/sign-ups", tags=["User Signup"])
@ -39,7 +39,7 @@ async def create_user_sign_up_key(
"name": key_data.name, "name": key_data.name,
"admin": key_data.admin, "admin": key_data.admin,
} }
create_sign_up_event("Sign-up Token Created", f"Created by {current_user.full_name}", session=session) create_user_event("Sign-up Token Created", f"Created by {current_user.full_name}", session=session)
return db.sign_ups.create(session, sign_up) return db.sign_ups.create(session, sign_up)
@ -62,7 +62,7 @@ async def create_user_with_token(
db.users.create(session, new_user.dict()) db.users.create(session, new_user.dict())
# DeleteToken # DeleteToken
create_sign_up_event("Sign-up Token Used", f"New User {new_user.full_name}", session=session) create_user_event("Sign-up Token Used", f"New User {new_user.full_name}", session=session)
db.sign_ups.delete(session, token) db.sign_ups.delete(session, token)

View file

@ -12,7 +12,8 @@ class EventCategory(str, Enum):
backup = "backup" backup = "backup"
scheduled = "scheduled" scheduled = "scheduled"
migration = "migration" migration = "migration"
sign_up = "signup" group = "group"
user = "user"
class Event(CamelModel): class Event(CamelModel):

View file

@ -35,6 +35,11 @@ def create_migration_event(title, text, session=None):
save_event(title=title, text=text, category=category, session=session) save_event(title=title, text=text, category=category, session=session)
def create_sign_up_event(title, text, session=None): def create_group_event(title, text, session=None):
category = EventCategory.sign_up category = EventCategory.group
save_event(title=title, text=text, category=category, session=session)
def create_user_event(title, text, session=None):
category = EventCategory.user
save_event(title=title, text=text, category=category, session=session) save_event(title=title, text=text, category=category, session=session)