130 lines
6.2 KiB
Markdown
130 lines
6.2 KiB
Markdown
|
---
|
||
|
date: 2019-04-04T15:59:52+02:00
|
||
|
title: challenge.txt
|
||
|
weight: 20
|
||
|
---
|
||
|
|
||
|
+ `challenge.txt` définitions des paramètres de votre challenge (au format [toml](https://github.com/toml-lang/toml/blob/master/versions/en/toml-v0.4.0.md)) :
|
||
|
- `gain = 42` : nombre de points que rapporte cet exercice ;
|
||
|
- `tags = ["Android", "RAT", "ROM"]` : mots-clefs de l'exercice ;
|
||
|
- `[[depend]]` : dépendance à un autre exercice :
|
||
|
* `id = CHID` : identifiant du challenge ;
|
||
|
* `theme = "NomDuTheme"` : (facultatif) nom du thème dans lequel aller chercher l'identifiant (par défaut, on prend le thème courant) ;
|
||
|
- `[[flag]]` : drapeau classique à valider pour résoudre le challenge :
|
||
|
* `id = 42` : (facultatif) identifiant du flag au sein de l'exercice, pour définir des dépendances ;
|
||
|
* `label = "Intitulé"` : (facultatif, par défaut : `Flag`) intitulé du drapeau ;
|
||
|
* `raw = 'MieH2athxuPhai6u'` ou `raw = ['part1', 'part2']` : drapeau exact à trouver ; sous forme de tableau, le participant n'aura pas connaissaance du nombre d'éléments ;
|
||
|
* `validator_regexp = "^(?:sudo +)?(.*)$"` : (facultatif) expression rationnelle dont les groupes capturés serviront comme chaîne à valider (notez que `?:` au début d'un groupe ne le capturera pas) ;
|
||
|
* `ordered = false` : (facultatif, par défaut : `false`) ignore l'ordre dans lequels les éléments du tableau sont passés ;
|
||
|
* `ignorecase = true` : (facultatif, par défaut : `false`) ignore la case de ce drapeau ;
|
||
|
* `help = "Indication"` : (facultatif) chaîne de caractères placée sous le champ du formulaire, idéale pour donner une indication de format ;
|
||
|
* `[[flag.unlock_file]]` : bloque l'accès à un fichier tant que le flag n'est pas obtenu :
|
||
|
+ `filename = "toto.txt"` : nom du fichier tel qu'il apparaît dans le dossier `files` ;
|
||
|
* `[[flag.need_flag]]` : liste des flags devant être validés avant de débloquer celui-ci :
|
||
|
+ `id = 23` : identifiant du flag tel qu'il a été défini plus tôt dans le fichier ;
|
||
|
- `[[flag_mcq]]` : drapeau sous forme de question à choix multiple (cases à cocher) :
|
||
|
* `label = "Intitulé du groupe"` : (facultatif) intitulé du groupe de choix ;
|
||
|
* `[[flag_mcq.choice]]` : représente un choix, répétez autant de fois qu'il y a de choix :
|
||
|
+ `label = "Intitulé de la réponse"`,
|
||
|
+ `value = true` : (facultatif, par défaut `false`) valeur attendue pour ce choix ; pour un QCM justifié, utilisez une chaîne de caractères (notez qu'il n'est pas possible de combiner des réponses vraies justifiées et justifiées),
|
||
|
+ `help = "Flag correspondant"` : (facultatif) indication affichée dans le champ de texte des QCM justifiés ;
|
||
|
- `[[flag_ucq]]` : drapeau sous forme de question à choix unique :
|
||
|
* `id = 42` : (facultatif) identifiant du flag au sein de l'exercice, pour définir des dépendances ;
|
||
|
* `label = "Intitulé du groupe"` : (facultatif) intitulé du groupe de choix ;
|
||
|
* `raw = 'MieH2athxuPhai6u'` : drapeau attendu parmi les propositions ;
|
||
|
* `validator_regexp = "^(?:sudo +)?(.*)$"` : (facultatif) expression rationnelle dont les groupes capturés serviront comme chaîne à valider (notez que `?:` au début d'un groupe ne le capturera pas) ;
|
||
|
* `help = "Indication"` : (facultatif, uniquement si `displayAs = select`) chaîne de caractères placée sous le champ du formulaire ;
|
||
|
* `displayAs = "select|radio"` : (facultatif, par défaut `radio`) manière dont est affichée le choix : `select` pour une liste de choix, `radio` pour des boutons radios ;
|
||
|
* `choices_cost = 20` : (facultatif, par défaut `0`) coût pour afficher les choix, avant l'affichage, se comporte comme un `flag` classique (à 0, les choix sont affichés directement) ;
|
||
|
* `[[flag_ucq.choice]]` : représente un choix, répétez autant de fois qu'il y a de choix :
|
||
|
+ `value = "response"` : valeur qui sera retournée pour comparaison avec la valeur `raw` du ucq,
|
||
|
+ `label = "Intitulé de la réponse"` : (facultatif, par défaut identique à `value`) ;
|
||
|
* `[[flag_ucq.unlock_file]]` : bloque l'accès à un fichier tant que le flag n'est pas obtenu :
|
||
|
+ `filename = "toto.txt"` : nom du fichier tel qu'il apparaît dans le dossier `files` ;
|
||
|
* `[[flag_ucq.need_flag]]` : liste des flags devant être validés avant de débloquer celui-ci :
|
||
|
+ `id = 23` : identifiant du flag tel qu'il a été défini plus tôt dans le fichier ;
|
||
|
- `[[hint]]` : paramètres pour un indice :
|
||
|
* `filename = "toto.txt"` : (mutuellement exclusif avec `content`) nom du fichier tel qu'il apparaît dans le dossier `hints` ;
|
||
|
* `content = "Contenu de l'indice"` : (mutuellement exclusif avec `filename`) contenu de l'indice affiché, en markdown ;
|
||
|
* `cost = 10` : (facultatif, par défaut 1/4 des gains du challenge) coût de l'indice ;
|
||
|
* `title = "Foo Bar"` : (facultatif, par défaut "Astuce $id") titre de l'astuce dans l'interface ;
|
||
|
|
||
|
Voir aussi [la section sur les flags]({{< relref "/responses" >}}).
|
||
|
|
||
|
## Exemple
|
||
|
|
||
|
```
|
||
|
gain = 42
|
||
|
|
||
|
[[depend]]
|
||
|
id = 2
|
||
|
|
||
|
[[flag]]
|
||
|
label = "Date d'exfiltration"
|
||
|
help= "Format : yyyy-mm"
|
||
|
raw = '2015-12'
|
||
|
|
||
|
[[flag]]
|
||
|
label = "IPv6 d'exfiltration"
|
||
|
raw = 'fe80::319c:1002:7c60:68fa'
|
||
|
ignorecase = true
|
||
|
|
||
|
[[flag_ucq]]
|
||
|
label = "Conditions générales de validation de challenge"
|
||
|
raw = 'conscent'
|
||
|
|
||
|
[[flag_ucq.choice]]
|
||
|
label = "J'accepte les conditions"
|
||
|
value = 'conscent'
|
||
|
|
||
|
[[flag_ucq]]
|
||
|
label = "Quelle est la couleur du cheval blanc d'Henri IV ?"
|
||
|
raw = 'blanc'
|
||
|
ignorecase = true
|
||
|
displayAs = "select"
|
||
|
|
||
|
[[flag_ucq.choice]]
|
||
|
value = 'Noir'
|
||
|
|
||
|
[[flag_ucq.choice]]
|
||
|
label = 'Roux'
|
||
|
value = 'Alezan'
|
||
|
|
||
|
[[flag_ucq.choice]]
|
||
|
label = 'Brun'
|
||
|
value = 'Alezan'
|
||
|
|
||
|
[[flag_ucq.choice]]
|
||
|
label = "Crème"
|
||
|
value = 'Blanc'
|
||
|
|
||
|
[[flag_mcq]]
|
||
|
label = "Quels sont les films réalisés par C. Nolan ?"
|
||
|
|
||
|
[[flag_mcq.choice]]
|
||
|
label = "Memento"
|
||
|
value = true
|
||
|
|
||
|
[[flag_mcq.choice]]
|
||
|
label = "Inception"
|
||
|
value = true
|
||
|
|
||
|
[[flag_mcq.choice]]
|
||
|
label = "Transcendance"
|
||
|
|
||
|
[[hint]]
|
||
|
filename = 'enocean-specs.pdf'
|
||
|
title = "Spécifications du protocole utilisé"
|
||
|
|
||
|
[[hint]]
|
||
|
content = """
|
||
|
Le TOML c'est magique.
|
||
|
Je peux avoir des chaînes de caractères sur plusieurs lignes !
|
||
|
"""
|
||
|
title = "L'astuce du siècle"
|
||
|
cost = 30
|
||
|
```
|
||
|
|
||
|
|
||
|
## Rendu
|