diff --git a/files/routes/chat.py b/files/routes/chat.py index c11d0e4a0..d3b88d383 100644 --- a/files/routes/chat.py +++ b/files/routes/chat.py @@ -2,7 +2,7 @@ import atexit import time import uuid -from flask_socketio import SocketIO, emit, join_room, leave_room +from flask_socketio import SocketIO, emit from files.helpers.actions import * from files.helpers.alerts import * @@ -20,17 +20,11 @@ socketio = SocketIO( async_mode='gevent', ) -typing = { - f'{SITE_FULL}/chat': [], - f'{SITE_FULL}/admin/chat': [] -} +typing = [] online = [] cache.set(CHAT_ONLINE_CACHE_KEY, len(online), timeout=0) muted = cache.get(f'muted') or {} -messages = cache.get(f'messages') or { - f'{SITE_FULL}/chat': {}, - f'{SITE_FULL}/admin/chat': {} -} +messages = cache.get(f'messages') or {} @app.get("/chat") @limiter.limit(DEFAULT_RATELIMIT, key_func=get_ID) @@ -38,19 +32,11 @@ messages = cache.get(f'messages') or { def chat(v): if not v.admin_level and TRUESCORE_CHAT_MINIMUM and v.truescore < TRUESCORE_CHAT_MINIMUM: abort(403, f"Need at least {TRUESCORE_CHAT_MINIMUM} truescore for access to chat!") - return render_template("chat.html", v=v, messages=messages[f"{SITE_FULL}/chat"]) - -@app.get("/admin/chat") -@admin_level_required(2) -def admin_chat(v): - return render_template("chat.html", v=v, messages=messages[f"{SITE_FULL}/admin/chat"]) + return render_template("chat.html", v=v, messages=messages) @socketio.on('speak') @admin_level_required(PERMS['CHAT']) def speak(data, v): - if not request.referrer: - return '', 400 - image = None if data['file']: name = f'/chat_images/{time.time()}'.replace('.','') + '.webp' @@ -93,20 +79,20 @@ def speak(data, v): emit("online", [online, muted], broadcast=True) if not self_only: - identical = [x for x in list(messages[request.referrer].values())[-5:] if v.id == x['user_id'] and text == x['text']] + identical = [x for x in list(messages.values())[-5:] if v.id == x['user_id'] and text == x['text']] if len(identical) >= 3: shut_up() if not self_only: - count = len([x for x in list(messages[request.referrer].values())[-12:] if v.id == x['user_id']]) + count = len([x for x in list(messages.values())[-12:] if v.id == x['user_id']]) if count >= 10: shut_up() if not self_only: - count = len([x for x in list(messages[request.referrer].values())[-25:] if v.id == x['user_id']]) + count = len([x for x in list(messages.values())[-25:] if v.id == x['user_id']]) if count >= 20: shut_up() data = { "id": id, - "quotes": quotes if messages[request.referrer].get(quotes) else '', + "quotes": quotes if messages.get(quotes) else '', "hat": v.hat_active(v)[0], "user_id": v.id, "username": v.username, @@ -130,45 +116,28 @@ def speak(data, v): if self_only or v.shadowbanned or not execute_blackjack(v, None, text, "chat"): emit('speak', data) else: - emit('speak', data, room=request.referrer, broadcast=True) - messages[request.referrer][id] = data - messages[request.referrer] = dict(list(messages[request.referrer].items())[-500:]) + emit('speak', data, broadcast=True) + messages[id] = data + messages = dict(list(messages.items())[-500:]) typing = [] - if request.referrer == f'{SITE_FULL}/admin/chat': - title = f'New message in admin chat from @{v.username}' - notifbody = text - url = f'{SITE_FULL}/admin/chat' - - admin_ids = [x[0] for x in g.db.query(User.id).filter( - User.id != v.id, - User.admin_level >= 2, - ).all()] - - push_notif(admin_ids, title, notifbody, url) - return '', 204 def refresh_online(): emit("online", [online, muted], broadcast=True) - if request.referrer == f'{SITE_FULL}/chat': - cache.set(CHAT_ONLINE_CACHE_KEY, len(online), timeout=0) + cache.set(CHAT_ONLINE_CACHE_KEY, len(online), timeout=0) @socketio.on('connect') @admin_level_required(PERMS['CHAT']) def connect(v): - if not request.referrer: - return '', 400 - - join_room(request.referrer) if [v.username, v.id, v.name_color] not in online: online.append([v.username, v.id, v.name_color]) refresh_online() - emit('typing', typing[request.referrer], room=request.referrer) + emit('typing', typing) return '', 204 @socketio.on('disconnect') @@ -178,42 +147,29 @@ def disconnect(v): online.remove([v.username, v.id, v.name_color]) refresh_online() - for val in typing.values(): - if v.username in val: - val.remove(v.username) - - if request.referrer: - leave_room(request.referrer) + if v.username in typing: + typing.remove(v.username) return '', 204 @socketio.on('typing') @admin_level_required(PERMS['CHAT']) def typing_indicator(data, v): - if not request.referrer: - return '', 400 + if data and v.username not in typing: + typing.append(v.username) + elif not data and v.username in typing: + typing.remove(v.username) - if data and v.username not in typing[request.referrer]: - typing[request.referrer].append(v.username) - elif not data and v.username in typing[request.referrer]: - typing[request.referrer].remove(v.username) - - emit('typing', typing[request.referrer], room=request.referrer, broadcast=True) + emit('typing', typing, broadcast=True) return '', 204 @socketio.on('delete') @admin_level_required(PERMS['POST_COMMENT_MODERATION']) def delete(id, v): - if not request.referrer: - return '', 400 + del messages[id] - for k, val in messages[request.referrer].items(): - if k == id: - del messages[request.referrer][k] - break - - emit('delete', id, room=request.referrer, broadcast=True) + emit('delete', id, broadcast=True) return '', 204 diff --git a/files/routes/static.py b/files/routes/static.py index c02f2ce77..e90eb9b04 100644 --- a/files/routes/static.py +++ b/files/routes/static.py @@ -211,6 +211,7 @@ def api(v): @app.get("/contact_us") @app.get("/press") @app.get("/media") +@app.get("/admin/chat") @auth_desired def contact(v:Optional[User]): return render_template("contact.html", v=v, msg=get_msg()) diff --git a/files/routes/wrappers.py b/files/routes/wrappers.py index e3d2dc3e5..089a515cb 100644 --- a/files/routes/wrappers.py +++ b/files/routes/wrappers.py @@ -126,8 +126,6 @@ def admin_level_required(x): if v.admin_level < x: abort(403) if x and SITE != 'devrama.net' and not IS_LOCALHOST and not v.mfa_secret: abort(403, "You need to enable 2FA to use admin features!") - if request.referrer == f'{SITE_FULL}/admin/chat' and v.admin_level < PERMS['CHAT']: - abort(403) return make_response(f(*args, v=v, **kwargs)) wrapper.__name__ = f.__name__ diff --git a/files/templates/admin/admin_home.html b/files/templates/admin/admin_home.html index fd1a8b92b..f709f1e5b 100644 --- a/files/templates/admin/admin_home.html +++ b/files/templates/admin/admin_home.html @@ -4,11 +4,6 @@ {% block content %}

Admin Tools

-

Admin Chat

- - {% if (v.admin_level >= PERMS['SITE_SETTINGS_SIDEBARS_BANNERS_BADGES'] or v.admin_level >= PERMS['SITE_SETTINGS_SNAPPY_QUOTES']) and (SITE_NAME == 'rDrama' or SIDEBAR_THREAD or BANNER_THREAD or BADGE_THREAD or SNAPPY_THREAD) %}

Add Stuff