mirror of
https://github.com/danbulant/bakalari.js
synced 2026-06-11 02:40:14 +00:00
77 lines
2 KiB
JavaScript
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;
|