37 lines
		
	
	
		
			738 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			37 lines
		
	
	
		
			738 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 'use strict';
 | |
| 
 | |
| var Keypairs = require('keypairs');
 | |
| 
 | |
| module.exports.getToken = function(serviceAccount) {
 | |
| 	var jwt = '';
 | |
| 	var exp = 0;
 | |
| 
 | |
| 	if (exp - Date.now() > 0) {
 | |
| 		return Promise.resolve(jwt);
 | |
| 	}
 | |
| 
 | |
| 	return module.exports.generateToken(serviceAccount).then(function(_jwt) {
 | |
| 		jwt = _jwt;
 | |
| 		exp = Math.round(Date.now()) - 15 * 60 * 60 * 1000;
 | |
| 		return jwt;
 | |
| 	});
 | |
| };
 | |
| 
 | |
| module.exports.generateToken = function(serviceAccount) {
 | |
| 	var sa = serviceAccount;
 | |
| 	return Keypairs.import({ pem: sa.private_key }).then(function(key) {
 | |
| 		return Keypairs.signJwt({
 | |
| 			jwk: key,
 | |
| 			iss: sa.client_email,
 | |
| 			exp: '1h',
 | |
| 			header: {
 | |
| 				kid: sa.private_key_id
 | |
| 			},
 | |
| 			claims: {
 | |
| 				aud: 'ndev.clouddns.readwrite',
 | |
| 				sub: sa.client_email
 | |
| 			}
 | |
| 		});
 | |
| 	});
 | |
| };
 |