UNPKG

rpcchannel

Version:

Easy RPC with permission controls

129 lines (104 loc) 10.8 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.WildcardEntryKey = exports.DefaultEntryKey = exports.AddressMap = void 0; 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 _utils = require("./utils"); /** * A mapping of multi-part addresses (using the Java naming convention) to any * type. Used extensively by the RPC channel. * @author Nathan Pennie <kb1rd@kb1rd.net> */ /** */ var DefaultEntryKey = Symbol('DefaultEntry'); exports.DefaultEntryKey = DefaultEntryKey; var WildcardEntryKey = Symbol('WildcardEntry'); exports.WildcardEntryKey = WildcardEntryKey; function getFromAddrMapFlat(map, addr, wc_values) { var part = addr.shift(); if (!part) { return map[DefaultEntryKey]; } var data = undefined; if (map[part]) { data = getFromAddrMapFlat(map[part], addr, wc_values); } if (!data && map[WildcardEntryKey]) { if (wc_values) { wc_values.push(part); } data = getFromAddrMapFlat(map[WildcardEntryKey], addr, wc_values); } addr.unshift(part); return data; } var AddressMap = /*#__PURE__*/function () { function AddressMap() { (0, _classCallCheck2["default"])(this, AddressMap); (0, _defineProperty2["default"])(this, "table", {}); } (0, _createClass2["default"])(AddressMap, [{ key: "put", value: function put(addr, value) { var last_table = this.table; addr.forEach(function (part) { var key = part || WildcardEntryKey; if ((0, _utils.isUndef)(last_table[key])) { last_table[key] = {}; } last_table = last_table[key]; }); // TODO: Delete parents if empty if ((0, _utils.isUndef)(value)) { delete last_table[DefaultEntryKey]; } else { last_table[DefaultEntryKey] = value; } } }, { key: "get", value: function get(addr, wc_values) { var value = getFromAddrMapFlat(this.table, addr, wc_values); return (0, _utils.isUndef)(value) ? this.table[DefaultEntryKey] : value; } }, { key: "clear", value: function clear() { for (var _i = 0, _Object$keys = Object.keys(this.table); _i < _Object$keys.length; _i++) { var k = _Object$keys[_i]; delete this.table[k]; } } }, { key: "toString", value: function toString() { var entries = []; var addr_str = []; function traverse(map) { if (map[DefaultEntryKey]) { entries.push("".concat(addr_str.join('.'), ": ").concat(map[DefaultEntryKey])); } if (map[WildcardEntryKey]) { addr_str.push('*'); traverse(map[WildcardEntryKey]); addr_str.pop(); } Object.keys(map).forEach(function (key) { addr_str.push("[".concat(key, "]")); traverse(map[key]); addr_str.pop(); }); } traverse(this.table); return "AddrMap [\n".concat(entries.map(function (s) { return ' ' + s; }).join('\n'), "\n]"); } }]); return AddressMap; }(); exports.AddressMap = AddressMap; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9hZGRybWFwLnRzIl0sIm5hbWVzIjpbIkRlZmF1bHRFbnRyeUtleSIsIlN5bWJvbCIsIldpbGRjYXJkRW50cnlLZXkiLCJnZXRGcm9tQWRkck1hcEZsYXQiLCJtYXAiLCJhZGRyIiwid2NfdmFsdWVzIiwicGFydCIsInNoaWZ0IiwiZGF0YSIsInVuZGVmaW5lZCIsInB1c2giLCJ1bnNoaWZ0IiwiQWRkcmVzc01hcCIsInZhbHVlIiwibGFzdF90YWJsZSIsInRhYmxlIiwiZm9yRWFjaCIsImtleSIsIk9iamVjdCIsImtleXMiLCJrIiwiZW50cmllcyIsImFkZHJfc3RyIiwidHJhdmVyc2UiLCJqb2luIiwicG9wIiwicyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBT0E7O0FBUEE7Ozs7OztBQUtBO0FBT0EsSUFBTUEsZUFBZSxHQUFHQyxNQUFNLENBQUMsY0FBRCxDQUE5Qjs7QUFDQSxJQUFNQyxnQkFBZ0IsR0FBR0QsTUFBTSxDQUFDLGVBQUQsQ0FBL0I7OztBQVFBLFNBQVNFLGtCQUFULENBQ0VDLEdBREYsRUFFRUMsSUFGRixFQUdFQyxTQUhGLEVBSWlCO0FBQ2YsTUFBTUMsSUFBSSxHQUFHRixJQUFJLENBQUNHLEtBQUwsRUFBYjs7QUFFQSxNQUFJLENBQUNELElBQUwsRUFBVztBQUNULFdBQU9ILEdBQUcsQ0FBQ0osZUFBRCxDQUFWO0FBQ0Q7O0FBRUQsTUFBSVMsSUFBbUIsR0FBR0MsU0FBMUI7O0FBQ0EsTUFBSU4sR0FBRyxDQUFDRyxJQUFELENBQVAsRUFBZTtBQUNiRSxJQUFBQSxJQUFJLEdBQUdOLGtCQUFrQixDQUFDQyxHQUFHLENBQUNHLElBQUQsQ0FBSixFQUFZRixJQUFaLEVBQWtCQyxTQUFsQixDQUF6QjtBQUNEOztBQUNELE1BQUksQ0FBQ0csSUFBRCxJQUFTTCxHQUFHLENBQUNGLGdCQUFELENBQWhCLEVBQW9DO0FBQ2xDLFFBQUlJLFNBQUosRUFBZTtBQUNiQSxNQUFBQSxTQUFTLENBQUNLLElBQVYsQ0FBZUos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cyAodXNpbmcgdGhlIEphdmEgbmFtaW5nIGNvbnZlbnRpb24pIHRvIGFueVxuICogdHlwZS4gVXNlZCBleHRlbnNpdmVseSBieSB0aGUgUlBDIGNoYW5uZWwuXG4gKiBAYXV0aG9yIE5hdGhhbiBQZW5uaWUgPGtiMXJkQGtiMXJkLm5ldD5cbiAqL1xuLyoqICovXG5cbmltcG9ydCB7IGlzVW5kZWYgfSBmcm9tICcuL3V0aWxzJ1xuXG50eXBlIE11bHRpc3RyaW5nQWRkcmVzcyA9IHN0cmluZ1tdXG50eXBlIFdpbGRjYXJkTXVsdGlzdHJpbmdBZGRyZXNzID0gKHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGwpW11cblxuY29uc3QgRGVmYXVsdEVudHJ5S2V5ID0gU3ltYm9sKCdEZWZhdWx0RW50cnknKVxuY29uc3QgV2lsZGNhcmRFbnRyeUtleSA9IFN5bWJvbCgnV2lsZGNhcmRFbnRyeScpXG5cbnR5cGUgQWRkcmVzc01hcEZsYXQ8VD4gPSB7XG4gIFtrZXk6IHN0cmluZ106IEFkZHJlc3NNYXBGbGF0PFQ+XG4gIFtXaWxkY2FyZEVudHJ5S2V5XT86IEFkZHJlc3NNYXBGbGF0PFQ+XG4gIFtEZWZhdWx0RW50cnlLZXldPzogVFxufVxuXG5mdW5jdGlvbiBnZXRGcm9tQWRkck1hcEZsYXQ8VD4oXG4gIG1hcDogQWRkcmVzc01hcEZsYXQ8VD4sXG4gIGFkZHI6IE11bHRpc3RyaW5nQWRkcmVzcyxcbiAgd2NfdmFsdWVzPzogc3RyaW5nW11cbik6IFQgfCB1bmRlZmluZWQge1xuICBjb25zdCBwYXJ0ID0gYWRkci5zaGlmdCgpXG5cbiAgaWYgKCFwYXJ0KSB7XG4gICAgcmV0dXJuIG1hcFtEZWZhdWx0RW50cnlLZXldXG4gIH1cblxuICBsZXQgZGF0YTogVCB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZFxuICBpZiAobWFwW3BhcnRdKSB7XG4gICAgZGF0YSA9IGdldEZyb21BZGRyTWFwRmxhdChtYXBbcGFydF0sIGFkZHIsIHdjX3ZhbHVlcylcbiAgfVxuICBpZiAoIWRhdGEgJiYgbWFwW1dpbGRjYXJkRW50cnlLZXldKSB7XG4gICAgaWYgKHdjX3ZhbHVlcykge1xuICAgICAgd2NfdmFsdWVzLnB1c2gocGFydClcbiAgICB9XG4gICAgZGF0YSA9IGdldEZyb21BZGRyTWFwRmxhdChcbiAgICAgIG1hcFtXaWxkY2FyZEVudHJ5S2V5XSBhcyBBZGRyZXNzTWFwRmxhdDxUPixcbiAgICAgIGFkZHIsXG4gICAgICB3Y192YWx1ZXNcbiAgICApXG4gIH1cblxuICBhZGRyLnVuc2hpZnQocGFydClcbiAgcmV0dXJuIGRhdGFcbn1cblxuY2xhc3MgQWRkcmVzc01hcDxUPiB7XG4gIHRhYmxlOiBBZGRyZXNzTWFwRmxhdDxUPiA9IHt9XG4gIHB1dChhZGRyOiBXaWxkY2FyZE11bHRpc3RyaW5nQWRkcmVzcywgdmFsdWU6IFQgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICBsZXQgbGFzdF90YWJsZSA9IHRoaXMudGFibGVcbiAgICBhZGRyLmZvckVhY2goKHBhcnQpID0+IHtcbiAgICAgIGNvbnN0IGtleSA9IHBhcnQgfHwgV2lsZGNhcmRFbnRyeUtleVxuICAgICAgaWYgKGlzVW5kZWYobGFzdF90YWJsZVtrZXldKSkge1xuICAgICAgICBsYXN0X3RhYmxlW2tleV0gPSB7fVxuICAgICAgfVxuICAgICAgbGFzdF90YWJsZSA9IGxhc3RfdGFibGVba2V5XSBhcyBBZGRyZXNzTWFwRmxhdDxUPlxuICAgIH0pXG4gICAgLy8gVE9ETzogRGVsZXRlIHBhcmVudHMgaWYgZW1wdHlcbiAgICBpZiAoaXNVbmRlZih2YWx1ZSkpIHtcbiAgICAgIGRlbGV0ZSBsYXN0X3RhYmxlW0RlZmF1bHRFbnRyeUtleV1cbiAgICB9IGVsc2Uge1xuICAgICAgbGFzdF90YWJsZVtEZWZhdWx0RW50cnlLZXldID0gdmFsdWVcbiAgICB9XG4gIH1cblxuICBnZXQoYWRkcjogTXVsdGlzdHJpbmdBZGRyZXNzLCB3Y192YWx1ZXM/OiBzdHJpbmdbXSk6IFQgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHZhbHVlID0gZ2V0RnJvbUFkZHJNYXBGbGF0KHRoaXMudGFibGUsIGFkZHIsIHdjX3ZhbHVlcylcbiAgICByZXR1cm4gaXNVbmRlZih2YWx1ZSkgPyB0aGlzLnRhYmxlW0RlZmF1bHRFbnRyeUtleV0gOiB2YWx1ZVxuICB9XG5cbiAgY2xlYXIoKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBrIG9mIE9iamVjdC5rZXlzKHRoaXMudGFibGUpKSB7XG4gICAgICBkZWxldGUgdGhpcy50YWJsZVtrXVxuICAgIH1cbiAgfVxuXG4gIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgY29uc3QgZW50cmllczogc3RyaW5nW10gPSBbXVxuICAgIGNvbnN0IGFkZHJfc3RyOiBzdHJpbmdbXSA9IFtdXG4gICAgZnVuY3Rpb24gdHJhdmVyc2UobWFwOiBBZGRyZXNzTWFwRmxhdDxUPikge1xuICAgICAgaWYgKG1hcFtEZWZhdWx0RW50cnlLZXldKSB7XG4gICAgICAgIGVudHJpZXMucHVzaChgJHthZGRyX3N0ci5qb2luKCcuJyl9OiAke21hcFtEZWZhdWx0RW50cnlLZXldfWApXG4gICAgICB9XG4gICAgICBpZiAobWFwW1dpbGRjYXJkRW50cnlLZXldKSB7XG4gICAgICAgIGFkZHJfc3RyLnB1c2goJyonKVxuICAgICAgICB0cmF2ZXJzZShtYXBbV2lsZGNhcmRFbnRyeUtleV0gYXMgQWRkcmVzc01hcEZsYXQ8VD4pXG4gICAgICAgIGFkZHJfc3RyLnBvcCgpXG4gICAgICB9XG4gICAgICBPYmplY3Qua2V5cyhtYXApLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICBhZGRyX3N0ci5wdXNoKGBbJHtrZXl9XWApXG4gICAgICAgIHRyYXZlcnNlKG1hcFtrZXldKVxuICAgICAgICBhZGRyX3N0ci5wb3AoKVxuICAgICAgfSlcbiAgICB9XG4gICAgdHJhdmVyc2UodGhpcy50YWJsZSlcbiAgICByZXR1cm4gYEFkZHJNYXAgW1xcbiR7ZW50cmllcy5tYXAoKHMpID0+ICcgICcgKyBzKS5qb2luKCdcXG4nKX1cXG5dYFxuICB9XG59XG5cbmV4cG9ydCB7XG4gIE11bHRpc3RyaW5nQWRkcmVzcyxcbiAgV2lsZGNhcmRNdWx0aXN0cmluZ0FkZHJlc3MsXG4gIEFkZHJlc3NNYXAsXG4gIERlZmF1bHRFbnRyeUtleSxcbiAgV2lsZGNhcmRFbnRyeUtleVxufVxuIl19