mirror of
https://github.com/aljazceru/CTFd.git
synced 2025-12-18 14:34:21 +01:00
Fix issue loading update view in Python 3. Thanks to @mayoneko (#766)
* Fix `update.html` in Python 3
This commit is contained in:
@@ -1,9 +1,11 @@
|
|||||||
from flask import current_app as app, render_template, render_template_string, url_for
|
from flask import current_app as app, render_template, render_template_string, url_for
|
||||||
from CTFd.utils.decorators import admins_only
|
from CTFd.utils.decorators import admins_only
|
||||||
|
from CTFd.utils import binary_type
|
||||||
from CTFd.models import Solves, Challenges, Flags
|
from CTFd.models import Solves, Challenges, Flags
|
||||||
from CTFd.plugins.challenges import get_chal_class
|
from CTFd.plugins.challenges import get_chal_class
|
||||||
from CTFd.admin import admin
|
from CTFd.admin import admin
|
||||||
import os
|
import os
|
||||||
|
import six
|
||||||
|
|
||||||
|
|
||||||
@admin.route('/admin/challenges')
|
@admin.route('/admin/challenges')
|
||||||
@@ -22,9 +24,12 @@ def challenges_detail(challenge_id):
|
|||||||
flags = Flags.query.filter_by(challenge_id=challenge.id).all()
|
flags = Flags.query.filter_by(challenge_id=challenge.id).all()
|
||||||
challenge_class = get_chal_class(challenge.type)
|
challenge_class = get_chal_class(challenge.type)
|
||||||
|
|
||||||
with open(os.path.join(app.root_path, challenge_class.templates['update'].lstrip('/'))) as update:
|
with open(os.path.join(app.root_path, challenge_class.templates['update'].lstrip('/')), 'rb') as update:
|
||||||
|
tpl = update.read()
|
||||||
|
if six.PY3 and isinstance(tpl, binary_type):
|
||||||
|
tpl = tpl.decode('utf-8')
|
||||||
update_j2 = render_template_string(
|
update_j2 = render_template_string(
|
||||||
update.read().decode('utf-8'),
|
tpl,
|
||||||
challenge=challenge
|
challenge=challenge
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -21,6 +21,32 @@ def test_get_admin_challenges_new():
|
|||||||
destroy_ctfd(app)
|
destroy_ctfd(app)
|
||||||
|
|
||||||
|
|
||||||
|
def test_create_new_challenge():
|
||||||
|
"""Test that an admin can create a challenge properly"""
|
||||||
|
app = create_ctfd()
|
||||||
|
with app.app_context():
|
||||||
|
register_user(app)
|
||||||
|
client = login_as_user(app, name="admin", password="password")
|
||||||
|
|
||||||
|
challenge_data = {
|
||||||
|
"name": "name",
|
||||||
|
"category": "category",
|
||||||
|
"description": "description",
|
||||||
|
"value": 100,
|
||||||
|
"state": "hidden",
|
||||||
|
"type": "standard"
|
||||||
|
}
|
||||||
|
|
||||||
|
r = client.post('/api/v1/challenges', json=challenge_data)
|
||||||
|
assert r.get_json().get('data')['id'] == 1
|
||||||
|
r = client.get('/admin/challenges/1')
|
||||||
|
assert r.status_code == 200
|
||||||
|
r = client.get('/api/v1/challenges/1')
|
||||||
|
assert r.get_json().get('data')['id'] == 1
|
||||||
|
|
||||||
|
destroy_ctfd(app)
|
||||||
|
|
||||||
|
|
||||||
def test_hidden_challenge_is_reachable():
|
def test_hidden_challenge_is_reachable():
|
||||||
"""Test that hidden challenges are visible for admins"""
|
"""Test that hidden challenges are visible for admins"""
|
||||||
app = create_ctfd()
|
app = create_ctfd()
|
||||||
|
|||||||
Reference in New Issue
Block a user