Functional Weave
Code in Python

auth.validate-login@1.0.0

impl/python.py

1,157 bytes · the Python implementation · view raw

Imports name this capability’s declared dependencies, which fune builds next to it in your project; each one links to its page.

from typing import Any, Dict

from .auth_normalise_email import normalise_email  ← from auth.normalise-email ^1.0.0 · built alongside by fune
from .auth_validate_login_types import LoginCheck

_ASCII_SPACE = " \t\n\r\f\v"


def _text(value: Any) -> str:
    # A non-string (a malformed JSON body) is an empty field, not an exception.
    return value if isinstance(value, str) else ""


def validate_login(email: str, password: str) -> LoginCheck:
    """A login form checked for shape only: the email to look up when valid,
    and a message for each field that needs fixing. The password is never
    judged against a policy here, so a password set under older rules still
    logs in."""
    email_text, password_text = _text(email), _text(password)
    fields: Dict[str, str] = {}

    normalised = normalise_email(email_text)
    if normalised is None:
        fields["email"] = (
            "Enter your email address."
            if email_text.strip(_ASCII_SPACE) == ""
            else "Enter a valid email address, like name@example.com."
        )
    if password_text == "":
        fields["password"] = "Enter your password."

    return LoginCheck(valid=len(fields) == 0, email=normalised, fields=fields)