diff --git a/forms/login.py b/forms/login.py index 9a11244..a3844cc 100644 --- a/forms/login.py +++ b/forms/login.py @@ -5,6 +5,10 @@ from flask_login import UserMixin from objects import glob +FORM_RENDER_KW = { + "class_": "form-control" +} + class BillForm(Form): payment_to = StringField("Payment to", [validators.DataRequired()]) description = TextAreaField("Description", render_kw = { @@ -19,35 +23,41 @@ class LoginForm(Form): email = StringField("Email", [ validators.DataRequired(), validators.Length(min=6, max=254) - ]) + ], + render_kw = FORM_RENDER_KW) password = PasswordField("Password", [ validators.DataRequired(), validators.Length(min=4, max=127) - ]) + ], + render_kw = FORM_RENDER_KW) class RegisterForm(Form): email = StringField("Email", [ validators.DataRequired(), validators.Length(min=6, max=254) - ]) + ], + render_kw = FORM_RENDER_KW) password = PasswordField("Password", [ validators.DataRequired(), validators.Length(min=4, max=127), validators.EqualTo("confirm_password", message = "Passwords must match") - ]) - confirm_password = PasswordField("Repeat Password") + ], + render_kw = FORM_RENDER_KW) + confirm_password = PasswordField("Repeat Password", render_kw = FORM_RENDER_KW) firstname = StringField("Firstname", [ validators.DataRequired(), validators.Length(min=2, max=30) - ]) + ], + render_kw = FORM_RENDER_KW) surname = StringField("Surname", [ validators.DataRequired(), validators.Length(min=2, max=30) - ]) + ], + render_kw = FORM_RENDER_KW) accept_tos = BooleanField("I accept the TOS", [validators.DataRequired()]) diff --git a/routes.py b/routes.py index a761569..66017e1 100644 --- a/routes.py +++ b/routes.py @@ -70,20 +70,31 @@ def login(): flash(gettext("Already logged in"), "info") return redirect(url_for("dashboard")) - form = LoginForm(request.form) - if request.method == "POST" and form.validate(): - try: - user = User((form.email.data, form.password.data)) - except Exception as e: - flash(gettext(str(e)), "danger") - return render_template("login.html", form=form) + form_login = LoginForm(request.form) + form_register = RegisterForm(request.form) - flask_login.login_user(user) - logged_in_users.append(user) - - flash(gettext("Logged in"), "success") - return redirect(url_for("dashboard")) - return render_template("login.html", form=form) + if request.method == "POST": + if form_register.validate(): + try: + register_account(form_register.email.data, form_register.password.data, form_register.firstname.data, form_register.surname.data) + flash(gettext("User registered"), "success") + except Exception as e: + flash(gettext(str(e)), "danger") + return redirect(url_for("login")) + elif form_login.validate(): + try: + user = User((form_login.email.data, form_login.password.data)) + flask_login.login_user(user) + logged_in_users.append(user) + flash(gettext("Logged in"), "success") + except Exception as e: + flash(gettext(str(e)), "danger") + return redirect(url_for("login")) + return redirect(url_for("dashboard")) # Valid login > Redirect to dashboard as user is logged in + return render_template("login.html", form = { + "login": form_login, + "register": form_register + }) @glob.app.route("/register", methods = ["GET", "POST"]) def register(): diff --git a/static/img/login-bg.jpg b/static/img/login-bg.jpg new file mode 100644 index 0000000..bccd6a5 Binary files /dev/null and b/static/img/login-bg.jpg differ diff --git a/templates/login.html b/templates/login.html index 5bc83c8..2f8ccac 100644 --- a/templates/login.html +++ b/templates/login.html @@ -3,89 +3,165 @@ {% extends "layout/bootstrap.html" %} {% block content %} - -
-
-
-
- -
-
-
Electronic ID
-

- Secure login using Electronic ID allows Husstanden to show you banking details, bills and receipts.
- How to obtain an Electronic ID -

-
-
-
House Account
-

- Accounts with less privileges and fast login to view non-sensitive information.
- Multiple house accounts can be created by logging in with house holder's verified Electronic ID. -

-
-
-
- -
-
+ + +
+ -