From 2a2eb0782321e5b8e2361f3f3de4c1673f771d4d Mon Sep 17 00:00:00 2001 From: Anthony Correa Date: Sun, 17 Mar 2024 10:46:18 -0500 Subject: [PATCH 01/14] cleanup some auth stuff --- src/lib/utils.js | 11 ---------- src/routes/auth.js | 54 ++++++++++++++++++++++++---------------------- 2 files changed, 28 insertions(+), 37 deletions(-) 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(); } From 00b270e0f62418d52dc4ade5563987e8f9211d37 Mon Sep 17 00:00:00 2001 From: Anthony Correa Date: Mon, 18 Mar 2024 20:10:54 -0500 Subject: [PATCH 02/14] fix event sheet (flags using set, not array) --- src/controllers/eventsheet.js | 2 +- src/helpers/eventsheet.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/controllers/eventsheet.js b/src/controllers/eventsheet.js index 2256577..3649901 100644 --- a/src/controllers/eventsheet.js +++ b/src/controllers/eventsheet.js @@ -82,7 +82,7 @@ exports.getLineupCard = (req, res, next) => { availabilities: items.filter((i) => i.type == "availability").sort(tsUtils.teamsnapMembersSortLineupAvailabilityLastName), all_lineup_entries: items.filter((i) => i.type == "eventLineupEntry"), event_lineup_entries_offense: items - .filter((i) => i.type == "eventLineupEntry" && i.eventId == event_id && !i.label.includes("[PO]")) + .filter((i) => i.type == "eventLineupEntry" && i.eventId == event_id && !i.label.has("[PO]")) .sort((a, b) => a.sequence - b.sequence), event_lineup_entries: items .filter((i) => i.type == "eventLineupEntry" && i.eventId == event_id) diff --git a/src/helpers/eventsheet.js b/src/helpers/eventsheet.js index 797613c..2222bb4 100644 --- a/src/helpers/eventsheet.js +++ b/src/helpers/eventsheet.js @@ -7,7 +7,7 @@ exports.offenseLineup = (number_of_slots, event_lineup_entries, members, options for (let i = 0; i < number_of_slots; i++){ const event_lineup_entry = event_lineup_entries ? event_lineup_entries[i] : null - if (event_lineup_entry && !parsePositionLabel(event_lineup_entry.label).positionFlags.includes('PO')){ + if (event_lineup_entry && !parsePositionLabel(event_lineup_entry.label).positionFlags.has('PO')){ results += options.fn({ sequence: event_lineup_entry.sequence, member: members.find(member=> event_lineup_entry.memberId == member.id || event_lineup_entry.memberName == `${member.firstName} ${member.lastName}`), From 2b497a0227d1e640441c952bada11240a870a18a Mon Sep 17 00:00:00 2001 From: Anthony Correa Date: Mon, 18 Mar 2024 20:11:52 -0500 Subject: [PATCH 03/14] fix recent, upcoming date picking --- src/middlewares/bulkload.js | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/middlewares/bulkload.js b/src/middlewares/bulkload.js index a7b7f3a..7b95285 100644 --- a/src/middlewares/bulkload.js +++ b/src/middlewares/bulkload.js @@ -1,25 +1,26 @@ exports.loadRecentAndUpcomingEvents = async (req, res, next) => { const {team_id, event_id} = req.params const page_size = req.query.page_size ? Number(req.query.page_size) : 4 - var subject_date = "" + var subject_date if (event_id) { const event = await teamsnap.loadEvents({id: event_id}).pop() - subject_date = event.startDate.toISOString().slice(0,10) + const new_date = new Date(event.startDate.getTime()+10000); + subject_date = event.startDate } else { - subject_date = new Date().toISOString().slice(0,10) + subject_date = new Date() } req.promises.push( teamsnap.bulkLoad({ teamId: team_id, types: ["event", "availabilitySummary"], scopeTo: "event", - event__startedAfter: subject_date, - event__pageSize: page_size + 1 + event__startedAfter: new Date(subject_date.getTime()+10000), + event__pageSize: page_size }) .then(items => tsUtils.groupTeamsnapItems(items)) .then((items)=>{ - req.upcoming_events=items.events ? items.events.slice(1) : []; + req.upcoming_events=items.events ? items.events : []; const availabilitySummaries=items.availabilitySummaries; req.upcoming_events.forEach((event) => { event.link('availabilitySummary', availabilitySummaries.find(a=>a.eventId==event.id)) @@ -32,7 +33,7 @@ exports.loadRecentAndUpcomingEvents = async (req, res, next) => { teamId: team_id, types: ["event", "availabilitySummary"], scopeTo: "event", - event__startedBefore: subject_date, + event__startedBefore: new Date(subject_date.getTime()-10000), event__pageSize: page_size, event__sortStartDate: "desc" }) From 99d376af4c3f8d9faafe84fe35cc2fa986ba6b3c Mon Sep 17 00:00:00 2001 From: Anthony Correa Date: Mon, 18 Mar 2024 20:12:12 -0500 Subject: [PATCH 04/14] re-enable 404 catchall --- src/app.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/app.js b/src/app.js index e289029..8c04c85 100644 --- a/src/app.js +++ b/src/app.js @@ -169,8 +169,8 @@ app.use(function (err, req, res, next) { }); // catch 404 and forward to error handler -// app.use(function (req, res, next) { -// next(createError(404)); -// }); +app.use(function (req, res, next) { + next(createError(404)); +}); module.exports = {app}; \ No newline at end of file From 2df02e745288a22c77760ac22840bab193fd0283 Mon Sep 17 00:00:00 2001 From: Anthony Correa Date: Mon, 18 Mar 2024 20:12:41 -0500 Subject: [PATCH 05/14] auth fix --- src/routes/auth.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/routes/auth.js b/src/routes/auth.js index 8b09b30..c78f778 100644 --- a/src/routes/auth.js +++ b/src/routes/auth.js @@ -87,7 +87,7 @@ var router = express.Router(); router.get("/login", function (req, res, next) { // https://stackoverflow.com/a/73056806/20522015 returnTo = req.session.returnTo; - if (req.user.accessToken){ + if (req.user?.accessToken){ res.redirect(returnTo || "/"); } else { res.render("login", {layout:"layouts/main"}); From e4f6576847101b5c4c7abbb25c4ad2825384164e Mon Sep 17 00:00:00 2001 From: Anthony Correa Date: Mon, 18 Mar 2024 20:13:40 -0500 Subject: [PATCH 06/14] more fixes for flag set vs. array --- src/lib/utils.js | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/lib/utils.js b/src/lib/utils.js index 667d99e..5608a57 100644 --- a/src/lib/utils.js +++ b/src/lib/utils.js @@ -156,7 +156,19 @@ exports.compilePositionLabel = (label, flags) => { return label } else { - const flags_set = new Set(flags.split(',').map(s=>s.trim())) + const flags_set = toFlagsSet(flags) return `${label} [${Array.from(flags_set).sort().join(',')}]` } +} + +function toFlagsSet(flags) { + let flags_set + if (typeof(flags) == 'string'){ + const flags_set = new Set(flags.split(',').map(s=>s.trim())) + } else if (flags.constructor === Array){ + flags_set = new Set(flags) + } else if (flags.constructor === Set){ + flags_set = flags + } + return flags_set } \ No newline at end of file From 16b1402c6fa26c9e522d1399255bc13d2b2b5436 Mon Sep 17 00:00:00 2001 From: Anthony Correa Date: Mon, 18 Mar 2024 20:14:24 -0500 Subject: [PATCH 07/14] re-add margin for panels of panels --- src/scss/application.scss | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/scss/application.scss b/src/scss/application.scss index 6eccbe1..7bdda80 100644 --- a/src/scss/application.scss +++ b/src/scss/application.scss @@ -354,10 +354,10 @@ div[id^="event-lineup"] .Panel { .Panel .Panel{ // padding: 0; // border-radius: 0; - border: none; + // border: none; // border-top: 1px solid #d6d6d6; // border-bottom: 1px solid #d6d6d6; - margin: 0; + margin: 8px; } .scroll-horizontal { From 4b56259b98a30ae09453400068a9c21a27b4b8df Mon Sep 17 00:00:00 2001 From: Anthony Correa Date: Mon, 18 Mar 2024 20:14:52 -0500 Subject: [PATCH 08/14] fix change game card -> game sheet --- src/views/eventlineup/edit.hbs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/views/eventlineup/edit.hbs b/src/views/eventlineup/edit.hbs index a988282..5134103 100644 --- a/src/views/eventlineup/edit.hbs +++ b/src/views/eventlineup/edit.hbs @@ -25,9 +25,9 @@ Generate Email