diff --git a/labs/3/lab3.md b/labs/3/lab3_doctrine.md similarity index 99% rename from labs/3/lab3.md rename to labs/3/lab3_doctrine.md index cc0b32b..f3e56e5 100644 --- a/labs/3/lab3.md +++ b/labs/3/lab3_doctrine.md @@ -1,4 +1,4 @@ -# TP3: Base de données avec Doctrine +# TP3.1: Base de données avec Doctrine > This work is licensed under a [Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License](https://creativecommons.org/licenses/by-nc-sa/4.0/). > Permission is explicitly granted to copy, distribute and/or modify this document for educational purposes under the terms of the CC BY-NC-SA license. diff --git a/labs/3/lab3_twig.md b/labs/3/lab3_twig.md new file mode 100644 index 0000000..1ce0022 --- /dev/null +++ b/labs/3/lab3_twig.md @@ -0,0 +1,88 @@ +# TP3.2: Templating avec Twig + +> This work is licensed under a [Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License](https://creativecommons.org/licenses/by-nc-sa/4.0/). +> Permission is explicitly granted to copy, distribute and/or modify this document for educational purposes under the terms of the CC BY-NC-SA license. + +## Objectifs + +Les objectifs de ce TP sont : + +- Comprendre et mettre en œuvre les opérations CRUD (Create, Read, Update, + Delete) avec Twig dans une application Symfony. +- S'approprier les structures de contrôle de Twig (`if`/`for`/etc). +- Comprendre les méchanismes d'héritage et d'extension de templates. + +## Consignes + +- Durée : 2 heures +- Tous vos projets `Symfony` sont à placer votre dossier `~/public_html`. +- Utilisez le serveur `londres.uca.local` pour tester vos pages et non la + commande `symfony server:start`. +- Nous allons continuer notre réseau social nommé `TweetTok` où les messages + sont nommés des `Twok`. +- Lors du précédent TP, nous avons stocké les `Twoks` en BDD, mais avec un CRUD + très rudimentaire. +- Nous allons maintenant améliorer les vues avec Twig. +- Repartez donc de votre précédent projet `TweetTok`. +- **Attention! L'utilisation des commandes `symfony + console make:crud` et `symfony console make:form` sont interdites pour le + moment ! L'objectif est de comprendre ce qu'elles font.** + +## Ressources + +- Documentation de Symfony sur Twig : + [https://symfony.com/doc/5.x/templates.html](https://symfony.com/doc/5.x/templates.html) +- Documentation de Twig : + [https://twig.symfony.com/doc/2.x/templates.html](https://twig.symfony.com/doc/2.x/templates.html) + +## Partie 1 : Affichage des Twoks (30 min) + +1. **Template de base :** + - Créez un fichier `base.html.twig` qui contient les balises `` et + `` de votre page web. + - Créez un block `body` vide qui sera rempli par les autres templates. + +2. **Liste des Twoks :** + - Créez un template `index.html.twig` pour afficher la liste des `Twoks`. + Utilisez une boucle `for` pour itérer sur chaque `Twok`. Affichez le contenu + du `Twok`, son auteur et sa date de création formatée. + - Faites en sorte que le votre template `index.html.twig` étende le template + `base.html.twig` pour ne pas avoir à dupliquer de code HTML. + +3. **Filtres personnalisés :** + - Créez un filtre Twig personnalisé pour résumer les `Twoks` qui sont trop + longs. Implémentez le filtre dans le fichier `src/Twig/AppExtension.php` + et nommez ce filtre `summarize`. Voir [doc sur les extension + Twig](https://symfony.com/doc/current/templates.html#writing-a-twig-extension). + - Utilisez ce filtre dans votre template pour afficher un résumé des `Twoks`. + ```twig + {{ twok.content|summarize(100) }} + ``` + +## Partie 2 : Interaction avec les Twoks (45 min) + +1. **Affichage conditionnel :** + - Ajoutez un affichage conditionnel pour montrer un message spécial (ex: "Nouveau Twok !") si un + `Twok` a été créé le jour même. + +2. **Inclusion de Templates :** + - Créez un template séparé pour afficher les détails d'un `Twok` + (`twok_detail.html.twig`) et incluez-le dans votre liste de `Twoks`. + +3. **Macros Twig pour les boutons :** + - Définissez une macro Twig pour générer des boutons de like et de partage + pour chaque `Twok`. Utilisez cette macro dans le template de détail du `Twok`. + +## Partie 3 : Fonctionnalités Avancées (45 min) + +1. **Affichage alterné :** + - Expérimentez avec des structures de contrôle avancées en affichant les + `Twoks` en alternance : un `Twok` sur fond clair, l'autre sur fond sombre. + +2. **`Twoks` par utilisateur :** + - Créez un nouveau template `twok_by_user.html.twig` qui permettra de lister + l'ensemble des utilisateurs avec pour chaqun une liste de ses `Twoks`. + +3. **Ordre des `Twoks` :** + - Dans votre template `index.html.twig`, faites en sorte qu'il soit possible + de lister les `Twoks` du plus ancien au plus récent et l'inverse. diff --git a/labs/4/lab4.md b/labs/4/lab4.md index ce7e0be..ff1fc90 100644 --- a/labs/4/lab4.md +++ b/labs/4/lab4.md @@ -1,4 +1,4 @@ -# TP4: Templating avec Twig +# TP5 : API Platform > This work is licensed under a [Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License](https://creativecommons.org/licenses/by-nc-sa/4.0/). > Permission is explicitly granted to copy, distribute and/or modify this document for educational purposes under the terms of the CC BY-NC-SA license. @@ -7,82 +7,101 @@ Les objectifs de ce TP sont : -- Comprendre et mettre en œuvre les opérations CRUD (Create, Read, Update, - Delete) avec Twig dans une application Symfony. -- S'approprier les structures de contrôle de Twig (`if`/`for`/etc). -- Comprendre les méchanismes d'héritage et d'extension de templates. +- Se familiariser avec API Platform. +- Créer une API REST pour des opération de CRUD. +- Comprendre les liens entre API Platform, Symfony et Doctrine ## Consignes - Durée : 2 heures - Tous vos projets `Symfony` sont à placer votre dossier `~/public_html`. -- Utilisez le serveur `londres.uca.local` pour tester vos pages et non la +- N'utilisez PAS le serveur `londres.uca.local` pour tester vos pages mais la commande `symfony server:start`. - Nous allons continuer notre réseau social nommé `TweetTok` où les messages sont nommés des `Twok`. -- Lors du précédent TP, nous avons stocké les `Twoks` en BDD, mais avec un CRUD - très rudimentaire. -- Nous allons maintenant améliorer les vues avec Twig. -- Repartez donc de votre précédent projet `TweetTok`. -- **Attention! L'utilisation des commandes `symfony - console make:crud` et `symfony console make:form` sont interdites pour le - moment ! L'objectif est de comprendre ce qu'elles font.** +- Lors du précédent TP, nous avons réalisé un site permettant des fonctions de CRUD. +- Nous allons maintenant implémenter une API REST pour l'administration. +- Créez un NOUVEAU projet `TweetTokAPI` en parallèle de votre précédent projet `TweetTok`. ## Ressources -- Documentation de Symfony sur Twig : - [https://symfony.com/doc/5.x/templates.html](https://symfony.com/doc/5.x/templates.html) -- Documentation de Twig : - [https://twig.symfony.com/doc/2.x/templates.html](https://twig.symfony.com/doc/2.x/templates.html) - -## Partie 1 : Affichage des Twoks (30 min) - -1. **Template de base :** - - Créez un fichier `base.html.twig` qui contient les balises `` et - `` de votre page web. - - Créez un block `body` vide qui sera rempli par les autres templates. - -2. **Liste des Twoks :** - - Créez un template `index.html.twig` pour afficher la liste des `Twoks`. - Utilisez une boucle `for` pour itérer sur chaque `Twok`. Affichez le contenu - du `Twok`, son auteur et sa date de création formatée. - - Faites en sorte que le votre template `index.html.twig` étende le template - `base.html.twig` pour ne pas avoir à dupliquer de code HTML. - -3. **Filtres personnalisés :** - - Créez un filtre Twig personnalisé pour résumer les `Twoks` qui sont trop - longs. Implémentez le filtre dans le fichier `src/Twig/AppExtension.php` - et nommez ce filtre `summarize`. Voir [doc sur les extension - Twig](https://symfony.com/doc/current/templates.html#writing-a-twig-extension). - - Utilisez ce filtre dans votre template pour afficher un résumé des `Twoks`. - ```twig - {{ twok.content|summarize(100) }} - ``` - -## Partie 2 : Interaction avec les Twoks (45 min) - -1. **Affichage conditionnel :** - - Ajoutez un affichage conditionnel pour montrer un message spécial (ex: "Nouveau Twok !") si un - `Twok` a été créé le jour même. - -2. **Inclusion de Templates :** - - Créez un template séparé pour afficher les détails d'un `Twok` - (`twok_detail.html.twig`) et incluez-le dans votre liste de `Twoks`. - -3. **Macros Twig pour les boutons :** - - Définissez une macro Twig pour générer des boutons de like et de partage - pour chaque `Twok`. Utilisez cette macro dans le template de détail du `Twok`. - -## Partie 3 : Fonctionnalités Avancées (45 min) - -1. **Affichage alterné :** - - Expérimentez avec des structures de contrôle avancées en affichant les - `Twoks` en alternance : un `Twok` sur fond clair, l'autre sur fond sombre. - -2. **`Twoks` par utilisateur :** - - Créez un nouveau template `twok_by_user.html.twig` qui permettra de lister - l'ensemble des utilisateurs avec pour chaqun une liste de ses `Twoks`. - -3. **Ordre des `Twoks` :** - - Dans votre template `index.html.twig`, faites en sorte qu'il soit possible - de lister les `Twoks` du plus ancien au plus récent et l'inverse. +- Documentation d'API Platform : + [https://api-platform.com/docs/distribution/](https://api-platform.com/docs/distribution/) + +## Partie 1 : Installation de API Platform (15 min) + +1. Installation + +- Installer API Platform via Composer : + ```bash + symfony new TweetTokAPI + cd TweetTokAPI + symfony composer require api + symfony composer require symfony/orm-pack + symfony composer require --dev symfony/maker-bundle + ``` +- Comparez la structure des répertoires du projet API par rapport au projet de + site web `TweetTok`. Quels dossiers sont en plus/moins ? Le projet est-il + plus lourd ou plus léger ? + +2. Configurer la Base de Données : + +- Configurer le projet pour SQLite ou POSTGRE (la même que pour les TPs précédents) : + - Si POSTGRE : + ```bash + DATABASE_URL="postgresql://VotreUser:VotrePass@londres/dbVotreUser" + ``` + - Si SQLite : + ```bash + # fichier .env + DATABASE_URL="sqlite:///%kernel.project_dir%/var/data.db" + ``` + ```bash + # On fait un lien symbolique de la BDD. + # En pratique SQLite est à proscrire pour une archi micro-services. + cd var && ln -s ../../TweetTok/var/data.db . + ``` +- Copiez le dossier `migrations` de votre projet `TweetTok` dans `TweetTokAPI`. +- Créez un lien symbolique des fichiers `TweetTok/src/Entity/Twok.php` et + `TweetTok/src/Repository/TwokRepository.php` dans le nouveau projet + `TweetTokAPI`. +- Effectuer les migrations pour configurer la base de données : + ```bash + symfony console doctrine:database:create + symfony console doctrine:migrations:migrate + ``` + +## Partie 2 : Création de Ressources pour l'API (30 minutes) + +1. Déclarez l'entité `Twok` comme une ressource API et ajoutez des contraintes + sur ses différents champs. + +2. Testez votre API avec la page web (route `/api`) : + - Si vous voyez les messages déjà insérés; + - Si vous pouvez insérer un nouveau message; + - Si vous pouvez modifier/remplacer un message existant; + - Si vous pouvez supprimer un message existant; + +3. Effectuez les mêmes tests avec les commandes cURL fournies : + - Comprenez-vous les options de cURL dans la commande ? + - Comprenez-vous la réponse de cURL ? + +4. Insérez/Supprimez un message directement dans la BDD avec SQLite/POSTGRE : + - Que constatez-vous ? + +## Partie 3 : Génération de Code Client API + +1. Utilisez API Platform pour générer le code d'un client de l'API dans le + framework de votre choix + +2. Validez que vous pouvez interagir avec l'API (lister, créer, supprimer, + modifier, etc). + +## Partie 4 : Pour aller plus loin + +1. Renseignez-vous sur la création d'une classe de validation de contraintes + personnalisée : + [https://symfony.com/doc/5.x/validation/custom_constraint.html](https://symfony.com/doc/5.x/validation/custom_constraint.html). + +2. Implémentez une validation personnalisée pour bloquer des messages contenant + des mots interdits (ex: contenu insultant) diff --git a/labs/5/lab5.md b/labs/5/lab5.md index ff1fc90..41e0156 100644 --- a/labs/5/lab5.md +++ b/labs/5/lab5.md @@ -1,107 +1,113 @@ -# TP5 : API Platform +# TP6 : Renforcer la Sécurité des Applications Symfony > This work is licensed under a [Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License](https://creativecommons.org/licenses/by-nc-sa/4.0/). > Permission is explicitly granted to copy, distribute and/or modify this document for educational purposes under the terms of the CC BY-NC-SA license. -## Objectifs +## Objectifs : Les objectifs de ce TP sont : -- Se familiariser avec API Platform. -- Créer une API REST pour des opération de CRUD. -- Comprendre les liens entre API Platform, Symfony et Doctrine +- Renforcer la sécurité d'un projet Symfony existant en mettant en place des mesures contre les menaces courantes +de sécurité web, telles que : + - le Cross-Site Scripting (XSS), + - le Cross-Site Request Forgery (CSRF), + - en permettant l'inscription sécurisée des utilisateurs, leur connexion et déconnexion, + - et en implémentant l'autorisation des utilisateurs en fonction des rôles. -## Consignes +## Prérequis : -- Durée : 2 heures -- Tous vos projets `Symfony` sont à placer votre dossier `~/public_html`. -- N'utilisez PAS le serveur `londres.uca.local` pour tester vos pages mais la - commande `symfony server:start`. -- Nous allons continuer notre réseau social nommé `TweetTok` où les messages - sont nommés des `Twok`. -- Lors du précédent TP, nous avons réalisé un site permettant des fonctions de CRUD. -- Nous allons maintenant implémenter une API REST pour l'administration. -- Créez un NOUVEAU projet `TweetTokAPI` en parallèle de votre précédent projet `TweetTok`. +- Un projet Symfony fonctionnel (votre projet `TweetTok`, votre projet Symfony, une SAE). ## Ressources -- Documentation d'API Platform : - [https://api-platform.com/docs/distribution/](https://api-platform.com/docs/distribution/) - -## Partie 1 : Installation de API Platform (15 min) - -1. Installation - -- Installer API Platform via Composer : - ```bash - symfony new TweetTokAPI - cd TweetTokAPI - symfony composer require api - symfony composer require symfony/orm-pack - symfony composer require --dev symfony/maker-bundle - ``` -- Comparez la structure des répertoires du projet API par rapport au projet de - site web `TweetTok`. Quels dossiers sont en plus/moins ? Le projet est-il - plus lourd ou plus léger ? - -2. Configurer la Base de Données : - -- Configurer le projet pour SQLite ou POSTGRE (la même que pour les TPs précédents) : - - Si POSTGRE : - ```bash - DATABASE_URL="postgresql://VotreUser:VotrePass@londres/dbVotreUser" - ``` - - Si SQLite : - ```bash - # fichier .env - DATABASE_URL="sqlite:///%kernel.project_dir%/var/data.db" - ``` - ```bash - # On fait un lien symbolique de la BDD. - # En pratique SQLite est à proscrire pour une archi micro-services. - cd var && ln -s ../../TweetTok/var/data.db . - ``` -- Copiez le dossier `migrations` de votre projet `TweetTok` dans `TweetTokAPI`. -- Créez un lien symbolique des fichiers `TweetTok/src/Entity/Twok.php` et - `TweetTok/src/Repository/TwokRepository.php` dans le nouveau projet - `TweetTokAPI`. -- Effectuer les migrations pour configurer la base de données : - ```bash - symfony console doctrine:database:create - symfony console doctrine:migrations:migrate - ``` - -## Partie 2 : Création de Ressources pour l'API (30 minutes) - -1. Déclarez l'entité `Twok` comme une ressource API et ajoutez des contraintes - sur ses différents champs. - -2. Testez votre API avec la page web (route `/api`) : - - Si vous voyez les messages déjà insérés; - - Si vous pouvez insérer un nouveau message; - - Si vous pouvez modifier/remplacer un message existant; - - Si vous pouvez supprimer un message existant; - -3. Effectuez les mêmes tests avec les commandes cURL fournies : - - Comprenez-vous les options de cURL dans la commande ? - - Comprenez-vous la réponse de cURL ? - -4. Insérez/Supprimez un message directement dans la BDD avec SQLite/POSTGRE : - - Que constatez-vous ? - -## Partie 3 : Génération de Code Client API - -1. Utilisez API Platform pour générer le code d'un client de l'API dans le - framework de votre choix - -2. Validez que vous pouvez interagir avec l'API (lister, créer, supprimer, - modifier, etc). - -## Partie 4 : Pour aller plus loin - -1. Renseignez-vous sur la création d'une classe de validation de contraintes - personnalisée : - [https://symfony.com/doc/5.x/validation/custom_constraint.html](https://symfony.com/doc/5.x/validation/custom_constraint.html). - -2. Implémentez une validation personnalisée pour bloquer des messages contenant - des mots interdits (ex: contenu insultant) +- [Documentation de Sécurité Symfony](https://symfony.com/doc/current/security.html) + +## Partie 1 : Protection contre les attaques XSS + +1. Utilisez l'un de vos formulaire (ajout d'un `Twok`) pour tester un exploit + de faille XSS (écrivez le code en JS). Que constatez-vous ? + - Indice : Utilisez la balise `