220 lines
6.7 KiB
JavaScript
220 lines
6.7 KiB
JavaScript
import sgMail from '@sendgrid/mail'
|
|
import axios from 'axios'
|
|
import jwt from 'jsonwebtoken'
|
|
import { ApolloError } from 'apollo-server-express'
|
|
|
|
import logger from '../../../../logger'
|
|
|
|
const API_KEY = process.env.SG_APIKEY
|
|
const API_KEY_CAMPAIGN = process.env.SG_APIKEY_CAMPAIGN
|
|
|
|
const origin = process.env.SG_PLATFORM_ORIGIN
|
|
|
|
export default {
|
|
async Master_NewsletterSignup(parent, { email }, ctx, info) {
|
|
logger.info('Master_NewsletterSignup params email:')
|
|
logger.info(email)
|
|
const token = jwt.sign({ email: email }, API_KEY, { expiresIn: '1d' })
|
|
const params = '/email-verification?token='
|
|
|
|
const data = JSON.stringify({
|
|
"personalizations": [
|
|
{
|
|
"to": [
|
|
{
|
|
"email": email
|
|
}
|
|
],
|
|
dynamic_template_data: {
|
|
"aaverifylink": origin + params + token,
|
|
"subject": 'VERIFY YOUR INTEREST in the Superalgos Project'
|
|
},
|
|
"subject": 'VERIFY YOUR INTEREST in the Superalgos Project'
|
|
}
|
|
],
|
|
"from": {
|
|
"email": "feedback@superalgos.org",
|
|
"name": "Superalgos Project Team"
|
|
},
|
|
"reply_to": {
|
|
"email": "feedback@superalgos.org",
|
|
"name": "Superalgos Project Team"
|
|
},
|
|
"template_id": process.env.SG_MASTER_SIGNUP_EMAILID
|
|
})
|
|
|
|
const sendVerify = axios({
|
|
method: 'post',
|
|
url: 'https://api.sendgrid.com/v3/mail/send',
|
|
data: data,
|
|
headers:{
|
|
'content-type': 'application/json',
|
|
'authorization': 'Bearer ' + API_KEY
|
|
}
|
|
})
|
|
.then(function (response) {
|
|
logger.info('Sendgrid Master SendVerify response:')
|
|
logger.info (response)
|
|
if (response.status >= 200 && response.status < 300) {
|
|
return 'SUCCESS'
|
|
} else {
|
|
throw response.data.errors[0].message
|
|
}
|
|
})
|
|
.catch(function (error) {
|
|
logger.error('Sendgrid Master SendVerify Error:')
|
|
logger.error(error)
|
|
throw new ApolloError(`Sendgrid Master SendVerify Error: ${error.response.data.errors[0].message}`, 404)
|
|
})
|
|
return sendVerify
|
|
},
|
|
async Master_NewsletterSignupVerify(parent, { token }, ctx, info){
|
|
let verifiedToken
|
|
try {
|
|
verifiedToken = jwt.verify(token, API_KEY, {maxAge: '1d'})
|
|
} catch(err) {
|
|
logger.error('Sendgrid Master verifiedToken Error:')
|
|
logger.error(err)
|
|
if (err.name === 'TokenExpiredError'){
|
|
throw new ApolloError('Error: Token Expired. Please resubmit email address.', 400)
|
|
} else {
|
|
throw new ApolloError(`Error: ${err.message}`, 400)
|
|
}
|
|
}
|
|
logger.info('Sendgrid Master verifySignup verifiedToken: ')
|
|
logger.info(verifiedToken)
|
|
|
|
const email = verifiedToken.email
|
|
|
|
const subscribe = axios({
|
|
method: 'post',
|
|
url: 'https://api.sendgrid.com/v3/contactdb/recipients',
|
|
data: [{"email": email}],
|
|
headers:{
|
|
'content-type': 'application/json',
|
|
'authorization': 'Bearer ' + API_KEY_CAMPAIGN
|
|
}
|
|
})
|
|
.then(response => {
|
|
logger.info('Sendgrid Master verifySignup subscribe: ')
|
|
logger.info(response)
|
|
const recipients = response.data.persisted_recipients
|
|
|
|
if (recipients.length > 0 ){
|
|
const addToList = axios({
|
|
method: 'post',
|
|
url: 'https://api.sendgrid.com/v3/contactdb/lists/4068018/recipients/' + recipients[0],
|
|
headers:{
|
|
'content-type': 'application/json',
|
|
'authorization': 'Bearer ' + API_KEY_CAMPAIGN
|
|
}
|
|
})
|
|
.then(response => {
|
|
logger.info('Sendgrid Master verifySignup addToList: ')
|
|
logger.info(response)
|
|
if (response.status >= 200 && response.status < 300) {
|
|
return 'SUCCESS'
|
|
} else {
|
|
throw response.data.errors[0].message
|
|
}
|
|
})
|
|
.catch(error => {
|
|
logger.error('Sendgrid Master verifySignUp subscribe Error:')
|
|
logger.error(error)
|
|
throw `Email SignUp Error: ${error}`
|
|
})
|
|
return addToList
|
|
} else{
|
|
return response.data.errors[0].message
|
|
}
|
|
})
|
|
.then(response => {
|
|
return response
|
|
})
|
|
.catch(error => {
|
|
logger.error('Sendgrid Master verifySubscribe Error:')
|
|
logger.error(error)
|
|
throw new ApolloError(`Sendgrid Master verifySubscribe Error: ${error.response.data.errors[0].message}`, 404)
|
|
})
|
|
return subscribe
|
|
},
|
|
async Master_Feedback(parent, { email, subject, message, recaptcha }, ctx, info) {
|
|
const toEmail = 'feedback@superalgos.org'
|
|
|
|
const data = JSON.stringify({
|
|
"personalizations": [
|
|
{
|
|
"to": [
|
|
{
|
|
"email": toEmail
|
|
}
|
|
],
|
|
dynamic_template_data: {
|
|
"aacontactname": name,
|
|
"aacontactemail": email,
|
|
"aacontactbody": message
|
|
},
|
|
"subject": `Superalgos Platform App Feedback - Message from ${name}`
|
|
}
|
|
],
|
|
"from": {
|
|
"email": email,
|
|
"name": name
|
|
},
|
|
"reply_to": {
|
|
"email": email,
|
|
"name": name
|
|
},
|
|
"template_id": process.env.SG_MASTER_FEEDBACK_EMAILID
|
|
})
|
|
|
|
const checkCaptcha = axios({
|
|
method: 'post',
|
|
url: 'https://www.google.com/recaptcha/api/siteverify',
|
|
params: {
|
|
secret: process.env.RECAPTCHA,
|
|
response: recaptcha
|
|
}
|
|
})
|
|
.then(function (response) {
|
|
logger.info(response.data)
|
|
if (response.status >= 200 && response.status < 300 && response.data.success) {
|
|
return axios({
|
|
method: 'post',
|
|
url: 'https://api.sendgrid.com/v3/mail/send',
|
|
data: data,
|
|
headers:{
|
|
'content-type': 'application/json',
|
|
'authorization': 'Bearer ' + API_KEY
|
|
}
|
|
})
|
|
.then(function (response) {
|
|
logger.info('Platform Feedback response: ')
|
|
logger.info(response)
|
|
if (response.status >= 200 && response.status < 300) {
|
|
return `Platform Feedback email sent`
|
|
} else {
|
|
throw response.data.errors[0].message
|
|
}
|
|
})
|
|
.catch(function (error) {
|
|
logger.error(`sendgrid Error: ${JSON.stringify(error)}`)
|
|
throw `Platform Feedback email send error: ${error.response.data.errors[0].message}`
|
|
})
|
|
}else{
|
|
throw response.data
|
|
}
|
|
})
|
|
.then(function(response){
|
|
return response
|
|
})
|
|
.catch(function (error) {
|
|
logger.error('Platform Feedback RECAPTCHA Error:')
|
|
logger.error(error)
|
|
throw new ApolloError(`Platform Feedback RECAPTCHA Error: ${error.response.data.errors[0].message}`, 404)
|
|
})
|
|
|
|
return checkCaptcha
|
|
}
|
|
}
|