diff --git a/app/__init__.py b/app/__init__.py index e7b2379..fe73bde 100644 --- a/app/__init__.py +++ b/app/__init__.py @@ -15,5 +15,6 @@ login.login_view = 'login' db = SQLAlchemy(app) migrate = Migrate(app, db) -from app import routes, models +from app import models +from app import routes, dashboard, custom app.jinja_env.globals.update(get_hidden=routes.get_hidden) \ No newline at end of file diff --git a/app/custom.py b/app/custom.py new file mode 100644 index 0000000..3e6f928 --- /dev/null +++ b/app/custom.py @@ -0,0 +1,14 @@ +from flask import abort +from flask_login import current_user +from functools import wraps + +def require_role(roles=["User"]): + def wrap(func): + @wraps(func) + def decorated_view(*args, **kwargs): + if current_user.is_authenticated: + if current_user.has_roles(roles): + return func(*args, **kwargs) + return abort(401) + return decorated_view + return wrap \ No newline at end of file diff --git a/app/dashboard.py b/app/dashboard.py new file mode 100644 index 0000000..8539eca --- /dev/null +++ b/app/dashboard.py @@ -0,0 +1,26 @@ +from app import app, db, login +from app.models import User, Search +from app.custom import require_role +from flask import render_template, redirect, url_for, request, jsonify +from flask_login import current_user, login_required + +@app.route('/dashboard') +@login_required +def dashboard(): + return render_template('/dashboard/dashboard.html') + +@app.route('/dashboard/profile_settings') +@login_required +def profile_settings(): + return render_template('/dashboard/profile_settings.html') + +@app.route('/dashboard/constants') +@login_required +@require_role(roles=['Admin']) +def constants(): + return render_template('/dashboard/constants.html') + +@app.route('/dashboard/rbac') +@login_required +def rbac(): + return render_template('/dashboard/rbac.html') \ No newline at end of file diff --git a/app/forms.py b/app/forms.py index 8432cac..4c20a65 100644 --- a/app/forms.py +++ b/app/forms.py @@ -24,4 +24,7 @@ class RegistrationForm(FlaskForm): def validate_email(self, email): user = User.query.filter_by(email=email.data).first() if user is not None: - raise ValidationError('That email address is not available.') \ No newline at end of file + raise ValidationError('That email address is not available.') + +class ProfileSettingsForm(FlaskForm): + show_email = BooleanField('Show ') \ No newline at end of file diff --git a/app/models.py b/app/models.py index 0f0d87f..ec8f775 100644 --- a/app/models.py +++ b/app/models.py @@ -1,18 +1,9 @@ +from flask import abort from flask_login import UserMixin from datetime import datetime from app import db, login from werkzeug.security import generate_password_hash, check_password_hash -def require_role(roles=["User"]): - def wrap(func): - @wraps(func) - def decorated_view(*args, **kwargs): - if current_user.is_authenticated: - if current_user.has_roles(roles): - return func(*args, **kwargs) - return abort(401) - return decorated_view - return wrap @login.user_loader class User(UserMixin, db.Model): id = db.Column(db.Integer, primary_key=True) diff --git a/app/routes.py b/app/routes.py index 2158865..201e50b 100644 --- a/app/routes.py +++ b/app/routes.py @@ -1,10 +1,10 @@ from app import app, db, login -from app.models import User, Search, require_role +from app.models import User, Search from app.forms import LoginForm, RegistrationForm +from app.custom import require_role from werkzeug.urls import url_parse from flask import render_template, redirect, url_for, flash, request, jsonify, abort from flask_login import current_user, login_user, logout_user, login_required -from functools import wraps import requests import xmltodict import base64 @@ -21,11 +21,6 @@ def strgen(length): return ''.join(random.choices(list(string.ascii_letters), k= def unauthorized(e): return redirect(url_for('login')) -@app.route('/dashboard') -@login_required -def dashboard(): - return render_template('/dashboard/dashboard.html') - @app.route('/profile/') @login_required def profile(): diff --git a/app/templates/dashboard/constants.html b/app/templates/dashboard/constants.html index 6f5b02e..346e262 100644 --- a/app/templates/dashboard/constants.html +++ b/app/templates/dashboard/constants.html @@ -1,4 +1,4 @@ -{% extends 'dashboard_base' %} +{% extends '/dashboard/dashboard_base.html' %} {% set constants_active = True %} {% block dashboard_body %} constants diff --git a/app/templates/dashboard/dashboard.html b/app/templates/dashboard/dashboard.html index 4483a07..9d59c15 100644 --- a/app/templates/dashboard/dashboard.html +++ b/app/templates/dashboard/dashboard.html @@ -1,4 +1,4 @@ -{% extends 'dashboard/dashboard_base.html' %} +{% extends '/dashboard/dashboard_base.html' %} {% set dashboard_home_active = True %} {% block dashboard_body %} diff --git a/app/templates/dashboard/dashboard_base.html b/app/templates/dashboard/dashboard_base.html index 9388617..addc00e 100644 --- a/app/templates/dashboard/dashboard_base.html +++ b/app/templates/dashboard/dashboard_base.html @@ -8,7 +8,7 @@