Files
simple-nanoshare/my_modules/middleware.py
T
daniel156161 715af77a8c
Build and Push Docker Container / build-and-push (push) Successful in 1m21s
add code to increment blocked path access
2025-12-29 09:12:52 +01:00

56 lines
1.9 KiB
Python

from routes.handeling.errorsAndBots import maybe_a_hacker
from my_modules.app.constens import THE_IP_BOT_MANAGER
from my_modules.app.logger import logger
from my_modules.functions import get_ip
from my_modules.app.setup import app
from quart import request, render_template, current_app, session
from datetime import datetime
@app.before_request
async def custom_middleware():
if session.get('user'): # only if session already has data, update redis expire time
session.permanent = True
client_ip = get_ip()
path = request.path
method = request.method
db_whitelisted_or_blocked = await current_app.convex.is_ip_address_whitelisted_or_blocked(ip_address=client_ip)
# Skip allowed IPs or non-critical assets
if (
db_whitelisted_or_blocked['whiteliste']
or THE_IP_BOT_MANAGER.is_client_ip_always_allowed(client_ip)
or "static" in path
or "favicon" in path
or "storage" in path
):
return
# 2. If IP is already blocked
if db_whitelisted_or_blocked['blocked']:
await logger.error(f"[BLOCKED] {method} | {client_ip} tried {method} {path}")
await current_app.convex.increment_blocked_ip_address_access(ip_address=client_ip, method=method, path=path)
return await render_template("views/basics/blocked_access.htm", remote_addr=client_ip), 403
# 3. If path contains honeypot targets
if await current_app.convex.is_path_blocked(path=path):
await logger.warning(f"[HONEYPOT] {method} | {client_ip} accessed {path}")
await current_app.convex.increment_blocked_path_access(path=path)
return await maybe_a_hacker()
await logger.info(f"{method} | {client_ip} had accessed the Side {path}")
@app.context_processor
async def inject_context_data():
user = session.get("user")
current_year = datetime.now().year
await logger.debug(f"Inject Context Data | User: {user}, Year: {current_year}")
return {
"user": user,
"year": current_year,
}