diff --git a/api.js b/api.js index 3cd39ca..17d9d7b 100644 --- a/api.js +++ b/api.js @@ -2,7 +2,7 @@ var request = require("request"); request = request.defaults({jar: true}); const sources = require('./sources.json'); -const scraper = require('./scraper.js') +const $ = require('cheerio'); module.exports = { login: (user, pass, next) => { @@ -18,13 +18,26 @@ module.exports = { } }, (err, res, body) => { if (!err && res.statusCode == 200) { - next(null, res.headers['set-cookie']); + var msg = $('meta',body).attr('content'); + next(null, res.headers['set-cookie'], msg.slice( + msg.indexOf('Welcome,+')+9, + msg.indexOf('+to+the+Rensselaer')-1 + )); } else { next(err); } }); }); }, + get_current_term: (next) => { + request.get(sources.sis.classes, (err, res, html) => { + if (!err) { + //success! + next(null, $('option', '#term_id', html).attr('value')); + } + else next(err); + }); + }, yacs: { departments: (next) => { request.get(sources.yacs.departments, (err, res, body) => { diff --git a/index.js b/index.js index fb02c7f..f0efa95 100644 --- a/index.js +++ b/index.js @@ -25,11 +25,19 @@ function auth(req,res,next) { // This will take all routes and translate from SIS +// The login route has a lot going on; this takes a few key bits of information from SIS at once + app.post("/login", (req,res) => - api.login(req.query.user, req.query.pass, (err, cookie) => { + api.login(req.query.user, req.query.pass, (err, cookie, name) => { if (!err) { if (cookie[0].startsWith("SESSID=;")) res.send("No SESSID returned"); - else res.send(cookie[0].replace("SESSID=", "")); + else api.get_current_term((err, term) => { + var reply = new Object(); + reply.term = term; + reply.sessid = cookie[0].replace("SESSID=", ""); + reply.name = name; + res.send(JSON.stringify(reply)); + }); } else res.send(err); }) diff --git a/scraper.js b/scraper.js deleted file mode 100644 index e69de29..0000000 diff --git a/sources.json b/sources.json index 5e5ac3b..bc84d3a 100644 --- a/sources.json +++ b/sources.json @@ -1,6 +1,7 @@ { "sis": { - "login": "https://sis.rpi.edu/rss/twbkwbis.P_ValLogin" + "login": "https://sis.rpi.edu/rss/twbkwbis.P_ValLogin", + "classes": "https://sis.rpi.edu/rss/bwskfreg.P_AltPin" }, "yacs": { "departments": "https://yacs.cs.rpi.edu/api/v5/schools.json?show_departments=true"