mirror of
https://github.com/Mailu/Mailu.git
synced 2024-12-14 10:53:30 +02:00
5c9cdfe1de
Anything that can be configured in the web administration interface, can also be configured via the Mailu RESTful API. See the section Advanced configuration in the configuration reference for the relevant settings in mailu.env for enabling the API. (API, WEB_API, API_TOKEN).
30 lines
1.1 KiB
Python
30 lines
1.1 KiB
Python
from .. import models, utils
|
|
from . import v1
|
|
from flask import request
|
|
import flask
|
|
from functools import wraps
|
|
from flask_restx import abort
|
|
|
|
def fqdn_in_use(*names):
|
|
for name in names:
|
|
for model in models.Domain, models.Alternative, models.Relay:
|
|
if model.query.get(name):
|
|
return model
|
|
return None
|
|
|
|
""" Decorator for validating api token for authentication """
|
|
def api_token_authorization(func):
|
|
@wraps(func)
|
|
def decorated_function(*args, **kwds):
|
|
client_ip = flask.request.headers.get('X-Real-IP', flask.request.remote_addr)
|
|
if utils.limiter.should_rate_limit_ip(client_ip):
|
|
abort(429, 'Too many attempts from your IP (rate-limit)' )
|
|
if request.args.get('api_token') != v1.api_token:
|
|
utils.limiter.rate_limit_ip(client_ip)
|
|
flask.current_app.logger.warn(f'Invalid API token provided by {client_ip}.')
|
|
abort(401, 'A valid API token is expected as query string parameter')
|
|
else:
|
|
flask.current_app.logger.info(f'Valid API token provided by {client_ip}.')
|
|
return func(*args, **kwds)
|
|
return decorated_function
|