134 lines
4.2 KiB
Python
134 lines
4.2 KiB
Python
|
|
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()
|