diff --git a/app/controllers/auth_controller.py b/app/controllers/auth_controller.py index addbd3c..d6aeb97 100644 --- a/app/controllers/auth_controller.py +++ b/app/controllers/auth_controller.py @@ -1,14 +1,17 @@ from flask import Blueprint, request, redirect, url_for, flash, render_template from flask_login import login_user, logout_user from app.models.users import User +from datetime import datetime, timedelta +from app.models import db +import sys auth = Blueprint('auth', __name__) - def _authenticate(username, password): user = User.query.filter_by(username=username).first() - if user and user.password == password: + if user and user.password == password: + print(sys.version) return user return None @@ -16,11 +19,22 @@ def login(): if request.method == 'POST': username = request.form.get('username') password = request.form.get('password') - user = _authenticate(username, password) + user = User.query.filter_by(username=username).first() if user: - login_user(user) - flash('Logged in successfully!', 'success') - return redirect(url_for('main.users_route')) + if user.failed_login_attempts is not None and user.failed_login_attempts >= 10: + cooldown_expires = user.last_failed_login_attempt + timedelta(minutes=10) + if datetime.now() < cooldown_expires: + flash('You have exceeded the maximum number of failed login attempts. Please try again in {} minutes.'.format((cooldown_expires - datetime.now()).seconds // 60), 'danger') + return render_template('login.html') + if user.password == password: + user.failed_login_attempts = 0 + login_user(user) + return redirect(url_for('main.wines_route')) + else: + user.failed_login_attempts = (user.failed_login_attempts or 0) + 1 + user.last_failed_login_attempt = datetime.now() + db.session.commit() + flash('Invalid username or password.', 'danger') else: flash('Invalid username or password.', 'danger') return render_template('login.html') diff --git a/app/controllers/user_controller.py b/app/controllers/user_controller.py deleted file mode 100644 index 3b08660..0000000 --- a/app/controllers/user_controller.py +++ /dev/null @@ -1,7 +0,0 @@ -from flask import render_template -from app.models.users import User - -def get_users(): - users = User.query.all() - return render_template('users.html', users=users) - diff --git a/app/routes.py b/app/routes.py index 2b77f30..398b941 100644 --- a/app/routes.py +++ b/app/routes.py @@ -1,14 +1,12 @@ from flask import Blueprint from flask_login import login_required -from app.controllers.user_controller import get_users from app.controllers.auth_controller import login, logout main = Blueprint('main', __name__) -@main.route('/users') -@login_required -def users_route(): - return get_users() +@main.route('/') +def index(): + return login() @main.route('/login', methods=['GET', 'POST']) def login_route(): diff --git a/app/views/layouts/app.html b/app/views/layouts/app.html index e4f0692..b6f9abb 100644 --- a/app/views/layouts/app.html +++ b/app/views/layouts/app.html @@ -1,45 +1,110 @@ - - - - {% block title %}{% endblock %} - - - -
-

Beacon

-
-
- {% block content %} - - {% endblock %} + + + + {% block title %}Default{% endblock %} + + + + {% block additional_styles %}{% endblock %} + + + +
+

Beacon

+ {% if current_user.is_authenticated %} +
+
+ +
+
+ {% endif %} +
- +
+ {% block content %} + {% endblock %} +
- - - - - + + + + \ No newline at end of file diff --git a/app/views/login.html b/app/views/login.html index ec9b707..987be70 100644 --- a/app/views/login.html +++ b/app/views/login.html @@ -2,19 +2,149 @@ {% block title %}Login{% endblock %} +{% block additional_styles %} + +{% endblock %} + {% block content %} -
-

Login

-
-
- - +
+ + {% endblock %} \ No newline at end of file diff --git a/app/views/users.html b/app/views/users.html deleted file mode 100644 index ba14878..0000000 --- a/app/views/users.html +++ /dev/null @@ -1,13 +0,0 @@ -{% extends "layouts/app.html" %} - -{% block title %}Users List{% endblock %} - -{% block content %} - Logout -

Users List

-
    - {% for user in users %} -
  • {{ user.username }} - {{ user.email }} - {{ user.password }}
  • - {% endfor %} -
-{% endblock %} \ No newline at end of file diff --git a/run.py b/run.py index 5b0a89d..cbfbf00 100644 --- a/run.py +++ b/run.py @@ -3,4 +3,4 @@ from app import create_app app = create_app() if __name__ == "__main__": - app.run(debug=True) \ No newline at end of file + app.run(debug=True, port=8000) \ No newline at end of file