mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-08-25 08:44:23 -04:00
Enforce order of permissions decorators
At the moment we mostly have `user_has_permissions` execute first. It shouldn’t matter, but it feels right for us to check that a user is logged in before we check their permissions to a service. Otherwise a malicious user could (maybe) check if a service ID belongs to a real service, and go on to do something malicious with that information. This commit adds some extra test code to enforce that the order is always the same. N.B. decorators in Python execute from closest to furthest (from the line on which the function is defined).
This commit is contained in:
@@ -42,8 +42,8 @@ from app.utils import (
|
||||
# when product team makes decision about how/what/when
|
||||
# to view history
|
||||
@main.route("/services/<service_id>/history")
|
||||
@login_required
|
||||
@user_has_permissions()
|
||||
@login_required
|
||||
def temp_service_history(service_id):
|
||||
data = service_api_client.get_service_history(service_id)['data']
|
||||
return render_template('views/temp-history.html',
|
||||
@@ -53,15 +53,15 @@ def temp_service_history(service_id):
|
||||
|
||||
|
||||
@main.route("/services/<service_id>/dashboard")
|
||||
@login_required
|
||||
@user_has_permissions('view_activity', 'send_messages')
|
||||
@login_required
|
||||
def old_service_dashboard(service_id):
|
||||
return redirect(url_for('.service_dashboard', service_id=service_id))
|
||||
|
||||
|
||||
@main.route("/services/<service_id>")
|
||||
@login_required
|
||||
@user_has_permissions()
|
||||
@login_required
|
||||
def service_dashboard(service_id):
|
||||
|
||||
if session.get('invited_user'):
|
||||
@@ -79,23 +79,23 @@ def service_dashboard(service_id):
|
||||
|
||||
|
||||
@main.route("/services/<service_id>/dashboard.json")
|
||||
@login_required
|
||||
@user_has_permissions('view_activity')
|
||||
@login_required
|
||||
def service_dashboard_updates(service_id):
|
||||
return jsonify(**get_dashboard_partials(service_id))
|
||||
|
||||
|
||||
@main.route("/services/<service_id>/template-activity")
|
||||
@login_required
|
||||
@user_has_permissions('view_activity')
|
||||
@login_required
|
||||
def template_history(service_id):
|
||||
|
||||
return redirect(url_for('main.template_usage', service_id=service_id), code=301)
|
||||
|
||||
|
||||
@main.route("/services/<service_id>/template-usage")
|
||||
@login_required
|
||||
@user_has_permissions('view_activity')
|
||||
@login_required
|
||||
def template_usage(service_id):
|
||||
|
||||
year, current_financial_year = requested_and_current_financial_year(request)
|
||||
@@ -144,8 +144,8 @@ def template_usage(service_id):
|
||||
|
||||
|
||||
@main.route("/services/<service_id>/usage")
|
||||
@login_required
|
||||
@user_has_permissions('manage_service', allow_org_user=True)
|
||||
@login_required
|
||||
def usage(service_id):
|
||||
year, current_financial_year = requested_and_current_financial_year(request)
|
||||
|
||||
@@ -175,8 +175,8 @@ def usage(service_id):
|
||||
|
||||
|
||||
@main.route("/services/<service_id>/monthly")
|
||||
@login_required
|
||||
@user_has_permissions('view_activity')
|
||||
@login_required
|
||||
def monthly(service_id):
|
||||
year, current_financial_year = requested_and_current_financial_year(request)
|
||||
return render_template(
|
||||
@@ -194,8 +194,8 @@ def monthly(service_id):
|
||||
|
||||
|
||||
@main.route("/services/<service_id>/inbox")
|
||||
@login_required
|
||||
@user_has_permissions('view_activity')
|
||||
@login_required
|
||||
def inbox(service_id):
|
||||
|
||||
return render_template(
|
||||
@@ -206,16 +206,16 @@ def inbox(service_id):
|
||||
|
||||
|
||||
@main.route("/services/<service_id>/inbox.json")
|
||||
@login_required
|
||||
@user_has_permissions('view_activity')
|
||||
@login_required
|
||||
def inbox_updates(service_id):
|
||||
|
||||
return jsonify(get_inbox_partials(service_id))
|
||||
|
||||
|
||||
@main.route("/services/<service_id>/inbox.csv")
|
||||
@login_required
|
||||
@user_has_permissions('view_activity')
|
||||
@login_required
|
||||
def inbox_download(service_id):
|
||||
return Response(
|
||||
Spreadsheet.from_rows(
|
||||
|
||||
Reference in New Issue
Block a user