· 6 years ago · Feb 17, 2019, 04:34 AM
1/**
2 * Created by masudurrahman on 1/19/17.
3 */
4
5var jwt = require('atlassian-jwt');
6var hashes = require('jshashes');
7
8var Client = function Client() {
9 if (arguments.length === 0) {
10 throw new Error('an array of BASE_URL, ACCESS_KEY, SECRET_KEY, ACCOUNT_ID is required');
11 }
12
13 var self = this;
14 self.BASE_URL=arguments[0];
15 self.ACCESS_KEY=arguments[1];
16 self.SECRET_KEY=arguments[2];
17 self.ACCOUNT_ID=arguments[3];
18 self.HASH_LIB=new hashes.SHA256;
19
20 return self;
21}
22
23Client.prototype.generateJWT = function(){
24
25 if (arguments.length === 0) {
26 throw new Error('an array of METHOD, URI, JWT_EXPIRE is required');
27 }
28
29 var self = this;
30 var RELATIVE_PATH = arguments[1].split(self.BASE_URL)[1].split("?")[0];
31 var QUERY_STRING = arguments[1].split(self.BASE_URL)[1].split("?")[1];
32 var CANONICAL_PATH;
33 if(QUERY_STRING) {
34 CANONICAL_PATH = arguments[0]+'&'+RELATIVE_PATH+'&'+QUERY_STRING;
35 } else {
36 CANONICAL_PATH = arguments[0]+'&'+RELATIVE_PATH+'&';
37 }
38 jwt_payload = {
39 'sub': self.ACCOUNT_ID,
40 'qsh': self.HASH_LIB.hex(CANONICAL_PATH),
41 'iss': self.ACCESS_KEY,
42 'exp': new Date().getTime()+arguments[2],
43 'iat': new Date().getTime()
44 }
45
46 var token = jwt.encode(jwt_payload, self.SECRET_KEY);
47
48 return token;
49}
50
51module.exports = Client;