mirror of
https://github.com/simple-login/app.git
synced 2024-11-16 17:08:30 +01:00
feat: show audit logs on admin panel (#2273)
* feat: show audit logs on admin panel * fix: make audit logs desc
This commit is contained in:
parent
06201a517c
commit
2d67bf3689
2 changed files with 68 additions and 2 deletions
|
@ -1,5 +1,5 @@
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
from typing import Optional
|
from typing import Optional, List
|
||||||
|
|
||||||
import arrow
|
import arrow
|
||||||
import sqlalchemy
|
import sqlalchemy
|
||||||
|
@ -35,6 +35,8 @@ from app.models import (
|
||||||
DomainDeletedAlias,
|
DomainDeletedAlias,
|
||||||
PartnerUser,
|
PartnerUser,
|
||||||
AliasMailbox,
|
AliasMailbox,
|
||||||
|
AliasAuditLog,
|
||||||
|
UserAuditLog,
|
||||||
)
|
)
|
||||||
from app.newsletter_utils import send_newsletter_to_user, send_newsletter_to_address
|
from app.newsletter_utils import send_newsletter_to_user, send_newsletter_to_address
|
||||||
|
|
||||||
|
@ -737,11 +739,13 @@ class InvalidMailboxDomainAdmin(SLModelView):
|
||||||
class EmailSearchResult:
|
class EmailSearchResult:
|
||||||
no_match: bool = True
|
no_match: bool = True
|
||||||
alias: Optional[Alias] = None
|
alias: Optional[Alias] = None
|
||||||
mailbox: list[Mailbox] = []
|
alias_audit_log: Optional[List[AliasAuditLog]] = None
|
||||||
|
mailbox: List[Mailbox] = []
|
||||||
mailbox_count: int = 0
|
mailbox_count: int = 0
|
||||||
deleted_alias: Optional[DeletedAlias] = None
|
deleted_alias: Optional[DeletedAlias] = None
|
||||||
deleted_custom_alias: Optional[DomainDeletedAlias] = None
|
deleted_custom_alias: Optional[DomainDeletedAlias] = None
|
||||||
user: Optional[User] = None
|
user: Optional[User] = None
|
||||||
|
user_audit_log: Optional[List[UserAuditLog]] = None
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def from_email(email: str) -> EmailSearchResult:
|
def from_email(email: str) -> EmailSearchResult:
|
||||||
|
@ -749,10 +753,20 @@ class EmailSearchResult:
|
||||||
alias = Alias.get_by(email=email)
|
alias = Alias.get_by(email=email)
|
||||||
if alias:
|
if alias:
|
||||||
output.alias = alias
|
output.alias = alias
|
||||||
|
output.alias_audit_log = (
|
||||||
|
AliasAuditLog.filter_by(alias_id=alias.id)
|
||||||
|
.order_by(AliasAuditLog.created_at.desc())
|
||||||
|
.all()
|
||||||
|
)
|
||||||
output.no_match = False
|
output.no_match = False
|
||||||
user = User.get_by(email=email)
|
user = User.get_by(email=email)
|
||||||
if user:
|
if user:
|
||||||
output.user = user
|
output.user = user
|
||||||
|
output.user_audit_log = (
|
||||||
|
UserAuditLog.filter_by(user_id=user.id)
|
||||||
|
.order_by(UserAuditLog.created_at.desc())
|
||||||
|
.all()
|
||||||
|
)
|
||||||
output.no_match = False
|
output.no_match = False
|
||||||
mailboxes = (
|
mailboxes = (
|
||||||
Mailbox.filter_by(email=email).order_by(Mailbox.id.desc()).limit(10).all()
|
Mailbox.filter_by(email=email).order_by(Mailbox.id.desc()).limit(10).all()
|
||||||
|
|
|
@ -154,6 +154,56 @@
|
||||||
</table>
|
</table>
|
||||||
{{ show_user(data.domain_deleted_alias.domain.user) }}
|
{{ show_user(data.domain_deleted_alias.domain.user) }}
|
||||||
{%- endmacro %}
|
{%- endmacro %}
|
||||||
|
{% macro list_alias_audit_log(alias_audit_log) %}
|
||||||
|
<h4>Alias Audit Log</h4>
|
||||||
|
<table class="table">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>User ID</th>
|
||||||
|
<th>Alias ID</th>
|
||||||
|
<th>Alias Email</th>
|
||||||
|
<th>Action</th>
|
||||||
|
<th>Message</th>
|
||||||
|
<th>Time</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
{% for entry in alias_audit_log %}
|
||||||
|
<tr>
|
||||||
|
<td>{{ entry.user_id }}</td>
|
||||||
|
<td>{{ entry.alias_id }}</td>
|
||||||
|
<td><a href="?email={{ entry.alias_email }}">{{ entry.alias_email }}</a></td>
|
||||||
|
<td>{{ entry.action }}</td>
|
||||||
|
<td>{{ entry.message }}</td>
|
||||||
|
<td>{{ entry.created_at }}</td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
{% endmacro %}
|
||||||
|
{% macro list_user_audit_log(user_audit_log) %}
|
||||||
|
<h4>User Audit Log</h4>
|
||||||
|
<table class="table">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>User email</th>
|
||||||
|
<th>Action</th>
|
||||||
|
<th>Message</th>
|
||||||
|
<th>Time</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
{% for entry in user_audit_log %}
|
||||||
|
<tr>
|
||||||
|
<td><a href="?email={{ entry.user_email }}">{{ entry.user_email }}</a></td>
|
||||||
|
<td>{{ entry.action }}</td>
|
||||||
|
<td>{{ entry.message }}</td>
|
||||||
|
<td>{{ entry.created_at }}</td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
{% endmacro %}
|
||||||
{% block body %}
|
{% block body %}
|
||||||
|
|
||||||
<div class="border border-dark border-2 mt-1 mb-2 p-3">
|
<div class="border border-dark border-2 mt-1 mb-2 p-3">
|
||||||
|
@ -177,6 +227,7 @@
|
||||||
<div class="border border-dark border-2 mt-1 mb-2 p-3">
|
<div class="border border-dark border-2 mt-1 mb-2 p-3">
|
||||||
<h3 class="mb-3">Found Alias {{ data.alias.email }}</h3>
|
<h3 class="mb-3">Found Alias {{ data.alias.email }}</h3>
|
||||||
{{ list_alias(1,[data.alias]) }}
|
{{ list_alias(1,[data.alias]) }}
|
||||||
|
{{ list_alias_audit_log(data.alias_audit_log) }}
|
||||||
{{ list_mailboxes("Mailboxes for alias", helper.alias_mailbox_count(data.alias), helper.alias_mailboxes(data.alias)) }}
|
{{ list_mailboxes("Mailboxes for alias", helper.alias_mailbox_count(data.alias), helper.alias_mailboxes(data.alias)) }}
|
||||||
{{ show_user(data.alias.user) }}
|
{{ show_user(data.alias.user) }}
|
||||||
</div>
|
</div>
|
||||||
|
@ -188,6 +239,7 @@
|
||||||
{{ show_user(data.user) }}
|
{{ show_user(data.user) }}
|
||||||
{{ list_mailboxes("Mailboxes for user", helper.mailbox_count(data.user) , helper.mailbox_list(data.user) ) }}
|
{{ list_mailboxes("Mailboxes for user", helper.mailbox_count(data.user) , helper.mailbox_list(data.user) ) }}
|
||||||
{{ list_alias(helper.alias_count(data.user) ,helper.alias_list(data.user)) }}
|
{{ list_alias(helper.alias_count(data.user) ,helper.alias_list(data.user)) }}
|
||||||
|
{{ list_user_audit_log(data.user_audit_log) }}
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if data.mailbox_count > 10 %}
|
{% if data.mailbox_count > 10 %}
|
||||||
|
|
Loading…
Reference in a new issue