Skip to content
Open

Main #22

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
1 change: 0 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,6 @@ typings/
### VisualStudioCode ###
.vscode
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
Expand Down
4 changes: 3 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1,3 @@
# techperspective-back
[Team Collaboration Agreement](https://docs.google.com/document/d/1Ei7RcvOaHzeyUDbDCYfNEVa91ktPXAih2gQk4I0Fmmc/edit#heading=h.y52avp42q2jv)

Refer to front end repo README for documentation
25 changes: 14 additions & 11 deletions auth.js
Original file line number Diff line number Diff line change
@@ -1,26 +1,29 @@
'use strict';

// JSON Web token — JWT (pronounced JOT)
const jwt = require('jsonwebtoken');
// jwks — JSON web key set (pronounced ja-wicks)
const jwksClient = require('jwks-rsa');


const client = jwksClient({
jwksUri: process.env.JWKS_URI
});

function getKey(header, callback) {
client.getSigningKey(header.kid, function (err, key) {
console.error(err);
const signingKey = key.publicKey || key.rsaPublicKey;
function getKey(header, callback){
client.getSigningKey(header.kid, function(err, key) {
var signingKey = key.publicKey || key.rsaPublicKey;
callback(null, signingKey);
});
}

function verifyUser(req, errFirstOrUserCallbackFunction) {
try{
const token = req.headers.authorization.split(' ')[1];
console.log(token);
jwt.verify(token, getKey, {}, errFirstOrUserCallbackFunction);
function verifyUser (req, errorFirstOrUserCallbackFunction) {
try {
const token = req.headers.authorization.split(' ')[1]
jwt.verify(token, getKey, {}, errorFirstOrUserCallbackFunction);
} catch (error) {
errFirstOrUserCallbackFunction('Authorized Personnel Only, bye felicia!');
errorFirstOrUserCallbackFunction('Not authorized');
}
}

module.exports = verifyUser;
module.exports = verifyUser
1 change: 1 addition & 0 deletions modules/SurveyModel.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ const mongoose = require("mongoose");
const { Schema } = mongoose;

const surveySchema = new Schema({
surveyName: String,
surveyID: String,
createdOn: String,
submissionCount: Number,
Expand Down
8 changes: 5 additions & 3 deletions modules/cloneJotForm.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,16 @@
const axios = require('axios');
const Survey = require('./SurveyModel');

async function handleCloneJotFormSurvey(request, response) {
async function cloneJotFormSurvey(request, response) {
try {
const templateFormID = 213535497610053; //ryan's form
const templateFormID = 213535497610053; // template form - clarify w/ brook if needs update?
const url = `https://api.jotform.com/form/${templateFormID}/clone?apiKey=${process.env.JOTFORM_API}`;
const name = request.params.name;

const result = await axios.post(url);

const newSurveyData = {
surveyName: name,
surveyID: result.data.content.id,
createdOn: String(new Date()).split(' ').splice(1, 3).join('-'),
submissionCount: 0,
Expand All @@ -26,4 +28,4 @@ async function handleCloneJotFormSurvey(request, response) {
}
}

module.exports = handleCloneJotFormSurvey;
module.exports = cloneJotFormSurvey;
4 changes: 2 additions & 2 deletions modules/deleteSurveyResults.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
const verifyUser = require('../auth');
const Survey = require("./SurveyModel");

async function handleDeleteSurveyResults(req, res) {
async function deleteSurveyResults(req, res) {
const { id } = req.params;
const { email } = req.query;
verifyUser(req, async (err, user) => {
Expand All @@ -26,4 +26,4 @@ async function handleDeleteSurveyResults(req, res) {
});
}

module.exports = handleDeleteSurveyResults;
module.exports = deleteSurveyResults;
67 changes: 6 additions & 61 deletions modules/getActiveSurvey.js
Original file line number Diff line number Diff line change
@@ -1,70 +1,15 @@
'use strict';

const Survey = require('./SurveyModel');
const axios = require('axios');
const verifyUser = require('../auth');

async function handleGetActiveSurvey(req, res) {
// verifyUser(req, async (err, user) => {
// if (err) {
// console.error(err);
// res.send("Invalid Token");
// } else {
async function getActiveSurvey(req, res) {
try {
const activeSurvey = await Survey.findOne({ active: true });
// If there is no active survey send 204 and escape.
if (activeSurvey === null) {
return res.status(204);
}
const activeSurvey = await Survey.find({ active: true });

// Active survey exsists, GET ths survey information from JotForm using the survey ID.
const apiKey = process.env.JOTFORM_API;
const url = `https://api.jotform.com/form/${activeSurvey.surveyID}/submissions?apiKey=${apiKey}`;
const result = await axios.get(url);

// If the survey has submissions, parse through result object to pull out relevent information
if (result.data.content.length > 0) {
const surveyResponseArr = result.data.content.map(userReponseObj => Object.entries(userReponseObj.answers));
const surveyTrueCountArr = surveyResponseArr.map(answerArr => {
return answerArr.reduce((cntTrue, curVal) => {
return cntTrue + (curVal[1].answer === 'TRUE' ? 1 : 0);
}, 0);
});

const surveyResults = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];

for (let i = 0; i < surveyTrueCountArr.length; i++) {
surveyResults[surveyTrueCountArr[i] - 1]++;
}

const surveyData = {
_id: activeSurvey._id,
surveyID: result.data.content[0].form_id, // 213494408669063 url can be built in front end
createdOn: result.data.content[0].created_at.split(' ')[0], //date survey was created
submissionCount: result.data.resultSet.count, // count of total survey submissions
results: surveyResults, //array of total true counts
}

res.status(200).send(surveyData);

// If the survey has no submissions yet, send back empty placeholder survey object
} else {
const surveyData = {
_id: activeSurvey._id,
surveyID: activeSurvey.surveyID,
createdOn: String(new Date()).split(' ').splice(1, 3).join('-'),
submissionCount: 0,
results: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
}
res.status(200).send(surveyData);
}

} catch (e) {
console.error(e);
res.status(500).send("Server Error");
res.send(activeSurvey)
} catch (err) {
console.log(err)
}
}
// })
// }

module.exports = handleGetActiveSurvey;
module.exports = getActiveSurvey;
4 changes: 2 additions & 2 deletions modules/getJotForm.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

const axios = require('axios');

async function handleGetJotFormSurvey(request, response) {
async function getJotForm(request, response) {
const apiKey = process.env.JOTFORM_API;
const formID = request.query.surveyid;
const url = `https://api.jotform.com/form/${formID}/submissions?apiKey=${apiKey}`;
Expand Down Expand Up @@ -47,4 +47,4 @@ async function handleGetJotFormSurvey(request, response) {
}
}

module.exports = handleGetJotFormSurvey;
module.exports = getJotForm
30 changes: 30 additions & 0 deletions modules/getJotformResults.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
'use strict';

// RETRIEVES RESULTS FROM JOTFORM
const axios = require('axios');

async function getJotformResults(req, res) {
let url = `https://api.jotform.com/form/${req.params.id}/submissions?apiKey=${process.env.JOTFORM_API}`
const survey = await axios.get(url);
const jotFormSubmissionData = survey.data.content;

const results = jotFormSubmissionData.map((contentItem) => {
let answers = contentItem.answers
return Object.keys(answers).reduce((acc, current) => {
// remember current is just a key, acc starts at 0 and we increment if the answer is true.
if(answers[current].answer === 'TRUE') {
acc++
}
return acc
}, 0)
})

const data = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
results.forEach(num => {
data[num-1]++;
})

res.send(data);
}

module.exports = getJotformResults;
5 changes: 3 additions & 2 deletions modules/getSurveyResults.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
"use strict";

// RETRIEVES RESULTS FROM MONGO
const verifyUser = require('../auth');
const Survey = require("./SurveyModel");

async function handleGetSurveyResults(req, res) {
async function getSurveyResults(req, res) {
verifyUser(req, async (err, user) => {
if (err) {
console.error(err);
Expand All @@ -29,4 +30,4 @@ async function handleGetSurveyResults(req, res) {
});
}

module.exports = handleGetSurveyResults;
module.exports = getSurveyResults;
4 changes: 2 additions & 2 deletions modules/getUser.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

const verifyUser = require('../auth');

function handleGetUser(req, res, callbackFn) {
function getUser(req, res, callbackFn) {
verifyUser(req, (err, user) => {
if (err) {
res.send("Invalid Token");
Expand All @@ -12,4 +12,4 @@ function handleGetUser(req, res, callbackFn) {
});
}

module.exports = handleGetUser;
module.exports = getUser;
4 changes: 2 additions & 2 deletions modules/postSurveyResults.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ const { update } = require("./SurveyModel");
const verifyUser = require("../auth");
const Survey = require("./SurveyModel");

async function handlePostSurveyResults(req, res) {
async function postSurveyResults(req, res) {
const formID = req.body.surveyID;
if (formID === process.env.JOTFORM_TEMPLATE) {
console.log("Can Not Delete Template");
Expand Down Expand Up @@ -35,4 +35,4 @@ async function handlePostSurveyResults(req, res) {
}
}

module.exports = handlePostSurveyResults;
module.exports = postSurveyResults;
22 changes: 11 additions & 11 deletions node_modules/.package-lock.json

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

Loading