Skip to content
This repository was archived by the owner on Jan 2, 2026. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
154 changes: 77 additions & 77 deletions config/passport.js
Original file line number Diff line number Diff line change
@@ -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);
Expand All @@ -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;
}
43 changes: 21 additions & 22 deletions controllers/crud.js
Original file line number Diff line number Diff line change
@@ -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,
});
});
});
}
});
};