mirror of
https://github.com/Mailu/Mailu.git
synced 2025-02-21 19:19:39 +02:00
Merge pull request #262 from Mailu/feature-xforwarded-prefix
Stop hardcoding URL prefix in containers
This commit is contained in:
commit
914427f852
@ -34,43 +34,66 @@ default_config = {
|
||||
'FRONTEND': 'none',
|
||||
'TLS_FLAVOR': 'cert',
|
||||
'CERTS_PATH': '/certs',
|
||||
'PASSWORD_SCHEME': 'SHA512-CRYPT'
|
||||
'PASSWORD_SCHEME': 'SHA512-CRYPT',
|
||||
}
|
||||
|
||||
# Load configuration from the environment if available
|
||||
for key, value in default_config.items():
|
||||
app.config[key] = os.environ.get(key, value)
|
||||
|
||||
# Setup components
|
||||
# Base application
|
||||
flask_bootstrap.Bootstrap(app)
|
||||
db = flask_sqlalchemy.SQLAlchemy(app)
|
||||
migrate = flask_migrate.Migrate(app, db)
|
||||
login_manager = flask_login.LoginManager()
|
||||
login_manager.init_app(app)
|
||||
babel = flask_babel.Babel(app)
|
||||
translations = list(map(str, babel.list_translations()))
|
||||
scheduler = background.BackgroundScheduler({
|
||||
'apscheduler.timezone': 'UTC'
|
||||
})
|
||||
|
||||
# Manager commnad
|
||||
manager = flask_script.Manager(app)
|
||||
manager.add_command('db', flask_migrate.MigrateCommand)
|
||||
|
||||
# Task scheduling
|
||||
scheduler = background.BackgroundScheduler({
|
||||
'apscheduler.timezone': 'UTC'
|
||||
})
|
||||
if not app.debug or os.environ.get('WERKZEUG_RUN_MAIN') == 'true':
|
||||
scheduler.start()
|
||||
from mailu import tlstasks
|
||||
|
||||
# Babel configuration
|
||||
babel = flask_babel.Babel(app)
|
||||
translations = list(map(str, babel.list_translations()))
|
||||
|
||||
@babel.localeselector
|
||||
def get_locale():
|
||||
return flask.request.accept_languages.best_match(translations)
|
||||
|
||||
# Finally setup the blueprint and redirect /
|
||||
from mailu import admin
|
||||
app.register_blueprint(admin.app, url_prefix='/admin')
|
||||
# Login configuration
|
||||
login_manager = flask_login.LoginManager()
|
||||
login_manager.init_app(app)
|
||||
login_manager.login_view = ".login"
|
||||
|
||||
@app.route("/")
|
||||
def index():
|
||||
return flask.redirect("/webmail/")
|
||||
@login_manager.unauthorized_handler
|
||||
def handle_needs_login():
|
||||
return flask.redirect(
|
||||
flask.url_for('.login', next=flask.request.endpoint)
|
||||
)
|
||||
|
||||
@app.context_processor
|
||||
def inject_user():
|
||||
return dict(current_user=flask_login.current_user)
|
||||
|
||||
# Import views
|
||||
from mailu.views import *
|
||||
|
||||
# Create the prefix middleware
|
||||
class PrefixMiddleware(object):
|
||||
|
||||
def __init__(self, app):
|
||||
self.app = app
|
||||
|
||||
def __call__(self, environ, start_response):
|
||||
prefix = environ.get('HTTP_X_FORWARDED_PREFIX', '')
|
||||
if prefix:
|
||||
environ['SCRIPT_NAME'] = prefix
|
||||
return self.app(environ, start_response)
|
||||
|
||||
app.wsgi_app = PrefixMiddleware(app.wsgi_app)
|
||||
|
@ -1,4 +1,4 @@
|
||||
from mailu.admin import db, models, forms
|
||||
from mailu import db, models, forms
|
||||
|
||||
import flask
|
||||
import flask_login
|
@ -1,33 +0,0 @@
|
||||
from flask import Blueprint
|
||||
from mailu import login_manager, db
|
||||
|
||||
import flask_login
|
||||
|
||||
|
||||
app = Blueprint(
|
||||
'admin', __name__,
|
||||
template_folder='templates',
|
||||
static_folder='static')
|
||||
|
||||
# Import models
|
||||
from mailu.admin import models
|
||||
|
||||
# Register the login components
|
||||
login_manager.login_view = "admin.login"
|
||||
login_manager.user_loader(models.User.query.get)
|
||||
|
||||
@app.context_processor
|
||||
def inject_user():
|
||||
return dict(current_user=flask_login.current_user)
|
||||
|
||||
# Import views
|
||||
from mailu.admin.views import \
|
||||
admins, \
|
||||
managers, \
|
||||
base, \
|
||||
aliases, \
|
||||
users, \
|
||||
domains, \
|
||||
relays, \
|
||||
alternatives, \
|
||||
fetches
|
@ -1,5 +1,4 @@
|
||||
from mailu.admin import db, dkim
|
||||
from mailu import app
|
||||
from mailu import app, db, dkim, login_manager
|
||||
|
||||
from sqlalchemy.ext import declarative
|
||||
from passlib import context
|
||||
@ -236,6 +235,8 @@ class User(Base, Email):
|
||||
user = cls.query.get(email)
|
||||
return user if (user and user.check_password(password)) else None
|
||||
|
||||
login_manager.user_loader(User.query.get)
|
||||
|
||||
|
||||
class Alias(Base, Email):
|
||||
""" An alias is an email address that redirects to some destination.
|
Before Width: | Height: | Size: 106 KiB After Width: | Height: | Size: 106 KiB |
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user