From 512fe8d7105e243c19c0e5c210e42df882605227 Mon Sep 17 00:00:00 2001 From: Aevann Date: Thu, 29 Jun 2023 18:56:16 +0300 Subject: [PATCH] fix loggedout_counter --- files/routes/jinja2.py | 47 ---------------------- files/routes/wrappers.py | 45 +++++++++++++++++++++ files/templates/header.html | 6 +-- files/templates/mobile_navigation_bar.html | 2 +- 4 files changed, 49 insertions(+), 51 deletions(-) diff --git a/files/routes/jinja2.py b/files/routes/jinja2.py index 378eb2bb1..1a21f5ea5 100644 --- a/files/routes/jinja2.py +++ b/files/routes/jinja2.py @@ -1,10 +1,7 @@ import time -import secrets from os import environ, listdir, path -import user_agents - from flask import g, session, has_request_context, request from jinja2 import pass_context @@ -76,50 +73,6 @@ def selected_tab(request): return 'home' -@app.context_processor -def calc_users(): - loggedin_counter = 0 - loggedout_counter = 0 - loggedin_chat = 0 - v = getattr(g, 'v', None) if g else None - if has_request_context and g and g.desires_auth and not g.is_api_or_xhr: - loggedin = cache.get(LOGGED_IN_CACHE_KEY) or {} - loggedout = cache.get(LOGGED_OUT_CACHE_KEY) or {} - loggedin_chat = cache.get(CHAT_ONLINE_CACHE_KEY) or 0 - timestamp = int(time.time()) - - if not session.get("session_id"): - session.permanent = True - session["session_id"] = secrets.token_hex(49) - - if v: - if session["session_id"] in loggedout: del loggedout[session["session_id"]] - loggedin[v.id] = timestamp - else: - ua = str(user_agents.parse(g.agent)) - if 'spider' not in ua.lower() and 'bot' not in ua.lower(): - loggedout[session["session_id"]] = (timestamp, ua) - - loggedin = {k: v for k, v in loggedin.items() if (timestamp - v) < LOGGEDIN_ACTIVE_TIME} - loggedout = {k: v for k, v in loggedout.items() if (timestamp - v[0]) < LOGGEDIN_ACTIVE_TIME} - cache.set(LOGGED_IN_CACHE_KEY, loggedin) - cache.set(LOGGED_OUT_CACHE_KEY, loggedout) - loggedin_counter = len(loggedin) - loggedout_counter = len(loggedout) - - if loggedout_counter > 1000: - if not get_setting('ddos_detected'): - toggle_setting('ddos_detected') - set_security_level('under_attack') - else: - if get_setting('ddos_detected'): - toggle_setting('ddos_detected') - set_security_level('high') - - - return {'loggedin_counter':loggedin_counter, - 'loggedout_counter':loggedout_counter, - 'loggedin_chat':loggedin_chat} def current_registered_users(): return "{:,}".format(g.db.query(User).count()) diff --git a/files/routes/wrappers.py b/files/routes/wrappers.py index 614d21330..546901a5e 100644 --- a/files/routes/wrappers.py +++ b/files/routes/wrappers.py @@ -1,4 +1,6 @@ import time +import secrets +import user_agents from flask import g, request, session from files.classes.clients import ClientAuth @@ -24,6 +26,47 @@ def get_ID(): return f'{SITE}-{x}' +def calc_users(): + g.loggedin_counter = 0 + g.loggedout_counter = 0 + g.loggedin_chat = 0 + v = getattr(g, 'v', None) if g else None + if has_request_context and g and g.desires_auth and not g.is_api_or_xhr: + loggedin = cache.get(LOGGED_IN_CACHE_KEY) or {} + loggedout = cache.get(LOGGED_OUT_CACHE_KEY) or {} + g.loggedin_chat = cache.get(CHAT_ONLINE_CACHE_KEY) or 0 + timestamp = int(time.time()) + + if not session.get("session_id"): + session.permanent = True + session["session_id"] = secrets.token_hex(49) + + if v: + if session["session_id"] in loggedout: del loggedout[session["session_id"]] + loggedin[v.id] = timestamp + else: + ua = str(user_agents.parse(g.agent)) + if 'spider' not in ua.lower() and 'bot' not in ua.lower(): + loggedout[session["session_id"]] = (timestamp, ua) + + loggedin = {k: v for k, v in loggedin.items() if (timestamp - v) < LOGGEDIN_ACTIVE_TIME} + loggedout = {k: v for k, v in loggedout.items() if (timestamp - v[0]) < LOGGEDIN_ACTIVE_TIME} + cache.set(LOGGED_IN_CACHE_KEY, loggedin) + cache.set(LOGGED_OUT_CACHE_KEY, loggedout) + g.loggedin_counter = len(loggedin) + g.loggedout_counter = len(loggedout) + + if g.loggedout_counter > 1000: + if not get_setting('ddos_detected'): + toggle_setting('ddos_detected') + set_security_level('under_attack') + else: + if get_setting('ddos_detected'): + toggle_setting('ddos_detected') + set_security_level('high') + + print('fuck', flush=True) + def get_logged_in_user(): if hasattr(g, 'v') and g.v: return g.v if not hasattr(g, 'db'): g.db = db_session() @@ -78,6 +121,8 @@ def get_logged_in_user(): g.is_api_or_xhr = bool((v and v.client) or request.headers.get("xhr")) + calc_users() + return v def auth_desired(f): diff --git a/files/templates/header.html b/files/templates/header.html index 173a22ff9..617800e33 100644 --- a/files/templates/header.html +++ b/files/templates/header.html @@ -37,10 +37,10 @@ ' Carp alts currently online', ] -%} {% endif %} - {{loggedin_counter+loggedout_counter}} {{VISITORS_HERE_FLAVOR|random|safe}} ({{loggedin_counter}} logged in) + {{g.loggedin_counter+g.loggedout_counter}} {{VISITORS_HERE_FLAVOR|random|safe}} ({{g.loggedin_counter}} logged in) {% endif %} {% else %} - {{loggedin_counter+loggedout_counter}} people here now ({{loggedin_counter}} logged in) + {{g.loggedin_counter+g.loggedout_counter}} people here now ({{g.loggedin_counter}} logged in) {% endif %} {% else %} @@ -178,7 +178,7 @@ - {{loggedin_chat}} + {{g.loggedin_chat}} diff --git a/files/templates/mobile_navigation_bar.html b/files/templates/mobile_navigation_bar.html index 495fc65ac..413ae03b4 100644 --- a/files/templates/mobile_navigation_bar.html +++ b/files/templates/mobile_navigation_bar.html @@ -50,7 +50,7 @@