-
Notifications
You must be signed in to change notification settings - Fork 0
/
__init__.py
57 lines (50 loc) · 1.51 KB
/
__init__.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
from flask import render_template_string
from CTFd.api import CTFd_API_v1
from CTFd.models import Submissions
from CTFd.plugins import register_plugin_assets_directory
from CTFd.plugins.challenges import CHALLENGE_CLASSES
from CTFd.utils.decorators import admins_only
from .api import submission_list, query_details
from .models import *
from .routes import cases_namespace
submission_template = '''
<html>
username: {{ user }}<br>
language: {{ lang }}<br>
<code><pre>
{{code}}
</pre></code><br>
additional info:<br>
<code><pre>
{{additional}}
</pre></code>
</html>
'''
def load(app):
CTFd_API_v1.add_namespace(cases_namespace, '/cases')
@app.route('/submission')
@admins_only
def list_submission():
return json.dumps(submission_list())
@app.route('/submission/<sub_id>')
@admins_only
def get_submission(sub_id):
username = Submissions.query.filter_by(provided=sub_id).first().user
res = api.query_details(sub_id)['content']
try:
res['result'] = json.loads(res['result'])
res['result'] = json.dumps(res['result'], indent=4)
except:
pass
return render_template_string(
submission_template,
user=username,
code=res['code'],
lang=res['lang'],
additional=res['result']
)
app.db.create_all()
CHALLENGE_CLASSES["icpc_dynamic"] = DynICPCChallenge
register_plugin_assets_directory(
app, base_path="/plugins/CTFd_ICPC_Challenges/assets/"
)