From 0a1c1069fcd5567b5f2ee021aae336a746dbb5f5 Mon Sep 17 00:00:00 2001 From: sourque Date: Thu, 23 Apr 2020 21:28:49 -0700 Subject: [PATCH] Fix double-entry bug on the CSS leaderboard --- README.md | 6 ++++-- engine/db.py | 23 ++++++++++------------- engine/server.py | 2 +- setup/imgs/css.png | Bin 0 -> 34829 bytes 4 files changed, 15 insertions(+), 16 deletions(-) create mode 100644 setup/imgs/css.png diff --git a/README.md b/README.md index 449a943..7aad5bf 100644 --- a/README.md +++ b/README.md @@ -27,10 +27,12 @@ Start the engine with `service minos start`, or `service minos start logs` if yo By default, the configuration and database don't reset when you start the engine, as long as there is a currently existing `running-config.cfg`. Set the `"reset=1"` option in the `[settings]` directive to reset every time the engine launches. -## Screenshot +## Screenshots ![Status Page](setup/imgs/status.png) +![CSS Reporting](setup/imgs/css.png) + ## Features - Uptime scoring engine @@ -46,7 +48,7 @@ By default, the configuration and database don't reset when you start the engine - Clock and competition time tracker - Timing-based injects and scoring - CyberPatriot-esque scoring graphics and pages :) -- (WIP) CSS Find-and-fix vulnerability leaderboard +- CSS Find-and-fix vulnerability leaderboard ## Scoring Engine Mechanics diff --git a/engine/db.py b/engine/db.py index cd08432..a9ed985 100644 --- a/engine/db.py +++ b/engine/db.py @@ -207,21 +207,18 @@ def get_css_scores(remote): team_scores = [] try: team_data = execute("SELECT team, image, points FROM css_results GROUP BY team, image ORDER BY time DESC") - team = team_data[0][0] except: return team_scores else: - image_count = 0 - team_sum = 0 + team_score_dict = {} for data in team_data: - if team != data[0]: - team_scores.append((team, image_count, get_css_elapsed_time(team), team_sum)) - team = data[0] - image_count = 0 - team_sum = 0 - team_sum += data[2] - image_count += 1 - team_scores.append((team, image_count, get_css_elapsed_time(team), team_sum)) + if data[0] not in team_score_dict: + team_score_dict[data[0]] = [0, 0] # [image_count, team_score] + team_score_dict[data[0]][0] += 1 + team_score_dict[data[0]][1] += data[2] + + for team, team_data in team_score_dict.items(): + team_scores.append((team, team_data[0], get_css_elapsed_time(team), team_data[1])) # This can't possibly be efficient team_scores.sort(key=lambda tup: tup[0]) @@ -446,12 +443,12 @@ def reset_engine(): execute("INSERT INTO users (team, username, password, is_admin) \ VALUES (?, ?, ?, ?)", (team, team_info['username'], pwhash, 0)) else: - print("[WARN] No teams found in configuration! Running into CCS mode.") + print("[WARN] No teams found in configuration! Running in CCS mode.") config['settings']['css_mode'] = True write_running_config(config) if not 'systems' in config: - print("[WARN] No systems found in configuration! Running into CCS mode.") + print("[WARN] No systems found in configuration! Running in CCS mode.") config['settings']['css_mode'] = True write_running_config(config) diff --git a/engine/server.py b/engine/server.py index 8678fe9..a8f78a6 100644 --- a/engine/server.py +++ b/engine/server.py @@ -213,7 +213,7 @@ def css_update(): print("[ERROR] Score update from image did not have all required fields, or had malformed fields.") return("FAIL") if not db.validate_alphanum(team) or not db.validate_alphanum(image): - print("[ERROR] Team or image contained illegal characters.") + print("[ERROR] Team or image contained illegal characters. team", image) return("FAIL") if "teams" in em.remote: if team not in em.remote["teams"]: diff --git a/setup/imgs/css.png b/setup/imgs/css.png new file mode 100644 index 0000000000000000000000000000000000000000..8fc3f53b1f94bdac42c98a837cb9d8ea23db52fa GIT binary patch literal 34829 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