pubnub
Version:
Publish & Subscribe Real-time Messaging with PubNub
312 lines (262 loc) • 9.37 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _config = _interopRequireDefault(require("./config"));
var _flow_interfaces = require("../flow_interfaces");
var _default = function () {
function _default(config, cbor) {
(0, _classCallCheck2["default"])(this, _default);
(0, _defineProperty2["default"])(this, "_config", void 0);
(0, _defineProperty2["default"])(this, "_cbor", void 0);
(0, _defineProperty2["default"])(this, "_userTokens", void 0);
(0, _defineProperty2["default"])(this, "_spaceTokens", void 0);
(0, _defineProperty2["default"])(this, "_userToken", void 0);
(0, _defineProperty2["default"])(this, "_spaceToken", void 0);
this._config = config;
this._cbor = cbor;
this._initializeTokens();
}
(0, _createClass2["default"])(_default, [{
key: "_initializeTokens",
value: function _initializeTokens() {
this._userTokens = {};
this._spaceTokens = {};
this._userToken = undefined;
this._spaceToken = undefined;
}
}, {
key: "_setToken",
value: function _setToken(token) {
var _this = this;
var tokenObject = this.parseToken(token);
if (tokenObject && tokenObject.resources) {
if (tokenObject.resources.users) {
Object.keys(tokenObject.resources.users).forEach(function (id) {
_this._userTokens[id] = token;
});
}
if (tokenObject.resources.spaces) {
Object.keys(tokenObject.resources.spaces).forEach(function (id) {
_this._spaceTokens[id] = token;
});
}
}
if (tokenObject && tokenObject.patterns) {
if (tokenObject.patterns.users && Object.keys(tokenObject.patterns.users).length > 0) {
this._userToken = token;
}
if (tokenObject.patterns.spaces && Object.keys(tokenObject.patterns.spaces).length > 0) {
this._spaceToken = token;
}
}
}
}, {
key: "setToken",
value: function setToken(token) {
if (token && token.length > 0) {
this._setToken(token);
}
}
}, {
key: "setTokens",
value: function setTokens(tokens) {
var _this2 = this;
if (tokens && tokens.length && (0, _typeof2["default"])(tokens) === 'object') {
tokens.forEach(function (token) {
_this2.setToken(token);
});
}
}
}, {
key: "getTokens",
value: function getTokens(tokenDef) {
var _this3 = this;
var result = {
users: {},
spaces: {}
};
if (tokenDef) {
if (tokenDef.user) {
result.user = this._userToken;
}
if (tokenDef.space) {
result.space = this._spaceToken;
}
if (tokenDef.users) {
tokenDef.users.forEach(function (user) {
result.users[user] = _this3._userTokens[user];
});
}
if (tokenDef.space) {
tokenDef.spaces.forEach(function (space) {
result.spaces[space] = _this3._spaceTokens[space];
});
}
} else {
if (this._userToken) {
result.user = this._userToken;
}
if (this._spaceToken) {
result.space = this._spaceToken;
}
Object.keys(this._userTokens).forEach(function (user) {
result.users[user] = _this3._userTokens[user];
});
Object.keys(this._spaceTokens).forEach(function (space) {
result.spaces[space] = _this3._spaceTokens[space];
});
}
return result;
}
}, {
key: "getToken",
value: function getToken(type, id) {
var result;
if (id) {
if (type === 'user') {
result = this._userTokens[id];
} else if (type === 'space') {
result = this._spaceTokens[id];
}
} else if (type === 'user') {
result = this._userToken;
} else if (type === 'space') {
result = this._spaceToken;
}
return result;
}
}, {
key: "extractPermissions",
value: function extractPermissions(permissions) {
var permissionsResult = {
create: false,
read: false,
write: false,
manage: false,
"delete": false
};
if ((permissions & 16) === 16) {
permissionsResult.create = true;
}
if ((permissions & 8) === 8) {
permissionsResult["delete"] = true;
}
if ((permissions & 4) === 4) {
permissionsResult.manage = true;
}
if ((permissions & 2) === 2) {
permissionsResult.write = true;
}
if ((permissions & 1) === 1) {
permissionsResult.read = true;
}
return permissionsResult;
}
}, {
key: "parseToken",
value: function parseToken(tokenString) {
var _this4 = this;
var parsed = this._cbor.decodeToken(tokenString);
if (parsed !== undefined) {
var userResourcePermissions = Object.keys(parsed.res.usr);
var spaceResourcePermissions = Object.keys(parsed.res.spc);
var channelResourcePermissions = Object.keys(parsed.res.chan);
var groupResourcePermissions = Object.keys(parsed.res.grp);
var userPatternPermissions = Object.keys(parsed.pat.usr);
var spacePatternPermissions = Object.keys(parsed.pat.spc);
var channelPatternPermissions = Object.keys(parsed.pat.chan);
var groupPatternPermissions = Object.keys(parsed.pat.grp);
var result = {
version: parsed.v,
timestamp: parsed.t,
ttl: parsed.ttl
};
var userResources = userResourcePermissions.length > 0;
var spaceResources = spaceResourcePermissions.length > 0;
var channelResources = channelResourcePermissions.length > 0;
var groupResources = groupResourcePermissions.length > 0;
if (userResources || spaceResources || channelResources || groupResources) {
result.resources = {};
if (userResources) {
result.resources.users = {};
userResourcePermissions.forEach(function (id) {
result.resources.users[id] = _this4.extractPermissions(parsed.res.usr[id]);
});
}
if (spaceResources) {
result.resources.spaces = {};
spaceResourcePermissions.forEach(function (id) {
result.resources.spaces[id] = _this4.extractPermissions(parsed.res.spc[id]);
});
}
if (channelResources) {
result.resources.channels = {};
channelResourcePermissions.forEach(function (id) {
result.resources.channels[id] = _this4.extractPermissions(parsed.res.chan[id]);
});
}
if (groupResources) {
result.resources.groups = {};
groupResourcePermissions.forEach(function (id) {
result.resources.groups[id] = _this4.extractPermissions(parsed.res.grp[id]);
});
}
}
var userPatterns = userPatternPermissions.length > 0;
var spacePatterns = spacePatternPermissions.length > 0;
var channelPatterns = channelPatternPermissions.length > 0;
var groupPatterns = groupPatternPermissions.length > 0;
if (userPatterns || spacePatterns || channelPatterns || groupPatterns) {
result.patterns = {};
if (userPatterns) {
result.patterns.users = {};
userPatternPermissions.forEach(function (id) {
result.patterns.users[id] = _this4.extractPermissions(parsed.pat.usr[id]);
});
}
if (spacePatterns) {
result.patterns.spaces = {};
spacePatternPermissions.forEach(function (id) {
result.patterns.spaces[id] = _this4.extractPermissions(parsed.pat.spc[id]);
});
}
if (channelPatterns) {
result.patterns.channels = {};
channelPatternPermissions.forEach(function (id) {
result.patterns.channels[id] = _this4.extractPermissions(parsed.pat.chan[id]);
});
}
if (groupPatterns) {
result.patterns.groups = {};
groupPatternPermissions.forEach(function (id) {
result.patterns.groups[id] = _this4.extractPermissions(parsed.pat.grp[id]);
});
}
}
if (Object.keys(parsed.meta).length > 0) {
result.meta = parsed.meta;
}
result.signature = parsed.sig;
return result;
} else {
return undefined;
}
}
}, {
key: "clearTokens",
value: function clearTokens() {
this._initializeTokens();
}
}]);
return _default;
}();
exports["default"] = _default;
module.exports = exports.default;
//# sourceMappingURL=token_manager.js.map