register_subscriber.js 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. const chalk = require('chalk')
  2. var Subscriber = require('./models/subscriber');
  3. var register_subscriber = function(data) {
  4. return new Promise((resolve, reject) => {
  5. if(data.email == '' || data.email == undefined || !validateEmail(data.email)) {
  6. console.log(`${chalk.red(`Error: Received data does not contain a valid email address`)}`);
  7. console.log(data);
  8. resolve(undefined);
  9. }
  10. Subscriber.findOne({email: data.email}).then((subscriber) => {
  11. if(subscriber != undefined) {
  12. subscriber.attempted_registration();
  13. subscriber.save().then((subscriber) => {
  14. console.log(`Subscriber already in list ${chalk.italic(`\'${subscriber.email}\'`)}`, );
  15. var payload = response_payload(subscriber, true);
  16. resolve(payload);
  17. }).catch((error) => { reject(error); });
  18. } else {
  19. var new_subscriber = new Subscriber(data);
  20. new_subscriber.save().then((subscriber) => {
  21. console.log(`Registered new subscriber ${chalk.italic(`\'${subscriber.email}\'`)}`);
  22. var payload = response_payload(subscriber, false);
  23. resolve(payload);
  24. }).catch((error) => { reject(error); });
  25. }
  26. }).catch((error) => { reject(error); });
  27. });
  28. }
  29. var response_payload = function(subscriber, registered) {
  30. var payload = {};
  31. if(subscriber != undefined) {
  32. payload.email = subscriber.email;
  33. payload.first_name = subscriber.first_name;
  34. payload.last_name = subscriber.last_name;
  35. payload.registration_attempts = subscriber.registration_attempts;
  36. payload.registration_date = subscriber.registration_date;
  37. payload.last_updated = subscriber.last_updated;
  38. payload.confirmed_subscription = subscriber.confirmed_subscription;
  39. } else payload.confirmed_subscription = false;
  40. payload.already_registered = registered;
  41. return payload;
  42. }
  43. var validateEmail = function(email) {
  44. const re = /^(([^<>()[\]\.,;:\s@\"]+(\.[^<>()[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})$/i;
  45. return re.test(String(email).toLowerCase());
  46. }
  47. module.exports = register_subscriber;