mirror of
https://github.com/Mailu/Mailu.git
synced 2025-01-26 03:52:50 +02:00
2483: Introduce FETCHMAIL_ENABLED r=mergify[bot] a=DjVinnii ## What type of PR? Enhancement ## What does this PR do? Add `FETCHMAIL_ENABLED` to enable/disable the Fetchmail functionality in the Admin UI. ### Related issue(s) - closes #2127 ## Prerequisites Before we can consider review and merge, please make sure the following list is done and checked. If an entry in not applicable, you can check it or remove it from the list. - [x] In case of feature or enhancement: documentation updated accordingly - [x] Unless it's docs or a minor change: add [changelog](https://mailu.io/master/contributors/workflow.html#changelog) entry file. 2535: fix the linux/arm/v7 build r=mergify[bot] a=nextgens ## What type of PR? bug-fix ## What does this PR do? The arm builder is running aarch64 ... and there is no package for arm/v7 Co-authored-by: Vincent Kling <v.kling@vinniict.nl> Co-authored-by: Dimitri Huisman <diman@huisman.xyz> Co-authored-by: Florent Daigniere <nextgens@freenetproject.org>
This commit is contained in:
commit
f43c8c652e
@ -18,13 +18,14 @@ DEFAULT_CONFIG = {
|
|||||||
'DOMAIN_REGISTRATION': False,
|
'DOMAIN_REGISTRATION': False,
|
||||||
'TEMPLATES_AUTO_RELOAD': True,
|
'TEMPLATES_AUTO_RELOAD': True,
|
||||||
'MEMORY_SESSIONS': False,
|
'MEMORY_SESSIONS': False,
|
||||||
|
'FETCHMAIL_ENABLED': False,
|
||||||
# Database settings
|
# Database settings
|
||||||
'DB_FLAVOR': None,
|
'DB_FLAVOR': None,
|
||||||
'DB_USER': 'mailu',
|
'DB_USER': 'mailu',
|
||||||
'DB_PW': None,
|
'DB_PW': None,
|
||||||
'DB_HOST': 'database',
|
'DB_HOST': 'database',
|
||||||
'DB_NAME': 'mailu',
|
'DB_NAME': 'mailu',
|
||||||
'SQLITE_DATABASE_FILE':'data/main.db',
|
'SQLITE_DATABASE_FILE': 'data/main.db',
|
||||||
'SQLALCHEMY_DATABASE_URI': 'sqlite:////data/main.db',
|
'SQLALCHEMY_DATABASE_URI': 'sqlite:////data/main.db',
|
||||||
'SQLALCHEMY_TRACK_MODIFICATIONS': False,
|
'SQLALCHEMY_TRACK_MODIFICATIONS': False,
|
||||||
# Statistics management
|
# Statistics management
|
||||||
@ -61,7 +62,7 @@ DEFAULT_CONFIG = {
|
|||||||
# Web settings
|
# Web settings
|
||||||
'SITENAME': 'Mailu',
|
'SITENAME': 'Mailu',
|
||||||
'WEBSITE': 'https://mailu.io',
|
'WEBSITE': 'https://mailu.io',
|
||||||
'ADMIN' : 'none',
|
'ADMIN': 'none',
|
||||||
'WEB_ADMIN': '/admin',
|
'WEB_ADMIN': '/admin',
|
||||||
'WEB_WEBMAIL': '/webmail',
|
'WEB_WEBMAIL': '/webmail',
|
||||||
'WEBMAIL': 'none',
|
'WEBMAIL': 'none',
|
||||||
|
@ -31,12 +31,14 @@
|
|||||||
<p>{% trans %}Auto-reply{% endtrans %}</p>
|
<p>{% trans %}Auto-reply{% endtrans %}</p>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
|
{%- if config["FETCHMAIL_ENABLED"] %}
|
||||||
<li class="nav-item" role="none">
|
<li class="nav-item" role="none">
|
||||||
<a href="{{ url_for('.fetch_list') }}" class="nav-link" role="menuitem">
|
<a href="{{ url_for('.fetch_list') }}" class="nav-link" role="menuitem">
|
||||||
<i class="nav-icon fas fa-download"></i>
|
<i class="nav-icon fas fa-download"></i>
|
||||||
<p>{% trans %}Fetched accounts{% endtrans %}</p>
|
<p>{% trans %}Fetched accounts{% endtrans %}</p>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
|
{%- endif %}
|
||||||
<li class="nav-item" role="none">
|
<li class="nav-item" role="none">
|
||||||
<a href="{{ url_for('.token_list') }}" class="nav-link" role="menuitem">
|
<a href="{{ url_for('.token_list') }}" class="nav-link" role="menuitem">
|
||||||
<i class="nav-icon fas fa-ticket-alt"></i>
|
<i class="nav-icon fas fa-ticket-alt"></i>
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
from mailu import models
|
from mailu import models
|
||||||
from mailu.ui import ui, forms, access
|
from mailu.ui import ui, forms, access
|
||||||
|
from flask import current_app as app
|
||||||
|
|
||||||
import flask
|
import flask
|
||||||
import flask_login
|
import flask_login
|
||||||
@ -10,6 +11,8 @@ import wtforms
|
|||||||
@ui.route('/fetch/list/<path:user_email>', methods=['GET'])
|
@ui.route('/fetch/list/<path:user_email>', methods=['GET'])
|
||||||
@access.owner(models.User, 'user_email')
|
@access.owner(models.User, 'user_email')
|
||||||
def fetch_list(user_email):
|
def fetch_list(user_email):
|
||||||
|
if not app.config['FETCHMAIL_ENABLED']:
|
||||||
|
flask.abort(404)
|
||||||
user_email = user_email or flask_login.current_user.email
|
user_email = user_email or flask_login.current_user.email
|
||||||
user = models.User.query.get(user_email) or flask.abort(404)
|
user = models.User.query.get(user_email) or flask.abort(404)
|
||||||
return flask.render_template('fetch/list.html', user=user)
|
return flask.render_template('fetch/list.html', user=user)
|
||||||
@ -19,6 +22,8 @@ def fetch_list(user_email):
|
|||||||
@ui.route('/fetch/create/<path:user_email>', methods=['GET', 'POST'])
|
@ui.route('/fetch/create/<path:user_email>', methods=['GET', 'POST'])
|
||||||
@access.owner(models.User, 'user_email')
|
@access.owner(models.User, 'user_email')
|
||||||
def fetch_create(user_email):
|
def fetch_create(user_email):
|
||||||
|
if not app.config['FETCHMAIL_ENABLED']:
|
||||||
|
flask.abort(404)
|
||||||
user_email = user_email or flask_login.current_user.email
|
user_email = user_email or flask_login.current_user.email
|
||||||
user = models.User.query.get(user_email) or flask.abort(404)
|
user = models.User.query.get(user_email) or flask.abort(404)
|
||||||
form = forms.FetchForm()
|
form = forms.FetchForm()
|
||||||
@ -37,6 +42,8 @@ def fetch_create(user_email):
|
|||||||
@ui.route('/fetch/edit/<fetch_id>', methods=['GET', 'POST'])
|
@ui.route('/fetch/edit/<fetch_id>', methods=['GET', 'POST'])
|
||||||
@access.owner(models.Fetch, 'fetch_id')
|
@access.owner(models.Fetch, 'fetch_id')
|
||||||
def fetch_edit(fetch_id):
|
def fetch_edit(fetch_id):
|
||||||
|
if not app.config['FETCHMAIL_ENABLED']:
|
||||||
|
flask.abort(404)
|
||||||
fetch = models.Fetch.query.get(fetch_id) or flask.abort(404)
|
fetch = models.Fetch.query.get(fetch_id) or flask.abort(404)
|
||||||
form = forms.FetchForm(obj=fetch)
|
form = forms.FetchForm(obj=fetch)
|
||||||
if form.validate_on_submit():
|
if form.validate_on_submit():
|
||||||
@ -55,6 +62,8 @@ def fetch_edit(fetch_id):
|
|||||||
@access.confirmation_required("delete a fetched account")
|
@access.confirmation_required("delete a fetched account")
|
||||||
@access.owner(models.Fetch, 'fetch_id')
|
@access.owner(models.Fetch, 'fetch_id')
|
||||||
def fetch_delete(fetch_id):
|
def fetch_delete(fetch_id):
|
||||||
|
if not app.config['FETCHMAIL_ENABLED']:
|
||||||
|
flask.abort(404)
|
||||||
fetch = models.Fetch.query.get(fetch_id) or flask.abort(404)
|
fetch = models.Fetch.query.get(fetch_id) or flask.abort(404)
|
||||||
user = fetch.user
|
user = fetch.user
|
||||||
models.db.session.delete(fetch)
|
models.db.session.delete(fetch)
|
||||||
|
@ -8,19 +8,21 @@ ENV TZ=Etc/UTC LANG=C.UTF-8
|
|||||||
|
|
||||||
ARG MAILU_UID=1000
|
ARG MAILU_UID=1000
|
||||||
ARG MAILU_GID=1000
|
ARG MAILU_GID=1000
|
||||||
|
ARG TARGETPLATFORM
|
||||||
|
|
||||||
RUN set -euxo pipefail \
|
RUN set -euxo pipefail \
|
||||||
; addgroup -Sg ${MAILU_GID} mailu \
|
; addgroup -Sg ${MAILU_GID} mailu \
|
||||||
; adduser -Sg ${MAILU_UID} -G mailu -h /app -g "mailu app" -s /bin/bash mailu \
|
; adduser -Sg ${MAILU_UID} -G mailu -h /app -g "mailu app" -s /bin/bash mailu \
|
||||||
; apk add --no-cache bash ca-certificates curl python3 tzdata \
|
; apk add --no-cache bash ca-certificates curl python3 tzdata \
|
||||||
; machine="$(uname -m)" \
|
; machine="$(uname -m)" \
|
||||||
; if [[ "${machine}" == x86_64 || "${machine}" == armv8* || "${machine}" == aarch64 ]] \
|
; [[ "${TARGETPLATFORM}" != linux/arm/v7 && \( "${machine}" == x86_64 || "${machine}" == armv8* || "${machine}" == aarch64 \) ]] \
|
||||||
; then \
|
&& apk add --no-cache --repository=http://dl-cdn.alpinelinux.org/alpine/edge/testing hardened-malloc
|
||||||
echo "Installing hardened-malloc" \
|
|
||||||
; apk add --no-cache --repository=http://dl-cdn.alpinelinux.org/alpine/edge/testing hardened-malloc \
|
|
||||||
; fi
|
|
||||||
|
|
||||||
ENV LD_PRELOAD=/usr/lib/libhardened_malloc.so
|
ENV LD_PRELOAD=/usr/lib/libhardened_malloc.so
|
||||||
|
ENV CXXFLAGS="-g -O2 -fdebug-prefix-map=/app=. -fstack-protector-strong -Wformat -Werror=format-security -pie -fPIE"
|
||||||
|
ENV CFLAGS="-g -O2 -fdebug-prefix-map=/app=. -fstack-protector-strong -Wformat -Werror=format-security -pie -fPIE"
|
||||||
|
ENV CPPFLAGS="-Wdate-time -D_FORTIFY_SOURCE=2 -pie -fPIE"
|
||||||
|
ENV LDFLAGS="-Wl,-z,relro"
|
||||||
|
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
|
|
||||||
|
@ -104,6 +104,9 @@ support or e.g. mismatching TLS versions to deliver emails to Mailu.
|
|||||||
|
|
||||||
.. _fetchmail:
|
.. _fetchmail:
|
||||||
|
|
||||||
|
When ``FETCHMAIL_ENABLED`` is set to ``True``, the fetchmail functionality is enabled in the admin interface.
|
||||||
|
The container itself still needs to be deployed manually. ``FETCHMAIL_ENABLED`` defaults to ``True``.
|
||||||
|
|
||||||
The ``FETCHMAIL_DELAY`` is a delay (in seconds) for the fetchmail service to
|
The ``FETCHMAIL_DELAY`` is a delay (in seconds) for the fetchmail service to
|
||||||
go and fetch new email if available. Do not use too short delays if you do not
|
go and fetch new email if available. Do not use too short delays if you do not
|
||||||
want to be blacklisted by external services, but not too long delays if you
|
want to be blacklisted by external services, but not too long delays if you
|
||||||
|
@ -95,6 +95,13 @@ def run(debug):
|
|||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
while True:
|
while True:
|
||||||
time.sleep(int(os.environ.get("FETCHMAIL_DELAY", 60)))
|
delay = int(os.environ.get("FETCHMAIL_DELAY", 60))
|
||||||
|
print("Sleeping for {} seconds".format(delay))
|
||||||
|
time.sleep(delay)
|
||||||
|
|
||||||
|
if not os.environ.get("FETCHMAIL_ENABLED", 'True') in ('True', 'true'):
|
||||||
|
print("Fetchmail disabled, skipping...")
|
||||||
|
continue
|
||||||
|
|
||||||
run(os.environ.get("DEBUG", None) == "True")
|
run(os.environ.get("DEBUG", None) == "True")
|
||||||
sys.stdout.flush()
|
sys.stdout.flush()
|
||||||
|
@ -79,6 +79,9 @@ RELAYNETS=
|
|||||||
# Will relay all outgoing mails if configured
|
# Will relay all outgoing mails if configured
|
||||||
RELAYHOST={{ relayhost }}
|
RELAYHOST={{ relayhost }}
|
||||||
|
|
||||||
|
# Show fetchmail functionality in admin interface
|
||||||
|
FETCHMAIL_ENABLED={{ fetchmail_enabled or 'False' }}
|
||||||
|
|
||||||
# Fetchmail delay
|
# Fetchmail delay
|
||||||
FETCHMAIL_DELAY={{ fetchmail_delay or '600' }}
|
FETCHMAIL_DELAY={{ fetchmail_delay or '600' }}
|
||||||
|
|
||||||
|
1
towncrier/newsfragments/2127.feature
Normal file
1
towncrier/newsfragments/2127.feature
Normal file
@ -0,0 +1 @@
|
|||||||
|
Add FETCHMAIL_ENABLED to toggle the fetchmail functionality in the admin interface
|
Loading…
x
Reference in New Issue
Block a user