all files / express-stormpath/lib/helpers/ revoke-token.js

75% Statements 12/16
50% Branches 3/6
66.67% Functions 6/9
75% Lines 12/16
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                                                                     
'use strict';
 
var njwt = require('njwt');
 
/**
 * Revoke a token.
 *
 * @method
 * @private
 *
 * @param {tokenResolverFn} tokenResolver - Function that resolves a token of some kind.
 * @param {string} jwt - Raw JWT.
 * @param {string} jwtSigningKey - Secret used to sign the JWT.
 * @param {callbackFn} callback - Optional callback.
 */
function revokeToken(tokenResolver, jwt, jwtSigningKey, callback) {
  callback = callback || function () {};
 
  process.nextTick(function () {
    njwt.verify(jwt, jwtSigningKey, function (err, verifiedJwt) {
      Iif (err) {
        return callback(err);
      }
 
      tokenResolver(verifiedJwt.body.jti, function (err, token) {
        Iif (err) {
          return callback(err);
        }
 
        token.delete(callback);
      });
    });
  });
}
 
module.exports = {
  revokeAccessToken: function (client, jwt, jwtSigningKey, callback) {
    revokeToken(function (id, onTokenResult) {
      client.getAccessToken('/accessTokens/' + id, onTokenResult);
    }, jwt, jwtSigningKey, callback);
  },
  revokeRefreshToken: function (client, jwt, jwtSigningKey, callback) {
    revokeToken(function (id, onTokenResult) {
      client.getRefreshToken('/refreshTokens/' + id, onTokenResult);
    }, jwt, jwtSigningKey, callback);
  }
};