FunctionProject/api/routes/users.js

138 lines
4.3 KiB
JavaScript
Raw Normal View History

const { Router } = require('express');
const { body } = require('express-validator');
const fileUpload = require('express-fileupload');
const usersController = require('../controllers/users');
const { requiredFields } = require('../assets/config/errors');
const Users = require('../models/users');
const isAuth = require('../middlewares/isAuth');
2020-03-25 16:23:43 +01:00
const UsersRouter = Router();
// Permet de se connecter
UsersRouter.post('/login', [
body('email')
.not()
.isEmpty()
.withMessage(requiredFields.message),
body('password')
.not()
.isEmpty()
.withMessage(requiredFields.message)
], usersController.login);
2020-03-25 16:23:43 +01:00
2020-04-06 23:06:21 +02:00
// Récupère les informations public d'un profil
UsersRouter.get('/:name', usersController.getUserInfo);
// Permet de modifier son profil
UsersRouter.put('/', isAuth,
fileUpload({
useTempFiles: true,
safeFileNames: true,
preserveExtension: Number,
limits: { fileSize: 5 * 1024 * 1024 }, // 5mb,
parseNested: true
}),
[
body('email')
.isEmail()
.withMessage("Veuillez rentré une adresse mail valide.")
.custom((async (email) => {
try {
const user = await Users.findOne({ where: { email } });
if (user && user.email !== email) {
return Promise.reject("L'adresse email existe déjà...");
}
} catch (error) {
return console.log(error);
}
return true;
}))
.normalizeEmail(),
body('name')
.trim()
.not()
.isEmpty()
.withMessage("Vous devez avoir un nom (ou pseudo).")
.isAlphanumeric()
.withMessage("Votre nom ne peut contenir que des lettres ou/et des nombres.")
.isLength({ max: 30 })
.withMessage("Votre nom est trop long")
.custom(async (name) => {
try {
const user = await Users.findOne({ where: { name } });
if (user && user.name !== name) {
return Promise.reject("Le nom existe déjà...");
}
} catch (error) {
console.log(error);
}
return true;
}),
body('isPublicEmail')
.isBoolean()
.withMessage("L'adresse email peut être public ou privé, rien d'autre."),
body('biography')
.trim()
.escape()
], usersController.putUser);
2020-03-25 16:23:43 +01:00
// Permet de s'inscrire
UsersRouter.post('/register', [
2020-03-25 16:23:43 +01:00
body('email')
.isEmail()
.withMessage("Veuillez rentré une adresse mail valide.")
.custom((async (email) => {
try {
const user = await Users.findOne({ where: { email } });
if (user) {
return Promise.reject("L'adresse email existe déjà...");
}
} catch (error) {
return console.log(error);
}
return true;
2020-03-25 16:23:43 +01:00
}))
.normalizeEmail(),
body('password')
.isLength({ min: 4 })
.withMessage("Votre mot de passe est trop court!"),
body('name')
.trim()
.not()
.isEmpty()
.withMessage("Vous devez avoir un nom (ou pseudo).")
2020-03-25 16:23:43 +01:00
.isAlphanumeric()
.withMessage("Votre nom ne peut contenir que des lettres ou/et des nombres.")
.isLength({ max: 30 })
.withMessage("Votre nom est trop long")
.custom(async (name) => {
2020-03-25 16:23:43 +01:00
try {
const user = await Users.findOne({ where: { name } });
if (user) {
return Promise.reject("Le nom existe déjà...");
}
} catch (error) {
console.log(error);
2020-03-25 16:23:43 +01:00
}
return true;
})
], usersController.register);
2020-03-25 16:23:43 +01:00
// Confirme l'inscription
UsersRouter.get('/confirm-email/:tempToken', usersController.confirmEmail);
// Demande une réinitialisation du mot de passe
UsersRouter.post('/reset-password', [
body('email')
.isEmail()
.withMessage("Veuillez rentré une adresse mail valide.")
], usersController.resetPassword);
// Nouveau mot de passe
UsersRouter.put('/reset-password', [
body('password')
.isLength({ min: 4 })
.withMessage("Votre mot de passe est trop court!")
], usersController.newPassword);
2020-03-25 16:23:43 +01:00
module.exports = UsersRouter;