Merge pull request #464 from dod-ccpo/log-accepted-invitations

Log and display accepted invitation events
This commit is contained in:
richard-dds 2018-11-29 11:28:15 -05:00 committed by GitHub
commit 24b2543ccc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 57 additions and 1 deletions

View File

@ -25,6 +25,15 @@ class AuditLog(object):
)
return AuditEventQuery.get_all(pagination_opts)
@classmethod
def get_by_resource(cls, resource_id):
return (
db.session.query(AuditEvent)
.filter(AuditEvent.resource_id == resource_id)
.order_by(AuditEvent.time_created.desc())
.all()
)
@classmethod
def _resource_type(cls, resource):
return type(resource).__name__.lower()

View File

@ -91,3 +91,25 @@ class Invitation(Base, TimestampsMixin, AuditableMixin):
@property
def is_revokable(self):
return self.is_pending and not self.is_expired
@property
def user_dod_id(self):
return self.user.dod_id if self.user is not None else None
@property
def event_details(self):
return {"email": self.email, "dod_id": self.user_dod_id}
@property
def history(self):
changes = self.get_changes()
change_set = {}
if "status" in changes:
change_set["status"] = [s.name for s in changes["status"]]
return change_set
@property
def workspace_id(self):
return self.workspace_role.workspace_id

View File

@ -28,7 +28,7 @@
<br>
{% if event.event_details %}
{% if event.event_details and event.resource_type == "user" %}
for User <code>{{ event.event_details.updated_user_id }}</code> ({{ event.event_details.updated_user_name }})
{% if event.event_details["environment"] %}
@ -40,6 +40,17 @@
in Workspace <code>{{ event.event_details["workspace_id"] }}</code> ({{ event.event_details["workspace"] }})
{% endif %}
<br>
{% 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 <code>{{ event.event_details.dod_id }}</code>)
{% endif %}
{% endif %}
{% if event.changed_state and event.resource_type == 'environment_role' %}
from {{ event.changed_state.role[0] }} to {{ event.changed_state.role[1] }}
<br>
{% endif %}
{% if event.workspace %}

View File

@ -17,6 +17,8 @@ from tests.factories import (
InvitationFactory,
)
from atst.domain.audit_log import AuditLog
def test_create_invitation():
workspace = WorkspaceFactory.create()
@ -113,3 +115,15 @@ def test_resend_invitation():
Invitations.resend(workspace.owner, workspace.id, invite.token)
assert ws_role.invitations[0].is_revoked
assert ws_role.invitations[1].is_pending
def test_audit_event_for_accepted_invite():
workspace = WorkspaceFactory.create()
user = UserFactory.create()
ws_role = WorkspaceRoleFactory.create(user=user, workspace=workspace)
invite = Invitations.create(workspace.owner, ws_role, user.email)
invite = Invitations.accept(user, invite.token)
accepted_event = AuditLog.get_by_resource(invite.id)[0]
assert "email" in accepted_event.event_details
assert "dod_id" in accepted_event.event_details