mirror of
https://github.com/aljazceru/CTFd.git
synced 2025-12-17 14:04:20 +01:00
Challenge tags now work
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
from flask import current_app as app, render_template, request, redirect, abort, jsonify, json as json_mod, url_for, session, Blueprint
|
from flask import current_app as app, render_template, request, redirect, abort, jsonify, json as json_mod, url_for, session, Blueprint
|
||||||
|
|
||||||
from CTFd.utils import ctftime, view_after_ctf, 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
|
from CTFd.models import db, Challenges, Files, Solves, WrongKeys, Keys, Tags
|
||||||
|
|
||||||
import time
|
import time
|
||||||
import re
|
import re
|
||||||
@@ -38,8 +38,9 @@ def chals():
|
|||||||
|
|
||||||
json = {'game':[]}
|
json = {'game':[]}
|
||||||
for x in chals:
|
for x in chals:
|
||||||
|
tags = [tag.tag for tag in Tags.query.add_columns('tag').filter_by(chal=x[1]).all()]
|
||||||
files = [ str(f.location) for f in Files.query.filter_by(chal=x.id).all() ]
|
files = [ str(f.location) for f in Files.query.filter_by(chal=x.id).all() ]
|
||||||
json['game'].append({'id':x[1], 'name':x[2], 'value':x[3], 'description':x[4], 'category':x[5], 'files':files})
|
json['game'].append({'id':x[1], 'name':x[2], 'value':x[3], 'description':x[4], 'category':x[5], 'files':files, 'tags':tags})
|
||||||
|
|
||||||
db.session.close()
|
db.session.close()
|
||||||
return jsonify(json)
|
return jsonify(json)
|
||||||
|
|||||||
@@ -227,6 +227,10 @@ table{
|
|||||||
border-radius: 0px;
|
border-radius: 0px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.chal-tag {
|
||||||
|
margin: 0 5px 0 5px;
|
||||||
|
}
|
||||||
|
|
||||||
.alert {
|
.alert {
|
||||||
border-radius: 0px;
|
border-radius: 0px;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -45,22 +45,31 @@ function loadchalbyname(chalname) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function updateChalWindow(obj) {
|
function updateChalWindow(obj) {
|
||||||
window.location.hash = obj.name
|
window.location.hash = obj.name;
|
||||||
$('#chal-window').find('.chal-name').text(obj.name)
|
var chal = $('#chal-window');
|
||||||
$('#chal-window').find('.chal-desc').html(marked(obj.description, {'gfm':true, 'breaks':true}))
|
chal.find('.chal-name').text(obj.name);
|
||||||
$('#chal-window').find('.chal-files').empty();
|
chal.find('.chal-desc').html(marked(obj.description, {'gfm':true, 'breaks':true}));
|
||||||
|
chal.find('.chal-files').empty();
|
||||||
for (var i = 0; i < obj.files.length; i++) {
|
for (var i = 0; i < obj.files.length; i++) {
|
||||||
filename = obj.files[i].split('/')
|
filename = obj.files[i].split('/');
|
||||||
filename = filename[filename.length - 1]
|
filename = filename[filename.length - 1];
|
||||||
$('#chal-window').find('.chal-files').append("<div class='col-md-3 file-button-wrapper'><a class='file-button' href='"+obj.files[i]+"'><label class='challenge-wrapper file-wrapper hide-text'>"+filename+"</label></a></div>")
|
$('#chal-window').find('.chal-files').append("<div class='col-md-3 file-button-wrapper'><a class='file-button' href='"+obj.files[i]+"'><label class='challenge-wrapper file-wrapper hide-text'>"+filename+"</label></a></div>")
|
||||||
};
|
}
|
||||||
|
|
||||||
$('#chal-window').find('.chal-value').text(obj.value)
|
var tags = chal.find('.chal-tags');
|
||||||
$('#chal-window').find('.chal-category').text(obj.category)
|
tags.empty();
|
||||||
$('#chal-window').find('#chal-id').val(obj.id)
|
var tag = "<span class='label label-primary chal-tag'>{0}</span>";
|
||||||
|
for (var i = 0; i < obj.tags.length; i++){
|
||||||
|
var data = tag.format(obj.tags[i]);
|
||||||
|
tags.append($(data));
|
||||||
|
}
|
||||||
|
|
||||||
|
chal.find('.chal-value').text(obj.value);
|
||||||
|
chal.find('.chal-category').text(obj.category);
|
||||||
|
chal.find('#chal-id').val(obj.id);
|
||||||
var solves = obj.solves == 1 ? " Solve" : " Solves";
|
var solves = obj.solves == 1 ? " Solve" : " Solves";
|
||||||
$('#chal-window').find('.chal-solves').text(obj.solves + solves)
|
chal.find('.chal-solves').text(obj.solves + solves);
|
||||||
$('#answer').val("")
|
$('#answer').val("");
|
||||||
|
|
||||||
$('pre code').each(function(i, block) {
|
$('pre code').each(function(i, block) {
|
||||||
hljs.highlightBlock(block);
|
hljs.highlightBlock(block);
|
||||||
@@ -168,7 +177,7 @@ function getsolves(id){
|
|||||||
function loadchals() {
|
function loadchals() {
|
||||||
|
|
||||||
$.get("/chals", function (data) {
|
$.get("/chals", function (data) {
|
||||||
categories = [];
|
var categories = [];
|
||||||
challenges = $.parseJSON(JSON.stringify(data));
|
challenges = $.parseJSON(JSON.stringify(data));
|
||||||
|
|
||||||
$('#challenges-board').html("");
|
$('#challenges-board').html("");
|
||||||
@@ -188,8 +197,8 @@ function loadchals() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
for (var i = 0; i <= challenges['game'].length - 1; i++) {
|
for (var i = 0; i <= challenges['game'].length - 1; i++) {
|
||||||
chalinfo = challenges['game'][i];
|
var chalinfo = challenges['game'][i];
|
||||||
challenge = chalinfo.category.replace(/ /g,"-").hashCode();
|
var challenge = chalinfo.category.replace(/ /g,"-").hashCode();
|
||||||
var chalid = chalinfo.name.replace(/ /g,"-").hashCode();
|
var chalid = chalinfo.name.replace(/ /g,"-").hashCode();
|
||||||
var catid = chalinfo.category.replace(/ /g,"-").hashCode();
|
var catid = chalinfo.category.replace(/ /g,"-").hashCode();
|
||||||
var chalwrap = $("<div id='{0}' class='challenge-wrapper col-md-2'></div>".format(chalid));
|
var chalwrap = $("<div id='{0}' class='challenge-wrapper col-md-2'></div>".format(chalid));
|
||||||
|
|||||||
@@ -107,6 +107,7 @@
|
|||||||
<div role="tabpanel" class="tab-pane active" id="challenge">
|
<div role="tabpanel" class="tab-pane active" id="challenge">
|
||||||
<h3 class='chal-name'></h3>
|
<h3 class='chal-name'></h3>
|
||||||
<h4 class="chal-value"></h4>
|
<h4 class="chal-value"></h4>
|
||||||
|
<div class="chal-tags"></div>
|
||||||
<p class="chal-desc"></p>
|
<p class="chal-desc"></p>
|
||||||
<div class="chal-files file-row row">
|
<div class="chal-files file-row row">
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user