From 4c87f574b03f84690f5df5e16512fac99ce0942c Mon Sep 17 00:00:00 2001 From: Aman Raj Date: Wed, 3 Jul 2019 22:34:32 +0530 Subject: [PATCH 1/6] post message to slack Send message to slack when someone gets invited #89 --- server.js | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/server.js b/server.js index 0efd2bc..8bbc5a6 100644 --- a/server.js +++ b/server.js @@ -16,6 +16,7 @@ const b17 = process.env.B17 const b18 = process.env.B18 const outs = process.env.OUTS const slack = process.env.SLACK_TOKEN +const webhookURL = process.env.INVITE_CHANNEL_WEBHOOK // Get transporter services const emailHost = process.env.EMAIL_HOST || 'smtp.gmail.com' @@ -51,6 +52,32 @@ app.get('/sendmail/:username/:id', (request, response, next) => { var SlackURL = `https://slack.com/api/users.admin.invite?token=${slack}&email=${id}` axios.post(SlackURL) + // Post invitation message on Slack + const time = Math.round((new Date()).getTime() / 1000) + const message = `Hello ${username}` + const options = { + 'text': 'Welcome to IIITV', + 'attachments': [ + { + 'color': '#36a64f', + 'title': 'Invitation from IIITV', + 'title_link': 'https://github.com/iiitv', + 'text': message, + 'footer': 'Slack API', + 'ts': time + } + ] + } + + axios.post(webhookURL, JSON.stringify(options)) + .then(response => { + console.log('SUCCEEDED: Sent slack webhook: \n', response.data) + }) + .catch(error => { + console.log('FAILED: Send slack webhook', error) + // reject(new Error('FAILED: Send slack webhook')) + }) + const verificationurl = `https://${request.get('host')}/verify/${base64}` var transporter = nodemailer.createTransport({ From c1b6d47efae4987a6aec7ffb2651454543bb800d Mon Sep 17 00:00:00 2001 From: Aman Raj Date: Fri, 5 Jul 2019 17:36:46 +0530 Subject: [PATCH 2/6] minor fix Added 1. dotenv 2. Change message 3. Fix link --- package-lock.json | 27 ++++++++++++++++----------- package.json | 3 ++- server.js | 7 ++++--- 3 files changed, 22 insertions(+), 15 deletions(-) diff --git a/package-lock.json b/package-lock.json index 92b711f..d0e8b1e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -117,12 +117,12 @@ "dev": true }, "axios": { - "version": "0.18.0", - "resolved": "http://registry.npmjs.org/axios/-/axios-0.18.0.tgz", - "integrity": "sha1-MtU+SFHv3AoRmTts0AB4nXDAUQI=", + "version": "0.18.1", + "resolved": "http://registry.npmjs.org/axios/-/axios-0.18.1.tgz", + "integrity": "sha512-0BfJq4NSfQXd+SkFdrvFbG7addhYSBA2mQwISr46pD6E5iqkWg02RAs8vyTT/j0RTnoYmeXauBuSv1qKwR179g==", "requires": { - "follow-redirects": "^1.3.0", - "is-buffer": "^1.1.5" + "follow-redirects": "1.5.10", + "is-buffer": "^2.0.2" } }, "balanced-match": { @@ -392,6 +392,11 @@ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" }, + "dotenv": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.0.0.tgz", + "integrity": "sha512-30xVGqjLjiUOArT4+M5q9sYdvuR4riM6yK9wMcas9Vbp6zZa+ocC9dp6QoftuhTPhFAiLK/0C5Ni2nou/Bk8lg==" + }, "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -1000,9 +1005,9 @@ "dev": true }, "follow-redirects": { - "version": "1.5.8", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.8.tgz", - "integrity": "sha512-sy1mXPmv7kLAMKW/8XofG7o9T+6gAjzdZK4AJF6ryqQYUa/hnzgiypoeUecZ53x7XiqKNEpNqLtS97MshW2nxg==", + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz", + "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==", "requires": { "debug": "=3.1.0" } @@ -1253,9 +1258,9 @@ "dev": true }, "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.3.tgz", + "integrity": "sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw==" }, "is-builtin-module": { "version": "1.0.0", diff --git a/package.json b/package.json index dd4f0b3..3c53e7b 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,8 @@ "lint:fix": "eslint ./public/*.js *.js --fix" }, "dependencies": { - "axios": "^0.18.0", + "axios": "^0.18.1", + "dotenv": "^8.0.0", "express": "^4.16.3", "gh-account-exists": "^0.1.0", "jquery": "^3.4.0", diff --git a/server.js b/server.js index 8bbc5a6..a328923 100644 --- a/server.js +++ b/server.js @@ -1,3 +1,4 @@ +require('dotenv').config() const express = require('express') const app = express() const axios = require('axios') @@ -54,14 +55,14 @@ app.get('/sendmail/:username/:id', (request, response, next) => { // Post invitation message on Slack const time = Math.round((new Date()).getTime() / 1000) - const message = `Hello ${username}` + const message = `${username} got invited to iiitv organization on GitHub and Slack` const options = { 'text': 'Welcome to IIITV', 'attachments': [ { 'color': '#36a64f', 'title': 'Invitation from IIITV', - 'title_link': 'https://github.com/iiitv', + 'title_link': 'https://github.com/orgs/iiitv/people', 'text': message, 'footer': 'Slack API', 'ts': time @@ -71,7 +72,7 @@ app.get('/sendmail/:username/:id', (request, response, next) => { axios.post(webhookURL, JSON.stringify(options)) .then(response => { - console.log('SUCCEEDED: Sent slack webhook: \n', response.data) + console.log('SUCCESS: Sent slack webhook:', response.data) }) .catch(error => { console.log('FAILED: Send slack webhook', error) From af73bdefb095cb33fd1492f9b54eafdedee2d182 Mon Sep 17 00:00:00 2001 From: Aman Raj Date: Sat, 6 Jul 2019 18:25:56 +0530 Subject: [PATCH 3/6] max_retry logic Added max_retry logic to send request 3 times in case first failed. --- server.js | 33 +++++++++++++++++++++++++-------- 1 file changed, 25 insertions(+), 8 deletions(-) diff --git a/server.js b/server.js index a328923..c7bc11a 100644 --- a/server.js +++ b/server.js @@ -70,14 +70,31 @@ app.get('/sendmail/:username/:id', (request, response, next) => { ] } - axios.post(webhookURL, JSON.stringify(options)) - .then(response => { - console.log('SUCCESS: Sent slack webhook:', response.data) - }) - .catch(error => { - console.log('FAILED: Send slack webhook', error) - // reject(new Error('FAILED: Send slack webhook')) - }) + const sendMessage = new Promise((resolve, reject) => { + axios.post(webhookURL, JSON.stringify(options)) + .then(response => { + console.log('SUCCESS: Sent slack webhook:', response.data) + resolve(204) + }) + .catch(error => { + console.log('FAILED: Sent slack webhook', error) + reject(error) + }) + }) + + let flag = 0 + for (let maxRetry = 0; maxRetry < 3; maxRetry++) { + sendMessage + .then((status) => { + flag++ + }) + .catch((err) => { + console.log(err) + }) + if (flag === 1) { + break + } + } const verificationurl = `https://${request.get('host')}/verify/${base64}` From f82bc9d212f77eb9d7837b78c32429bb7b7da2c4 Mon Sep 17 00:00:00 2001 From: Aman Raj Date: Mon, 8 Jul 2019 13:28:11 +0530 Subject: [PATCH 4/6] =?UTF-8?q?max=5Fretry=20working=20=E2=9C=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixed asynchronous behaviour --- server.js | 43 +++++++++++++++++++++---------------------- 1 file changed, 21 insertions(+), 22 deletions(-) diff --git a/server.js b/server.js index c7bc11a..90cfd53 100644 --- a/server.js +++ b/server.js @@ -70,31 +70,30 @@ app.get('/sendmail/:username/:id', (request, response, next) => { ] } - const sendMessage = new Promise((resolve, reject) => { - axios.post(webhookURL, JSON.stringify(options)) - .then(response => { - console.log('SUCCESS: Sent slack webhook:', response.data) - resolve(204) - }) - .catch(error => { - console.log('FAILED: Sent slack webhook', error) - reject(error) - }) - }) + function sendMessage () { + return new Promise((resolve, reject) => { + axios.post(webhookURL, JSON.stringify(options)) + .then(response => { + return resolve('SUCCESS: Sent slack webhook', response.data) + }) + .catch(error => { + return reject(new Error('FAILED: Sent slack webhook', error)) + }) + }) + } - let flag = 0 - for (let maxRetry = 0; maxRetry < 3; maxRetry++) { - sendMessage - .then((status) => { - flag++ - }) - .catch((err) => { + (async function loop () { + for (let i = 0; i < 3; i++) { + console.log('retry sending message ', i) + try { + const res = await sendMessage() + console.log(res) + break + } catch (err) { console.log(err) - }) - if (flag === 1) { - break + } } - } + })() const verificationurl = `https://${request.get('host')}/verify/${base64}` From 6680e7e34dc9da962425d1d3cf3a1af157225064 Mon Sep 17 00:00:00 2001 From: Aman Raj Date: Tue, 9 Jul 2019 00:23:23 +0530 Subject: [PATCH 5/6] Retry logic --- server.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/server.js b/server.js index 90cfd53..3fbea40 100644 --- a/server.js +++ b/server.js @@ -82,9 +82,9 @@ app.get('/sendmail/:username/:id', (request, response, next) => { }) } - (async function loop () { + const loop = async () => { for (let i = 0; i < 3; i++) { - console.log('retry sending message ', i) + console.log('retrying sending message ', i) try { const res = await sendMessage() console.log(res) @@ -93,7 +93,8 @@ app.get('/sendmail/:username/:id', (request, response, next) => { console.log(err) } } - })() + } + loop() const verificationurl = `https://${request.get('host')}/verify/${base64}` From 806ca18be9b93577787dcf8489e9ebb87645bfa8 Mon Sep 17 00:00:00 2001 From: Aman Raj Date: Tue, 9 Jul 2019 02:31:18 +0530 Subject: [PATCH 6/6] fix camelCase --- server.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/server.js b/server.js index 3fbea40..40eee9b 100644 --- a/server.js +++ b/server.js @@ -50,8 +50,8 @@ app.get('/sendmail/:username/:id', (request, response, next) => { }) // Invite to Slack - var SlackURL = `https://slack.com/api/users.admin.invite?token=${slack}&email=${id}` - axios.post(SlackURL) + const slackUrl = `https://slack.com/api/users.admin.invite?token=${slack}&email=${id}` + axios.post(slackUrl) // Post invitation message on Slack const time = Math.round((new Date()).getTime() / 1000)