Pourquoi donc ? #
Parce que j’étais dans une situation où j’avais une instance CTFd, pas de temps, pas de moyen de changer le thème, et tous les défis étaient entrés dans un ordre aléatoire (donc on pouvait avoir des challs du style : difficile - facile - moyen - difficile sur la même ligne de catégorie).
Puisque dans notre thème (qui une fois de plus ne pouvait pas être changé) les tags n’étaient pas affichés sur l’écran des défis (mais seulement en cliquant sur un défi spécifique), je voulais au moins avoir le plus facile en premier. J’ai cherché en ligne et je n’ai pas trouvé de code utilisable prêt à l’emploi.
TLDR : Comment les trier #
- Définir une échelle de difficulté. La mienne était
- “facile”
- “facile-moyen”
- “moyen”
- “moyen-dur”
- “dur”
- Utiliser le code ci-dessous sans oublier
- De mettre à jour l’échelle de difficulté
- De lire le code que je fournie et vérifier qu’il implémente bien une fonction
compareFn
et rien de malveillant (ne jamais exécuter un code qu’on ne comprend pas).
Explication détaillée : #
Connectez-vous à votre console CTFd et cliquez sur le panneau d’administration. Une fois là, allez dans la section Theme
:
theme settings
(paramètres du thème). Cliquez sur le bouton Build
et entrez le code ci-dessous dans la fonction personnalisée Challenge Order Custom Function
.
int
s, mais j’avais déjà tout le CTF avec ces 5 tags, donc j’ai choisi la voie la plus facile.
function compareFn(a, b) {
//const difficulty_order = ["easy", "easy-medium", "medium", "medium-hard", "hard"]
const difficulty_order = ["TODO"]
if (a.tags && b.tags) {
if (difficulty_order.indexOf(a.tags[0].value) < difficulty_order.indexOf(b.tags[0].value)){
return -1
} else if (difficulty_order.indexOf(a.tags[0].value) > difficulty_order.indexOf(b.tags[0].value)){
return 1
} else {
return 0
}
} else if (!a.tags && b.tags) {
return -1
} else if (a.tags && !b.tags) {
return 1
}
return 0;
}
Ensuite, n’oubliez pas de cliquer sur update
(deux fois 🤡)

Au plaisir de vous voir à la THCon ou au CTF de la THCon