[System][Plugin] moved decorator
This commit is contained in:
parent
e7efa53071
commit
06237754f1
|
@ -2,14 +2,13 @@
|
||||||
|
|
||||||
Allow management of authentication, login, logout, etc.
|
Allow management of authentication, login, logout, etc.
|
||||||
"""
|
"""
|
||||||
from http.client import CREATED, NO_CONTENT
|
|
||||||
from flask import Blueprint, request, jsonify
|
from flask import Blueprint, request, jsonify
|
||||||
from werkzeug.exceptions import Forbidden, BadRequest, Unauthorized, NotFound
|
from werkzeug.exceptions import Forbidden, BadRequest, Unauthorized
|
||||||
|
|
||||||
from flaschengeist import logger
|
from flaschengeist import logger
|
||||||
from flaschengeist.plugins import Plugin
|
from flaschengeist.plugins import Plugin
|
||||||
from flaschengeist.utils.HTTP import no_content
|
from flaschengeist.utils.HTTP import no_content, created
|
||||||
from flaschengeist.decorator import login_required
|
from flaschengeist.utils.decorators import login_required
|
||||||
from flaschengeist.controller import sessionController, userController
|
from flaschengeist.controller import sessionController, userController
|
||||||
|
|
||||||
auth_bp = Blueprint("auth", __name__)
|
auth_bp = Blueprint("auth", __name__)
|
||||||
|
@ -50,11 +49,7 @@ def login():
|
||||||
|
|
||||||
# Lets cleanup the DB
|
# Lets cleanup the DB
|
||||||
sessionController.clear_expired()
|
sessionController.clear_expired()
|
||||||
return {
|
return created(session)
|
||||||
"session": session,
|
|
||||||
"user": user,
|
|
||||||
"permissions": user.get_permissions(),
|
|
||||||
}, CREATED
|
|
||||||
|
|
||||||
|
|
||||||
@auth_bp.route("/auth", methods=["GET"])
|
@auth_bp.route("/auth", methods=["GET"])
|
||||||
|
|
|
@ -13,7 +13,7 @@ from flaschengeist import logger
|
||||||
from flaschengeist.utils import HTTP
|
from flaschengeist.utils import HTTP
|
||||||
from flaschengeist.models.session import Session
|
from flaschengeist.models.session import Session
|
||||||
from flaschengeist.utils.datetime import from_iso_format
|
from flaschengeist.utils.datetime import from_iso_format
|
||||||
from flaschengeist.decorator import login_required
|
from flaschengeist.utils.decorators import login_required
|
||||||
from flaschengeist.controller import userController
|
from flaschengeist.controller import userController
|
||||||
from flaschengeist.plugins import Plugin, before_update_user
|
from flaschengeist.plugins import Plugin, before_update_user
|
||||||
|
|
||||||
|
@ -75,7 +75,7 @@ def get_shortcuts(userid, current_session: Session):
|
||||||
data = request.get_json()
|
data = request.get_json()
|
||||||
if not isinstance(data, list) or not all(isinstance(n, (int, float)) for n in data):
|
if not isinstance(data, list) or not all(isinstance(n, (int, float)) for n in data):
|
||||||
raise BadRequest
|
raise BadRequest
|
||||||
data.sort()
|
data.sort(reverse=True)
|
||||||
user.set_attribute("balance_shortcuts", data)
|
user.set_attribute("balance_shortcuts", data)
|
||||||
userController.persist()
|
userController.persist()
|
||||||
return no_content()
|
return no_content()
|
||||||
|
|
|
@ -5,10 +5,10 @@ Provides routes used to configure roles and permissions of users / roles.
|
||||||
|
|
||||||
from werkzeug.exceptions import BadRequest
|
from werkzeug.exceptions import BadRequest
|
||||||
from flask import Blueprint, request, jsonify
|
from flask import Blueprint, request, jsonify
|
||||||
from http.client import CREATED, NO_CONTENT
|
from http.client import NO_CONTENT
|
||||||
|
|
||||||
from flaschengeist.plugins import Plugin
|
from flaschengeist.plugins import Plugin
|
||||||
from flaschengeist.decorator import login_required
|
from flaschengeist.utils.decorators import login_required
|
||||||
from flaschengeist.controller import roleController
|
from flaschengeist.controller import roleController
|
||||||
from flaschengeist.utils.HTTP import created
|
from flaschengeist.utils.HTTP import created
|
||||||
|
|
||||||
|
|
|
@ -3,19 +3,18 @@
|
||||||
Provides duty schedule / duty roster functions
|
Provides duty schedule / duty roster functions
|
||||||
"""
|
"""
|
||||||
from datetime import datetime, timedelta, timezone
|
from datetime import datetime, timedelta, timezone
|
||||||
from http.client import NO_CONTENT, CREATED
|
from http.client import NO_CONTENT
|
||||||
from flask import Blueprint, request, jsonify
|
from flask import Blueprint, request, jsonify
|
||||||
from werkzeug.exceptions import BadRequest, NotFound, Forbidden
|
from werkzeug.exceptions import BadRequest, NotFound, Forbidden
|
||||||
|
|
||||||
from flaschengeist.plugins import Plugin
|
from flaschengeist.plugins import Plugin
|
||||||
from flaschengeist.models.session import Session
|
from flaschengeist.models.session import Session
|
||||||
from flaschengeist.decorator import login_required
|
from flaschengeist.utils.decorators import login_required
|
||||||
from flaschengeist.utils.datetime import from_iso_format
|
from flaschengeist.utils.datetime import from_iso_format
|
||||||
from flaschengeist.controller import userController
|
from flaschengeist.controller import userController
|
||||||
|
|
||||||
from . import event_controller, permissions
|
from . import event_controller, permissions
|
||||||
from . import models
|
from . import models
|
||||||
from ... import logger
|
|
||||||
from ...utils.HTTP import no_content
|
from ...utils.HTTP import no_content
|
||||||
|
|
||||||
schedule_bp = Blueprint("schedule", __name__, url_prefix="/schedule")
|
schedule_bp = Blueprint("schedule", __name__, url_prefix="/schedule")
|
||||||
|
|
|
@ -11,7 +11,7 @@ from flaschengeist import logger
|
||||||
from flaschengeist.config import config
|
from flaschengeist.config import config
|
||||||
from flaschengeist.plugins import Plugin
|
from flaschengeist.plugins import Plugin
|
||||||
from flaschengeist.models.user import User, _Avatar
|
from flaschengeist.models.user import User, _Avatar
|
||||||
from flaschengeist.decorator import login_required, extract_session
|
from flaschengeist.utils.decorators import login_required, extract_session, headers
|
||||||
from flaschengeist.controller import userController
|
from flaschengeist.controller import userController
|
||||||
from flaschengeist.utils.HTTP import created
|
from flaschengeist.utils.HTTP import created
|
||||||
from flaschengeist.utils.datetime import from_iso_format
|
from flaschengeist.utils.datetime import from_iso_format
|
||||||
|
@ -57,6 +57,7 @@ def register():
|
||||||
|
|
||||||
@users_bp.route("/users", methods=["GET"])
|
@users_bp.route("/users", methods=["GET"])
|
||||||
@login_required()
|
@login_required()
|
||||||
|
@headers({"Cache-Control": "private, must-revalidate, max-age=3600"})
|
||||||
def list_users(current_session):
|
def list_users(current_session):
|
||||||
"""List all existing users
|
"""List all existing users
|
||||||
|
|
||||||
|
@ -75,6 +76,7 @@ def list_users(current_session):
|
||||||
|
|
||||||
@users_bp.route("/users/<userid>", methods=["GET"])
|
@users_bp.route("/users/<userid>", methods=["GET"])
|
||||||
@login_required()
|
@login_required()
|
||||||
|
@headers({"Cache-Control": "private, must-revalidate, max-age=3600"})
|
||||||
def get_user(userid, current_session):
|
def get_user(userid, current_session):
|
||||||
"""Retrieve user by userid
|
"""Retrieve user by userid
|
||||||
|
|
||||||
|
@ -96,6 +98,7 @@ def get_user(userid, current_session):
|
||||||
|
|
||||||
|
|
||||||
@users_bp.route("/users/<userid>/avatar", methods=["GET"])
|
@users_bp.route("/users/<userid>/avatar", methods=["GET"])
|
||||||
|
@headers({"Cache-Control": "public, max-age=604800"})
|
||||||
def get_avatar(userid):
|
def get_avatar(userid):
|
||||||
user = userController.get_user(userid)
|
user = userController.get_user(userid)
|
||||||
avatar = userController.load_avatar(user)
|
avatar = userController.load_avatar(user)
|
||||||
|
|
|
@ -40,3 +40,29 @@ def login_required(permission=None):
|
||||||
return wrapped_f
|
return wrapped_f
|
||||||
|
|
||||||
return wrap
|
return wrap
|
||||||
|
|
||||||
|
|
||||||
|
def headers(headers={}, **headers_kwargs):
|
||||||
|
"""
|
||||||
|
Wrap a Flask route to add HTTP headers.
|
||||||
|
Either pass a dictionary of headers to be set as the headerDict keyword
|
||||||
|
argument, or pass header values as keyword arguments. Or both.
|
||||||
|
|
||||||
|
The key and value of items in a dictionary will be converted to strings using
|
||||||
|
the `str` method, ensure both keys and values are serializable thusly.
|
||||||
|
Args:
|
||||||
|
headers: A dictionary of headers to be injected into the response headers.
|
||||||
|
Note, the supplied dictionary is first copied then mutated.
|
||||||
|
headers_kwargs: The headers to be injected into the response headers.
|
||||||
|
"""
|
||||||
|
_headerDict = headers.copy()
|
||||||
|
_headerDict.update(headers_kwargs)
|
||||||
|
|
||||||
|
def decorator(f):
|
||||||
|
@wraps(f)
|
||||||
|
def decorated_function(*args, **kwargs):
|
||||||
|
return f(*args, **kwargs), _headerDict
|
||||||
|
|
||||||
|
return decorated_function
|
||||||
|
|
||||||
|
return decorator
|
Loading…
Reference in New Issue