Merge pull request #85 from AdvancedAlgos/feature/notifications-integration

Feature/notifications integration
This commit is contained in:
Barry Low authored and GitHub committed 2018-12-17 22:22:19 -08:00
commit 8778508c2c
4 files changed
+133 -151

No files matched your search

-145
View File
@@ -1,145 +0,0 @@
var jwt = require('jsonwebtoken')
var axios = require('axios')
import { logger } from '../logger'
const sendTeamMemberInvite = function(email, team) {
logger.info(`sendTeamMemberInvite email|team: ${email} | ${team}`)
const API_KEY = process.env.SG_APIKEY
const token = jwt.sign({ email: email, team: team.slug }, API_KEY, { expiresIn: '7d' })
let origin = process.env.SG_ORIGIN
const params = '/activate-team-membership/'
const headers = {
'Content-Type': 'application/json',
'Access-Control-Allow-Origin' : origin,
'Access-Control-Allow-Credentials': 'true'
};
const data = JSON.stringify({
"personalizations": [
{
"to": [
{
"email": email
}
],
dynamic_template_data: {
"aateaminvitelink": origin + params + token,
"aateamname": team.name,
"subject": "INVITATION: Join team " + team.name
},
"subject": "INVITATION: Join team " + team.name
}
],
"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
})
let 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
}
const sendTeamCreateConfirmation = function(email, teamName, botName) {
logger.info(`sendTeamCreateConfirmation email|teamName|botName: ${email} | ${teamName} | ${botName}`)
const API_KEY = process.env.SG_APIKEY
let origin = process.env.SG_ORIGIN
const headers = {
'Content-Type': 'application/json',
'Access-Control-Allow-Origin' : origin,
'Access-Control-Allow-Credentials': 'true'
};
const data = JSON.stringify({
"personalizations": [
{
"to": [
{
"email": email
}
],
dynamic_template_data: {
"aadeveloplink": process.env.SG_PLATFORM_URL,
"aateamname": teamName,
"aabotname": botName,
"subject": "Team " + teamName + " has been created!"
},
"subject": "Team " + teamName + " has been created!"
}
],
"from": {
"email": "noreply@advancedalgos.net",
"name": "Advanced Algos Teams"
},
"reply_to": {
"email": "feedback@advancedalgos.net",
"name": "Advanced Algos Teams"
},
"template_id": process.env.SG_TEAMCREATE_EMAILID
})
let sendTeamCreation = 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 sendTeamCreation
}
const verifyInviteToken = async function(token) {
const API_KEY = process.env.SG_APIKEY
let verifiedToken
try {
verifiedToken = await jwt.verify(token, API_KEY, {maxAge: '7d'})
} catch(err) {
if (err.name === "TokenExpiredError"){
throw new Error ("Error: Token Expired. Please request new invitation or apply to the team again")
} else {
throw new Error (`Error: Token error - ${err.message}`)
}
}
logger.info(`verifyInviteToken: ${verifiedToken}`)
return verifiedToken
}
module.exports = { sendTeamMemberInvite, sendTeamCreateConfirmation, verifyInviteToken }
+4 -4
View File
@@ -3,7 +3,7 @@ import { ApolloError } from 'apollo-server-express'
import { getUser } from '../../../middleware/getMember'
import { sendTeamMemberInvite, sendTeamCreateConfirmation, verifyInviteToken } from '../../../email/sendgrid'
import { notifications_sendTeamCreateConfirmation, notifications_sendTeamMemberInvite, notifications_VerifyTeamMemberInviteToken } from '../notifications/sendgrid'
import TEAMS_CONNECTIONS_FRAGMENT from '../../fragments/TeamsConnectionsFragment'
import TEAMS_FRAGMENT from '../../fragments/TeamsFragment'
@@ -20,14 +20,14 @@ export const resolvers = {
create:{role:'MEMBER', email:email, team: {connect: {id: teamId}}, status:{create:{status: 'INVITED', reason: `Invited by ${team.members[0].member.alias}`}}},
update:{role: 'MEMBER', email: email, team: {connect: {id: teamId}}, status:{create:{status: 'INVITED', reason: `Invite resent by ${team.members[0].member.alias}`}}}},
`{ id }`)
const sendInvite = await sendTeamMemberInvite(email, team)
const sendInvite = await notifications_sendTeamMemberInvite(email, team)
return sendInvite
},
async verifyTeamInvite(parent, { token }, ctx, info) {
let verifiedToken = null
let team = null
try {
verifiedToken = await verifyInviteToken(token)
verifiedToken = await notifications_VerifyTeamMemberInviteToken(token)
team = {
email: verifiedToken.email,
team: {
@@ -111,7 +111,7 @@ export const resolvers = {
})
}
sendTeamCreateConfirmation(email, name, botName)
notifications_sendTeamCreateConfirmation(email, name, botName)
return createTeam
},
@@ -0,0 +1,127 @@
var jwt = require('jsonwebtoken')
var axios = require('axios')
import { logger } from '../logger'
export const notifications_sendTeamMemberInvite = (email, team) => {
logger.info('notifications_sendTeamMemberInvite')
logger.info(email)
logger.info(teamName)
return new Promise((resolve, reject) => {
try {
return axios.post(process.env.PLATFORM_API_URL, {
query: `mutation notifications_Teams_SendTeamMemberInvite($email:String!, $teamName:String!){
notifications_Teams_SendTeamMemberInvite(email:$email, teamName:$teamName)
}`,
variables: {
email: email,
teamName: team.name
}
}, {
headers: {
'Content-Type': 'application/json'
}
})
.then(res => {
logger.info('sendTeamMemberInvite result')
logger.info(res.data)
resolve(res.data)
})
.catch(err => {
logger.info('sendTeamMemberInvite err')
logger.info(err)
reject(err)
})
} catch (error) {
reject(error)
}
})
}
export const notifications_sendTeamCreateConfirmation = (email, teamName, botName) => {
logger.info('notifications_sendTeamCreateConfirmation')
logger.info(email)
logger.info(teamName)
logger.info(botName)
return new Promise((resolve, reject) => {
try {
return axios.post(process.env.PLATFORM_API_URL, {
query: `mutation notifications_sendTeamCreateConfirmation($email: String!, $teamName: String!, $botName: String!){
notifications_Teams_SendTeamCreateConfirmation(email: $email, teamName: $teamName, botName: $botName)
}`,
variables: {
email: email,
teamName: teamName,
botName: botName
}
}, {
headers: {
'Content-Type': 'application/json'
}
})
.then(res => {
logger.info('sendTeamCreateConfirmation result')
logger.info(res.data)
resolve(res.data)
})
.catch(err => {
logger.info('sendTeamCreateConfirmation err')
logger.info(err)
reject(err)
})
} catch (error) {
reject(error)
}
})
}
export const notifications_VerifyTeamMemberInviteToken = (token) => {
logger.info('notifications_VerifyTeamMemberInviteToken')
logger.info(token)
return new Promise((resolve, reject) => {
try {
return axios.post(process.env.PLATFORM_API_URL, {
query: `mutation notifications_VerifyTeamMemberInviteToken($token: String!){
notifications_Teams_VerifyTeamMemberInviteToken(token: $token)
}`,
variables: {
token: token
}
}, {
headers: {
'Content-Type': 'application/json'
}
})
.then(res => {
logger.info('VerifyTeamMemberInviteToken result')
logger.info(res.data)
resolve(res.data)
})
.catch(err => {
logger.info('VerifyTeamMemberInviteToken err')
logger.info(err)
reject(err)
})
} catch (error) {
reject(error)
}
})
}
const verifyInviteToken = async function(token) {
const API_KEY = process.env.SG_APIKEY
let verifiedToken
try {
verifiedToken = await jwt.verify(token, API_KEY, {maxAge: '7d'})
} catch(err) {
if (err.name === "TokenExpiredError"){
throw new Error ("Error: Token Expired. Please request new invitation or apply to the team again")
} else {
throw new Error (`Error: Token error - ${err.message}`)
}
}
logger.info(`verifyInviteToken: ${verifiedToken}`)
return verifiedToken
}
module.exports = { sendTeamMemberInvite, sendTeamCreateConfirmation, verifyInviteToken }
+2 -2
View File
@@ -69,7 +69,7 @@
"workbox-cli": "^3.6.2"
},
"dependencies": {
"@advancedalgos/web-components": "0.0.17",
"@advancedalgos/web-components": "0.0.18",
"@azure/storage-blob": "^10.0.0-preview",
"apollo-cache-inmemory": "^1.3.5",
"apollo-client": "^2.4.2",
@@ -98,7 +98,7 @@
"subscriptions-transport-ws": "^0.9.15"
},
"peerDependencies": {
"@material-ui/core": "^3.2.2",
"@material-ui/core": "^3.6.2",
"@material-ui/icons": "^3.0.1"
},
"standard": {