diff --git a/services/backend/src/routes/feedback.js b/services/backend/src/routes/feedback.js index fcc8e79b3..d0486cc7e 100644 --- a/services/backend/src/routes/feedback.js +++ b/services/backend/src/routes/feedback.js @@ -1,28 +1,19 @@ const router = require('express').Router() -const { getUserDataFor } = require('../services/userService') const { sendFeedbackToToska } = require('../services/mailservice') const logger = require('../util/logger') -router.post('/email', async (req, res) => { - const { content } = req.body +router.post('/email', async req => { const { - user: { userId }, + body: { content }, + user, } = req - const { email, full_name } = await getUserDataFor(userId) - - const result = await sendFeedbackToToska({ + await sendFeedbackToToska({ feedbackContent: content, - userId, - userEmail: email, - userFullName: full_name, + user, }) - if (result.error) { - return res.status(400).json(result).end() - } - logger.info(`${userId} succesfully sent some feedback mail to toska`) - res.status(200).json('success').end() + logger.info(`${user.userId} succesfully sent feedback to toska`) }) module.exports = router diff --git a/services/backend/src/services/mailservice.js b/services/backend/src/services/mailservice.js index acf93d892..9bfc3f43f 100644 --- a/services/backend/src/services/mailservice.js +++ b/services/backend/src/services/mailservice.js @@ -1,6 +1,6 @@ const axios = require('axios') const { isProduction, pateToken } = require('../conf-backend') -const logger = require('../util/logger') +const { ApplicationError } = require('../util/customErrors') const pateClient = axios.create({ baseURL: 'https://pate.toska.cs.helsinki.fi', @@ -20,33 +20,22 @@ const baseSettings = { } const sendEmail = async (options = {}) => { - if (!isProduction) { - const errorMessage = 'Skipped sending email in non-production environment' - logger.error({ message: errorMessage, meta: options }) - return { error: errorMessage } - } - - if (!pateToken) { - const errorMessage = 'Skipped sending email since pate token was not available' - logger.error({ message: errorMessage, meta: options }) - return { error: errorMessage } - } - - const { data } = await pateClient.post('/', options) - - return data + if (!isProduction) throw new ApplicationError('Email sending is disabled in development mode.') + if (!pateToken) throw new ApplicationError('Email sending failed because pate token is missing.') + await pateClient.post('/', options) } -const sendFeedbackToToska = ({ feedbackContent, userId, userEmail, userFullName }) => { - const userDetails = `Sent by ${userFullName}, userid: ${userId}, email: ${userEmail}` +const sendFeedbackToToska = async ({ feedbackContent, user }) => { + const { name, userId, email } = user + const userDetails = `Sent by ${name}, userid: ${userId}, email: ${email}` const text = [feedbackContent, userDetails].join('
') - return sendEmail({ + await sendEmail({ template, emails: [ { to: 'Toska ', - replyTo: userEmail, - subject: `Oodikone feedback from ${userFullName}`, + replyTo: email, + subject: `Oodikone feedback from ${name}`, text, }, ], diff --git a/services/backend/src/services/userService.js b/services/backend/src/services/userService.js index ae81bdde0..eb1aa32e3 100644 --- a/services/backend/src/services/userService.js +++ b/services/backend/src/services/userService.js @@ -163,7 +163,7 @@ const getLoginDataWithoutToken = async (uid, full_name, hyGroups, email, hyPerso const getMockedUser = async (uid, asUser) => { const user = await User.superlogin(uid, asUser) if (!user) return null - const userData = _.omit(await getUserDataFor(user.userId), ['email', 'full_name', 'faculties']) + const userData = _.omit(await getUserDataFor(user.userId), ['full_name', 'faculties']) return { ...user, ...userData, @@ -177,7 +177,7 @@ const getUser = async ({ username, name, email, iamGroups, sisId }) => { await sendNotificationAboutNewUser({ userId: username, userFullName: name }) } - const userData = _.omit(await getUserDataFor(user.userId), ['email', 'full_name', 'faculties']) + const userData = _.omit(await getUserDataFor(user.userId), ['full_name', 'faculties']) return { ...user, ...userData,