Piiquante se dédie à la création de sauces épicées dont les recettes sont gardées secrètes. Pour tirer parti de son succès et générer davantage de buzz, l'entreprise souhaite créer une application web dans laquelle les utilisateurs peuvent ajouter leurs sauces préférées et liker ou disliker les sauces ajoutées par les autres.
L'application frontend a été développée en amont par OpenClassrooms, elle est disponible sur ce repository.
Notre mission est de développer une API REST sécurisée pour cette application.
Créer un dossier vide. Il contiendra le code complet du projet, regroupé dans deux dossiers : un dossier frontend et un dossier backend.
Ouvrez un terminal. Depuis le dossier précédement créé, clonez le repository de l'application frontend avec la commande :
git clone https://github.com/OpenClassrooms-Student-Center/Web-Developer-P6.git frontend
Suivez les instructions d'installation de l'application frontend détaillées dans le document README.md.
Ouvrez un nouveau terminal. Depuis le dossier précédement créé, clonez le repository de l'API avec la commande :
git clone https://github.com/Nathom78/backend---P6.git backend
ou depuis ce repository
Depuis le dossier backend, installez le gestionnaire de paquets par défaut pour l'environnement d'exécution JavaScript avec la commande :
npm install
ainsi que les packages cités en derniers.
npm install nom_du_package
Rendez-vous sur le site de MongoDb et créez un compte.
Une fois le compte créé, créez votre base de données en veillant à la configurer de sorte à ce que l'utilisateur puisse exécuter l'application sur sa propre machine :
Network Access -> Allow access from anywhere
Une fois la base de données créé, vous devriez avoir :
- Un identifiant de connexion à la base de données
- Un mot de passe de connexion à la base de données
- une adresse pour accéder à la base afin de se connecter qui peux se trouver dans Deployment -> Cluster -> Connect -> connect your application : (de type mongodb+srv://:@cluster0.afknvvw.mongodb.net/<nom_de_la_database>?retryWrites=true&w=majority) où <nom_de_la_database> est le nom si une de crée manuellement sinon par defaut c'est vierge.
A la racine du dossier backend, créez un fichier .env dans lequel seront renseignés vos identifiants de connexion à MongoDB et les différentes chaînes de cryptage :
non besoin PORT = 3000 par défault sinon cela dépend de votre frontend pour que le front puisse communiquer avec l'API.
JWT_KEY="chaîne de caractères aléatoire"
EMAIL_ENCRYPTION_KEY="chaîne de caractères aléatoire"
DB_ID="identifiant de connexion à la base de données"
DB_MDP="mot de passe de connexion à la base de données"
DB_ADDRESS="adresse de la base de donné" ex: @cluster0.afknvvw.mongodb.net/nom_de_la_database?retryWrites=true&w=majority
A la racine du dossier backend, créer un fichier .gitignore dans lequel vous placez les node modules, le fichier .env et le dossier /images :
/node_modules
.env
/images
Enfin, démarrez le serveur avec la commande :
nodemon server
Si tout se passe bien, les messages suivants apparaissent dans le terminal :
Listening on port 3000
Connexion à MongoDB par mongoose réussie !
- Une route POST /api/auth/signup permettant l'inscription d'un utilisateur
- Une route POST /api/auth/login permettant la connexion d'un utilisateur
- Une route GET /api/sauces pour l'affichage de toutes les sauces présentes dans la base de données
- Une route GET /api/sauces/:id pour l'affichage d'une sauce en particulier
- Une route POST /api/sauces pour publier une nouvelle sauce
- Une route PUT /api/sauces/:id pour modifier une sauce éxistante
- Une route DELETE /api/sauces/:id pour supprimer une sauce
- Une route POST /api/sauces/:id/like pour évaluer une sauce
- Le mot de passe de l'utilisateur doit être haché
- L'Authentification doit être renforcée sur toutes les routes sauce requises
- Les adresses électroniques dans la base de données sont uniques et un plugin Mongoose approprié est utilisé pour garantir leur unicité et signaler les erreurs
- La sécurité de la base de données MongoDB ne doit pas empêcher l'application de se lancer sur la machine d'un utilisateur
- Un plugin Mongoose doit assurer la remontée des erreurs issues de la base de données
- Les versions les plus récentes des logicels sont utilisées avec des correctifs de sécurité actualisés
- Le contenu du dossier images ne doit pas être téléchargé sur GitHub
- Utilisation du runtime Node.js
- Utilisation du framework Express
- Utilisation de MongoDB pour l'hébergement et la gestion de la base de données
- bcrypt : pour le cryptage des mots de passe grâce à son algorithme unidirectionnel
- crypto-js : pour le cryptage du mail avant l'enregistrement dans la base de données
- dotenv : pour l'utilisation des variables d'environnement
- password-validator : pour la vérification des mots de passe lors de l'inscription
- jsonwebtoken : pour créer et vérifier les tokens d'authentification
- mongoose : pour connecter l'application avec la base de données
- mongoose-unique-validator : pour assurer que deux utilisateurs ne puissent s'inscrire avec la même adresse email
- multer : pour la gestion des fichiers envoyés dans les requêtes
- helmet: Helmet vous aide à sécuriser vos applications Express en définissant divers en-têtes HTTP
- express-mongo-sanitize: Par défaut, $ et . les caractères sont complètement supprimés de l'entrée fournie par l'utilisateur aux endroits suivants : // - req.body // - req.params // - en-têtes requis // - req.query
- nodemon : afin d'éviter de devoir relancer le serveur à chaque modification (en option lancement de l'API par la commande nodemon server)