From 1be7fcdd8ae42369469ee88a23692c4b9d2b842d Mon Sep 17 00:00:00 2001 From: Patrick Smith Date: Fri, 30 Nov 2018 11:31:30 -0500 Subject: [PATCH 1/8] Move audit_log template to a directory --- atst/routes/__init__.py | 2 +- templates/{ => audit_log}/audit_log.html | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename templates/{ => audit_log}/audit_log.html (100%) diff --git a/atst/routes/__init__.py b/atst/routes/__init__.py index 339cd219..2a1d23bc 100644 --- a/atst/routes/__init__.py +++ b/atst/routes/__init__.py @@ -137,7 +137,7 @@ def get_pagination_opts(request, default_page=1, default_per_page=100): def activity_history(): pagination_opts = get_pagination_opts(request) audit_events = AuditLog.get_all_events(g.current_user, pagination_opts) - return render_template("audit_log.html", audit_events=audit_events) + return render_template("audit_log/audit_log.html", audit_events=audit_events) @bp.route("/about") diff --git a/templates/audit_log.html b/templates/audit_log/audit_log.html similarity index 100% rename from templates/audit_log.html rename to templates/audit_log/audit_log.html From 5d9aeeefed37bbcb66768bbbf3d560c0d7f812bd Mon Sep 17 00:00:00 2001 From: Patrick Smith Date: Fri, 30 Nov 2018 11:32:49 -0500 Subject: [PATCH 2/8] Add generated JS coverage to gitignore --- .gitignore | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index e161f040..c7205185 100644 --- a/.gitignore +++ b/.gitignore @@ -45,8 +45,12 @@ ssl/client-certs/*.srl # uploads /uploads -# coverage output +# python coverage output .coverage +# je coverage output +coverage + + # selenium testing browserstacklocal From d593f7577b53790f4494c994cca7f45edc4d3acc Mon Sep 17 00:00:00 2001 From: Patrick Smith Date: Mon, 3 Dec 2018 15:54:07 -0500 Subject: [PATCH 3/8] Attempt to look up template for each audit event type --- atst/filters.py | 12 +++++- templates/audit_log/audit_log.html | 56 ++----------------------- templates/audit_log/events/_base.html | 22 ++++++++++ templates/audit_log/events/default.html | 39 +++++++++++++++++ 4 files changed, 75 insertions(+), 54 deletions(-) create mode 100644 templates/audit_log/events/_base.html create mode 100644 templates/audit_log/events/default.html diff --git a/atst/filters.py b/atst/filters.py index c172a3df..f8b8d2d3 100644 --- a/atst/filters.py +++ b/atst/filters.py @@ -1,6 +1,7 @@ import re import datetime -from flask import current_app as app +from flask import current_app as app, render_template +from jinja2.exceptions import TemplateNotFound def iconSvg(name): @@ -86,6 +87,14 @@ def pageWindow(pagination, size=2): return (max(1, (page - size) - over), min(num_pages, (page + size) - under)) +def renderAuditEvent(event): + template_name = 'audit_log/events/{}.html'.format(event.resource_type) + try: + return render_template(template_name, event=event) + except TemplateNotFound: + return render_template('audit_log/events/default.html', event=event) + + def register_filters(app): app.jinja_env.filters["iconSvg"] = iconSvg app.jinja_env.filters["dollars"] = dollars @@ -98,3 +107,4 @@ def register_filters(app): app.jinja_env.filters["formattedDate"] = formattedDate app.jinja_env.filters["dateFromString"] = dateFromString app.jinja_env.filters["pageWindow"] = pageWindow + app.jinja_env.filters["renderAuditEvent"] = renderAuditEvent diff --git a/templates/audit_log/audit_log.html b/templates/audit_log/audit_log.html index cacd164b..3b505135 100644 --- a/templates/audit_log/audit_log.html +++ b/templates/audit_log/audit_log.html @@ -12,59 +12,9 @@
    {% for event in audit_events %}
  • -
    -
    - -
    - -
    -

    - {{ event.user.full_name if event.user else "ATAT System" }} -

    - {{ event.action }} {{ event.resource_type }} {{ event.resource_id }} - {% if event.display_name %} - ({{ event.display_name }}) - {% endif %} - -
    - - {% if event.event_details and event.resource_type == "user" %} - for User {{ event.event_details.updated_user_id }} ({{ event.event_details.updated_user_name }}) - - {% if event.event_details["environment"] %} -
    - in Environment {{ event.event_details["environment_id"] }} ({{ event.event_details["environment"] }}) -
    - in Project {{ event.event_details["project_id"] }} ({{ event.event_details["project"] }}) -
    - in Workspace {{ event.event_details["workspace_id"] }} ({{ event.event_details["workspace"] }}) - {% endif %} -
    - - {% elif event.event_details and event.resource_type == "invitation" %} - {% set accepted = event.changed_state.status and event.changed_state.status.1 == "ACCEPTED" %} - {% if accepted %} - accepted by {{ event.event_details.email }} (DOD {{ event.event_details.dod_id }}) - {% endif %} - {% endif %} - - {% if event.changed_state and event.resource_type == 'environment_role' %} - from {{ event.changed_state.role[0] }} to {{ event.changed_state.role[1] }} -
    - {% endif %} - - {% if event.workspace %} - in Workspace {{ event.workspace_id }} ({{ event.workspace.name }}) - {% elif event.request %} - on Request {{ event.request_id }} ({{ event.request.displayname }}) - {% endif %} - - {% if event.changed_state.role %} - from {{ event.changed_state.role[0] }} to {{ event.changed_state.role[1] }} -
    - {% endif %} -
    -
    + {% autoescape false %} + {{ event | renderAuditEvent }} + {% endautoescape %}
  • {% endfor %}
diff --git a/templates/audit_log/events/_base.html b/templates/audit_log/events/_base.html new file mode 100644 index 00000000..03bd5a94 --- /dev/null +++ b/templates/audit_log/events/_base.html @@ -0,0 +1,22 @@ +
+
+ +
+ +
+ {% block header %} +

+ {{ event.user.full_name if event.user else "ATAT System" }} +

+ {{ event.action }} {{ event.resource_type }} {{ event.resource_id }} + {% if event.display_name %} + ({{ event.display_name }}) + {% endif %} + {% endblock %} + +
+ + {% block content %}{% endblock %} +
+
+ diff --git a/templates/audit_log/events/default.html b/templates/audit_log/events/default.html new file mode 100644 index 00000000..1fae5e5b --- /dev/null +++ b/templates/audit_log/events/default.html @@ -0,0 +1,39 @@ +{% extends "audit_log/events/_base.html" %} + +{% block content %} + {% if event.event_details and event.resource_type == "user" %} + for User {{ event.event_details.updated_user_id }} ({{ event.event_details.updated_user_name }}) + + {% if event.event_details["environment"] %} +
+ in Environment {{ event.event_details["environment_id"] }} ({{ event.event_details["environment"] }}) +
+ in Project {{ event.event_details["project_id"] }} ({{ event.event_details["project"] }}) +
+ in Workspace {{ event.event_details["workspace_id"] }} ({{ event.event_details["workspace"] }}) + {% endif %} +
+ + {% elif event.event_details and event.resource_type == "invitation" %} + {% set accepted = event.changed_state.status and event.changed_state.status.1 == "ACCEPTED" %} + {% if accepted %} + accepted by {{ event.event_details.email }} (DOD {{ event.event_details.dod_id }}) + {% endif %} + {% endif %} + + {% if event.changed_state and event.resource_type == 'environment_role' %} + from {{ event.changed_state.role[0] }} to {{ event.changed_state.role[1] }} +
+ {% endif %} + + {% if event.workspace %} + in Workspace {{ event.workspace_id }} ({{ event.workspace.name }}) + {% elif event.request %} + on Request {{ event.request_id }} ({{ event.request.displayname }}) + {% endif %} + + {% if event.changed_state.role %} + from {{ event.changed_state.role[0] }} to {{ event.changed_state.role[1] }} +
+ {% endif %} +{% endblock %} From 7c3e0d8fab5c657849e2cef9d099a26671b1347a Mon Sep 17 00:00:00 2001 From: Patrick Smith Date: Tue, 4 Dec 2018 11:17:39 -0500 Subject: [PATCH 4/8] Add audit event templates for each type of event --- templates/audit_log/events/environment.html | 5 +++++ templates/audit_log/events/environment_role.html | 13 +++++++++++++ templates/audit_log/events/invitation.html | 8 ++++++++ templates/audit_log/events/project.html | 4 ++++ templates/audit_log/events/request.html | 4 ++++ templates/audit_log/events/request_review.html | 4 ++++ templates/audit_log/events/request_revision.html | 5 +++++ .../audit_log/events/request_status_event.html | 4 ++++ templates/audit_log/events/user.html | 4 ++++ templates/audit_log/events/workspace.html | 1 + templates/audit_log/events/workspace_role.html | 14 ++++++++++++++ 11 files changed, 66 insertions(+) create mode 100644 templates/audit_log/events/environment.html create mode 100644 templates/audit_log/events/environment_role.html create mode 100644 templates/audit_log/events/invitation.html create mode 100644 templates/audit_log/events/project.html create mode 100644 templates/audit_log/events/request.html create mode 100644 templates/audit_log/events/request_review.html create mode 100644 templates/audit_log/events/request_revision.html create mode 100644 templates/audit_log/events/request_status_event.html create mode 100644 templates/audit_log/events/user.html create mode 100644 templates/audit_log/events/workspace.html create mode 100644 templates/audit_log/events/workspace_role.html diff --git a/templates/audit_log/events/environment.html b/templates/audit_log/events/environment.html new file mode 100644 index 00000000..a31a87ef --- /dev/null +++ b/templates/audit_log/events/environment.html @@ -0,0 +1,5 @@ +{% extends "audit_log/events/_base.html" %} + +{% block content %} + in Workspace {{ event.workspace_id }} ({{ event.workspace.name }}) +{% endblock %} diff --git a/templates/audit_log/events/environment_role.html b/templates/audit_log/events/environment_role.html new file mode 100644 index 00000000..91b7a398 --- /dev/null +++ b/templates/audit_log/events/environment_role.html @@ -0,0 +1,13 @@ +{% extends 'audit_log/events/_base.html' %} + +{% block content %} + for User {{ event.event_details.updated_user_id }} ({{ event.event_details.updated_user_name }}) + {% if event.event_details["environment"] %} +
+ in Environment {{ event.event_details["environment_id"] }} ({{ event.event_details["environment"] }}) +
+ in Project {{ event.event_details["project_id"] }} ({{ event.event_details["project"] }}) +
+ in Workspace {{ event.event_details["workspace_id"] }} ({{ event.event_details["workspace"] }}) + {% endif %} +{% endblock %} diff --git a/templates/audit_log/events/invitation.html b/templates/audit_log/events/invitation.html new file mode 100644 index 00000000..663670bb --- /dev/null +++ b/templates/audit_log/events/invitation.html @@ -0,0 +1,8 @@ +{% extends "audit_log/events/_base.html" %} + +{% block content %} + {% set accepted = event.changed_state.status and event.changed_state.status.1 == "ACCEPTED" %} + {% if accepted %} + accepted by {{ event.event_details.email }} (DOD {{ event.event_details.dod_id }}) + {% endif %} +{% endblock %} diff --git a/templates/audit_log/events/project.html b/templates/audit_log/events/project.html new file mode 100644 index 00000000..ef822521 --- /dev/null +++ b/templates/audit_log/events/project.html @@ -0,0 +1,4 @@ +{% extends "audit_log/events/_base.html" %} + +{% block content %} +{% endblock %} diff --git a/templates/audit_log/events/request.html b/templates/audit_log/events/request.html new file mode 100644 index 00000000..ef822521 --- /dev/null +++ b/templates/audit_log/events/request.html @@ -0,0 +1,4 @@ +{% extends "audit_log/events/_base.html" %} + +{% block content %} +{% endblock %} diff --git a/templates/audit_log/events/request_review.html b/templates/audit_log/events/request_review.html new file mode 100644 index 00000000..ef822521 --- /dev/null +++ b/templates/audit_log/events/request_review.html @@ -0,0 +1,4 @@ +{% extends "audit_log/events/_base.html" %} + +{% block content %} +{% endblock %} diff --git a/templates/audit_log/events/request_revision.html b/templates/audit_log/events/request_revision.html new file mode 100644 index 00000000..f29caf62 --- /dev/null +++ b/templates/audit_log/events/request_revision.html @@ -0,0 +1,5 @@ +{% extends "audit_log/events/_base.html" %} + +{% block content %} + on Request {{ event.request_id }} ({{ event.request.displayname }}) +{% endblock %} diff --git a/templates/audit_log/events/request_status_event.html b/templates/audit_log/events/request_status_event.html new file mode 100644 index 00000000..ef822521 --- /dev/null +++ b/templates/audit_log/events/request_status_event.html @@ -0,0 +1,4 @@ +{% extends "audit_log/events/_base.html" %} + +{% block content %} +{% endblock %} diff --git a/templates/audit_log/events/user.html b/templates/audit_log/events/user.html new file mode 100644 index 00000000..ef822521 --- /dev/null +++ b/templates/audit_log/events/user.html @@ -0,0 +1,4 @@ +{% extends "audit_log/events/_base.html" %} + +{% block content %} +{% endblock %} diff --git a/templates/audit_log/events/workspace.html b/templates/audit_log/events/workspace.html new file mode 100644 index 00000000..2d14abad --- /dev/null +++ b/templates/audit_log/events/workspace.html @@ -0,0 +1 @@ +{{ event.resource_type }} diff --git a/templates/audit_log/events/workspace_role.html b/templates/audit_log/events/workspace_role.html new file mode 100644 index 00000000..38a22720 --- /dev/null +++ b/templates/audit_log/events/workspace_role.html @@ -0,0 +1,14 @@ +{% extends "audit_log/events/_base.html" %} + +{% block content %} + for User {{ event.event_details.updated_user_id }} ({{ event.event_details.updated_user_name }}) + in Workspace {{ event.workspace_id }} ({{ event.workspace.name }}) + + {% if event.changed_state.status %} + from status "{{ event.changed_state.status[0] }}" to "{{ event.changed_state.status[1] }}" + {% endif %} + + {% if event.changed_state.role %} + from role {{ event.changed_state.role[0] }} to {{ event.changed_state.role[1] }} + {% endif %} +{% endblock %} From 1af80843ed397429466f4589597534bed8c326e8 Mon Sep 17 00:00:00 2001 From: Patrick Smith Date: Wed, 5 Dec 2018 10:36:12 -0500 Subject: [PATCH 5/8] Update default audit event --- templates/audit_log/events/default.html | 49 +++++++++---------------- 1 file changed, 18 insertions(+), 31 deletions(-) diff --git a/templates/audit_log/events/default.html b/templates/audit_log/events/default.html index 1fae5e5b..2a6ecdf5 100644 --- a/templates/audit_log/events/default.html +++ b/templates/audit_log/events/default.html @@ -1,39 +1,26 @@ {% extends "audit_log/events/_base.html" %} {% block content %} - {% if event.event_details and event.resource_type == "user" %} - for User {{ event.event_details.updated_user_id }} ({{ event.event_details.updated_user_name }}) - - {% if event.event_details["environment"] %} -
- in Environment {{ event.event_details["environment_id"] }} ({{ event.event_details["environment"] }}) -
- in Project {{ event.event_details["project_id"] }} ({{ event.event_details["project"] }}) -
- in Workspace {{ event.event_details["workspace_id"] }} ({{ event.event_details["workspace"] }}) - {% endif %} -
- - {% elif event.event_details and event.resource_type == "invitation" %} - {% set accepted = event.changed_state.status and event.changed_state.status.1 == "ACCEPTED" %} - {% if accepted %} - accepted by {{ event.event_details.email }} (DOD {{ event.event_details.dod_id }}) - {% endif %} - {% endif %} - - {% if event.changed_state and event.resource_type == 'environment_role' %} - from {{ event.changed_state.role[0] }} to {{ event.changed_state.role[1] }} + {% if event.event_details %}
+ Details: +
+ {% for key, value in event.event_details.items() %} + {% if value is not none %} +
{{ key }}
+
{{ value }}
+ {% endif %} + {% endfor %} +
{% endif %} - - {% if event.workspace %} - in Workspace {{ event.workspace_id }} ({{ event.workspace.name }}) - {% elif event.request %} - on Request {{ event.request_id }} ({{ event.request.displayname }}) - {% endif %} - - {% if event.changed_state.role %} - from {{ event.changed_state.role[0] }} to {{ event.changed_state.role[1] }} + {% if event.changed_state %}
+ Changes: +
+ {% for key, value in event.changed_state.items() %} +
{{ key }}
+
{{ value[0] }} to {{ value[1] }}
+ {% endfor %} +
{% endif %} {% endblock %} From 947e4b682a5ee190ab2981c0ec36a329696c7199 Mon Sep 17 00:00:00 2001 From: Patrick Smith Date: Wed, 5 Dec 2018 10:50:20 -0500 Subject: [PATCH 6/8] Add simple test for render audit event filter --- tests/test_filters.py | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/tests/test_filters.py b/tests/test_filters.py index fde37097..6e272b39 100644 --- a/tests/test_filters.py +++ b/tests/test_filters.py @@ -1,6 +1,7 @@ import pytest -from atst.filters import dollars +from atst.filters import dollars, renderAuditEvent +from atst.models import AuditEvent @pytest.mark.parametrize( @@ -15,3 +16,15 @@ from atst.filters import dollars ) def test_dollar_fomatter(input, expected): assert dollars(input) == expected + + +def test_render_audit_event_with_known_resource_type(): + event = AuditEvent(resource_type='user') + result = renderAuditEvent(event) + assert ' Date: Wed, 5 Dec 2018 10:54:52 -0500 Subject: [PATCH 7/8] Fix linting issues --- atst/filters.py | 4 ++-- tests/test_filters.py | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/atst/filters.py b/atst/filters.py index f8b8d2d3..32000105 100644 --- a/atst/filters.py +++ b/atst/filters.py @@ -88,11 +88,11 @@ def pageWindow(pagination, size=2): def renderAuditEvent(event): - template_name = 'audit_log/events/{}.html'.format(event.resource_type) + template_name = "audit_log/events/{}.html".format(event.resource_type) try: return render_template(template_name, event=event) except TemplateNotFound: - return render_template('audit_log/events/default.html', event=event) + return render_template("audit_log/events/default.html", event=event) def register_filters(app): diff --git a/tests/test_filters.py b/tests/test_filters.py index 6e272b39..5cfff00e 100644 --- a/tests/test_filters.py +++ b/tests/test_filters.py @@ -19,12 +19,12 @@ def test_dollar_fomatter(input, expected): def test_render_audit_event_with_known_resource_type(): - event = AuditEvent(resource_type='user') + event = AuditEvent(resource_type="user") result = renderAuditEvent(event) - assert ' Date: Wed, 5 Dec 2018 11:41:35 -0500 Subject: [PATCH 8/8] Update workspace audit event --- templates/audit_log/events/workspace.html | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/templates/audit_log/events/workspace.html b/templates/audit_log/events/workspace.html index 2d14abad..ef822521 100644 --- a/templates/audit_log/events/workspace.html +++ b/templates/audit_log/events/workspace.html @@ -1 +1,4 @@ -{{ event.resource_type }} +{% extends "audit_log/events/_base.html" %} + +{% block content %} +{% endblock %}