-
Notifications
You must be signed in to change notification settings - Fork 0
/
auth.js
50 lines (38 loc) · 1.39 KB
/
auth.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
const crypto = require('crypto')
const got = require('got');
// Generate the relevant auth headers
exports.genAuthSettings = async (options) => {
let urn = new URL(options.url);
console.log("Generating Auth Settings:"+JSON.stringify(options))
let authResponse = await got.get(`${urn.protocol}//${urn.host}/authenticate/${options.user}`, { https: { rejectUnauthorized: false, requestCert: false } }).json()
const salt = authResponse.salt
// create passhash
let shasum = crypto.createHash('sha512')
shasum.update(salt + options.password)
const passhash = shasum.digest('hex')
// define request headers with auth credentials
return {
authSalt: salt,
authHash: passhash,
}
}
exports.getAuthHeader = async(url, user, pw, rua) => {
let urn = new URL(url);
console.log("Getting auth header")
let authResponse = await got.get(`${urn.protocol}//${urn.host}/authenticate/${user}`, { https: { rejectUnauthorized: false, agent: false, requestCert: true } }).json()
const salt = authResponse.salt;
let shasum = crypto.createHash('sha512');
shasum.update(salt + pw);
let passhash = shasum.digest('hex')
let now = new Date();
shasum = crypto.createHash('sha512');
shasum.update(passhash + salt + now);
let token = shasum.digest('hex');
let headers = {
'auth-username': user,
'auth-ts': now,
'auth-salt': salt,
'auth-token': token
};
return headers;
}