Skip to content

Instantly share code, notes, and snippets.

@olegpolyakov
Created April 7, 2020 10:14
Show Gist options
  • Save olegpolyakov/79bd27a96b48042772bb79c502ef1591 to your computer and use it in GitHub Desktop.
Save olegpolyakov/79bd27a96b48042772bb79c502ef1591 to your computer and use it in GitHub Desktop.
Slack API Router
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