diff --git a/api/src/email/sendgrid.js b/api/src/email/sendgrid.js new file mode 100644 index 000000000..4ae21ad84 --- /dev/null +++ b/api/src/email/sendgrid.js @@ -0,0 +1,68 @@ +var jwt = require('jsonwebtoken') +var axios = require('axios') + +const sendTeamMemberInvite = function(email, team) { + const dev = process.env.NODE_ENV === 'development' ? true : false + + const API_KEY = process.env.SG_APIKEY + const token = jwt.sign({ email: email, team: team.slug }, API_KEY, { expiresIn: '7d' }) + const origin = 'https://teams.advancedalgos.net' + const params = '/activate-team-membership?token=' + if (dev){ + origin = 'http://localhost:3001' + } + + var headers = { + 'Content-Type': 'application/json', + 'Access-Control-Allow-Origin' : origin, + 'Access-Control-Allow-Credentials': 'true' + }; + + var data = JSON.stringify({ + "personalizations": [ + { + "to": [ + { + "email": email + } + ], + "subject": "INVITATION: Join team " + team.name, + "substitutions": { + "-aainvitelink-": origin + params + token + } + } + ], + "from": { + "email": "noreply@advancedalgos.net", + "name": "Advanced Algos Teams" + }, + "reply_to": { + "email": "feedback@advancedalgos.net", + "name": "Advanced Algos Teams" + }, + "template_id": process.env.SG_INVITE_EMAILID + }) + + var 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) { + if (response.status >= 200 && response.status < 300) { + return 'Success' + } else { + throw response.data.errors[0].message + } + }) + .catch(function (error) { + return `${error.status}-${error.response.data.errors[0].message}` + }) + return sendVerify +} + +module.exports = { sendTeamMemberInvite } diff --git a/api/src/index.js b/api/src/index.js index 465712204..b997d7e0b 100644 --- a/api/src/index.js +++ b/api/src/index.js @@ -13,6 +13,9 @@ const checkJwt = require('./auth/middleware/jwt') const { getMember } = require('./auth/middleware/getMember') const { validateIdToken } = require('./auth/validateIdToken') const { directiveResolvers } = require('./auth/authDirectives') + +const { sendTeamMemberInvite } = require('./email/sendgrid') + const { createStoragePipline, createServiceURL, @@ -208,6 +211,12 @@ const resolvers = { resourceTypes: SASResourceTypes }, SKC ) return SASQueryParameters + }, + async sendMemberInviteSG(parent, { email, teamId }, ctx, info) { + let team = await ctx.db.query.team({ where: { teamId } }, info) + console.log(email, teamId) + let email = await sendTeamMemberInvite(email, team) + return 'Success' } } }