Example #1
0
async def update_user_image(
        id: str,
        profile_image: UploadFile = File(...),
        current_user: UserInDB = Depends(get_current_user),
):
    """ Updates a User Image """

    extension = profile_image.filename.split(".")[-1]

    app_dirs.USER_DIR.joinpath(id).mkdir(parents=True, exist_ok=True)

    try:
        [
            x.unlink()
            for x in app_dirs.USER_DIR.join(id).glob("profile_image.*")
        ]
    except:
        pass

    dest = app_dirs.USER_DIR.joinpath(id, f"profile_image.{extension}")

    with dest.open("wb") as buffer:
        shutil.copyfileobj(profile_image.file, buffer)

    if dest.is_file:
        return SnackResponse.success("File uploaded")
    else:
        return SnackResponse.error("Failure uploading file")
Example #2
0
def create_theme(data: SiteTheme,
                 session: Session = Depends(generate_session),
                 current_user=Depends(get_current_user)):
    """ Creates a site color theme database entry """
    db.themes.create(session, data.dict())

    return SnackResponse.success("Theme Saved")
Example #3
0
def get_token(
        data: OAuth2PasswordRequestForm = Depends(),
        session: Session = Depends(generate_session),
):
    email = data.username
    password = data.password

    user = authenticate_user(session, email, password)

    if not user:
        raise HTTPException(
            status_code=status.HTTP_401_UNAUTHORIZED,
            detail="Incorrect username or password",
            headers={"WWW-Authenticate": "Bearer"},
        )

    access_token = security.create_access_token(dict(sub=email),
                                                timedelta(hours=2))
    return SnackResponse.success(
        "User Successfully Logged In",
        {
            "access_token": access_token,
            "token_type": "bearer"
        },
    )
Example #4
0
def create_meal_plan(
    data: MealPlanIn, session: Session = Depends(generate_session), current_user=Depends(get_current_user)
):
    """ Creates a meal plan database entry """
    processed_plan = process_meals(session, data)
    db.meals.create(session, processed_plan.dict())

    return SnackResponse.success("Mealplan Created")
Example #5
0
async def update_multiple_pages(
        pages: list[CustomPageOut],
        session: Session = Depends(generate_session),
        current_user: UserInDB = Depends(get_current_user),
):
    """ Update multiple custom pages """
    for page in pages:
        db.custom_pages.update(session, page.id, page.dict())
    return SnackResponse.success("Pages Updated")
Example #6
0
def update_settings(
        data: SiteSettings,
        session: Session = Depends(generate_session),
        current_user=Depends(get_current_user),
):
    """ Returns Site Settings """
    db.settings.update(session, 1, data.dict())

    return SnackResponse.success("Settings Updated")
Example #7
0
async def reset_user_password(
        id: int,
        current_user: UserInDB = Depends(get_current_user),
        session: Session = Depends(generate_session),
):

    new_password = get_password_hash(settings.DEFAULT_PASSWORD)
    db.users.update_password(session, id, new_password)

    return SnackResponse.success("Users Password Reset")
Example #8
0
def scrape_image_url(
    recipe_slug: str,
    url: RecipeURLIn,
    current_user=Depends(get_current_user),
):
    """ Removes an existing image and replaces it with the incoming file. """

    scrape_image(url.url, recipe_slug)

    return SnackResponse.success("Recipe Image Updated")
Example #9
0
async def create_new_page(
        new_page: CustomPageBase,
        session: Session = Depends(generate_session),
        current_user: UserInDB = Depends(get_current_user),
):
    """ Creates a new Custom Page """

    db.custom_pages.create(session, new_page.dict())

    return SnackResponse.success("New Page Created")
Example #10
0
async def update_group_data(
        id: int,
        group_data: UpdateGroup,
        current_user=Depends(get_current_user),
        session: Session = Depends(generate_session),
):
    """ Updates a User Group """
    db.groups.update(session, id, group_data.dict())

    return SnackResponse.success("Group Settings Updated")
Example #11
0
async def create_user(
        new_user: UserIn,
        current_user=Depends(get_current_user),
        session: Session = Depends(generate_session),
):

    new_user.password = get_password_hash(new_user.password)

    data = db.users.create(session, new_user.dict())
    return SnackResponse.success(f"User Created: {new_user.full_name}", data)
Example #12
0
def upload_backup_file(archive: UploadFile = File(...)):
    """ Upload a .zip File to later be imported into Mealie """
    dest = app_dirs.BACKUP_DIR.joinpath(archive.filename)

    with dest.open("wb") as buffer:
        shutil.copyfileobj(archive.file, buffer)

    if dest.is_file:
        return SnackResponse.success("Backup uploaded")
    else:
        return SnackResponse.error("Failure uploading file")
Example #13
0
async def create_group(
        group_data: GroupBase,
        current_user=Depends(get_current_user),
        session: Session = Depends(generate_session),
):
    """ Creates a Group in the Database """

    try:
        db.groups.create(session, group_data.dict())
        return SnackResponse.success("User Group Created", {"created": True})
    except:
        return SnackResponse.error("User Group Creation Failed")
Example #14
0
def upload_nextcloud_zipfile(type: str, archive: UploadFile = File(...)):
    """ Upload a .zip File to later be imported into Mealie """
    dir = app_dirs.MIGRATION_DIR.joinpath(type)
    dir.mkdir(parents=True, exist_ok=True)
    dest = dir.joinpath(archive.filename)

    with dest.open("wb") as buffer:
        shutil.copyfileobj(archive.file, buffer)

    if dest.is_file:
        return SnackResponse.success("Migration data uploaded")
    else:
        return SnackResponse.error("Failure uploading file")
Example #15
0
async def update_user(
        id: int,
        new_data: UserBase,
        current_user: UserInDB = Depends(get_current_user),
        session: Session = Depends(generate_session),
):

    token = None
    if current_user.id == id or current_user.admin:
        db.users.update(session, id, new_data.dict())
    if current_user.id == id:
        access_token = security.create_access_token(data=dict(
            sub=new_data.email))
        token = {"access_token": access_token, "token_type": "bearer"}

    return SnackResponse.success("User Updated", token)
Example #16
0
async def update_password(
        id: int,
        password_change: ChangePassword,
        current_user: UserInDB = Depends(get_current_user),
        session: Session = Depends(generate_session),
):
    """ Resets the User Password"""

    match_passwords = verify_password(password_change.current_password,
                                      current_user.password)
    match_id = current_user.id == id

    if match_passwords and match_id:
        new_password = get_password_hash(password_change.new_password)
        db.users.update_password(session, id, new_password)
        return SnackResponse.success("Password Updated")
    else:
        return SnackResponse.error("Existing password does not match")
Example #17
0
def export_database(data: BackupJob,
                    session: Session = Depends(generate_session)):
    """Generates a backup of the recipe database in json format."""
    export_path = backup_all(
        session=session,
        tag=data.tag,
        templates=data.templates,
        export_recipes=data.options.recipes,
        export_settings=data.options.settings,
        export_pages=data.options.pages,
        export_themes=data.options.themes,
        export_users=data.options.users,
        export_groups=data.options.groups,
    )
    try:
        return SnackResponse.success("Backup Created at " + export_path)
    except:
        HTTPException(
            status_code=400,
            detail=SnackResponse.error("Error Creating Backup. See Log File"),
        )
Example #18
0
async def create_user_with_token(
        token: str,
        new_user: UserIn,
        session: Session = Depends(generate_session),
):
    """ Creates a user with a valid sign up token """

    # Validate Token
    db_entry: SignUpOut = db.sign_ups.get(session, token, limit=1)
    if not db_entry:
        return SnackResponse.error("Invalid Token")

    # Create User
    new_user.admin = db_entry.admin
    new_user.password = get_password_hash(new_user.password)
    data = db.users.create(session, new_user.dict())

    # DeleteToken
    db.sign_ups.delete(session, token)

    # Respond
    return SnackResponse.success(f"User Created: {new_user.full_name}", data)