Merge pull request #43 from slinkymanbyday/view_challs_after

View challs after
This commit is contained in:
Kevin Chung
2015-05-29 15:28:26 -04:00
5 changed files with 29 additions and 7 deletions

View File

@@ -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'])

View File

@@ -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')

View File

@@ -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. """

View File

@@ -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>

View File

@@ -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">&#215;</a>