diff --git a/www/__init__.py b/www/__init__.py index a059b29..34765d6 100644 --- a/www/__init__.py +++ b/www/__init__.py @@ -25,6 +25,9 @@ def create_app(): from . import db db.init_app(app) + from . import auth + app.register_blueprint(auth.bp) + from . import admin app.register_blueprint(admin.bp) diff --git a/www/admin.py b/www/admin.py index 6e33f67..d23df34 100644 --- a/www/admin.py +++ b/www/admin.py @@ -1,65 +1,9 @@ -import functools - -from flask import ( - Blueprint, flash, g, redirect, render_template, request, session, url_for -) - -from werkzeug.exceptions import abort -from werkzeug.security import check_password_hash +from flask import Blueprint, flash, g, redirect, render_template, request, session, url_for from www.db import get_db bp = Blueprint('admin', __name__, url_prefix='/admin') -@bp.route('/login', methods=('GET', 'POST')) -def login(): - if request.method == 'POST': - username = request.form['username'] - password = request.form['password'] - - db = get_db() - error = None - - user = db.execute( - 'SELECT * FROM users WHERE username = ?', (username,) - ).fetchone() - - if user is None: - error = 'Incorrect username.' - elif not check_password_hash(user['password'], password): - error = 'Incorrect password.' - - if error is None: - session.clear() - session['user_id'] = user['id'] - return redirect(url_for('index')) - - flash(error) - - return render_template('admin/login.html') - -@bp.route('/logout') -def logout(): - session.clear() - return redirect(url_for('index')) - -@bp.before_app_request -def load_logged_in_user(): - user_id = session.get('user_id') - - if user_id is None: - g.user = None - else: - g.user = get_db().execute( - 'SELECT * FROM users WHERE id = ?', (user_id,) - ).fetchone() - -def admin_required(view): - @functools.wraps(view) - def wrapped_view(**kwargs): - if g.user is None: - return redirect(abort(404)) - - return view(**kwargs) - - return wrapped_view +@bp.route('/panel') +def panel(): + return render_template('admin/panel.html') diff --git a/www/auth.py b/www/auth.py new file mode 100644 index 0000000..a3631e4 --- /dev/null +++ b/www/auth.py @@ -0,0 +1,64 @@ +import functools + +from www.db import get_db + +from werkzeug.exceptions import abort +from werkzeug.security import check_password_hash + +from flask import Blueprint, request, flash, render_template, session, g, redirect, url_for + + +bp = Blueprint('auth', __name__, url_prefix='/auth') + +@bp.route('/login', methods=('GET', 'POST')) +def login(): + if request.method == 'POST': + username = request.form['username'] + password = request.form['password'] + + db = get_db() + error = None + + user = db.execute( + 'SELECT * FROM users WHERE username = ?', (username,) + ).fetchone() + + if user is None: + error = 'Incorrect username.' + elif not check_password_hash(user['password'], password): + error = 'Incorrect password.' + + if error is None: + session.clear() + session['user_id'] = user['id'] + return redirect(url_for('index')) + + flash(error) + + return render_template('auth/login.html') + +@bp.route('/logout') +def logout(): + session.clear() + return redirect(url_for('index')) + +@bp.before_app_request +def load_logged_in_user(): + user_id = session.get('user_id') + + if user_id is None: + g.user = None + else: + g.user = get_db().execute( + 'SELECT * FROM users WHERE id = ?', (user_id,) + ).fetchone() + +def admin_required(view): + @functools.wraps(view) + def wrapped_view(**kwargs): + if g.user is None: + return redirect(abort(404)) + + return view(**kwargs) + + return wrapped_view diff --git a/www/blog.py b/www/blog.py index 2438d60..be86d31 100644 --- a/www/blog.py +++ b/www/blog.py @@ -6,7 +6,7 @@ from werkzeug.exceptions import abort import markdown as md from www.db import get_db -from www.admin import admin_required +from www.auth import admin_required bp = Blueprint('blog', __name__, url_prefix='/blog') diff --git a/www/now.py b/www/now.py index b3a49d0..4c2a4ad 100644 --- a/www/now.py +++ b/www/now.py @@ -6,7 +6,7 @@ from werkzeug.exceptions import abort import markdown as md from www.db import get_db -from www.admin import admin_required +from www.auth import admin_required bp = Blueprint('now', __name__, url_prefix='/now') diff --git a/www/projects.py b/www/projects.py index 84e809f..5af750f 100644 --- a/www/projects.py +++ b/www/projects.py @@ -6,7 +6,7 @@ from werkzeug.exceptions import abort import markdown as md from www.db import get_db -from www.admin import admin_required +from www.auth import admin_required bp = Blueprint('projects', __name__, url_prefix='/projects') diff --git a/www/recommended.py b/www/recommended.py index a7ac250..59b73ac 100644 --- a/www/recommended.py +++ b/www/recommended.py @@ -6,7 +6,7 @@ from werkzeug.exceptions import abort import markdown as md from www.db import get_db -from www.admin import admin_required +from www.auth import admin_required bp = Blueprint('recommended', __name__, url_prefix='/recommended') diff --git a/www/templates/admin/login.html b/www/templates/auth/login.html similarity index 100% rename from www/templates/admin/login.html rename to www/templates/auth/login.html diff --git a/www/templates/base.html b/www/templates/base.html index 096d190..c345a36 100644 --- a/www/templates/base.html +++ b/www/templates/base.html @@ -19,7 +19,7 @@ {% if g.user %} /create-post /update-now - /logout + /logout {% endif %}