This repository has been archived on 2024-10-29. You can view files and clone it, but cannot push or open issues or pull requests.
FunctionProject/api/routes/users.js
2020-08-03 12:38:58 +02:00

168 lines
4.3 KiB
JavaScript

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')
const UsersRouter = Router()
UsersRouter.route('/')
// Récupère les utilisateurs
.get(usersController.getUsers)
// Permet de modifier son profil
.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(new Error("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(new Error('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
)
// Permet de se connecter
UsersRouter.post(
'/login',
[
body('email')
.not()
.isEmpty()
.withMessage(requiredFields.message),
body('password')
.not()
.isEmpty()
.withMessage(requiredFields.message)
],
usersController.login
)
// Récupère les informations public d'un profil
UsersRouter.get('/:name', usersController.getUserInfo)
// Permet de s'inscrire
UsersRouter.post(
'/register',
[
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(new Error("L'adresse email existe déjà..."))
}
} catch (error) {
return console.log(error)
}
return true
}),
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).')
.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) {
return Promise.reject(new Error('Le nom existe déjà...'))
}
} catch (error) {
console.log(error)
}
return true
})
],
usersController.register
)
// Confirme l'inscription
UsersRouter.get('/confirm-email/:tempToken', usersController.confirmEmail)
UsersRouter.route('/reset-password')
// Demande une réinitialisation du mot de passe
.post(
[
body('email')
.isEmail()
.withMessage('Veuillez rentré une adresse mail valide.')
],
usersController.resetPassword
)
// Nouveau mot de passe
.put(
[
body('password')
.isLength({ min: 4 })
.withMessage('Votre mot de passe est trop court!')
],
usersController.newPassword
)
module.exports = UsersRouter