Files
mealie/mealie/schema/user/registration.py
Michael Genson 403038a5b2 feat: First Time Setup Wizard (#3204)
* extract user registration form into a composable

* added base wizard component

* added partial setup implementation

* removed unused attrs

* added setup bypass

* made setup page more readable

* add checkbox hints to autoform

* added common settings pages and initial submit logic

* bypass setup in demo

* add full name to user registration

* added fullname and pw handling to setup

* fixed wizard indentation

* added post-setup suggestions

* added tests for backend changes

* renamed Wizard to BaseWizard

* lint fixes

* pass hardcoded default password instead of backend nonsense

* removed old test

* fix e2e

* added setup skip to e2e testing for all admin users

---------

Co-authored-by: Hayden <64056131+hay-kot@users.noreply.github.com>
2024-03-11 13:28:54 +00:00

44 lines
1.5 KiB
Python

from typing import Annotated
from pydantic import Field, StringConstraints, field_validator
from pydantic_core.core_schema import ValidationInfo
from mealie.schema._mealie import MealieModel
from mealie.schema._mealie.validators import validate_locale
class CreateUserRegistration(MealieModel):
group: str | None = None
group_token: Annotated[str | None, Field(validate_default=True)] = None
email: Annotated[str, StringConstraints(to_lower=True, strip_whitespace=True)]
username: Annotated[str, StringConstraints(to_lower=True, strip_whitespace=True)]
full_name: Annotated[str, StringConstraints(strip_whitespace=True)]
password: str
password_confirm: str
advanced: bool = False
private: bool = False
seed_data: bool = False
locale: str = "en-US"
@field_validator("locale")
def valid_locale(cls, v):
if not validate_locale(v):
raise ValueError("invalid locale")
return v
@field_validator("password_confirm")
@classmethod
def passwords_match(cls, value, info: ValidationInfo):
if "password" in info.data and value != info.data["password"]:
raise ValueError("passwords do not match")
return value
@field_validator("group_token")
@classmethod
def group_or_token(cls, value, info: ValidationInfo):
if not bool(value) and not bool(info.data["group"]):
raise ValueError("group or group_token must be provided")
return value