js-web-tools
Version:
Tools for Javascript develpers
161 lines (118 loc) • 5.31 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = exports.JWT = exports.AUTH_SCHEMA = void 0;
var _jsonwebtoken = _interopRequireDefault(require("jsonwebtoken"));
var _utils = require("./utils");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
var AUTH_SCHEMA = 'Bearer';
exports.AUTH_SCHEMA = AUTH_SCHEMA;
var DEFAULT_CONFIG = {
authSchema: AUTH_SCHEMA,
privateKey: '37LvDSm4XvjYOh9Y'
};
var DEFAULT_OPTIONS = {
algorithm: 'HS256',
expiresIn: '30h'
};
var JWT = function JWT() {
var _this = this;
var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : DEFAULT_CONFIG;
var _options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DEFAULT_OPTIONS;
_classCallCheck(this, JWT);
_defineProperty(this, "sign", function (payload) {
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
try {
var _this$_config = _this._config,
privateKey = _this$_config.privateKey,
authSchema = _this$_config.authSchema;
var data = (0, _utils.isString)(payload) ? JSON.parse(payload) : payload;
var token = _jsonwebtoken["default"].sign(data, privateKey, _objectSpread({}, _this._options, {}, options));
return encodeURI("".concat(authSchema, " ").concat(token));
} catch (err) {
/* */
}
return '';
});
_defineProperty(this, "isExpire", function () {
var token = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
var authSchema = _this._config.authSchema;
var regexp = new RegExp("^".concat(authSchema, "%20[A-Za-z0-9-_=]+\\.[A-Za-z0-9-_=]+\\.?[A-Za-z0-9-_.+/=]*$"));
/* istanbul ignore else */
if (token === '' || token === 'undefined' || !regexp.test(token)) {
return true;
}
try {
var privateKey = _this._config.privateKey;
var jwtToken = _this._getJwtToken(token);
_jsonwebtoken["default"].verify(jwtToken, privateKey, _this._options);
return false;
} catch (err) {
/* */
}
return true;
});
_defineProperty(this, "verify", function (token) {
return !_this.isExpire(token);
});
_defineProperty(this, "_getJwtToken", function (srcToken) {
var token = decodeURI(srcToken);
var authSchema = _this._config.authSchema;
var prefixVerifyRegexp = new RegExp("^".concat(authSchema, "\\s{1}")); // should give auth schema
if (!prefixVerifyRegexp.test(token)) {
return '';
}
return token.replace(prefixVerifyRegexp, '');
});
_defineProperty(this, "decode", function (token, options) {
var jwtToken = _this._getJwtToken(token);
return _jsonwebtoken["default"].decode(jwtToken, options);
});
_defineProperty(this, "get", function () {
var key = '',
token = '';
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
if (args.length === 1) {
var _args$ = args[0];
token = _args$ === void 0 ? '' : _args$;
} else {
var _args$2 = args[0];
key = _args$2 === void 0 ? '' : _args$2;
var _args$3 = args[1];
token = _args$3 === void 0 ? '' : _args$3;
}
if (token === '') {
return null;
}
try {
var jwtToken = _this._getJwtToken(token);
var payload = _jsonwebtoken["default"].verify(jwtToken, _this._config.privateKey);
/* istanbul ignore else */
if (payload) {
if (key !== '' && Object.prototype.hasOwnProperty.call(payload, key)) {
return payload[key];
}
return payload;
}
} catch (err) {
/* */
}
return null;
});
this._config = _objectSpread({}, DEFAULT_CONFIG, {}, config);
this._options = _objectSpread({}, DEFAULT_OPTIONS, {}, _options);
}
/*
* sign payload and return token string or empty if throw an error.
*/
;
exports.JWT = JWT;
var _default = JWT;
exports["default"] = _default;