StarfallBot/starfall/web/controllers/secure/login.py

53 lines
1.7 KiB
Python

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 "", ""