1 | ;
|
2 |
|
3 | var _regenerator = require('babel-runtime/regenerator');
|
4 |
|
5 | var _regenerator2 = _interopRequireDefault(_regenerator);
|
6 |
|
7 | var _getIterator2 = require('babel-runtime/core-js/get-iterator');
|
8 |
|
9 | var _getIterator3 = _interopRequireDefault(_getIterator2);
|
10 |
|
11 | var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
|
12 |
|
13 | var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
|
14 |
|
15 | var _createClass2 = require('babel-runtime/helpers/createClass');
|
16 |
|
17 | var _createClass3 = _interopRequireDefault(_createClass2);
|
18 |
|
19 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
20 |
|
21 | var ChatServiceError = require('./ChatServiceError');
|
22 | var Promise = require('bluebird');
|
23 |
|
24 | var _require = require('es6-mixin');
|
25 |
|
26 | var mixin = _require.mixin;
|
27 |
|
28 | var _require2 = require('./utils');
|
29 |
|
30 | var run = _require2.run;
|
31 |
|
32 | var DirectMessagingPermissions = function () {
|
33 | function DirectMessagingPermissions(userName, directMessagingState) {
|
34 | (0, _classCallCheck3.default)(this, DirectMessagingPermissions);
|
35 |
|
36 | this.userName = userName;
|
37 | this.directMessagingState = directMessagingState;
|
38 | }
|
39 |
|
40 | (0, _createClass3.default)(DirectMessagingPermissions, [{
|
41 | key: 'checkList',
|
42 | value: function checkList(author, listName) {
|
43 | return this.directMessagingState.checkList(listName);
|
44 | }
|
45 | }, {
|
46 | key: 'checkListValues',
|
47 | value: function checkListValues(author, listName, values) {
|
48 | var _this = this;
|
49 |
|
50 | return this.checkList(author, listName).then(function () {
|
51 | var _iteratorNormalCompletion = true;
|
52 | var _didIteratorError = false;
|
53 | var _iteratorError = undefined;
|
54 |
|
55 | try {
|
56 | for (var _iterator = (0, _getIterator3.default)(values), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
|
57 | var name = _step.value;
|
58 |
|
59 | if (name !== _this.userName) {
|
60 | continue;
|
61 | }
|
62 | return Promise.reject(new ChatServiceError('notAllowed'));
|
63 | }
|
64 | } catch (err) {
|
65 | _didIteratorError = true;
|
66 | _iteratorError = err;
|
67 | } finally {
|
68 | try {
|
69 | if (!_iteratorNormalCompletion && _iterator.return) {
|
70 | _iterator.return();
|
71 | }
|
72 | } finally {
|
73 | if (_didIteratorError) {
|
74 | throw _iteratorError;
|
75 | }
|
76 | }
|
77 | }
|
78 |
|
79 | return Promise.resolve();
|
80 | });
|
81 | }
|
82 | }, {
|
83 | key: 'checkAcess',
|
84 | value: function checkAcess(userName, bypassPermissions) {
|
85 | if (userName === this.userName) {
|
86 | return Promise.reject(new ChatServiceError('notAllowed'));
|
87 | }
|
88 | if (bypassPermissions) {
|
89 | return Promise.resolve();
|
90 | }
|
91 | return run(this, _regenerator2.default.mark(function _callee() {
|
92 | var blacklisted, whitelistOnly, whitelisted;
|
93 | return _regenerator2.default.wrap(function _callee$(_context) {
|
94 | while (1) {
|
95 | switch (_context.prev = _context.next) {
|
96 | case 0:
|
97 | _context.next = 2;
|
98 | return this.directMessagingState.hasInList('blacklist', userName);
|
99 |
|
100 | case 2:
|
101 | blacklisted = _context.sent;
|
102 |
|
103 | if (!blacklisted) {
|
104 | _context.next = 5;
|
105 | break;
|
106 | }
|
107 |
|
108 | return _context.abrupt('return', Promise.reject(new ChatServiceError('notAllowed')));
|
109 |
|
110 | case 5:
|
111 | _context.next = 7;
|
112 | return this.directMessagingState.whitelistOnlyGet();
|
113 |
|
114 | case 7:
|
115 | whitelistOnly = _context.sent;
|
116 |
|
117 | if (whitelistOnly) {
|
118 | _context.next = 10;
|
119 | break;
|
120 | }
|
121 |
|
122 | return _context.abrupt('return', Promise.resolve());
|
123 |
|
124 | case 10:
|
125 | _context.next = 12;
|
126 | return this.directMessagingState.hasInList('whitelist', userName);
|
127 |
|
128 | case 12:
|
129 | whitelisted = _context.sent;
|
130 |
|
131 | if (!whitelisted) {
|
132 | _context.next = 15;
|
133 | break;
|
134 | }
|
135 |
|
136 | return _context.abrupt('return', Promise.resolve());
|
137 |
|
138 | case 15:
|
139 | return _context.abrupt('return', Promise.reject(new ChatServiceError('notAllowed')));
|
140 |
|
141 | case 16:
|
142 | case 'end':
|
143 | return _context.stop();
|
144 | }
|
145 | }
|
146 | }, _callee, this);
|
147 | }));
|
148 | }
|
149 | }]);
|
150 | return DirectMessagingPermissions;
|
151 | }();
|
152 |
|
153 | // Implements direct messaging state manipulations with the respect to
|
154 | // user's permissions.
|
155 |
|
156 |
|
157 | var DirectMessaging = function () {
|
158 | function DirectMessaging(server, userName) {
|
159 | (0, _classCallCheck3.default)(this, DirectMessaging);
|
160 |
|
161 | this.server = server;
|
162 | this.userName = userName;
|
163 | this.listSizeLimit = this.server.directListSizeLimit;
|
164 | var State = this.server.state.DirectMessagingState;
|
165 | this.directMessagingState = new State(this.server, this.userName);
|
166 | mixin(this, DirectMessagingPermissions, this.userName, this.directMessagingState);
|
167 | }
|
168 |
|
169 | (0, _createClass3.default)(DirectMessaging, [{
|
170 | key: 'initState',
|
171 | value: function initState(state) {
|
172 | return this.directMessagingState.initState(state);
|
173 | }
|
174 | }, {
|
175 | key: 'removeState',
|
176 | value: function removeState() {
|
177 | return this.directMessagingState.removeState();
|
178 | }
|
179 | }, {
|
180 | key: 'message',
|
181 | value: function message(author, msg, bypassPermissions) {
|
182 | return this.checkAcess(author, bypassPermissions);
|
183 | }
|
184 | }, {
|
185 | key: 'getList',
|
186 | value: function getList(author, listName) {
|
187 | var _this2 = this;
|
188 |
|
189 | return this.checkList(author, listName).then(function () {
|
190 | return _this2.directMessagingState.getList(listName);
|
191 | });
|
192 | }
|
193 | }, {
|
194 | key: 'addToList',
|
195 | value: function addToList(author, listName, values) {
|
196 | var _this3 = this;
|
197 |
|
198 | return this.checkListValues(author, listName, values).then(function () {
|
199 | return _this3.directMessagingState.addToList(listName, values, _this3.listSizeLimit);
|
200 | });
|
201 | }
|
202 | }, {
|
203 | key: 'removeFromList',
|
204 | value: function removeFromList(author, listName, values) {
|
205 | var _this4 = this;
|
206 |
|
207 | return this.checkListValues(author, listName, values).then(function () {
|
208 | return _this4.directMessagingState.removeFromList(listName, values);
|
209 | });
|
210 | }
|
211 | }, {
|
212 | key: 'hasInList',
|
213 | value: function hasInList(listName, item) {
|
214 | return this.directMessagingState.hasInList(listName, item);
|
215 | }
|
216 | }, {
|
217 | key: 'getMode',
|
218 | value: function getMode(author) {
|
219 | return this.directMessagingState.whitelistOnlyGet();
|
220 | }
|
221 | }, {
|
222 | key: 'changeMode',
|
223 | value: function changeMode(author, mode) {
|
224 | return this.directMessagingState.whitelistOnlySet(mode);
|
225 | }
|
226 | }]);
|
227 | return DirectMessaging;
|
228 | }();
|
229 |
|
230 | module.exports = DirectMessaging;
|
231 | //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9EaXJlY3RNZXNzYWdpbmcuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUEsSUFBTSxtQkFBbUIsUUFBUSxvQkFBUixDQUF6QjtBQUNBLElBQU0sVUFBVSxRQUFRLFVBQVIsQ0FBaEI7O2VBQ2tCLFFBQVEsV0FBUixDOztJQUFWLEssWUFBQSxLOztnQkFDUSxRQUFRLFNBQVIsQzs7SUFBUixHLGFBQUEsRzs7SUFFRiwwQjtBQUVKLHNDQUFhLFFBQWIsRUFBdUIsb0JBQXZCLEVBQTZDO0FBQUE7O0FBQzNDLFNBQUssUUFBTCxHQUFnQixRQUFoQjtBQUNBLFNBQUssb0JBQUwsR0FBNEIsb0JBQTVCO0FBQ0Q7Ozs7OEJBRVUsTSxFQUFRLFEsRUFBVTtBQUMzQixhQUFPLEtBQUssb0JBQUwsQ0FBMEIsU0FBMUIsQ0FBb0MsUUFBcEMsQ0FBUDtBQUNEOzs7b0NBRWdCLE0sRUFBUSxRLEVBQVUsTSxFQUFRO0FBQUE7O0FBQ3pDLGFBQU8sS0FBSyxTQUFMLENBQWUsTUFBZixFQUF1QixRQUF2QixFQUFpQyxJQUFqQyxDQUFzQyxZQUFNO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQ2pELDBEQUFpQixNQUFqQiw0R0FBeUI7QUFBQSxnQkFBaEIsSUFBZ0I7O0FBQ3ZCLGdCQUFJLFNBQVMsTUFBSyxRQUFsQixFQUE0QjtBQUFFO0FBQVU7QUFDeEMsbUJBQU8sUUFBUSxNQUFSLENBQWUsSUFBSSxnQkFBSixDQUFxQixZQUFyQixDQUFmLENBQVA7QUFDRDtBQUpnRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUtqRCxlQUFPLFFBQVEsT0FBUixFQUFQO0FBQ0QsT0FOTSxDQUFQO0FBT0Q7OzsrQkFFVyxRLEVBQVUsaUIsRUFBbUI7QUFDdkMsVUFBSSxhQUFhLEtBQUssUUFBdEIsRUFBZ0M7QUFDOUIsZUFBTyxRQUFRLE1BQVIsQ0FB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UDtBQUVEOzs7OEJBRVUsUSxFQUFVLEksRUFBTTtBQUN6QixhQUFPLEtBQUssb0JBQUwsQ0FBMEIsU0FBMUIsQ0FBb0MsUUFBcEMsRUFBOEMsSUFBOUMsQ0FBUDtBQUNEOzs7NEJBRVEsTSxFQUFRO0FBQ2YsYUFBTyxLQUFLLG9CQUFMLENBQTBCLGdCQUExQixFQUFQO0FBQ0Q7OzsrQkFFVyxNLEVBQVEsSSxFQUFNO0FBQ3hCLGFBQU8sS0FBSyxvQkFBTCxDQUEwQixnQkFBMUIsQ0FBMkMsSUFBM0MsQ0FBUDtBQUNEOzs7OztBQUdILE9BQU8sT0FBUCxHQUFpQixlQUFqQiIsImZpbGUiOiJEaXJlY3RNZXNzYWdpbmcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCdcblxuY29uc3QgQ2hhdFNlcnZpY2VFcnJvciA9IHJlcXVpcmUoJy4vQ2hhdFNlcnZpY2VFcnJvcicpXG5jb25zdCBQcm9taXNlID0gcmVxdWlyZSgnYmx1ZWJpcmQnKVxuY29uc3QgeyBtaXhpbiB9ID0gcmVxdWlyZSgnZXM2LW1peGluJylcbmNvbnN0IHsgcnVuIH0gPSByZXF1aXJlKCcuL3V0aWxzJylcblxuY2xhc3MgRGlyZWN0TWVzc2FnaW5nUGVybWlzc2lvbnMge1xuXG4gIGNvbnN0cnVjdG9yICh1c2VyTmFtZSwgZGlyZWN0TWVzc2FnaW5nU3RhdGUpIHtcbiAgICB0aGlzLnVzZXJOYW1lID0gdXNlck5hbWVcbiAgICB0aGlzLmRpcmVjdE1lc3NhZ2luZ1N0YXRlID0gZGlyZWN0TWVzc2FnaW5nU3RhdGVcbiAgfVxuXG4gIGNoZWNrTGlzdCAoYXV0aG9yLCBsaXN0TmFtZSkge1xuICAgIHJldHVybiB0aGlzLmRpcmVjdE1lc3NhZ2luZ1N0YXRlLmNoZWNrTGlzdChsaXN0TmFtZSlcbiAgfVxuXG4gIGNoZWNrTGlzdFZhbHVlcyAoYXV0aG9yLCBsaXN0TmFtZSwgdmFsdWVzKSB7XG4gICAgcmV0dXJuIHRoaXMuY2hlY2tMaXN0KGF1dGhvciwgbGlzdE5hbWUpLnRoZW4oKCkgPT4ge1xuICAgICAgZm9yIChsZXQgbmFtZSBvZiB2YWx1ZXMpIHtcbiAgICAgICAgaWYgKG5hbWUgIT09IHRoaXMudXNlck5hbWUpIHsgY29udGludWUgfVxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IENoYXRTZXJ2aWNlRXJyb3IoJ25vdEFsbG93ZWQnKSlcbiAgICAgIH1cbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICAgIH0pXG4gIH1cblxuICBjaGVja0FjZXNzICh1c2VyTmFtZSwgYnlwYXNzUGVybWlzc2lvbnMpIHtcbiAgICBpZiAodXNlck5hbWUgPT09IHRoaXMudXNlck5hbWUpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgQ2hhdFNlcnZpY2VFcnJvcignbm90QWxsb3dlZCcpKVxuICAgIH1cbiAgICBpZiAoYnlwYXNzUGVybWlzc2lvbnMpIHsgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpIH1cbiAgICByZXR1cm4gcnVuKHRoaXMsIGZ1bmN0aW9uICogKCkge1xuICAgICAgbGV0IGJsYWNrbGlzdGVkID0geWllbGQgdGhpcy5kaXJlY3RNZXNzYWdpbmdTdGF0ZS5oYXNJbkxpc3QoXG4gICAgICAgICdibGFja2xpc3QnLCB1c2VyTmFtZSlcbiAgICAgIGlmIChibGFja2xpc3RlZCkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IENoYXRTZXJ2aWNlRXJyb3IoJ25vdEFsbG93ZWQnKSlcbiAgICAgIH1cbiAgICAgIGxldCB3aGl0ZWxpc3RPbmx5ID0geWllbGQgdGhpcy5kaXJlY3RNZXNzYWdpbmdTdGF0ZS53aGl0ZWxpc3RPbmx5R2V0KClcbiAgICAgIGlmICghd2hpdGVsaXN0T25seSkgeyByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkgfVxuICAgICAgbGV0IHdoaXRlbGlzdGVkID0geWllbGQgdGhpcy5kaXJlY3RNZXNzYWdpbmdTdGF0ZS5oYXNJbkxpc3QoXG4gICAgICAgICd3aGl0ZWxpc3QnLCB1c2VyTmFtZSlcbiAgICAgIGlmICh3aGl0ZWxpc3RlZCkgeyByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkgfVxuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBDaGF0U2VydmljZUVycm9yKCdub3RBbGxvd2VkJykpXG4gICAgfSlcbiAgfVxufVxuXG4vLyBJbXBsZW1lbnRzIGRpcmVjdCBtZXNzYWdpbmcgc3RhdGUgbWFuaXB1bGF0aW9ucyB3aXRoIHRoZSByZXNwZWN0IHRvXG4vLyB1c2VyJ3MgcGVybWlzc2lvbnMuXG5jbGFzcyBEaXJlY3RNZXNzYWdpbmcge1xuXG4gIGNvbnN0cnVjdG9yIChzZXJ2ZXIsIHVzZXJOYW1lKSB7XG4gICAgdGhpcy5zZXJ2ZXIgPSBzZXJ2ZXJcbiAgICB0aGlzLnVzZXJOYW1lID0gdXNlck5hbWVcbiAgICB0aGlzLmxpc3RTaXplTGltaXQgPSB0aGlzLnNlcnZlci5kaXJlY3RMaXN0U2l6ZUxpbWl0XG4gICAgbGV0IFN0YXRlID0gdGhpcy5zZXJ2ZXIuc3RhdGUuRGlyZWN0TWVzc2FnaW5nU3RhdGVcbiAgICB0aGlzLmRpcmVjdE1lc3NhZ2luZ1N0YXRlID0gbmV3IFN0YXRlKHRoaXMuc2VydmVyLCB0aGlzLnVzZXJOYW1lKVxuICAgIG1peGluKHRoaXMsIERpcmVjdE1lc3NhZ2luZ1Blcm1pc3Npb25zLFxuICAgICAgICAgIHRoaXMudXNlck5hbWUsIHRoaXMuZGlyZWN0TWVzc2FnaW5nU3RhdGUpXG4gIH1cblxuICBpbml0U3RhdGUgKHN0YXRlKSB7XG4gICAgcmV0dXJuIHRoaXMuZGlyZWN0TWVzc2FnaW5nU3RhdGUuaW5pdFN0YXRlKHN0YXRlKVxuICB9XG5cbiAgcmVtb3ZlU3RhdGUgKCkge1xuICAgIHJldHVybiB0aGlzLmRpcmVjdE1lc3NhZ2luZ1N0YXRlLnJlbW92ZVN0YXRlKClcbiAgfVxuXG4gIG1lc3NhZ2UgKGF1dGhvciwgbXNnLCBieXBhc3NQZXJtaXNzaW9ucykge1xuICAgIHJldHVybiB0aGlzLmNoZWNrQWNlc3MoYXV0aG9yLCBieXBhc3NQZXJtaXNzaW9ucylcbiAgfVxuXG4gIGdldExpc3QgKGF1dGhvciwgbGlzdE5hbWUpIHtcbiAgICByZXR1cm4gdGhpcy5jaGVja0xpc3QoYXV0aG9yLCBsaXN0TmFtZSlcbiAgICAgIC50aGVuKCgpID0+IHRoaXMuZGlyZWN0TWVzc2FnaW5nU3RhdGUuZ2V0TGlzdChsaXN0TmFtZSkpXG4gIH1cblxuICBhZGRUb0xpc3QgKGF1dGhvciwgbGlzdE5hbWUsIHZhbHVlcykge1xuICAgIHJldHVybiB0aGlzLmNoZWNrTGlzdFZhbHVlcyhhdXRob3IsIGxpc3ROYW1lLCB2YWx1ZXMpXG4gICAgICAudGhlbigoKSA9PiB0aGlzLmRpcmVjdE1lc3NhZ2luZ1N0YXRlLmFkZFRvTGlzdChcbiAgICAgICAgbGlzdE5hbWUsIHZhbHVlcywgdGhpcy5saXN0U2l6ZUxpbWl0KSlcbiAgfVxuXG4gIHJlbW92ZUZyb21MaXN0IChhdXRob3IsIGxpc3ROYW1lLCB2YWx1ZXMpIHtcbiAgICByZXR1cm4gdGhpcy5jaGVja0xpc3RWYWx1ZXMoYXV0aG9yLCBsaXN0TmFtZSwgdmFsdWVzKVxuICAgICAgLnRoZW4oKCkgPT4gdGhpcy5kaXJlY3RNZXNzYWdpbmdTdGF0ZS5yZW1vdmVGcm9tTGlzdChsaXN0TmFtZSwgdmFsdWVzKSlcbiAgfVxuXG4gIGhhc0luTGlzdCAobGlzdE5hbWUsIGl0ZW0pIHtcbiAgICByZXR1cm4gdGhpcy5kaXJlY3RNZXNzYWdpbmdTdGF0ZS5oYXNJbkxpc3QobGlzdE5hbWUsIGl0ZW0pXG4gIH1cblxuICBnZXRNb2RlIChhdXRob3IpIHtcbiAgICByZXR1cm4gdGhpcy5kaXJlY3RNZXNzYWdpbmdTdGF0ZS53aGl0ZWxpc3RPbmx5R2V0KClcbiAgfVxuXG4gIGNoYW5nZU1vZGUgKGF1dGhvciwgbW9kZSkge1xuICAgIHJldHVybiB0aGlzLmRpcmVjdE1lc3NhZ2luZ1N0YXRlLndoaXRlbGlzdE9ubHlTZXQobW9kZSlcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IERpcmVjdE1lc3NhZ2luZ1xuIl19 |
\ | No newline at end of file |