Skip to content
Snippets Groups Projects
notifications.js 1.95 KiB
Newer Older
const config = require('config')

const unsubscribeSlug = config.get('unsubscribe.url')
const resetPath = config.get('invite-reset-password.url')
const confirmSignUp = config.get('confirm-signup.url')

const { Email, User, services } = require('pubsweet-component-helper-service')

const { getEmailCopy } = require('./emailCopy')

module.exports = {
  async sendNotifications({ user, baseUrl, role, UserModel }) {
    const userHelper = new User({ UserModel })
    const eicName = await userHelper.getEiCName()

    const email = new Email({
      type: 'user',
      toUser: {
        email: user.email,
        name: `${user.firstName} ${user.lastName}`,
      },
      content: {
        ctaLink: services.createUrl(baseUrl, resetPath, {
          email: user.email,
          token: user.passwordResetToken,
          firstName: user.firstName,
          lastName: user.lastName,
          affiliation: user.affiliation,
          title: user.title,
        }),
        ctaText: 'CONFIRM ACCOUNT',
        signatureName: eicName,
        unsubscribeLink: services.createUrl(baseUrl, unsubscribeSlug, {
          id: user.id,
        }),
      },
    })

    if (role) {
      sendNewUserEmail({ email, role })
    } else {
      sendSignupEmail({ email, baseUrl, user })
    }
  },
}

const sendNewUserEmail = ({ email, role }) => {
  email.content.subject = 'Confirm Your Account'

  const { html, text } = email.getBody({
    body: getEmailCopy({
      emailType: 'user-added-by-admin',
      role,
    }),
  })

  email.sendEmail({ html, text })
}

const sendSignupEmail = ({ email, baseUrl, user }) => {
  email.content.subject = 'Confirm Your Email Address'
  email.content.ctaLink = services.createUrl(baseUrl, confirmSignUp, {
    userId: user.id,
    confirmationToken: user.confirmationToken,
  })
  email.content.ctaText = 'CONFIRM'

  const { html, text } = email.getBody({
    body: getEmailCopy({
      emailType: 'user-signup',
    }),
  })

  email.sendEmail({ html, text })
}