Skip to content

Commit

Permalink
Merge pull request #980 from thunderstore-io/optional-user
Browse files Browse the repository at this point in the history
Make audit event user optional for system logs
  • Loading branch information
MythicManiac authored Dec 24, 2023
2 parents 874ab10 + 4ff9c77 commit a47e946
Show file tree
Hide file tree
Showing 4 changed files with 21 additions and 16 deletions.
16 changes: 9 additions & 7 deletions django/thunderstore/community/models/package_listing.py
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,7 @@ def build_audit_event(
self,
*,
action: AuditAction,
user_id: int,
user_id: Optional[int],
message: Optional[str] = None,
) -> AuditEvent:
return AuditEvent(
Expand All @@ -159,30 +159,32 @@ def build_audit_event(
)

@transaction.atomic
def reject(self, agent: Optional[UserType], rejection_reason: str):
if self.can_user_manage_approval_status(agent):
def reject(
self, agent: Optional[UserType], rejection_reason: str, is_system: bool = False
):
if is_system or self.can_user_manage_approval_status(agent):
self.rejection_reason = rejection_reason
self.review_status = PackageListingReviewStatus.rejected
self.save()
fire_audit_event(
self.build_audit_event(
action=AuditAction.PACKAGE_REJECTED,
user_id=agent.pk,
user_id=agent.pk if agent else None,
message=rejection_reason,
)
)
else:
raise PermissionError()

@transaction.atomic
def approve(self, agent: Optional[UserType]):
if self.can_user_manage_approval_status(agent):
def approve(self, agent: Optional[UserType], is_system: bool = False):
if is_system or self.can_user_manage_approval_status(agent):
self.review_status = PackageListingReviewStatus.approved
self.save()
fire_audit_event(
self.build_audit_event(
action=AuditAction.PACKAGE_APPROVED,
user_id=agent.pk,
user_id=agent.pk if agent else None,
)
)
else:
Expand Down
2 changes: 1 addition & 1 deletion django/thunderstore/webhooks/audit.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ class AuditEventField(BaseModel):

class AuditEvent(BaseModel):
timestamp: datetime
user_id: int
user_id: Optional[int]
community_id: Optional[int]
action: AuditAction
message: Optional[str]
Expand Down
17 changes: 10 additions & 7 deletions django/thunderstore/webhooks/models/audit.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,12 +48,15 @@ def get_event_color(action: AuditAction) -> int:

@staticmethod
def render_event(event: AuditEvent) -> DiscordPayload:
agent = User.objects.prefetch_related("social_auth").get(pk=event.user_id)
agent_discord_mention = None
for entry in agent.social_auth.all():
if entry.provider == "discord":
agent_discord_mention = f"<@{entry.uid}>"
break
agent_username = "System"

if event.user_id:
agent = User.objects.prefetch_related("social_auth").get(pk=event.user_id)
agent_username = agent.username
for entry in agent.social_auth.all():
if entry.provider == "discord":
agent_username = f"<@{entry.uid}>"
break

return DiscordPayload(
embeds=[
Expand All @@ -66,7 +69,7 @@ def render_event(event: AuditEvent) -> DiscordPayload:
fields=[
DiscordEmbedField(
name="Triggered by",
value=agent_discord_mention or agent.username,
value=agent_username,
)
]
+ event.fields,
Expand Down
2 changes: 1 addition & 1 deletion python-packages

0 comments on commit a47e946

Please sign in to comment.