diff --git a/src/lib/utils.js b/src/lib/utils.js index 428b703..667d99e 100644 --- a/src/lib/utils.js +++ b/src/lib/utils.js @@ -50,17 +50,6 @@ teamsnapMembersSortAvailabilityLastName = (a, b) => { } exports.teamsnapMembersSortAvailabilityLastName = teamsnapMembersSortAvailabilityLastName -exports.initTeamsnap = (req, res, next) => { - if (!teamsnap.isAuthed()) { - teamsnap.init(process.env["TEAMSNAP_CLIENT_ID"]); - teamsnap.auth(req.user.accessToken); - } - teamsnap.loadCollections((err) => { - teamsnap.enablePersistence(); - next(req, res, next); - }); -}; - exports.teamsnapCallback = (err,result, d) => { if (Array.isArray(result)){ types = new Set(result.map(i=>i.type)) diff --git a/src/routes/auth.js b/src/routes/auth.js index ee10f0a..8b09b30 100644 --- a/src/routes/auth.js +++ b/src/routes/auth.js @@ -1,6 +1,7 @@ -var express = require("express"); -var passport = require("passport"); -var TeamsnapStrategy = require("passport-teamsnap"); +const express = require("express"); +const passport = require("passport"); +const TeamsnapStrategy = require("passport-teamsnap"); +const {teamsnapCallback} = require('../lib/utils') // const {teamsnap} = require("../app"); // Configure the TeamSnap strategy for use by Passport. // @@ -21,20 +22,17 @@ passport.use( proxy: true }, async function (req, accessToken, refreshToken, profile, done) { - json = JSON.parse(profile._raw); - field_from_collection = (field_name) => { - return json.collection.items[0].data.filter( - (e) => e.name == field_name - )[0].value; - } - const new_profile = { access_token: accessToken }; - new_profile["id"] = field_from_collection("id") - new_profile["email"] = field_from_collection("email") - new_profile["first_name"] = field_from_collection("first_name") - new_profile["last_name"] = field_from_collection("last_name") + // json = JSON.parse(profile._raw); + const new_profile = { + access_token: accessToken, + }; + ['id', 'email', 'first_name', 'last_name', 'managed_team_ids'].forEach( + k => { + new_profile[k] = profile.data[0].get(k) + }) req.session.teamsnap_access_token = accessToken; - await initTeamsnap(process.env["TEAMSNAP_CLIENT_ID"], accessToken) + await initTeamsnap(accessToken) return done(null, new_profile); } ) @@ -59,6 +57,7 @@ passport.serializeUser(function (user, cb) { first_name: user.first_name, last_name: user.last_name, accessToken: user.access_token, + managed_team_ids: user.managed_team_ids }); }); }); @@ -66,10 +65,12 @@ passport.serializeUser(function (user, cb) { passport.deserializeUser(function (user, cb) { process.nextTick(async function () { console.log("L#68 deserializing user id", user.id); - if (!teamsnap.isAuthed()){ - await initTeamsnap(process.env["TEAMSNAP_CLIENT_ID"], user.accessToken) + try { + await initTeamsnap(user.accessToken) + return cb(null, user); + } catch (err) { + return cb(err) } - return cb(null, user); }); }); @@ -86,9 +87,11 @@ var router = express.Router(); router.get("/login", function (req, res, next) { // https://stackoverflow.com/a/73056806/20522015 returnTo = req.session.returnTo; - // req.session.regenerate(); // this is not working right as of now... - req.session.returnTo = returnTo; - res.render("login", {layout:"layouts/main"}); + if (req.user.accessToken){ + res.redirect(returnTo || "/"); + } else { + res.render("login", {layout:"layouts/main"}); + } }); /* GET /login/federated/teamsnap @@ -125,10 +128,9 @@ router.get( }) ); -const initTeamsnap = async (clientID, accessToken) => { - teamsnap.init(clientID); - teamsnap.auth(accessToken); - await teamsnap.loadCollections(); +const initTeamsnap = async (accessToken) => { + await teamsnap.auth(accessToken); + await teamsnap.loadCollections(teamsnapCallback); await teamsnap.enablePersistence(); } @@ -138,7 +140,7 @@ const ensureLoggedIn = (req, res, next) => { res.redirect("/login"); // return next(); } - else{ + else { req.user = req.session.passport.user next(); }