mirror of
https://github.com/simple-login/app.git
synced 2026-04-07 19:27:34 +00:00
feat(admin): alias improvements
This commit is contained in:
committed by
Adrià Casajús
parent
aa049463c8
commit
b4ec6f109c
+32
-26
@@ -72,13 +72,19 @@ class EmailSearchResult:
|
||||
|
||||
@staticmethod
|
||||
def search_aliases(query: str) -> EmailSearchResult:
|
||||
"""Search for aliases by exact match or POSIX regex."""
|
||||
"""Search for aliases by exact email match or alias ID."""
|
||||
output = EmailSearchResult()
|
||||
output.query = query
|
||||
output.search_type = EmailSearchResult.SEARCH_TYPE_ALIAS
|
||||
|
||||
# Exact match only for alias search (no regex support)
|
||||
alias = Alias.get_by(email=query)
|
||||
# Search by alias ID if query is numeric, otherwise by exact email match
|
||||
alias = None
|
||||
try:
|
||||
alias_id = int(query)
|
||||
alias = Alias.get(alias_id)
|
||||
except ValueError:
|
||||
alias = Alias.get_by(email=query)
|
||||
|
||||
if alias:
|
||||
output.aliases = [alias]
|
||||
output.aliases_found_by_regex = False
|
||||
@@ -88,30 +94,30 @@ class EmailSearchResult:
|
||||
.all()
|
||||
)
|
||||
output.no_match = False
|
||||
else:
|
||||
# Search deleted aliases (exact match only)
|
||||
deleted_alias = DeletedAlias.get_by(email=query)
|
||||
if deleted_alias:
|
||||
output.deleted_aliases = [deleted_alias]
|
||||
output.deleted_aliases_found_by_regex = False
|
||||
output.deleted_alias_audit_log = (
|
||||
AliasAuditLog.filter_by(alias_email=deleted_alias.email)
|
||||
.order_by(AliasAuditLog.created_at.desc())
|
||||
.all()
|
||||
)
|
||||
output.no_match = False
|
||||
|
||||
# Search deleted aliases (exact match only)
|
||||
deleted_alias = DeletedAlias.get_by(email=query)
|
||||
if deleted_alias:
|
||||
output.deleted_aliases = [deleted_alias]
|
||||
output.deleted_aliases_found_by_regex = False
|
||||
output.deleted_alias_audit_log = (
|
||||
AliasAuditLog.filter_by(alias_email=deleted_alias.email)
|
||||
.order_by(AliasAuditLog.created_at.desc())
|
||||
.all()
|
||||
)
|
||||
output.no_match = False
|
||||
|
||||
# Search domain deleted aliases (exact match only)
|
||||
domain_deleted_alias = DomainDeletedAlias.get_by(email=query)
|
||||
if domain_deleted_alias:
|
||||
output.domain_deleted_aliases = [domain_deleted_alias]
|
||||
output.domain_deleted_aliases_found_by_regex = False
|
||||
output.domain_deleted_alias_audit_log = (
|
||||
AliasAuditLog.filter_by(alias_email=domain_deleted_alias.email)
|
||||
.order_by(AliasAuditLog.created_at.desc())
|
||||
.all()
|
||||
)
|
||||
output.no_match = False
|
||||
# Search domain deleted aliases (exact match only)
|
||||
domain_deleted_alias = DomainDeletedAlias.get_by(email=query)
|
||||
if domain_deleted_alias:
|
||||
output.domain_deleted_aliases = [domain_deleted_alias]
|
||||
output.domain_deleted_aliases_found_by_regex = False
|
||||
output.domain_deleted_alias_audit_log = (
|
||||
AliasAuditLog.filter_by(alias_email=domain_deleted_alias.email)
|
||||
.order_by(AliasAuditLog.created_at.desc())
|
||||
.all()
|
||||
)
|
||||
output.no_match = False
|
||||
|
||||
return output
|
||||
|
||||
|
||||
@@ -948,7 +948,12 @@
|
||||
{% endif %}
|
||||
<tr>
|
||||
<td class="text-muted text-nowrap py-1">Status:</td>
|
||||
<td class="py-1">{{ badge_status(alias.enabled, 'Enabled', 'Disabled', 'success', 'danger') }}</td>
|
||||
<td class="py-1">
|
||||
{{ badge_status(alias.enabled, 'Enabled', 'Disabled', 'success', 'danger') }}
|
||||
{% if alias.is_trashed() %}
|
||||
<span class="badge badge-warning ml-1"><i class="fa fa-trash mr-1"></i>Trashed</span>
|
||||
{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="text-muted text-nowrap py-1">User:</td>
|
||||
@@ -2889,7 +2894,7 @@
|
||||
<div class="btn-group btn-group-toggle" data-toggle="buttons">
|
||||
<label class="btn btn-outline-primary {{ 'active' if search_type == 'email' else '' }}">
|
||||
<input type="radio" name="search_type" value="email" {{ 'checked' if search_type == 'email' else '' }}>
|
||||
<i class="fa fa-envelope mr-1"></i>Email
|
||||
<i class="fa fa-user mr-1"></i>User
|
||||
</label>
|
||||
<label class="btn btn-outline-primary {{ 'active' if search_type == 'alias' else '' }}">
|
||||
<input type="radio" name="search_type" value="alias" {{ 'checked' if search_type == 'alias' else '' }}>
|
||||
@@ -2910,7 +2915,7 @@
|
||||
name="query"
|
||||
id="query"
|
||||
value="{{ query or '' }}"
|
||||
placeholder="{{ 'alias@example.com (exact match only)' if search_type == 'alias' else ('partner email or external user ID' if search_type == 'partner' else ('POSIX regex pattern' if search_type == 'regex' else 'email@example.com or user ID (exact match only)')) }}">
|
||||
placeholder="{{ 'alias@example.com or alias ID' if search_type == 'alias' else ('partner email or external user ID' if search_type == 'partner' else ('POSIX regex pattern' if search_type == 'regex' else 'email@example.com or user ID (exact match only)')) }}">
|
||||
<div class="input-group-append">
|
||||
<button type="submit" class="btn btn-primary-modern" id="searchBtn">
|
||||
<span class="search-icon"><i class="fa fa-search mr-1"></i>Search</span>
|
||||
@@ -2921,7 +2926,7 @@
|
||||
<small class="form-text text-muted" id="search-help">
|
||||
{% if search_type == 'alias' %}
|
||||
|
||||
<i class="fa fa-info-circle mr-1"></i>Enter the full alias email address. Only exact matches are supported.
|
||||
<i class="fa fa-info-circle mr-1"></i>Enter the full alias email address or alias ID. Only exact matches are returned.
|
||||
{% elif search_type == 'partner' %}
|
||||
<i class="fa fa-info-circle mr-1"></i>Search by partner email (contains @) or external user ID.
|
||||
{% elif search_type == 'regex' %}
|
||||
@@ -3220,8 +3225,8 @@
|
||||
|
||||
function updateSearchHelp(searchType) {
|
||||
if (searchType === 'alias') {
|
||||
queryInput.placeholder = 'alias@example.com (exact match only)';
|
||||
searchHelp.innerHTML = '<i class="fa fa-info-circle mr-1"></i>Enter the full alias email address. Only exact matches are supported.';
|
||||
queryInput.placeholder = 'alias@example.com or alias ID';
|
||||
searchHelp.innerHTML = '<i class="fa fa-info-circle mr-1"></i>Enter the full alias email address or alias ID. Only exact matches are returned.';
|
||||
} else if (searchType === 'partner') {
|
||||
queryInput.placeholder = 'partner email or external user ID';
|
||||
searchHelp.innerHTML = '<i class="fa fa-info-circle mr-1"></i>Search by partner email (contains @) or external user ID.';
|
||||
|
||||
Reference in New Issue
Block a user