Created
April 7, 2020 10:14
-
-
Save olegpolyakov/79bd27a96b48042772bb79c502ef1591 to your computer and use it in GitHub Desktop.
Slack API Router
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const router = require('express').Router(); | |
const { WebClient } = require('@slack/client'); | |
const { | |
SLACK_CLIENT_ID, | |
SLACK_CLIENT_SECRET, | |
SLACK_AUTHORIZE_URL | |
} = require('@codedojo/core/config'); | |
const { logger } = require('@codedojo/core/services'); | |
const { User } = require('@codedojo/core/models'); | |
const logEvent = logger.createLogger('slack'); | |
const logError = logger.createLogger('slack', 'error'); | |
const web = new WebClient(); | |
router.get('/authorize', (req, res) => { | |
return web.oauth.access({ | |
client_id: SLACK_CLIENT_ID, | |
client_secret: SLACK_CLIENT_SECRET, | |
code: req.query.code, | |
redirect_uri: SLACK_AUTHORIZE_URL | |
}) | |
.then(logEvent) | |
.catch(logError); | |
}); | |
router.post('/events', (req, res) => { | |
if (req.body.type === 'url_verification' && req.body.challenge) { | |
return res.send(req.body.challenge); | |
} | |
const event = req.body.event; | |
if (event && event.type === 'team_join' && event.user) { | |
const email = event.user.profile && event.user.profile.email; | |
const slackId = event.user.id; | |
User.findOne({ email }) | |
.then(user => { | |
user.slackId = slackId; | |
return user.save(); | |
}) | |
.then(() => res.sendStatus(200)) | |
.catch(error => { | |
logError(error); | |
res.sendStatus(500); | |
}); | |
} | |
logEvent({ | |
type: event && event.type, | |
data: req.body | |
}); | |
}); | |
module.exports = router; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment