mirror of
https://github.com/aljazceru/CTFd.git
synced 2025-12-18 14:34:21 +01:00
Merge pull request #43 from slinkymanbyday/view_challs_after
View challs after
This commit is contained in:
@@ -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/<route>', methods=['GET', 'POST'])
|
||||
|
||||
@@ -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/<chalid>', 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')
|
||||
|
||||
@@ -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. """
|
||||
|
||||
|
||||
@@ -37,6 +37,11 @@
|
||||
<input id='end' name='end' type='text' placeholder="End Date (UTC timestamp)" {% if end is defined and end != None %}value="{{ end }}"{% endif %}>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<input id="view_after_ctf" name="view_after_ctf" type="checkbox" {% if view_after_ctf %}checked{% endif %}>
|
||||
<label for="end">Allow challenges to be viewed after CTF end</label>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<input id="view_challenges_unregistered" name="view_challenges_unregistered" type="checkbox" {% if view_challenges_unregistered %}checked{% endif %}>
|
||||
<label for="view_challenges_unregistered">Unregistered users can view challenges</label>
|
||||
|
||||
@@ -26,10 +26,11 @@
|
||||
<h4 class="chal-value"></h4>
|
||||
<p><i><a data-reveal-id="chal-solves-window" class="chal-solves"></a></i></p>
|
||||
<p class="chal-desc"></p>
|
||||
|
||||
{% if ctftime %}
|
||||
<input id="answer" type="text" placeholder="Key">
|
||||
<input type="hidden" id="nonce" name="nonce" value={{ nonce }}>
|
||||
<button id="submit-key">Submit</button>
|
||||
{% endif %}
|
||||
<input id="chal-id" type="hidden">
|
||||
</div>
|
||||
<a class="close-reveal-modal">×</a>
|
||||
|
||||
Reference in New Issue
Block a user