from flask_babel import LazyString, lazy_gettext from flask_wtf import FlaskForm from wtforms import PasswordField, StringField from wtforms.validators import DataRequired from starfall.db.schema.users import User from starfall.web.blueprints.base import BaseBlueprint from starfall.web.controllers.base import BaseController class LoginForm(FlaskForm): username: StringField = StringField( label=lazy_gettext("page.login.form.username"), # pyright: ignore[reportArgumentType] render_kw={ "autocomplete": "username", "class": "form-control", "placeholder": lazy_gettext("page.login.form.username"), }, validators=[ DataRequired(message=lazy_gettext("page.login.error.username")), # pyright: ignore[reportArgumentType] ], ) password: PasswordField = PasswordField( label=lazy_gettext("page.login.form.password"), # pyright: ignore[reportArgumentType] render_kw={ "autocomplete": "password", "class": "form-control", "placeholder": lazy_gettext("page.login.form.password"), }, validators=[ DataRequired(message=lazy_gettext("page.login.error.password")), # pyright: ignore[reportArgumentType] ], ) class LoginController(BaseController): @classmethod def apply(cls, bp: BaseBlueprint): bp.data["form"] = LoginForm() @classmethod def handle_form(cls) -> tuple[str, LazyString | str]: form = LoginForm() if not form.validate_on_submit(): return "", "" user = User( username=str(form.username.data), password=cls.encrypt_password(str(form.password.data)), ) return "", ""