From 96e21882265b851d6baf4519fef66a2c65cba958 Mon Sep 17 00:00:00 2001 From: LpCote <73721863+LpCote4@users.noreply.github.com> Date: Sun, 17 Nov 2024 11:25:11 -0500 Subject: [PATCH] fix: score with submission.value if defined and removed @admin for get /Submissions --- CTFd/api/v1/submissions.py | 3 ++- CTFd/models/__init__.py | 8 +++++++- CTFd/teams.py | 11 ++++++++--- CTFd/themes/admin/templates/teams/team.html | 2 +- CTFd/themes/admin/templates/users/user.html | 2 +- CTFd/themes/core-beta/assets/js/challenges.js | 2 +- ...{challenges.45936401.js => challenges.1bd30fed.js} | 0 CTFd/themes/core-beta/static/manifest.json | 9 ++++++++- CTFd/themes/core-beta/templates/teams/private.html | 4 ++-- CTFd/themes/core-beta/templates/teams/public.html | 2 +- CTFd/themes/core-beta/templates/users/private.html | 2 +- CTFd/themes/core-beta/templates/users/public.html | 2 +- CTFd/utils/challenges/__init__.py | 2 +- CTFd/utils/social/__init__.py | 4 ++-- 14 files changed, 36 insertions(+), 17 deletions(-) rename CTFd/themes/core-beta/static/assets/{challenges.45936401.js => challenges.1bd30fed.js} (100%) diff --git a/CTFd/api/v1/submissions.py b/CTFd/api/v1/submissions.py index c899ae2c..e0d2a921 100644 --- a/CTFd/api/v1/submissions.py +++ b/CTFd/api/v1/submissions.py @@ -50,7 +50,7 @@ submissions_namespace.schema_model( @submissions_namespace.route("") class SubmissionsList(Resource): - @admins_only + # @admins_only @submissions_namespace.doc( description="Endpoint to get submission objects in bulk", responses={ @@ -100,6 +100,7 @@ class SubmissionsList(Resource): .filter(*filters) .paginate(max_per_page=100) ) + print(submissions.query.statement) response = schema.dump(submissions.items) diff --git a/CTFd/models/__init__.py b/CTFd/models/__init__.py index 3b251740..114dc59a 100644 --- a/CTFd/models/__init__.py +++ b/CTFd/models/__init__.py @@ -1,5 +1,6 @@ import datetime from collections import defaultdict +from sqlalchemy import case from flask_marshmallow import Marshmallow from flask_sqlalchemy import SQLAlchemy @@ -525,7 +526,12 @@ class Users(db.Model): @cache.memoize() def get_score(self, admin=False): - score = db.func.sum(Challenges.value).label("score") + score = db.func.sum( + case( + [(Solves.value != None, Solves.value)], # Use Solves.value if defined + else_=Challenges.value # Fallback to Challenges.value + ) + ).label("score") user = ( db.session.query(Solves.user_id, score) .join(Users, Solves.user_id == Users.id) diff --git a/CTFd/teams.py b/CTFd/teams.py index 01e4409e..953281ac 100644 --- a/CTFd/teams.py +++ b/CTFd/teams.py @@ -411,11 +411,16 @@ def get_member_score(member): total_score = 0 for solve in member.solves: challenge = Challenges.query.filter_by(id=solve.challenge_id).first_or_404() - - total_score += int(challenge.value) + if(solve.value): + total_score += int(solve.value) + else: + total_score += int(challenge.value) for fail in member.fails: challenge = Challenges.query.filter_by(id=fail.challenge_id).first_or_404() - total_score += int(challenge.value) + if(fail.value): + total_score += int(fail.value) + else: + total_score += int(challenge.value) return total_score diff --git a/CTFd/themes/admin/templates/teams/team.html b/CTFd/themes/admin/templates/teams/team.html index a56f8a85..199ef7b9 100644 --- a/CTFd/themes/admin/templates/teams/team.html +++ b/CTFd/themes/admin/templates/teams/team.html @@ -370,7 +370,7 @@ </td> <td class="flag imageContainer text-center" id="{{solve.provided}}"></td> <td class="text-center">{{ solve.challenge.category }}</td> - <td class="text-center">{{ solve.challenge.value }}</td> + <td class="text-center">{{ solve.value if solve.value is not none else solve.challenge.value }}</td> <td class="text-center solve-time"> <span data-time="{{ solve.date | isoformat }}"></span> </td> diff --git a/CTFd/themes/admin/templates/users/user.html b/CTFd/themes/admin/templates/users/user.html index 7e02e35b..8fd2a788 100644 --- a/CTFd/themes/admin/templates/users/user.html +++ b/CTFd/themes/admin/templates/users/user.html @@ -242,7 +242,7 @@ </td> <td class="flag imageContainer text-center" id="{{solve.provided}}"></td> <td class="text-center">{{ solve.challenge.category }}</td> - <td class="text-center">{{ solve.challenge.value }}</td> + <td class="text-center">{{ solve.value if solve.value is not none else solve.challenge.value }}</td> <td class="text-center solve-time"> <span data-time="{{ solve.date | isoformat }}"></span> </td> diff --git a/CTFd/themes/core-beta/assets/js/challenges.js b/CTFd/themes/core-beta/assets/js/challenges.js index daf1fb6e..cb56347f 100644 --- a/CTFd/themes/core-beta/assets/js/challenges.js +++ b/CTFd/themes/core-beta/assets/js/challenges.js @@ -562,7 +562,7 @@ Alpine.data("ChallengeBoard", () => ({ } this.challenges[challenge].value = sum; } - + } }, diff --git a/CTFd/themes/core-beta/static/assets/challenges.45936401.js b/CTFd/themes/core-beta/static/assets/challenges.1bd30fed.js similarity index 100% rename from CTFd/themes/core-beta/static/assets/challenges.45936401.js rename to CTFd/themes/core-beta/static/assets/challenges.1bd30fed.js diff --git a/CTFd/themes/core-beta/static/manifest.json b/CTFd/themes/core-beta/static/manifest.json index c13c7fdf..587bd710 100644 --- a/CTFd/themes/core-beta/static/manifest.json +++ b/CTFd/themes/core-beta/static/manifest.json @@ -30,7 +30,7 @@ ] }, "assets/js/challenges.js": { - "file": "assets/challenges.45936401.js", + "file": "assets/challenges.1bd30fed.js", "src": "assets/js/challenges.js", "isEntry": true, "imports": [ @@ -182,5 +182,12 @@ "assets/js/index.js", "_index.84adcd49.js" ] + }, + "_userscore.c89c7377.js": { + "file": "assets/userscore.c89c7377.js", + "imports": [ + "assets/js/index.js", + "_index.84adcd49.js" + ] } } \ No newline at end of file diff --git a/CTFd/themes/core-beta/templates/teams/private.html b/CTFd/themes/core-beta/templates/teams/private.html index fc079636..5eab6301 100644 --- a/CTFd/themes/core-beta/templates/teams/private.html +++ b/CTFd/themes/core-beta/templates/teams/private.html @@ -461,7 +461,7 @@ {{ solve.challenge.name }} </td> <td class="d-md-block d-lg-block">{{ solve.user.name }}</td> - <td>{{ solve.challenge.value }}</td> + <td>{{ solve.value if solve.value is not none else solve.challenge.value }}</td> <td class="solve-time"> <span data-time="{{ solve.date | isoformat }}">{{ solve.date }}</span> </td> @@ -487,7 +487,7 @@ {{ fail.challenge.name }} </td> <td class="d-md-block d-lg-block">{{ fail.user.name }}</td> - <td>{{ fail.challenge.value }}</td> + <td>{{ fail.value if fail.value is not none else fail.challenge.value }}</td> <td class="solve-time"> <span data-time="{{ fail.date | isoformat }}">{{ fail.date }}</span> </td> diff --git a/CTFd/themes/core-beta/templates/teams/public.html b/CTFd/themes/core-beta/templates/teams/public.html index 8523434d..4bfd831c 100644 --- a/CTFd/themes/core-beta/templates/teams/public.html +++ b/CTFd/themes/core-beta/templates/teams/public.html @@ -148,7 +148,7 @@ </a> </td> <td class="d-none d-md-block d-lg-block">{{ solve.challenge.category }}</td> - <td>{{ solve.challenge.value }}</td> + <td>{{ solve.value if solve.value is not none else solve.challenge.value }}</td> <td class="solve-time"> <span data-time="{{ solve.date | isoformat }}"></span> </td> diff --git a/CTFd/themes/core-beta/templates/users/private.html b/CTFd/themes/core-beta/templates/users/private.html index f6e0715a..3a1edfb6 100644 --- a/CTFd/themes/core-beta/templates/users/private.html +++ b/CTFd/themes/core-beta/templates/users/private.html @@ -141,7 +141,7 @@ </a> </td> <td class="d-none d-md-block d-lg-block">{{ solve.challenge.category }}</td> - <td>{{ solve.challenge.value }}</td> + <td>{{ solve.value if solve.value is not none else solve.challenge.value }}</td> <td class="solve-time"> <span data-time="{{ solve.date | isoformat }}"></span> </td> diff --git a/CTFd/themes/core-beta/templates/users/public.html b/CTFd/themes/core-beta/templates/users/public.html index 166a8f85..322ec9a8 100644 --- a/CTFd/themes/core-beta/templates/users/public.html +++ b/CTFd/themes/core-beta/templates/users/public.html @@ -120,7 +120,7 @@ </a> </td> <td class="d-none d-md-block d-lg-block">{{ solve.challenge.category }}</td> - <td>{{ solve.challenge.value }}</td> + <td>{{ solve.value if solve.value is not none else solve.challenge.value }}</td> <td class="solve-time"> <span data-time="{{ solve.date | isoformat }}"></span> </td> diff --git a/CTFd/utils/challenges/__init__.py b/CTFd/utils/challenges/__init__.py index a92169f8..74497f1d 100644 --- a/CTFd/utils/challenges/__init__.py +++ b/CTFd/utils/challenges/__init__.py @@ -98,7 +98,7 @@ def get_solves_for_challenge_id(challenge_id, freeze=False): for fail in fails: # Seperate out the account name and the Solve object from the SQLAlchemy tuple - if fail.challenge.type == "flash" or fail.challenge.type =="manual" or fail.challenge.type == "manualRecursive": + if fail.challenge.type == "flash" or fail.challenge.type =="manual" or fail.challenge.type == "manualRecursive" or fail.challenge.type == "sport": results.append( { "user_name" :fail.user.name, diff --git a/CTFd/utils/social/__init__.py b/CTFd/utils/social/__init__.py index 0d8baf6f..449bf0da 100644 --- a/CTFd/utils/social/__init__.py +++ b/CTFd/utils/social/__init__.py @@ -82,7 +82,7 @@ class SolveSocialShare(object): # Challenge information challenge_id = challenge.id challenge_name = challenge.name - challenge_value = challenge.value + challenge_value = solve.value if solve.value else challenge.value solves_count = get_solve_counts_for_challenges(challenge_id=challenge_id) solve_count = solves_count.get(challenge_id, 0) @@ -158,7 +158,7 @@ class SolveSocialShare(object): # Challenge information challenge_id = challenge.id challenge_name = challenge.name - challenge_value = challenge.value + challenge_value = solve.value if solve.value else challenge.value solves_count = get_solve_counts_for_challenges(challenge_id=challenge_id) solve_count = solves_count.get(challenge_id, 0) solve_count_word = str(solve_count) + pluralize( -- GitLab