Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| e822ea36bf |
+17
-1
@@ -50,6 +50,7 @@ import socket
|
|||||||
import io
|
import io
|
||||||
import html
|
import html
|
||||||
import logging
|
import logging
|
||||||
|
from logging.handlers import RotatingFileHandler
|
||||||
import secrets
|
import secrets
|
||||||
import importlib
|
import importlib
|
||||||
try:
|
try:
|
||||||
@@ -80,7 +81,15 @@ from tenant import get_tenant_context
|
|||||||
|
|
||||||
|
|
||||||
app = Flask(__name__, static_folder='static') # Correctly set static folder
|
app = Flask(__name__, static_folder='static') # Correctly set static folder
|
||||||
app.logger.setLevel(logging.WARNING)
|
app.logger.setLevel(logging.INFO)
|
||||||
|
if not os.path.exists(cfg.LOGS_FOLDER):
|
||||||
|
os.makedirs(cfg.LOGS_FOLDER, exist_ok=True)
|
||||||
|
log_file_path = os.path.join(cfg.LOGS_FOLDER, 'application.log')
|
||||||
|
file_handler = RotatingFileHandler(log_file_path, maxBytes=10 * 1024 * 1024, backupCount=5, encoding='utf-8')
|
||||||
|
file_handler.setLevel(logging.INFO)
|
||||||
|
file_handler.setFormatter(logging.Formatter('%(asctime)s %(levelname)s %(name)s %(message)s'))
|
||||||
|
app.logger.handlers = []
|
||||||
|
app.logger.addHandler(file_handler)
|
||||||
app.secret_key = cfg.SECRET_KEY
|
app.secret_key = cfg.SECRET_KEY
|
||||||
app.debug = cfg.DEBUG
|
app.debug = cfg.DEBUG
|
||||||
app.config['UPLOAD_FOLDER'] = cfg.UPLOAD_FOLDER
|
app.config['UPLOAD_FOLDER'] = cfg.UPLOAD_FOLDER
|
||||||
@@ -4048,13 +4057,19 @@ def login():
|
|||||||
if request.method == 'POST':
|
if request.method == 'POST':
|
||||||
username = request.form['username']
|
username = request.form['username']
|
||||||
password = request.form['password']
|
password = request.form['password']
|
||||||
|
ctx = get_tenant_context()
|
||||||
|
current_tenant_id = ctx.tenant_id if ctx else None
|
||||||
|
current_tenant_db = ctx.db_name if ctx else cfg.MONGODB_DB
|
||||||
|
app.logger.info(f"Login attempt: username={username!r} tenant={current_tenant_id or 'default'} db={current_tenant_db} host={request.host} ip={request.remote_addr}")
|
||||||
if not username or not password:
|
if not username or not password:
|
||||||
|
app.logger.warning(f"Login blocked: missing credentials tenant={current_tenant_id or 'default'} host={request.host} ip={request.remote_addr}")
|
||||||
flash('Bitte alle Felder ausfüllen', 'error')
|
flash('Bitte alle Felder ausfüllen', 'error')
|
||||||
return redirect(url_for('login'))
|
return redirect(url_for('login'))
|
||||||
|
|
||||||
user = us.check_nm_pwd(username, password)
|
user = us.check_nm_pwd(username, password)
|
||||||
|
|
||||||
if user:
|
if user:
|
||||||
|
app.logger.info(f"Login success: username={username!r} tenant={current_tenant_id or 'default'} db={current_tenant_db} host={request.host} ip={request.remote_addr}")
|
||||||
session['username'] = username
|
session['username'] = username
|
||||||
is_admin_user = bool(user.get('Admin', False))
|
is_admin_user = bool(user.get('Admin', False))
|
||||||
session['admin'] = is_admin_user
|
session['admin'] = is_admin_user
|
||||||
@@ -4075,6 +4090,7 @@ def login():
|
|||||||
else:
|
else:
|
||||||
return redirect(url_for('home'))
|
return redirect(url_for('home'))
|
||||||
else:
|
else:
|
||||||
|
app.logger.warning(f"Login failed: username={username!r} tenant={current_tenant_id or 'default'} db={current_tenant_db} host={request.host} ip={request.remote_addr}")
|
||||||
flash('Ungültige Anmeldedaten', 'error')
|
flash('Ungültige Anmeldedaten', 'error')
|
||||||
get_flashed_messages()
|
get_flashed_messages()
|
||||||
return render_template('login.html')
|
return render_template('login.html')
|
||||||
|
|||||||
@@ -128,7 +128,9 @@ class TenantContext:
|
|||||||
if tenant_from_port:
|
if tenant_from_port:
|
||||||
self.tenant_id = tenant_from_port
|
self.tenant_id = tenant_from_port
|
||||||
self.config = get_tenant_config(tenant_from_port)
|
self.config = get_tenant_config(tenant_from_port)
|
||||||
|
logger.info(f"Tenant resolution by port: host={host} port={port} tenant={tenant_from_port}")
|
||||||
return self._get_db_name(tenant_from_port)
|
return self._get_db_name(tenant_from_port)
|
||||||
|
logger.info(f"Tenant port not mapped: host={host} port={port}")
|
||||||
|
|
||||||
# Priority 3: Subdomain extraction
|
# Priority 3: Subdomain extraction
|
||||||
parts = host.split('.')
|
parts = host.split('.')
|
||||||
@@ -144,7 +146,9 @@ class TenantContext:
|
|||||||
self.subdomain = potential_subdomain
|
self.subdomain = potential_subdomain
|
||||||
self.tenant_id = potential_subdomain
|
self.tenant_id = potential_subdomain
|
||||||
self.config = get_tenant_config(potential_subdomain)
|
self.config = get_tenant_config(potential_subdomain)
|
||||||
|
logger.info(f"Tenant resolution by subdomain: host={host} tenant={potential_subdomain}")
|
||||||
return self._get_db_name(potential_subdomain)
|
return self._get_db_name(potential_subdomain)
|
||||||
|
logger.info(f"Tenant subdomain ignored: {potential_subdomain}")
|
||||||
|
|
||||||
# Fallback to default tenant if no tenant identifier found.
|
# Fallback to default tenant if no tenant identifier found.
|
||||||
# If no explicit 'default' tenant config exists, use configured MongoDB DB.
|
# If no explicit 'default' tenant config exists, use configured MongoDB DB.
|
||||||
|
|||||||
Reference in New Issue
Block a user