You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

51 lines
1.2 KiB

  1. const Joi = require('joi');
  2. const constants = require('../constants');
  3. const { PASSWORD_MAX, PASSWORD_MIN } = constants;
  4. const schema = Joi.object().keys({
  5. // username: Joi.string().email({ minDomainAtoms: 2 }),
  6. username: Joi.string(),
  7. password: Joi.string()
  8. .min(PASSWORD_MIN)
  9. .max(PASSWORD_MAX),
  10. });
  11. module.exports = async function validate(req, res, next) {
  12. let payloadValidation = {};
  13. var remember = req.body.check;
  14. delete req.body.check;
  15. if(remember == 'on'){
  16. req.session.email = req.body.username;
  17. }
  18. else{
  19. delete req.session.email;
  20. }
  21. try {
  22. payloadValidation = await Joi.validate(req.body, schema, { abortEarly: false });
  23. } catch (validateRegisterError) {
  24. payloadValidation = validateRegisterError;
  25. }
  26. const { details } = payloadValidation;
  27. let errors;
  28. if (details) {
  29. errors = {};
  30. details.forEach(errorDetail => {
  31. const {
  32. path: [key],
  33. type,
  34. } = errorDetail;
  35. const errorType = type.split('.')[1];
  36. errors[key] = constants[`${key.toUpperCase()}_${errorType.toUpperCase()}_ERROR`];
  37. });
  38. }
  39. if (errors) {
  40. req.session.messages = { errors };
  41. return res.status(400).redirect('/login');
  42. }
  43. return next();
  44. };