Skip to content

Commit

Permalink
events module
Browse files Browse the repository at this point in the history
  • Loading branch information
ronan18 committed Apr 28, 2020
1 parent f16b2c1 commit 9e2e696
Show file tree
Hide file tree
Showing 5 changed files with 246 additions and 0 deletions.
2 changes: 2 additions & 0 deletions app.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ var applicationsRouter = require('./routes/applications');
var adminAuthRouter = require('./routes/adminAuth');
var adminRosterRouter = require('./routes/roster');
var statusRouter = require('./routes/status');
var eventsRouter = require('./routes/events');

var app = express();
app.use(cors())
Expand All @@ -31,6 +32,7 @@ app.use('/api/v1/apply', applyRouter);
app.use('/api/v1/admin/applications', applicationsRouter);
app.use('/api/v1/admin/auth', adminAuthRouter);
app.use('/api/v1/admin/roster', adminRosterRouter);
app.use('/api/v1/admin/events', eventsRouter);
app.use('/api/v1/status', statusRouter);
/*
// catch 404 and forward to error handler
Expand Down
5 changes: 5 additions & 0 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
"dev": "DEBUG=2020-backend:* npm start"
},
"dependencies": {
"async": "^3.2.0",
"cookie-parser": "~1.4.4",
"cors": "^2.8.5",
"debug": "~2.6.9",
Expand Down
191 changes: 191 additions & 0 deletions routes/events.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,191 @@
var express = require('express');
var router = express.Router();
const emailValidator = require("email-validator");
const fetch = require('node-fetch');
const keys = require("../private/keys")
const sengridEndpoint = "https://api.sendgrid.com"
const sengridAuthorization = `Bearer ${keys.sendgrid}`
var admin = require('firebase-admin');
const moment = require('moment-timezone')
const async = require("async");
/* /api/v1/apply*/
const MongoClient = require('mongodb').MongoClient;

const client = new MongoClient(keys.mongo, {useNewUrlParser: true});
client.connect(err => {
console.log(err)
const db = client.db("hyphen-hacks")

function bytes(s) {
return ~-encodeURI(s).split(/%..|./).length
}

function jsonSize(s) {
return bytes(JSON.stringify(s))
}

let verifyEmail = async (email) => {
console.log(email, 'email')
if (email.endsWith("hyphen-hacks.com")) {
return email.endsWith("hyphen-hacks.com")
} else {
let authEmailed = await db.collection("authorizedEmails").find({email: email}).toArray()

return authEmailed.length >= 1
}
}


/* /api/v1/admin/events/ */

router.get("/", (req, res) => {
let origin = req.get('origin')
console.log("request", origin, req.body)
if (keys.whitelistedHosts.indexOf(origin) > -1) {
admin.auth().verifyIdToken(req.headers.authorization)
.then(async function (decodedToken) {
let uid = decodedToken.uid;
admin.auth().getUser(uid)
.then(async function (userRecord) {
// See the UserRecord reference doc for the contents of userRecord.

let email = userRecord.toJSON().email
if (await verifyEmail(email) === true) {
let events = await db.collection("events").find().limit(100).toArray()
let indexedNames = {}
await async.forEachOf(events, async (event, key, callback) => {
console.log(event, "event")
let authorizor = ""
let person = ""
if (event.authorizer) {
if (indexedNames[event.authorizer]) {
authorizor = indexedNames[event.authorizer]
} else {
let user = await admin.auth().getUser(event.authorizer)
console.log(user.displayName)
indexedNames[event.authorizer] = user.displayName
authorizor = user.displayName
}

}
if (event.id) {
if (indexedNames[event.id]) {
person = indexedNames[event.id]
console.log("indexed", person)
} else {
let user = await db.collection('people').find({_id: event.id}, {
projection: {
firstName: 1, lastName: 1, _id: 1
}
}).toArray()
if (user.length >= 1) {
user = user[0]
// console.log(user, "userRecord people")
indexedNames[event.id] = user.firstName + " " + user.lastName
person = user.firstName + " " + user.lastName
console.log("people", user.firstName + " " + user.lastName)
} else {
user = await db.collection('applicants').find({_id: event.id}, {
projection: {
firstName: 1, lastName: 1, _id: 1
}
}).toArray()
if (user.length >= 1) {
user = user[0]
// console.log(user, "user record applicants")
indexedNames[event.id] = user.firstName + " " + user.lastName
person = user.firstName + " " + user.lastName
console.log("applicants", user.firstName + " " + user.lastName)
} else {
user = await db.collection('declined').find({_id: event.id}, {
projection: {
firstName: 1, lastName: 1, _id: 1
}
}).toArray()
user = user[0]
// console.log(user, "user record declined")
indexedNames[event.id] = user.firstName + " " + user.lastName
person = user.firstName + " " + user.lastName
console.log("declined", user.firstName + " " + user.lastName)
}
}

}
}
console.log(person, authorizor, event.event, "done")
switch (event.event) {
case "attendeeSignUp":
events[key].userDescription = `${person} applied to attend`
return
case "mentorSignUp":
events[key].userDescription = `${person} applied to mentor`
return
case "volunteerSignUp":
events[key].userDescription = `${person} applied to volunteer`
return
case "attendeeAccepted":
events[key].userDescription = `${authorizor} accepted ${person}'s attendee application`
return
case "mentorAccepted":
events[key].userDescription = `${authorizor} accepted ${person}'s mentor application`
return
case "volunteerAccepted":
events[key].userDescription = `${authorizor} accepted ${person}'s volunteer application`
return
case "mentorDeclined":
events[key].userDescription = `${authorizor} declined ${person}'s mentor application`
return
case "volunteerDeclined":
events[key].userDescription = `${authorizor} declined ${person}'s volunteer application`
return
case "attendeeDeclined":
events[key].userDescription = `${authorizor} declined ${person}'s attendee application`
return
case "attendeeResubmit":
events[key].userDescription = `${person} resubmitted their attendee application`
return
case "mentorResubmit":
events[key].userDescription = `${person} resubmitted their mentor application`
return
case "volunteerResubmit":
events[key].userDescription = `${person} resubmitted their volunteer application`
return
default :
events[key].userDescription = `${event.event}`
return
}

}).catch(err => {
console.log(err, "async err")
})
console.log(indexedNames, "indexDB")
res.status(200)
res.send({events: events})
res.end()
} else {
res.status(401)
res.send({error: "not authorized"})
res.end()
}


})


}).catch(function (error) {
console.log(error)
res.status(401)
res.send({error: "authorizing"})
res.end()
});

} else {
res.status(401)
res.send({error: "unsecure request"})
res.end()
}
})
})


module.exports = router;
47 changes: 47 additions & 0 deletions routes/roster.js
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,53 @@ client.connect(err => {
res.end()
}
})
router.get("/:role", (req, res) => {
let origin = req.get('origin')
console.log("request", origin, req.body)
if (keys.whitelistedHosts.indexOf(origin) > -1) {
admin.auth().verifyIdToken(req.headers.authorization)
.then(async function (decodedToken) {
let uid = decodedToken.uid;
admin.auth().getUser(uid)
.then(async function (userRecord) {
// See the UserRecord reference doc for the contents of userRecord.

let email = userRecord.toJSON().email
if (await verifyEmail(email) === true) {
try {
let applications = await db.collection("people").find({role: req.params.role}).toArray()
res.status(200)
res.send({roster: applications, type: req.params.role})
res.end()
} catch (err) {
console.log(err)
res.status(500)
res.send({error: "internal server error"})
res.end()
}
} else {
res.status(401)
res.send({error: "not authorized"})
res.end()
}


})


}).catch(function (error) {
console.log(error)
res.status(401)
res.send({error: "authorizing"})
res.end()
});

} else {
res.status(401)
res.send({error: "unsecure request"})
res.end()
}
})
})


Expand Down

0 comments on commit 9e2e696

Please sign in to comment.