async def login(req: responder.Request, resp: responder.Response) -> None:
    """Show login page on get and handle login data on post."""
    # noqa: DAR101, E800

    errors = {}
    user = User()

    if req.method == "post":
        post_data = await req.media()

        dbsession = Session()

        user = dbsession.query(User).filter(
            User.username == post_data["username"], ).first()

        # Check password
        if post_data["password"] == user.password:
            # redirect to login confirm
            resp.session["username"] = user.username
            resp.session["identiy_confirmed"] = False
            api.redirect(resp, location=api.url_for("confirm_login"))
            return None
        else:
            errors["password"] = "******"

    resp.html = api.template(
        "login.html.j2",
        api=api,
        errors=errors,
        user=user,
    )
async def signup(req: responder.Request, resp: responder.Response) -> None:
    """Show signup page on get and handle signup data on post."""
    # noqa: DAR101, E800

    errors = {}
    user = User()

    if req.method == "post":
        post_data = await req.media()

        user.username = post_data["username"]
        user.password = post_data["password"]
        user.phone_number = post_data["phone"]

        # TODO: Check that this phone number actually works

        dbsession = Session()
        dbsession.add(user)

        try:
            dbsession.commit()
        except IntegrityError:
            errors["username"] = "******"

        if not errors:
            api.redirect(resp, location=api.url_for("index"))

    resp.html = api.template(
        "signup.html.j2",
        api=api,
        errors=errors,
        user=user,
    )
async def confirm_login(req: responder.Request,
                        resp: responder.Response) -> None:
    """Confirm the login via text code."""

    errors = {}

    username_from_session = req.session["username"]

    dbsession = Session()
    user = dbsession.query(User).filter(
        User.username == username_from_session, ).first()

    if req.method == "post":
        post_data = await req.media()
        posted_code = post_data["code"]
        session_code = req.session["code"]
        if posted_code == session_code:
            # User is verified
            resp.session["identiy_confirmed"] = True
            api.redirect(resp, location=api.url_for("home"))
            return None
        else:
            errors["code"] = "Code not confirmed. Try again."

    code = send_code_to_number(user.phone_number)
    resp.session["code"] = code

    resp.html = api.template(
        "login_confirm.html.j2",
        api=api,
        errors=errors,
    )
def index(_: responder.Request, resp: responder.Response) -> None:
    """Render index page."""
    # noqa: DAR101, E800

    resp.html = api.template("index.html.j2", api=api)
Esempio n. 5
0
async def hello(req: Request, resp: Response, *, who: str):
    # templatesディレクトリに配置
    resp.html = api.template('hello.html', who=who)

    # local()[f'HTTP_{number}'] = number の形で定数を作成しているので補完が効かない
    print(api.status_codes.HTTP_200)
def index(_, response: responder.Response) -> None:
    response.html = api.template("/index.html", recreator="Tibor")