import requests import json import base64 BASE_URL = "http://localhost:34801" def register_user(username, password): url = f"{BASE_URL}/api/register" data = {"username": username, "password": password} try: response = requests.post(url, json=data) if response.status_code == 200: return response.json() print(f"Register failed: {response.text}") except Exception as e: print(f"Register error: {e}") return None def login_user(username, password): url = f"{BASE_URL}/api/login" data = {"username": username, "password": password} session = requests.Session() try: response = session.post(url, json=data) if response.status_code == 200: return session print(f"Login failed: {response.text}") except Exception as e: print(f"Login error: {e}") return None def get_csrf_token(session): url = f"{BASE_URL}/api/csrftoken" response = session.get(url) if response.status_code == 200: return response.json()['token'] return None def submit_score(session, song_id, difficulty, score_obj, csrf_token): url = f"{BASE_URL}/api/leaderboard/submit" headers = {"X-CSRFToken": csrf_token} data = { "song_id": song_id, "difficulty": difficulty, "score": score_obj } response = session.post(url, json=data, headers=headers) return response.json() def get_leaderboard(session, song_id, difficulty): url = f"{BASE_URL}/api/leaderboard/get" params = {"song_id": song_id, "difficulty": difficulty} response = session.get(url, params=params) return response.json() def main(): username = "debug_user_1" password = "password123" print("1. Registering/Logging in...") # Try login first session = login_user(username, password) if not session: # Register reg = register_user(username, password) if reg: session = login_user(username, password) else: print("Could not register or login") return print("2. Getting CSRF token...") csrf_token = get_csrf_token(session) if not csrf_token: print("Could not get CSRF token") return song_id = 1 # Assuming song 1 exists difficulty = "oni" # Simulate scoresheet.js submission (points only) score_obj = { "points": 123456, "good": 100, "ok": 10, "bad": 0, "maxCombo": 110, "drumroll": 5, "crown": "gold" } print(f"3. Submitting score: {score_obj['points']}") submit_res = submit_score(session, song_id, difficulty, score_obj, csrf_token) print(f"Submit response: {submit_res}") print("4. Fetching leaderboard...") leaderboard_res = get_leaderboard(session, song_id, difficulty) if leaderboard_res['status'] == 'ok': leaderboard = leaderboard_res['leaderboard'] found = False for entry in leaderboard: if entry['username'] == username: found = True print(f"Found entry: {entry}") print(f"entry.score_value: {entry.get('score_value')}") print(f"entry.score: {entry.get('score')}") score_value = entry.get('score_value') score_data = entry.get('score') # Check what leaderboard.js would see if score_data and 'score' in score_data: print(f"JS would assume score: {score_data['score']}") else: print("JS would assume score: 0 (undefined)") if score_value == 123456: print("SUCCESS: score_value is correct.") else: print(f"FAILURE: score_value is incorrect (expected 123456, got {score_value})") if score_data and score_data.get('points') == 123456: print("SUCCESS: points preserved in score object.") if not found: print("Entry not found in leaderboard (maybe not top 50?)") else: print(f"Failed to get leaderboard: {leaderboard_res}") if __name__ == "__main__": main()