Passer au contenu

Contribuer

~15 min de lecture

Où mettre mon contenu ? Important

Ce tableau indique où déposer chaque type de contenu :

SectionDossierÀ mettre iciÀ ne pas mettre ici
Articles (tutoriels)docs/articles/Tutoriels, billets de blog (ex. ARP poisoning…)Writeups, guides structurés
Articles (certifications)docs/certifications/Préparation et retours d’expérience (OSCP, CPTS, SEC1…)Hors sujet certifs
Articles (cheat sheet)docs/tools/Fiches de référence, prise en main d’outils (Exegol, etc.)Tutoriels longs → Parcours & guides
Writeupsdocs/writeup/ (sous-dossiers par plateforme)Solutions de machines/challenges (HTB, VulnLab, TryHackMe, GOAD…)Articles généraux, guides
Événementsdocs/events/Talks, replays, pages CTF, annonces d’événementsWriteups de machines
Parcours & guidesdocs/cybersecurity/Guides et parcours d’apprentissage (offensive, défensif, CTF…)Writeups, actualités
Ressourcesdocs/misc/Liens utiles : Discord, YouTube, Twitch, recommandationsContenu rédactionnel long → Articles ou guides

En cas de doute, demandez sur Discord ou ouvrez une issue.

À lire avant de contribuer MANDATORY

Voici les points clés à prendre en compte avant de soumettre une Pull Request :

  • Assurez-vous de bien lire et comprendre le Code de Conduite et la Licence du projet.
  • Utilisez le format Markdown (.mdx) pour vos articles.
  • Incluez toujours un frontmatter en haut du fichier avec au moins le champ title.
  • Respectez les conventions de formatage pour le texte (gras, italique, barré, liens, code inline).
  • Utilisez le composant Image d’Astro pour insérer des images, en spécifiant le chemin, le alt, le format et la qualité Comment faire ?
  • Pour le chemin des images, suivez la convention d’arborescence du repo. Voir ici.
  • Testez votre article localement avant de soumettre la PR pour vérifier le rendu, le projet ne doit pas retourner d’erreurs. Comment faire ?
  • Ouvrez une issue ou contactez l’équipe sur Discord si vous avez des questions.
  • Soyez ouvert aux retours et modifications éventuelles sur votre contribution.

N’hésitez pas à consulter les exemples fournis dans la documentation pour vous guider.

Tester le project localement MANDATORY

Le projet utilise pnpm (recommandé) ou npm :

Fenêtre du terminal
git clone https://github.com/Frozenka/hacking-france.git
cd hacking-france
pnpm install
pnpm run dev

Avec npm : npm install puis npm run dev.

Puis, pour vérifier le build (important) :

Fenêtre du terminal
pnpm run build

Avec npm : npm run build.

Formatage des articles Important

Le Frontmatter est obligatoire pour chaque fichier mdx, il est défini en haut des fichiers entre des séparateurs --- :

src/content/docs/exemple.md
---
title: Mon titre de page
---
Le contenu de la page suit le deuxième `---`.

Chaque page doit inclure au moins un title.

Styles Inline

Le texte peut être en gras, italique, ou barré.

Fenêtre du terminal
Le texte peut être en **gras**, _italique_, ou ~~barré~~.

Vous pouvez lier une autre page.

Fenêtre du terminal
Vous pouvez [lier une autre page](https://www.youtube.com/watch?v=dQw4w9WgXcQ).

Vous pouvez mettre en surbrillance du code inline avec des accents graves.

Fenêtre du terminal
Vous pouvez mettre en surbrillance du `code inline` avec des accents graves.

Images

Les images sont incluses avec le composant astro:assets importé via:

Fenêtre du terminal
import { Image } from 'astro:assets';
import test1 from '../../../assets/events/test1.jpg';
[...]
# Image 1
<Image src={test1} alt="Test 1" format="avif" quality={"mid"}/>

Vous pouvez utiliser le format avif pour les images, et définir la qualité de l’image avec quality={"mid"} pour une compression équilibrée.

Test 1

Pour chaque image il est nécessaire de définir un nom pour l’import et le chemin de l’image dans les assets en suivant l’arborescence du repo:

  • Répertoiresrc
    • Répertoireassets
      • Répertoirecybersecurity
        • Répertoiredefensive
          • nom_image.jpg
    • Répertoirecontent
      • Répertoiredocs
        • Répertoirecybersecurity
          • Répertoiredefensive
            • titre_contribution.mdx
  • Répertoirepages/
Fenêtre du terminal
import { FileTree } from '@astrojs/starlight/components';
<FileTree>
- src
- assets
- cybersecurity
- defensive
- nom_image.jpg
- content
- docs
- ...
- cybersecurity
- defensive
- **titre_contribution.mdx**
- pages/
</FileTree>

Par exemple, pour une image dans le dossier defensive dans cybersecurity, le chemin de l’image sera ../../../../assets/cybersecurity/defensive/nom_image.jpg. La structure du dossier assets reprenant l’arborescence du dossier docs.

Titres

Vous pouvez structurer le contenu en utilisant un titre. Les titres en Markdown sont indiqués par un certain nombre de # au début de la ligne.

Comment structurer le contenu des pages

Le titre de la page défini dans le frontmatter sera défini comme titre de premier niveau et inclut un titre “Aperçu” en haut de la table des matières de chaque page. Nous recommandons de commencer chaque page par un texte introductif régulier et d’utiliser des titres <h2> ## et inférieurs pour structurer le contenu ###, ####

Fenêtre du terminal
---
title: Guide Markdown
description: Lorem ipsum dolor sit amet
---
Quisque neque risus, dignissim ut elementum non, bibendum eget lectus.

Liens d’ancrage pour les titres

L’utilisation des titres en Markdown génère automatiquement des liens d’ancrage, vous permettant de créer des liens directs vers certaines sections de votre page.

Fenêtre du terminal
---
title: Ma page de contenu
description: Comment utiliser les liens d'ancrage
---
## Introduction
Je peux créer un lien vers [ma conclusion](#conclusion) plus bas sur la même page.
## Conclusion
`https://mon-site.com/page1/#introduction` navigue directement vers mon Introduction.
Les titres de niveau 2 (`<h2>`) et de niveau 3 (`<h3>`) apparaissent automatiquement dans la table des matières de la page.

Apprenez-en plus sur la manière dont Astro traite les identifiants de titres dans la documentation Astro.

Encadrés

Les encadrés (également appelés “admonitions” ou “callouts”) sont utiles pour afficher des informations secondaires aux côtés du contenu principal d’une page.

Les blocs d’encadré sont indiqués par une paire de triple deux-points ::: pour entourer votre contenu, et peuvent être de type note, tip, caution ou danger.

Vous pouvez imbriquer n’importe quel autre type de contenu Markdown dans un encadré, mais ils sont mieux adaptés aux courts blocs de contenu concis.

Encadré de note

Fenêtre du terminal
:::note
Cras in ante et erat aliquam finibus. Maecenas convallis fermentum arcu eget viverra. Nam et rhoncus nunc :
```go wrap frame="terminal" preserveIndent
package main
import "fmt"
func main() {
fmt.Println("Hello, world!")
}
```
:::

Titres d’encadrés personnalisés

Vous pouvez spécifier un titre personnalisé pour l’encadré entre crochets après le type d’encadré, par exemple :::tip[Le saviez-vous ?].

Fenêtre du terminal
:::tip[Le saviez-vous ?]
Cras in ante et erat aliquam finibus. Maecenas convallis fermentum arcu eget viverra. Nam et rhoncus nunc
:::

Autres types d’encadrés

Les encadrés de type caution et danger sont utiles pour attirer l’attention de l’utilisateur sur des détails importants.

Fenêtre du terminal
:::caution
lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc pellentesque elit leo, vel aliquam odio accumsan ut. In vel maximus neque. Cras vitae odio egestas nisl gravida tempus sit amet ac mi. Sed semper in enim et consequat. Aenean faucibus cursus pulvinar.
:::
:::danger
lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc pellentesque elit leo, vel aliquam odio accumsan ut. In vel maximus neque. Cras vitae odio egestas nisl gravida tempus sit amet ac mi. Sed semper in enim et consequat. Aenean faucibus cursus pulvinar.
- Sed semper in enim
- Aenean faucibus
- odio egestas nisl gravida
:::

Citations

lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc pellentesque elit leo, vel aliquam odio accumsan ut.

Les citations sont indiquées par un > au début de chaque ligne.

Fenêtre du terminal
> lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc pellentesque elit leo, vel aliquam odio accumsan ut.
>
> Les citations sont indiquées par un `>` au début de chaque ligne.

Blocs de code

Un bloc de code est indiqué par un bloc avec trois accents graves ``` au début et à la fin. Vous pouvez indiquer le langage de programmation utilisé après les accents graves d’ouverture.

Fenêtre du terminal
// Code Javascript avec mise en évidence de la syntaxe.
var fun = function lang(l) {
dateformat.i18n = require('./lang/' + l);
return true;
};
Fenêtre du terminal
```js wrap frame="terminal" preserveIndent
// Code Javascript avec mise en évidence de la syntaxe.
var fun = function lang(l) {
dateformat.i18n = require('./lang/' + l);
return true;
};
```

Ci-dessus, sont utilisés des attributs pour customiser l’apparence ansi que les fonctionnalités du bloc. Quand un ou plusieurs attributs sont ajoutés (comme wrap, preserveIndent ou frame par exemple), il est nécessaire d’importer le module code:

import { Code } from '@astrojs/starlight/components';

Mais également donner un titre au bloc de code:

Mon code
var fun = function lang(l) {
dateformat.i18n = require('./lang/' + l);
return true;
};
Fenêtre du terminal
```js title="Mon code" wrap frame="terminal" preserveIndent
var fun = function lang(l) {
dateformat.i18n = require('./lang/' + l);
return true;
};
```

Fonctionnalité diff:

Fenêtre du terminal
var fun = function lang(l) {
dateformat.i18n = require('./lang/' + 4);
dateformat.i18n = require('./lang/' + l);
return true;
};
Fenêtre du terminal
```diff wrap frame="terminal" preserveIndent
var fun = function lang(l) {
- dateformat.i18n = require('./lang/' + 4);
+ dateformat.i18n = require('./lang/' + l);
return true;
};
```

Numéros de lignes:

Fenêtre du terminal
// This code block will show line numbers
console.log('Greetings from line 2!')
console.log('I am on line 3')
Fenêtre du terminal
```js showLineNumbers wrap frame="terminal"
// This code block will show line numbers
console.log('Greetings from line 2!')
```

Line Highlighting:

Fenêtre du terminal
// Line 1 - targeted by line number
// Line 2
// Line 3
// Line 4 - targeted by line number
// Line 5
// Line 6
// Line 7 - targeted by range "7-8"
// Line 8 - targeted by range "7-8"
Fenêtre du terminal
```js {1, 4, 7-8} wrap frame="terminal"
// Line 1 - targeted by line number
// Line 2
// Line 3
// Line 4 - targeted by line number
// Line 5
// Line 6
// Line 7 - targeted by range "7-8"
// Line 8 - targeted by range "7-8"
```

Ajout de titres de sections de sections dans le code:

labeled-line-markers.jsx
<button
role="button"
{...props}
value={value}
className={buttonClassName}
disabled={disabled}
active={active}
>
{children &&
!active &&
(typeof children === 'string' ? <span>{children}</span> : children)}
</button>
Fenêtre du terminal
```jsx {"1. Provide the value prop here:":5-6} del={"2. Remove the disabled and active states:":8-10} ins={"3. Add this to render the children inside the button:":12-15} wrap frame="terminal" preserveIndent
// labeled-line-markers.jsx
<button
role="button"
{...props}
value={value}
className={buttonClassName}
disabled={disabled}
active={active}
>
{children &&
!active &&
(typeof children === 'string' ? <span>{children}</span> : children)}
</button>
```

La documentation de toutes les modifications supportées est disponible ici: https://expressive-code.com/key-features/syntax-highlighting/

Les étapes

Les étapes sont utiles pour guider l’utilisateur à travers un processus en plusieurs étapes. Chaque étape est indiquée par un numéro et un titre:

Fenêtre du terminal
import { Steps } from '@astrojs/starlight/components';
<Steps>
1. Importer le composant dans votre fichier MDX:
```js
import { Steps } from '@astrojs/starlight/components';
```
2. Wrap `<Steps>` around your ordered list items.
</Steps>
  1. Importer le composant dans votre fichier MDX:

    Fenêtre du terminal
    import { Steps } from '@astrojs/starlight/components';
  2. Entourez vos éléments de liste ordonnée avec <Steps>

Ce titre est suivi d’un badge TEXTE

Fenêtre du terminal
## Ce titre est suivi d'un badge :badge[TEXTE]

Ce titre est suivi d’un badge custom TEXTE

Fenêtre du terminal
## Ce titre est suivi d'un badge custom :badge[TEXTE]{variant=success}

Youtube,Twitch,Discord

Pour la modification des pages YouTube Twitch et Discord, rien de plus simple :
il vous suffit d’éditer les fichiers texte correspondants : src/assets/misc/liste_youtube.txt ou liste_twitch.txt ou liste_discord.txt Cela ajoutera automatiquement toutes les informations sur la page.