From 2c82b03f8de43340b06b464c8e3897723345a5ed Mon Sep 17 00:00:00 2001 From: MrMeeb <mrmeeb@noreply.git.mrmeeb.stream> Date: Tue, 25 Apr 2023 11:00:05 +0000 Subject: [PATCH] 4.27.0 --- app/email_handler.py | 2 +- app/static/js/index.js | 12 ++- app/templates/dashboard/index.html | 140 ++++++++++++++++------------- 3 files changed, 88 insertions(+), 66 deletions(-) diff --git a/app/email_handler.py b/app/email_handler.py index 93f3f0e..470d4d2 100644 --- a/app/email_handler.py +++ b/app/email_handler.py @@ -1024,7 +1024,7 @@ def handle_reply(envelope, msg: Message, rcpt_to: str) -> (bool, str): # reply_email must end with EMAIL_DOMAIN or a domain that can be used as reverse alias domain if not reply_email.endswith(EMAIL_DOMAIN): sl_domain: SLDomain = SLDomain.get_by(domain=reply_domain) - if sl_domain is None or not sl_domain.use_as_reverse_alias: + if sl_domain is None: LOG.w(f"Reply email {reply_email} has wrong domain") return False, status.E501 diff --git a/app/static/js/index.js b/app/static/js/index.js index 3a55731..0fbc362 100644 --- a/app/static/js/index.js +++ b/app/static/js/index.js @@ -256,17 +256,27 @@ new Vue({ el: '#filter-app', delimiters: ["[[", "]]"], // necessary to avoid conflict with jinja data: { - showFilter: false + showFilter: false, + showStats: false }, methods: { async toggleFilter() { let that = this; that.showFilter = !that.showFilter; store.set('showFilter', that.showFilter); + }, + + async toggleStats() { + let that = this; + that.showStats = !that.showStats; + store.set('showStats', that.showStats); } }, async mounted() { if (store.get("showFilter")) this.showFilter = true; + + if (store.get("showStats")) + this.showStats = true; } }); diff --git a/app/templates/dashboard/index.html b/app/templates/dashboard/index.html index a3e24df..82f7ad6 100644 --- a/app/templates/dashboard/index.html +++ b/app/templates/dashboard/index.html @@ -31,63 +31,11 @@ {% block title %}Alias{% endblock %} {% block default_content %} - <!-- Global Stats --> - <div class="row"> - <div class="col-12 col-md-6 col-lg-3"> - <div class="card"> - <div class="card-body"> - <div class="d-flex align-items-center"> - <div class="subheader">Aliases</div> - <div class="text-muted" - style="order: 2; margin-left: auto; font-size: .8rem">All time</div> - </div> - <div class="h1 m-0">{{ stats.nb_alias }}</div> - </div> - </div> - </div> - <div class="col-12 col-md-6 col-lg-3"> - <div class="card"> - <div class="card-body"> - <div class="d-flex align-items-center"> - <div class="subheader">Forwarded</div> - <div class="text-muted" - style="order: 2; margin-left: auto; font-size: .8rem">Last 14 days</div> - </div> - <div class="h1 m-0">{{ stats.nb_forward }}</div> - </div> - </div> - </div> - <div class="col-12 col-md-6 col-lg-3"> - <div class="card"> - <div class="card-body"> - <div class="d-flex align-items-center"> - <div class="subheader">Replies/Sent</div> - <div class="text-muted" - style="order: 2; margin-left: auto; font-size: .8rem">Last 14 days</div> - </div> - <div class="h1 m-0">{{ stats.nb_reply }}</div> - </div> - </div> - </div> - <div class="col-12 col-md-6 col-lg-3"> - <div class="card"> - <div class="card-body"> - <div class="d-flex align-items-center"> - <div class="subheader">Blocked</div> - <div class="text-muted" - style="order: 2; margin-left: auto; font-size: .8rem">Last 14 days</div> - </div> - <div class="h1 m-0">{{ stats.nb_block }}</div> - </div> - </div> - </div> - </div> - <!-- END Global Stats --> <!-- Controls: buttons & search --> <div id="filter-app"> <div class="row mb-3"> - <div class="col d-flex"> - <div> + <div class="col d-flex flex-wrap justify-content-between"> + <div class="mb-1"> <div class="btn-group" role="group"> <form method="post"> {{ csrf_form.csrf_token }} @@ -141,17 +89,86 @@ </div> </div> </div> - <div style="margin-left: auto"> + <div> <div class="btn-group"> - <a v-if="!showFilter" - @click="toggleFilter()" - class="btn btn-outline-secondary"> - <i class="fe fe-chevrons-down"></i> Filters + <a @click="toggleStats()" class="btn btn-outline-secondary"> + <span v-if="!showStats"> + <i class="fe fe-chevrons-down"></i> + Show stats + </span> + <span v-else> + <i class="fe fe-chevrons-up"></i> + Hide stats + </span> + </a> + </div> + <div class="btn-group"> + <a @click="toggleFilter()" class="btn btn-outline-secondary"> + <span v-if="!showFilter"> + <i class="fe fe-chevrons-down"></i> + Show filters + </span> + <span v-else> + <i class="fe fe-chevrons-up"></i> + Hide filters + </span> </a> </div> </div> </div> </div> + <!-- Global Stats --> + <div class="row" v-if="showStats"> + <div class="col-12 col-md-6 col-lg-3"> + <div class="card mb-3"> + <div class="card-body py-3"> + <div class="d-flex align-items-center"> + <div class="subheader">Aliases</div> + <div class="text-muted" + style="order: 2; margin-left: auto; font-size: .8rem">All time</div> + </div> + <div class="h1 m-0">{{ stats.nb_alias }}</div> + </div> + </div> + </div> + <div class="col-12 col-md-6 col-lg-3"> + <div class="card mb-3"> + <div class="card-body py-3"> + <div class="d-flex align-items-center"> + <div class="subheader">Forwarded</div> + <div class="text-muted" + style="order: 2; margin-left: auto; font-size: .8rem">Last 14 days</div> + </div> + <div class="h1 m-0">{{ stats.nb_forward }}</div> + </div> + </div> + </div> + <div class="col-12 col-md-6 col-lg-3"> + <div class="card mb-3"> + <div class="card-body py-3"> + <div class="d-flex align-items-center"> + <div class="subheader">Replies/Sent</div> + <div class="text-muted" + style="order: 2; margin-left: auto; font-size: .8rem">Last 14 days</div> + </div> + <div class="h1 m-0">{{ stats.nb_reply }}</div> + </div> + </div> + </div> + <div class="col-12 col-md-6 col-lg-3"> + <div class="card mb-3"> + <div class="card-body py-3"> + <div class="d-flex align-items-center"> + <div class="subheader">Blocked</div> + <div class="text-muted" + style="order: 2; margin-left: auto; font-size: .8rem">Last 14 days</div> + </div> + <div class="h1 m-0">{{ stats.nb_block }}</div> + </div> + </div> + </div> + </div> + <!-- END Global Stats --> <div class="row mb-2" v-if="showFilter" id="filter-control"> <!-- Filter Control --> <div class="col d-flex"> @@ -223,11 +240,6 @@ <a href="{{ url_for('dashboard.index') }}" class="btn btn-outline-secondary">Reset</a> {% endif %} - <a v-if="showFilter" - @click="toggleFilter()" - class="btn btn-outline-secondary"> - <i class="fe fe-chevrons-up"></i> - </a> </div> </div> </div>