bakalari.js/index.js
2020-01-30 16:27:50 +01:00

77 lines
2 KiB
JavaScript

const got = require("got");
const parser = require('fast-xml-parser');
const crypto = require("crypto");
class Api {
name = "";
pswd = "";
salt = "";
token = null;
domain = "";
genToken() {
const shasum = crypto.createHash("sha512");
const shasum2 = crypto.createHash("sha512");
shasum2.update(this.salt + this.pswd, "utf-8");
var hashedPassword = shasum2.digest("base64");
function dateToYMD(date) { //https://stackoverflow.com/a/43365158
var d = date.getDate();
var m = date.getMonth() + 1; //Month from 0 to 11
var y = date.getFullYear();
return '' + y + '' + (m <= 9 ? '0' + m : m) + '' + (d <= 9 ? '0' + d : d);
}
var tokenString = "*login*";
tokenString += this.name;
tokenString += "*pwd*";
tokenString += hashedPassword;
tokenString += "*sgn*ANDR";
tokenString += dateToYMD(new Date());
shasum.update(tokenString, "utf-8");
var token = shasum.digest("base64");
token = token.replace(/[\\|\/]/gi, "_")
.replace(/\+/gi, "-");
this.token = token;
}
setName(name){
this.name = name;
}
async verifyName(){
var res = await got(`https://${this.domain}/login.aspx?gethx=${this.name}`);
try {
var r = parser.parse(res.body);
if(r.results.res == 1)return r.results;
} catch(e){
console.error(e);
}
return false;
}
async genSalt(){
var res = await this.verifyName();
if(!res) return false;
this.salt = res.salt + res.ikod + res.typ;
return true;
}
setPassword(pswd){
this.pswd = pswd;
}
setDomain(dom){
this.domain = dom;
}
async request(pm){
var res = await got(`https://${this.domain}/login.aspx?hx=${this.token}&pm=${pm}`);
return parser.parse(res.body);
}
}
module.exports = Api;