Esempio n. 1
0
async def register(request):
    """
    Validate form, register and authenticate user
    """
    data = await request.form()
    form = RegistrationForm(data)
    username = form.username.data
    email = form.email.data
    password = form.password.data
    if request.method == "POST" and form.validate():
        if (await User.exists().where(User.email == email).run()
                or await User.exists().where(User.username == username).run()):
            user_error = "User with that email or username already exists."
            return templates.TemplateResponse(
                "accounts/register.html",
                {
                    "request": request,
                    "form": form,
                    "user_error": user_error,
                },
            )
        query = User(
            username=username,
            email=email,
            password=password,
        )
        await query.save().run()
        results = await (User.select().columns(
            User.id, User.username, User.password).where(
                (User.username == username)).first()).run()
        valid_user = await User.login(username=username, password=password)
        if not valid_user:
            user_error = "Invalid username or password"
            return templates.TemplateResponse(
                "accounts/login.html",
                {
                    "request": request,
                    "form": form,
                    "user_error": user_error,
                },
            )
        response = RedirectResponse(BASE_HOST, status_code=302)
        response.set_cookie("jwt",
                            generate_jwt(results["username"]),
                            httponly=True)
        return response
    return templates.TemplateResponse("accounts/register.html", {
        "request": request,
        "form": form
    })
Esempio n. 2
0
async def register(request):
    """
    Validate form, register and authenticate user with JWT token
    """
    results = await User.all()
    data = await request.form()
    form = RegistrationForm(data)
    username = form.username.data
    email = form.email.data
    password = form.password.data
    if request.method == "POST" and form.validate():
        for result in results:
            if email == result.email or username == result.username:
                user_error = "User with that email or username already exists."
                return templates.TemplateResponse(
                    "accounts/register.html",
                    {
                        "request": request,
                        "form": form,
                        "user_error": user_error
                    },
                )
        query = User(
            username=username,
            email=email,
            joined=datetime.datetime.now(),
            last_login=datetime.datetime.now(),
            login_count=1,
            password=hash_password(password),
        )
        await query.save()
        user_query = await User.get(
            username=username)
        hashed_password = user_query.password
        valid_password = check_password(password, hashed_password)
        response = RedirectResponse(url="/", status_code=302)
        if valid_password:
            response.set_cookie(
                "jwt", generate_jwt(user_query.username), httponly=True
            )
            response.set_cookie(
                "admin", ADMIN, httponly=True
            )
        return response
    return templates.TemplateResponse(
        "accounts/register.html", {
            "request": request,
            "form": form
        }
    )
Esempio n. 3
0
async def register(request):
    """
    Validate form, register and authenticate user with JWT token
    """
    query = users.select().order_by(users.c.id.desc())
    results = await database.fetch_all(query=query)
    data = await request.form()
    form = RegistrationForm(data)
    username = form.username.data
    email = form.email.data
    password = form.password.data
    if request.method == "POST" and form.validate():
        for result in results:
            if email == result["email"] or username == result["username"]:
                user_error = "User with that email or username already exists."
                return templates.TemplateResponse(
                    "accounts/register.html",
                    {
                        "request": request,
                        "form": form,
                        "user_error": user_error
                    },
                )
        query = users.insert().values(
            username=username,
            email=email,
            joined=datetime.datetime.now(),
            last_login=datetime.datetime.now(),
            login_count=1,
            password=hash_password(password),
        )
        await database.execute(query)
        user_query = users.select().where(users.c.username == username)
        user_results = await database.fetch_one(user_query)
        hashed_password = user_results["password"]
        valid_password = check_password(password, hashed_password)
        request.session["user"] = user_results["username"].capitalize()
        response = RedirectResponse(url="/", status_code=302)
        if valid_password:
            response.set_cookie("jwt",
                                generate_jwt(user_results["username"]),
                                httponly=True)
            response.set_cookie("admin", ADMIN, httponly=True)
        return response
    return templates.TemplateResponse("accounts/register.html", {
        "request": request,
        "form": form
    })