Prepare 2023
continuous-integration/drone/push Build is passing Details

This commit is contained in:
nemunaire 2022-01-21 14:43:56 +01:00
parent e931576653
commit d224d8118e
8 changed files with 74 additions and 113 deletions

View File

@ -10,17 +10,17 @@ doivent respecter une certaine arborescence que voici :
```
.
├── AUTHORS.txt
├── overview.txt
├── overview.md
├── title.txt
├── heading.jpg
├── CHID-Titre du défi/
├── CHID-Titre de l'étape/
│ ├── challenge.txt
│ ├── finished.txt (opt.)
│ ├── finished.md (opt.)
│ ├── links.txt
│ ├── overview.txt
│ ├── resolution.txt (choice)
│ ├── overview.md
│ ├── resolution.md (choice)
│ ├── resolution.mp4 (choice)
│ ├── statement.txt
│ ├── statement.md
│ ├── hints/ (opt.)
│ │ ├── DIGESTS.txt
│ │ └── ...
@ -30,19 +30,16 @@ doivent respecter une certaine arborescence que voici :
│ └── ressources/
│ └── ...
├── CHID-Titre du défi/
├── CHID-Titre de l'étape/
│ └── ...
└── ...
```
{{% notice info %}}
N'ajoutez pas inutilement de dossiers ou fichiers vides. Ceux-ci doivent sans
doute être optionnels.
N'ajoutez pas inutilement de dossiers ou fichiers vides. Ceux-ci doivent sans doute être optionnels.
{{% /notice %}}
Utilisez le binaire [repochecker](https://srs.nemunai.re/repochecker)
(amd64/linux) pour vous assurer de votre arbrescence et de la validité du
contenu des fichiers :
Utilisez le binaire [repochecker](https://srs.nemunai.re/repochecker) (amd64/linux) pour vous assurer de votre arbrescence et de la validité du contenu des fichiers :
cd /mnt/fic/MyTheme
repochecker .
@ -52,8 +49,9 @@ contenu des fichiers :
### `CHID`
Dans les noms de dossiers, `CHID` correspond à un identifiant permettant de référencer votre défi (pour déclarer une dépendance sur celui-ci par exemple).
L'import s'effectuant selon l'ordre alphabétique, vous devriez utiliser le numéro d'ordre de l'exercice comme identifiant :
Dans les noms de dossiers, `CHID` correspond à un identifiant permettant de référencer votre étape (pour déclarer une dépendance sur celui-ci par exemple).
L'import s'effectuant selon l'ordre alphabétique, vous devriez utiliser le numéro d'ordre de l'étape comme identifiant :
```
.
@ -65,7 +63,7 @@ L'import s'effectuant selon l'ordre alphabétique, vous devriez utiliser le num
```
Dans cet exemple, si l'ordre était déterminé uniquement par l'ordre alphabétique des noms de dossiers, le **d**euxième serait devant le **p**remier (`d<p`).
Ajouter le numéro d'ordre permet de contrôler plus facilement l'ordre des exercices, sans que cela soit affiché dans l'interface.
Ajouter le numéro d'ordre permet de contrôler plus facilement l'ordre des étapes, sans que cela soit affiché dans l'interface.
## Fichiers pour un scénario
@ -84,45 +82,39 @@ Par défaut, sans ce fichier, c'est le nom du dossier contenant les challenges q
### `heading.jpg`
Chaque scénario devrait avoir une image/photo représentative. Je vous invite
donc à trouver votre bonheur sur : [Unsplash](https://unsplash.com/) ou à
partager un travail personnel. Mais attention aux licences et contraintes
(notamment l'obligation de citer la source ou le photographe) si vous utilisez
un autre service qu'unsplash.
Il s'agit d'une image/photo représentative de votre scénario. Elle est affichée sur la page d'accueil dans une boîte montrant votre scénario parmis les autres ; et elle est aussi affichée dans le fond de la page lorsque l'on consulte les pages de votre scénario.
La taille et l'orientation de l'image n'a pas d'importance, mais gardez en tête
que c'est son centre qui sera affiché, si la hauteur dépasse la taille prévue.
{{% notice info %}}
Attention aux licences et contraintes (notamment l'obligation de citer la source ou le photographe). Celles-ci ne sont pas optionnelles étant donné que l'on veut diffuser nos challenges au public.
Vous devriez utiliser [Unsplash](https://unsplash.com/) ou partager un travail personnel.
{{% /notice %}}
La taille et l'orientation de l'image n'a pas d'importance, mais gardez en tête que c'est son centre qui sera affiché, si la hauteur dépasse la taille prévue.
![Rendu heading.jpg](scenario_heading.png)
### `overview.txt`
### `overview.txt` // `overview.md`
Une présentation rapide du scenario (~2-3 phrases d'accroche pour lecture
rapide), compréhensible par un décideur, petit schéma à l'appui.
Une présentation rapide du scenario (~2-3 phrases d'accroche pour lecture rapide), compréhensible par un décideur, petit schéma à l'appui.
Le fichier **doit** comporter une phrase d'accroche (qui sera affichée plus
grosse que les suivantes). Celle-ci correspond à la première ligne de votre
fichier.
Le fichier **doit** comporter une phrase d'accroche (qui sera affichée plus grosse que les suivantes). Celle-ci correspond à la première ligne de votre fichier.
Comme l'ensemble des textes importés, vous pouvez utiliser du
[Markdown](https://daringfireball.net/projects/markdown/) pour mettre en forme
vos textes.
Comme l'ensemble des textes importés, vous pouvez utiliser du [Markdown](https://commonmark.org/) pour mettre en forme vos textes.
Vous pouvez insérer des images dans tous les textes :
![alt](path title)
Le chemin *doit* être un chemin _absolu_ vers l'image, considérant la racine
comme étant le dossier du scénario (pour l'overview du thème) ou de l'exercice
(pour les autres textes).
Le chemin *doit* être un chemin _absolu_ vers l'image, considérant la racine comme étant le dossier du scénario (pour l'overview du thème) ou de l'exercice (pour les autres textes).
![Rendu overview.txt](scenario_overview_public.png)
![Rendu overview.txt](scenario_headline.png)
## Fichiers pour un défi
## Fichiers pour une étape de scénario
### `challenge.txt`
@ -131,12 +123,9 @@ Voir la [page dédiée]({{<relref "challenge">}}).
### `finished.txt`
Remplissez ce fichier optionnel, lorsque vous souhaitez apporter une
information aux participants une fois qu'ils ont validé votre défi.
Remplissez ce fichier optionnel, lorsque vous souhaitez apporter une information aux participants une fois qu'ils ont validé cette étape.
Comme l'ensemble des textes importés, vous pouvez utiliser du
[Markdown](https://daringfireball.net/projects/markdown/) pour mettre en forme
vos textes.
Comme l'ensemble des textes importés, vous pouvez utiliser du [Markdown](https://commonmark.org/) pour mettre en forme vos textes.
![Rendu finished.txt](exercice_finished.png)
@ -146,22 +135,15 @@ vos textes.
Voir la [page dédiée]({{<relref "links">}}).
### `overview.txt`
### `overview.md`
Une présentation rapide du défi (~1-2 phrases), compréhensible par un décideur,
petit schéma à l'appui si besoin.
Une présentation rapide de l'étape (~1-2 phrases), compréhensible par un décideur, petit schéma à l'appui si besoin.
Le fichier **doit** comporter une phrase d'accroche (qui sera affichée plus
grosse que les suivantes). Celle-ci correspond à la première ligne de votre
fichier.
Le fichier **doit** comporter une phrase d'accroche (qui sera affichée plus grosse que les suivantes). Celle-ci correspond à la première ligne de votre fichier.
Comme l'ensemble des textes importés, vous pouvez utiliser du
[Markdown](https://daringfireball.net/projects/markdown/) pour mettre en forme
vos textes.
Comme l'ensemble des textes importés, vous pouvez utiliser du [Markdown](https://commonmark.org/) pour mettre en forme vos textes.
Gardez en tête que les *overview*, que ce soit scénario ou exercices, sont
affichées au public : il s'agit à la fois d'aguicher le participant pour qu'il
fasse votre scénario plutôt que celui d'un autre groupe, mais aussi de donner
Gardez en tête que les *overview*, que ce soit scénario ou étapes, sont affichées au public : il s'agit à la fois d'aguicher le participant pour qu'il fasse votre scénario plutôt que celui d'un autre groupe, mais aussi de donner
envie au public de lire plus en détail.
![Rendu overview.txt](exercice_overview_public.png)
@ -169,36 +151,28 @@ envie au public de lire plus en détail.
![Rendu overview.txt](exercice_headline.png)
### `resolution.mp4`/`resolution.txt`
### `resolution.mp4`/`resolution.md`
Afin que les participants et les organisateurs puissent avoir un aperçu de la
méthode de résolution attendu de votre défi, vous devez rédiger un article ou
réaliser une vidéo dans lequel vous décrivez ou montrer chaque étape permettant
Afin que les participants et les organisateurs puissent avoir un aperçu de la méthode de résolution attendu de votre étape, vous devez rédiger un article ou réaliser une vidéo dans lequel vous décrivez ou montrer chaque étape permettant
de conduire aux différents *flags*.
Voir la page dédiée [aux vidéos]({{<relref "resolution">}}) ou [aux
*write-ups*]({{<relref "write-up">}}).
Voir la page dédiée [aux vidéos]({{<relref "resolution">}}) ou [aux *write-ups*]({{<relref "write-up">}}).
### `statement.txt`
### `statement.md`
L'énoncé du défi, tel qu'il sera affiché sur le site, à destination des participants.
L'énoncé de l'étape, tel qu'il sera affiché sur le site, à destination des participants.
Le fichier **doit** comporter une phrase d'accroche (qui sera affichée plus
grosse que les suivantes). Celle-ci correspond à la première ligne de votre
fichier.
Le fichier **doit** comporter une phrase d'accroche (qui sera affichée plus grosse que les suivantes). Celle-ci correspond à la première ligne de votre fichier.
Comme l'ensemble des textes importés, vous pouvez utiliser du
[Markdown](https://daringfireball.net/projects/markdown/) pour mettre en forme
vos textes.
Comme l'ensemble des textes importés, vous pouvez utiliser du [Markdown](https://commonmark.org/) pour mettre en forme vos textes.
![Rendu statement.txt](exercice_statement.png)
### `files/`
Utilisez ce dossier pour y placer les fichiers que vous mettez à disposition
des participants.
Utilisez ce dossier pour y placer les fichiers que vous mettez à disposition des participants.
{{% notice warning %}}
Les fichiers binaires, avec lesquels on ne peut pas faire de diff, n'ont pas d'intérêt à être présents directement sur le dépôt : cela consomme inutilement de la place et rend le clonage du dépôt inutilement longue. Vous **devez** utiliser [git-lfs](https://docs.gitlab.com/ee/topics/git/lfs/) sur le GitLab du CRI pour tous les fichiers binaires contenus dans ce dossier.
@ -208,7 +182,7 @@ Chaque fichier doit avoir une entrée correspondante dans le fichier
`DIGESTS.txt` ; plus d'infos sur [la page `DIGESTS.txt`]({{<relref
"digests">}}).
- Pas plus 4GB à télécharger **par défi** (ie. tous les fichiers de ce défi) : 4GB, c'est jusqu'à 5 minutes de téléchargement, c'est vraiment beaucoup lorsqu'on est impatient de faire le défi.
- Pas plus 4GB à télécharger **par étape** (ie. tous les fichiers de cette étape) : 4GB, c'est jusqu'à 5 minutes de téléchargement, c'est vraiment beaucoup lorsqu'on est impatient de faire l'étape.
- Archives `.tar.bz2`, `.tar.gz`, `.tar.xz` ou `.zip` lorsque nécessaire. **PAS** de `.rar`, ...
@ -241,7 +215,8 @@ titre, ...
### `ressources/`
Rangez dans ce dossier toutes les ressources et scripts que vous avez réalisés
pour le défi : pour sa construction ou sa résolution, les schémas du SI au
premier défi concerné, éventuellement un `README.txt` avec les liens des
outils externes.
Rangez dans ce dossier toutes les ressources et scripts que vous avez réalisés l'étape : pour sa construction ou sa résolution, les schémas du SI au premier étape concerné.
Ajoutez éventuellement un `README.txt` avec les liens des outils externes.
Ce dossier n'a pas pour vocation a être diffusé publiquement.

View File

@ -4,15 +4,11 @@ title: AUTHORS.txt
weight: 10
---
Le fichier `AUTHORS.txt`, à la racine de chaque thème, contient vos noms, tels
qu'ils apparraîtront sur la plate-forme.
Le fichier `AUTHORS.txt`, à la racine de chaque dossier de scénario, contient vos noms, tels qu'ils apparraîtront sur la plate-forme.
## Format du fichier
Chaque ligne contient le nom qui apparaîtra sur le site, suivi, éventuellement
d'un [lien hypertexte complet](https://tools.ietf.org/html/rfc2396), placé
entre chevrons. Ce lien peut être, par exemple, l'adresse du blog de l'auteur
correspondant ou son adresse électronique.
Chaque ligne contient le nom qui apparaîtra sur le site, suivi, éventuellement d'un [lien hypertexte complet](https://tools.ietf.org/html/rfc2396), placé entre chevrons. Ce lien peut être, par exemple, l'adresse du blog de l'auteur correspondant ou son adresse électronique.
### Exemple

View File

@ -4,20 +4,20 @@ title: challenge.txt
weight: 20
---
Le fichier `challenge.txt` définit les paramètres de votre défi (au format [toml](https://github.com/toml-lang/toml/blob/master/versions/en/toml-v0.4.0.md)) :
Le fichier `challenge.txt` définit les paramètres de votre étape (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 ce défi ;
- `tags = ["Android", "RAT", "ROM"]` : mots-clefs du défi ;
- `[[depend]]` : dépendance à un autre défi :
* `id = CHID` : identifiant du défi ;
* `theme = "NomDuTheme"` : (facultatif) nom du scénario/thème dans lequel aller chercher l'identifiant (par défaut, on prend le thème courant) ;
- `[[flag]]` : chaîne de validation pour résoudre le défi :
- `gain = 42` : nombre de points que rapporte cette étape ;
- `tags = ["Android", "RAT", "ROM"]` : mots-clefs de l'étape ;
- `[[depend]]` : dépendance à une autre étape :
* `id = CHID` : identifiant de l'étape dont on dépend ;
* `theme = "NomDuTheme"` : (facultatif) nom du scénario/thème dans lequel aller chercher l'identifiant (par défaut, on prend le scénario courant) ;
- `[[flag]]` : chaîne de validation pour résoudre l'étape :
* `type = "key"` : (facultatif, par défaut "key") type de flag :
+ `key` : [drapeau classique]({{< relref "/responses/simple.md" >}}),
+ `vector` : [liste de drapeaux]({{< relref "/responses/vector.md" >}}),
+ `mcq` : [question à choix multiple]({{< relref "/responses/mcq.md" >}}) (cases à cocher) avec ou sans [justification]({{< relref "/responses/mcq_justified.md" >}}),
+ `ucq` : [liste de choix]({{< relref "/responses/ucq.md" >}}) ;
* `id = 42` : (facultatif) identifiant du flag au sein du défi, pour définir des dépendances ;
* `id = 42` : (facultatif) identifiant du flag au sein de l'étape, pour définir des dépendances ;
* `label = "Intitulé"` : (facultatif, par défaut : `Flag`) intitulé du drapeau ;
* `raw = 'MieH2athxuPhai6u'` ou `raw = ['part1', 'part2']` : drapeau(x) exact(s) à trouver ; sous forme de tableau, le participant n'aura pas connaissaance du nombre d'éléments (à moins de définir l'attribut `showlines`) ;
* `showlines = false` : (facultatif, par défaut : `false`) lorsque le drapeau est un tableau et que `showlines` est vrai, le nombre d'éléments du tableau sera donné au participant, sinon il devra déterminer lui-même le nombre d'éléments à trouver (pour l'instant cette option est limitée à un tableau de 9 éléments maximum, c'est normal si ça bug au delà, demandez-moi si vous avez besoin de plus) ;
@ -41,7 +41,7 @@ Le fichier `challenge.txt` définit les paramètres de votre défi (au format [t
- `[[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 défi) coût de l'indice ;
* `cost = 10` : (facultatif, par défaut 1/4 des gains de l'étape) coût de l'indice ;
* `title = "Foo Bar"` : (facultatif, par défaut "Astuce $id") titre de l'astuce dans l'interface ;
* `[[hint.need_flag]]` : liste des flags devant être validés pour débloquer cet indice :
+ `id = 23` : identifiant du flag ;

View File

@ -4,9 +4,7 @@ title: DIGESTS.txt
weight: 15
---
Le fichier `DIGESTS.txt` se trouve dans le répertoire `files/` ou `hints/` d'un
défi. Il contient les condensats des fichiers se trouvant dans le dossier
respectif.
Le fichier `DIGESTS.txt` se trouve dans le répertoire `files/` ou `hints/` de chaque étape. Il contient les condensats des fichiers se trouvant dans le dossier respectif.
On le génére avec la commande suivante :
@ -21,27 +19,23 @@ l'arborescence n'a pas été altérée et que les fichiers servis sont bien les
mêmes que sur vos dépôts Git.
{{% /notice %}}
La commande `b2sum` fait partie des *GNU Core Utilities* depuis la [version
8.26](https://github.com/coreutils/coreutils/commit/ea94589e9ef02624a3837f97f80efd7d3dcf56bf).
La commande `b2sum` fait partie des *GNU Core Utilities* depuis la [version 8.26](https://github.com/coreutils/coreutils/commit/ea94589e9ef02624a3837f97f80efd7d3dcf56bf).
L'algorithme [blake2b](https://blake2.net/) est utilisé à la place d'un SHA-1
ou MD5 car il est plus rapide que ces derniers et est encore considéré comme
sûr.
{{% notice info %}}
L'algorithme [blake2b](https://blake2.net/) est utilisé à la place d'un SHA-1 ou MD5 car il est plus rapide que ces derniers et est encore considéré comme sûr.
{{% /notice %}}
## Cas des fichiers en plusieurs parties
Dans le cas où vous êtes contraint de découper vos fichiers avant de les
uploader, seule la somme de contrôle du fichier entier, avant découpage, est
nécessaire.
Dans le cas où vous êtes contraint de découper vos fichiers avant de les uploader, seule la somme de contrôle du fichier entier, avant découpage, est nécessaire.
## Cas des fichiers compressés (`gzip`és)
Si vous avez `gzip`é votre fichier pour qu'il soit distribué décompressé,
indiquez dans votre `DIGESTS.txt` à la fois :
Si vous avez `gzip`é votre fichier pour qu'il soit distribué décompressé, indiquez dans votre `DIGESTS.txt` à la fois :
* **le condensat du fichier compressé :** il sera utilisé par la plateforme lors de l'import de vos défis afin de s'assurer que les fichiers n'ont pas été altéré durant l'un des multiples transferts,
* **le condensat du fichier compressé :** il sera utilisé par la plateforme lors de l'import de vos étapes afin de s'assurer que les fichiers n'ont pas été altéré durant l'un des multiples transferts,
* **le condensat du fichier initial, décompressé :** c'est celui qui sera affiché dans l'interface, aux participants.

View File

@ -4,7 +4,7 @@ title: resolution.mp4
weight: 35
---
Ce fichier doit contenir la vidéo permettant la résolution du défi et suivant
Ce fichier doit contenir la vidéo permettant la résolution de l'étape et suivant
étape par étape les étapes expliquées. Si vous pensez qu'un article est plus
approprié, vous pouvez remplacer ce fichier par [`resolution.txt`]({{<relref
"write-up">}})

View File

@ -5,7 +5,7 @@ weight: 34
---
Ce fichier doit contenir les explications détaillées permettant la résolution
du défi. Si vous pensez qu'une vidéo est plus appropriée, vous pouvez remplacer
de l'étape. Si vous pensez qu'une vidéo est plus appropriée, vous pouvez remplacer
ce fichier par [`resolution.mp4`]({{<relref "resolution">}})
Votre article doit respecter les caractéristiques suivantes :
@ -34,7 +34,7 @@ Vous pouvez insérer des images comme ceci :
![alt](path)
Vous *pouvez* mettre vos images dans un sous-dossier `resolution/` pour ne pas
encombrer le dossier du défi.
encombrer le dossier de l'étape.
## Rendu

View File

@ -4,14 +4,10 @@ title: Flags
weight: 15
---
Les *flags* sont les éléments que les participants doivent retrouver pour passer au défi suivant.
Les *flags* sont les éléments que les participants doivent retrouver pour passer à l'étape suivante.
Choisissez-les en faisant en sorte qu'il ne puisse pas y avoir d'ambiguïté, tout en empêchant l'anti-jeu, tel que le brute-force, ...
De nombreux type de flag sont à votre disposition :
* [simple]({{< relref "/responses/simple.md" >}}) ;
* [liste de flags]({{< relref "/responses/vector.md" >}}) ;
* [QCM]({{< relref "/responses/mcq.md" >}}) ;
* [QCM avec justification]({{< relref "/responses/mcq_justified.md" >}}) ;
* [liste de choix]({{< relref "/responses/ucq.md" >}}).
{{% children %}}

View File

@ -116,7 +116,7 @@ non-capturant (`?:`), ce qui ne révèle pas d'information.
## Propriétés
id
: (facultatif) identifiant du flag au sein de l'exercice, pour définir des dépendances ;
: (facultatif) identifiant du flag au sein de l'étape, pour définir des dépendances ;
label
: (facultatif, par défaut : `Flag`) intitulé du drapeau ;
@ -140,7 +140,7 @@ unit
: (facultatif) chaîne de caractères ajoutée à la fin du champ pour indiquer une information complétant le flag, par exemple l'unité de mesure attendue ;
help
: (facultatif, rarement utilisé) chaîne de caractères placée sous le champ du formulaire, idéale pour donner un détail supplémentaire.
: (facultatif, rarement utilisé) chaîne de caractères placée sous le champ du formulaire, idéale pour donner un détail supplémentaire. Cette propriété peut contenir du [Markdown](https://commonmark.org/).
## Rendu