diff --git a/index.js b/index.js new file mode 100644 index 0000000..c8df3d2 --- /dev/null +++ b/index.js @@ -0,0 +1,77 @@ +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;