diff --git a/app/__init__.py b/app/__init__.py index 011e4cc2a..17f2828d0 100644 --- a/app/__init__.py +++ b/app/__init__.py @@ -4,11 +4,15 @@ from flask import Flask from flask._compat import string_types from flask.ext import assets from flask.ext.sqlalchemy import SQLAlchemy +from flask_login import LoginManager +from flask_wtf import CsrfProtect from webassets.filter import get_filter from config import configs db = SQLAlchemy() +login_manager = LoginManager() +csrf = CsrfProtect() def create_app(config_name): @@ -18,6 +22,8 @@ def create_app(config_name): application.config.from_object(configs[config_name]) db.init_app(application) init_app(application) + csrf.init_app(application) + login_manager.init_app(application) from app.main import main as main_blueprint application.register_blueprint(main_blueprint) diff --git a/app/main/encryption.py b/app/main/encryption.py index e42a42f22..b070fe4aa 100644 --- a/app/main/encryption.py +++ b/app/main/encryption.py @@ -3,5 +3,5 @@ from flask import current_app def encrypt(value): - key = current_app.config['SECRET_KEY'] + key = current_app.config['PASS_SECRET_KEY'] return hashlib.sha256((key + value).encode('UTF-8')).hexdigest() diff --git a/app/main/forms.py b/app/main/forms.py index a2cf5d9e9..6b7119817 100644 --- a/app/main/forms.py +++ b/app/main/forms.py @@ -5,7 +5,7 @@ from wtforms.validators import DataRequired, Email, Length class LoginForm(Form): email_address = StringField('Email address', validators=[ - Length(255), + Length(min=5, max=255), DataRequired(message='Email cannot be empty'), Email(message='Please enter a valid email address') ]) diff --git a/app/main/views/index.py b/app/main/views/index.py index de48cb9e6..ff2c53bfa 100644 --- a/app/main/views/index.py +++ b/app/main/views/index.py @@ -1,4 +1,5 @@ from flask import render_template +from flask_login import login_required from app.main import main @@ -19,36 +20,43 @@ def helloworld(): @main.route("/register") +@login_required def register(): return render_template('register.html') @main.route("/register-from-invite") +@login_required def registerfrominvite(): return render_template('register-from-invite.html') @main.route("/verify") +@login_required def verify(): return render_template('verify.html') @main.route("/verify-mobile") +@login_required def verifymobile(): return render_template('verify-mobile.html') @main.route("/dashboard") +@login_required def dashboard(): return render_template('dashboard.html') @main.route("/add-service") +@login_required def addservice(): return render_template('add-service.html') @main.route("/two-factor") +@login_required def twofactor(): return render_template('two-factor.html') diff --git a/app/main/views/sign_in.py b/app/main/views/sign_in.py index e95f661bf..6ffa19144 100644 --- a/app/main/views/sign_in.py +++ b/app/main/views/sign_in.py @@ -1,6 +1,6 @@ from datetime import datetime -from flask import render_template, redirect, url_for, jsonify +from flask import render_template, redirect, jsonify from flask_login import login_user from app.main import main @@ -19,25 +19,36 @@ def render_sign_in(): def process_sign_in(): form = LoginForm() if form.validate_on_submit(): - user = users_dao.get_user_by_email(form.email_address) + user = users_dao.get_user_by_email(form.email_address.data) if user is None: return jsonify(authorization=False), 404 - if user.password == encrypt(form.password): + if user.password == encrypt(form.password.data): login_user(user) else: return jsonify(authorization=False), 404 - + else: + return jsonify(form.errors), 404 return redirect('/two-factor') -@main.route('/create_user', methods=(['POST'])) +@main.route('/temp-create-users', methods=(['GET'])) +def render_create_user(): + return render_template('temp-create-users.html', form=LoginForm()) + + +@main.route('/temp-create-users', methods=(['POST'])) def create_user_for_test(): form = LoginForm() - user = Users(email_address=form.email_address, - name=form.email_address, - password=form.password, - created_at=datetime.now(), - role_id=1) - users_dao.insert_user(user) + if form.validate_on_submit(): + user = Users(email_address=form.email_address.data, + name=form.email_address.data, + password=form.password.data, + created_at=datetime.now(), + mobile_number='+447651234534', + role_id=1) + users_dao.insert_user(user) - return 'created' + return redirect('/sign-in') + else: + print(form.errors) + return redirect(form.errors), 400 diff --git a/app/models.py b/app/models.py index 56c65e7f9..08068b978 100644 --- a/app/models.py +++ b/app/models.py @@ -43,6 +43,30 @@ class Users(db.Model): return filter_null_value_fields(serialized) + def is_authenticated(self): + return True + + def is_active(self): + return True + + def is_locked(self): + if self.failed_login_count <= current_app.config['MAX_FAILED_LOGIN_COUNT']: + return False + else: + return True + + def is_anonymous(self): + return False + + def get_id(self): + return self.id + + @staticmethod + def load_user(user_id): + user = Users.query.filter_by(id=user_id).first() + if user.is_active(): + return user + def filter_null_value_fields(obj): return dict( diff --git a/app/templates/signin.html b/app/templates/signin.html index 7aea22245..b47f53475 100644 --- a/app/templates/signin.html +++ b/app/templates/signin.html @@ -13,7 +13,7 @@ Sign in
If you do not have an account, you can register.
diff --git a/app/templates/temp-create-users.html b/app/templates/temp-create-users.html new file mode 100644 index 000000000..e99abfed4 --- /dev/null +++ b/app/templates/temp-create-users.html @@ -0,0 +1,33 @@ +{% extends "admin_template.html" %} + +{% block page_title %} +Temp create users +{% endblock %} + +{% block content %} + +This is a temporary page to create users, the name will be the same as the email address.
+ + +