UNPKG

pcdcpoints

Version:

Return point values for each team at Palmetto Cyber Defence Challenge 2018

79 lines (68 loc) 2.02 kB
const request = require('request'); const parseString = require('xml2js').parseString; const URL = 'http://pcdc2018.s3-website-us-east-1.amazonaws.com/PCDC_Scoring2018.xml'; const NUM_TEAMS = 8; class Scores { constructor () {} init(cb) { request.get(URL, (err, resp, body) => { if (err) return cb(err); if (resp.statusCode >= 300 || resp.statusCode < 200) { return cb('Error getting page'); } parseString(body, (err, result) => { if (err) return cb(err); this.webData = result.liveData; return cb(null); }); }); } getId(number) { return `Team${number}Data`; } getTeam(number) { const id = this.getId(number); return this.webData[id] } getTeamPoints(number) { const id = this.getId(number); let score = 0; this.webData[id].forEach(box => { let boxScore = parseInt(box.TeamScore[0]); score += boxScore; }); return score; } getScores() { let scores = []; for (let i = 1; i <= NUM_TEAMS; i++){ scores.push(this.getTeamPoints(i)); } return scores; } // Example: // { "HR": { score: 160, passed: 4, failed: 11 }, "DC01"... } getTeamBoxes(number) { let ret = {}; this.getTeam(number).forEach(box => { let name = box.ServiceName[0]; ret[name] = { score: parseInt(box.TeamScore[0]), passed: parseInt(box.Passed[0]), failed: parseInt(box.Failed[0]), ip: box.HostName[0], passing: box.TeamStatus[0] == "Passed" }; }); return ret; } // @tillson toAPI() { let ret = []; for (let i = 1; i <= NUM_TEAMS; i++){ ret.push(this.getTeamBoxes(i)); } return ret; } } module.exports = Scores;