mirror of
https://github.com/aljazceru/CTFd.git
synced 2025-12-18 06:24:23 +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 CTFd.utils.decorators import admins_only
|
||||
from CTFd.utils import binary_type
|
||||
from CTFd.models import Solves, Challenges, Flags
|
||||
from CTFd.plugins.challenges import get_chal_class
|
||||
from CTFd.admin import admin
|
||||
import os
|
||||
import six
|
||||
|
||||
|
||||
@admin.route('/admin/challenges')
|
||||
@@ -22,9 +24,12 @@ def challenges_detail(challenge_id):
|
||||
flags = Flags.query.filter_by(challenge_id=challenge.id).all()
|
||||
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.read().decode('utf-8'),
|
||||
tpl,
|
||||
challenge=challenge
|
||||
)
|
||||
|
||||
|
||||
@@ -21,6 +21,32 @@ def test_get_admin_challenges_new():
|
||||
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():
|
||||
"""Test that hidden challenges are visible for admins"""
|
||||
app = create_ctfd()
|
||||
|
||||
Reference in New Issue
Block a user