diff --git a/CTFd/admin.py b/CTFd/admin.py index 89ad7588..5af48652 100644 --- a/CTFd/admin.py +++ b/CTFd/admin.py @@ -59,20 +59,24 @@ def init_admin(app): view_challenges_unregistered = bool(request.form.get('view_challenges_unregistered', None)) prevent_registration = bool(request.form.get('prevent_registration', None)) prevent_name_change = bool(request.form.get('prevent_name_change', None)) + view_after_ctf = bool(request.form.get('view_after_ctf', None)) except (ValueError, TypeError): view_challenges_unregistered = None prevent_registration = None prevent_name_change = None + view_after_ctf = None finally: view_challenges_unregistered = set_config('view_challenges_unregistered', view_challenges_unregistered) prevent_registration = set_config('prevent_registration', prevent_registration) prevent_name_change = set_config('prevent_name_change', prevent_name_change) + view_after_ctf = set_config('view_after_ctf', view_after_ctf) ctf_name = set_config("ctf_name", request.form.get('ctf_name', None)) mg_api_key = set_config("mg_api_key", request.form.get('mg_api_key', None)) do_api_key = set_config("do_api_key", request.form.get('do_api_key', None)) max_tries = set_config("max_tries", request.form.get('max_tries', None)) + db_start = Config.query.filter_by(key='start').first() db_start.value = start @@ -102,6 +106,11 @@ def init_admin(app): set_config('max_tries', 0) max_tries = 0 + view_after_ctf = get_config('view_after_ctf') == '1' + if not view_after_ctf: + set_config('view_after_ctf', 0) + view_after_ctf = 0 + start = get_config('start') if not start: set_config('start', None) @@ -129,7 +138,8 @@ def init_admin(app): max_tries=max_tries, view_challenges_unregistered=view_challenges_unregistered, prevent_registration=prevent_registration, do_api_key=do_api_key, mg_api_key=mg_api_key, - prevent_name_change=prevent_name_change) + prevent_name_change=prevent_name_change, + view_after_ctf=view_after_ctf) @app.route('/admin/pages', defaults={'route': None}, methods=['GET', 'POST']) @app.route('/admin/pages/', methods=['GET', 'POST']) diff --git a/CTFd/challenges.py b/CTFd/challenges.py index d22abef6..b0746c51 100644 --- a/CTFd/challenges.py +++ b/CTFd/challenges.py @@ -1,6 +1,6 @@ from flask import current_app as app, render_template, request, redirect, abort, jsonify, json as json_mod, url_for, session -from CTFd.utils import ctftime, authed, unix_time, get_kpm, can_view_challenges, is_admin, get_config +from CTFd.utils import ctftime, view_after_ctf, authed, unix_time, get_kpm, can_view_challenges, is_admin, get_config from CTFd.models import db, Challenges, Files, Solves, WrongKeys, Keys import time @@ -10,16 +10,16 @@ import logging def init_challenges(app): @app.route('/challenges', methods=['GET']) def challenges(): - if not is_admin() and not ctftime(): + if not is_admin() and not ctftime() and not view_after_ctf(): return redirect('/') if can_view_challenges(): - return render_template('chals.html') + return render_template('chals.html', ctftime=ctftime()) else: return redirect(url_for('login', next="challenges")) @app.route('/chals', methods=['GET']) def chals(): - if not is_admin() and not ctftime(): + if not is_admin() and not ctftime() and not view_after_ctf(): return redirect('/') if can_view_challenges(): chals = Challenges.query.add_columns('id', 'name', 'value', 'description', 'category').order_by(Challenges.value).all() @@ -90,7 +90,7 @@ def init_challenges(app): @app.route('/chal/', methods=['POST']) def chal(chalid): if not ctftime(): - return redirect('/') + return redirect('/challenges') if authed(): fails = WrongKeys.query.filter_by(team=session['id'],chal=chalid).count() logger = logging.getLogger('keys') diff --git a/CTFd/utils.py b/CTFd/utils.py index 03aa320e..a7802158 100644 --- a/CTFd/utils.py +++ b/CTFd/utils.py @@ -72,6 +72,12 @@ def admins_only(f): return decorated_function +def view_after_ctf(): + if get_config('view_after_ctf') == '1' and get_config("end") > time.time: + return True + else: + return False + def ctftime(): """ Checks whether it's CTF time or not. """ diff --git a/templates/admin/config.html b/templates/admin/config.html index f5d6665d..97db6680 100644 --- a/templates/admin/config.html +++ b/templates/admin/config.html @@ -37,6 +37,11 @@ +
+ + +
+
diff --git a/templates/chals.html b/templates/chals.html index 30b0e50b..839e4823 100644 --- a/templates/chals.html +++ b/templates/chals.html @@ -26,10 +26,11 @@

- + {% if ctftime %} + {% endif %}
×