mirror of
				https://git.coolaj86.com/coolaj86/telebit.js.git
				synced 2025-11-04 02:32:47 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			44 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			44 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
'use strict';
 | 
						|
 | 
						|
var crypto = require('crypto');
 | 
						|
var JWT = module.exports;
 | 
						|
 | 
						|
JWT.decode = function (jwt) {
 | 
						|
  var parts;
 | 
						|
 | 
						|
  try {
 | 
						|
    parts = jwt.split('.');
 | 
						|
    return {
 | 
						|
      header: JSON.parse(Buffer.from(parts[0], 'base64'))
 | 
						|
    , payload: JSON.parse(Buffer.from(parts[1], 'base64'))
 | 
						|
    , signature: parts[2] //Buffer.from(parts[2], 'base64')
 | 
						|
    };
 | 
						|
  } catch(e) {
 | 
						|
    throw new Error("JWT Parse Error: could not split, base64 decode, and JSON.parse token " + jwt);
 | 
						|
  }
 | 
						|
};
 | 
						|
 | 
						|
JWT.verify = function (jwt) {
 | 
						|
  var decoded = JWT.decode(jwt);
 | 
						|
  throw new Error("not implemented yet");
 | 
						|
};
 | 
						|
 | 
						|
function base64ToUrlSafe(str) {
 | 
						|
  return str
 | 
						|
    .replace(/\+/g, '-')
 | 
						|
    .replace(/\//g, '_')
 | 
						|
    .replace(/=/g, '')
 | 
						|
  ;
 | 
						|
}
 | 
						|
 | 
						|
JWT.sign = function (claims, key) {
 | 
						|
  if (!claims.iat && false !== claims.iat) {
 | 
						|
    claims.iat = Math.round(Date.now()/1000);
 | 
						|
  }
 | 
						|
  var thumb = base64ToUrlSafe(crypto.createHash('sha256').update(key).digest('base64'));
 | 
						|
  var protect = base64ToUrlSafe(Buffer.from(JSON.stringify({ alg: 'HS256', typ: 'JWT', kid: thumb })).toString('base64'));
 | 
						|
  var payload = base64ToUrlSafe(Buffer.from(JSON.stringify(claims)).toString('base64'));
 | 
						|
  var signature = base64ToUrlSafe(crypto.createHmac('sha256', key).update(protect + '.' + payload).digest('base64'));
 | 
						|
  return protect + '.' + payload + '.' + signature;
 | 
						|
};
 |