From ee914af357162c76f46bb466f2eaf5b24f1397a6 Mon Sep 17 00:00:00 2001 From: Luke Houge Date: Tue, 20 Apr 2021 22:34:20 -0500 Subject: [PATCH] removing using Slack to determine if user is a teamlead This Slack API method has been depreciated. There is a different way of making it work, but it seems that simply having selectable boxes for is a teamlead or not is more intuitive and simple anyway. This should only change twice a year or so and would not need to be updated that often, and makes the interface more clear that those properties are actually editable. --- config/passport.js | 154 ++++++++++++++++++++++---------------------- controllers/crud.js | 43 ++++++------- 2 files changed, 98 insertions(+), 99 deletions(-) diff --git a/config/passport.js b/config/passport.js index 36c96bc..a9e15b9 100755 --- a/config/passport.js +++ b/config/passport.js @@ -1,13 +1,13 @@ -const SlackStragety = require('passport-slack').Strategy; -const passport = require('passport'); -const request = require('request'); +const SlackStragety = require("passport-slack").Strategy; +const passport = require("passport"); +const request = require("request"); -const User = require('../models/user'); +const User = require("../models/user"); const clientID = process.env.CLIENT_ID; const clientSecret = process.env.CLIENT_SECRET; const redirectURI = process.env.REDIRECT_URI; const SERVICES_TOKEN = process.env.SERVICES_TOKEN; -const SECRET_CHANNEL = process.env.SECRET_CHANNEL +const SECRET_CHANNEL = process.env.SECRET_CHANNEL; passport.serializeUser((user, done) => { done(null, user.id); @@ -19,81 +19,81 @@ passport.deserializeUser((id, done) => { }); }); - // The main flow of Slack Authentication -passport.use(new SlackStragety({ - clientID: clientID, - clientSecret: clientSecret, - skipUserProfile: false, - scope: ['identity.basic', 'identity.avatar'] -}, (accessToken, refreshToken, profile, done) => { - console.log("Made it to the callback"); - User.findOne({ "slackID": profile.id }).then((currentUser) => { - let isTeamLead = false; // Innocent until proven guilty - let options = { - method: 'GET', - url: 'https://slack.com/api/groups.info', - qs: { - token: `${SERVICES_TOKEN}`, - channel: `${SECRET_CHANNEL}` - } - }; - request(options, (err, res, body) => { - if (err) throw new Error(err); - isTeamLead = findTeamLead(body, profile); - if (currentUser) { - return updateCurrentUser(isTeamLead, currentUser, profile, done) - } else { - return createNewUser(profile, isTeamLead, done); - } - }); - }); -})); -// End Main Flow - exports.isAuthenticated = (req, res, next) => { - if (req.isAuthenticated()) { - return next(); +passport.use( + new SlackStragety( + { + clientID: clientID, + clientSecret: clientSecret, + skipUserProfile: false, + scope: ["identity.basic", "identity.avatar"], + }, + (accessToken, refreshToken, profile, done) => { + console.log("Made it to the callback"); + User.findOne({ slackID: profile.id }).then((currentUser) => { + let options = { + method: "GET", + url: "https://slack.com/api/groups.info", + qs: { + token: `${SERVICES_TOKEN}`, + channel: `${SECRET_CHANNEL}`, + }, + }; + request(options, (err, res, body) => { + if (err) throw new Error(err); + if (currentUser) { + return updateCurrentUser(currentUser, profile, done); + } else { + return createNewUser(profile, done); + } + }); + }); } - req.flash('error', 'Not Logged In!'); - res.redirect('/'); + ) +); +// End Main Flow +exports.isAuthenticated = (req, res, next) => { + if (req.isAuthenticated()) { + return next(); } + req.flash("error", "Not Logged In!"); + res.redirect("/"); +}; - function updateCurrentUser(isTeamLead, user, profile, cb) { - user.name = profile.displayName - user.isTeamLead = isTeamLead; - user.picture = profile.user.image_192; - user.save((err) => { - if (err) throw err; - console.log('Current User is' + user); - return cb(null, user); - }); - } +function updateCurrentUser(user, profile, cb) { + user.name = profile.displayName; + user.picture = profile.user.image_192; + user.save((err) => { + if (err) throw err; + console.log("Current User is" + user); + return cb(null, user); + }); +} - function createNewUser(profile, isTeamLead, cb) { - console.log("You're new here"); - let newUser = new User({ - name: profile.displayName, - picture: profile.user.image_192, - slackID: profile.id, - isTeamLead: isTeamLead - }); - newUser.save().then((newUser) => { - console.log('New User Created' + newUser); - return cb(null, newUser); - }); - } +function createNewUser(profile, cb) { + console.log("You're new here"); + let newUser = new User({ + name: profile.displayName, + picture: profile.user.image_192, + slackID: profile.id, + }); + newUser.save().then((newUser) => { + console.log("New User Created" + newUser); + return cb(null, newUser); + }); +} - function findTeamLead(body, profile) { - let output = false; // Innocent until proven guilty - let obj = JSON.parse(body); - if (!obj.group) return false; - let members = obj.group.members; - let userID = profile.id; - members.forEach((member) => { -// console.log(`${member} == ${profile.id} ??`); - if (member == userID) { - output = true; - } - }); - return output; - } +function findTeamLead(body, profile) { + let output = false; // Innocent until proven guilty + let obj = JSON.parse(body); + if (!obj.group) return false; + let members = obj.group.members; + let userID = profile.id; + members.forEach((member) => { + // console.log(`${member} == ${profile.id} ??`); + if (member == userID) { + output = true; + } + }); + return output; +} diff --git a/controllers/crud.js b/controllers/crud.js index a45d7ae..05932e4 100755 --- a/controllers/crud.js +++ b/controllers/crud.js @@ -1,27 +1,26 @@ -const Sponsors = require('../models/sponsor'); -const Teamleads = require('../models/teamlead'); -const News = require('../models/news'); +const Sponsors = require("../models/sponsor"); +const Teamleads = require("../models/teamlead"); +const News = require("../models/news"); exports.getCrud = (req, res) => { - // temporarily changing to admins can access until teamleads issue sorted - if (!req.user || !req.user.isAdmin) { - req.flash('errors', { msg: 'You are not authorized to view that!' }); - return res.redirect('back'); - } - Sponsors.find({}, (err, spnsrList) => { + if (!req.user || !req.user.isTeamLead) { + req.flash("errors", { msg: "You are not authorized to view that!" }); + return res.redirect("back"); + } + Sponsors.find({}, (err, spnsrList) => { + if (err) throw err; + Teamleads.find({}, (err, leadsList) => { + if (err) throw err; + News.find({}, (err, newsList) => { if (err) throw err; - Teamleads.find({}, (err, leadsList) => { - if (err) throw err; - News.find({}, (err, newsList) => { - if (err) throw err; - return res.render('crud', { - user: req.user, - activeCRUD: true, - teamleads: leadsList, - sponsors: spnsrList, - news: newsList - }); - }); + return res.render("crud", { + user: req.user, + activeCRUD: true, + teamleads: leadsList, + sponsors: spnsrList, + news: newsList, }); + }); }); -} + }); +};