@iobroker/adapter-react-v5 3.4.0 → 3.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/Components/JsonConfigComponent/ChipInput.js +5 -0
  2. package/Components/JsonConfigComponent/ChipInput.js.map +1 -1
  3. package/Components/JsonConfigComponent/ConfigCheckLicense.d.ts +3 -0
  4. package/Components/JsonConfigComponent/ConfigCheckLicense.js +592 -0
  5. package/Components/JsonConfigComponent/ConfigCheckLicense.js.map +1 -0
  6. package/Components/JsonConfigComponent/ConfigColor.js +5 -4
  7. package/Components/JsonConfigComponent/ConfigColor.js.map +1 -1
  8. package/Components/JsonConfigComponent/ConfigCustom.js +14 -3
  9. package/Components/JsonConfigComponent/ConfigCustom.js.map +1 -1
  10. package/Components/JsonConfigComponent/ConfigGeneric.d.ts +1 -1
  11. package/Components/JsonConfigComponent/ConfigGeneric.js +20 -10
  12. package/Components/JsonConfigComponent/ConfigGeneric.js.map +1 -1
  13. package/Components/JsonConfigComponent/ConfigIP.js +1 -1
  14. package/Components/JsonConfigComponent/ConfigIP.js.map +1 -1
  15. package/Components/JsonConfigComponent/ConfigNumber.js +5 -1
  16. package/Components/JsonConfigComponent/ConfigNumber.js.map +1 -1
  17. package/Components/JsonConfigComponent/ConfigPanel.js +11 -7
  18. package/Components/JsonConfigComponent/ConfigPanel.js.map +1 -1
  19. package/Components/JsonConfigComponent/ConfigSelect.d.ts +1 -1
  20. package/Components/JsonConfigComponent/ConfigSelect.js +7 -2
  21. package/Components/JsonConfigComponent/ConfigSelect.js.map +1 -1
  22. package/Components/JsonConfigComponent/ConfigSendto.js +29 -6
  23. package/Components/JsonConfigComponent/ConfigSendto.js.map +1 -1
  24. package/Components/JsonConfigComponent/ConfigStaticText.js +5 -1
  25. package/Components/JsonConfigComponent/ConfigStaticText.js.map +1 -1
  26. package/Components/JsonConfigComponent/ConfigTable.js +44 -38
  27. package/Components/JsonConfigComponent/ConfigTable.js.map +1 -1
  28. package/Components/JsonConfigComponent/ConfigText.d.ts +1 -1
  29. package/Components/JsonConfigComponent/ConfigText.js +74 -22
  30. package/Components/JsonConfigComponent/ConfigText.js.map +1 -1
  31. package/Components/JsonConfigComponent/ConfigUUID.d.ts +13 -0
  32. package/Components/JsonConfigComponent/ConfigUUID.js +97 -0
  33. package/Components/JsonConfigComponent/ConfigUUID.js.map +1 -0
  34. package/Components/JsonConfigComponent/index.js +29 -7
  35. package/Components/JsonConfigComponent/index.js.map +1 -1
  36. package/Dialogs/Message.d.ts +1 -0
  37. package/Dialogs/Message.js +7 -2
  38. package/Dialogs/Message.js.map +1 -1
  39. package/README.md +7 -1
  40. package/i18n/de.json +10 -1
  41. package/i18n/en.json +10 -1
  42. package/i18n/es.json +10 -1
  43. package/i18n/fr.json +10 -1
  44. package/i18n/it.json +10 -1
  45. package/i18n/nl.json +10 -1
  46. package/i18n/pl.json +10 -1
  47. package/i18n/pt.json +10 -1
  48. package/i18n/ru.json +10 -1
  49. package/i18n/uk.json +10 -1
  50. package/i18n/zh-cn.json +10 -1
  51. package/package.json +1 -1
@@ -0,0 +1,592 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports["default"] = void 0;
8
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
9
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
10
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
11
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
12
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
13
+ var _get2 = _interopRequireDefault(require("@babel/runtime/helpers/get"));
14
+ var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
15
+ var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
16
+ var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
17
+ var _react = _interopRequireDefault(require("react"));
18
+ var _propTypes = _interopRequireDefault(require("prop-types"));
19
+ var _styles = require("@mui/styles");
20
+ var _material = require("@mui/material");
21
+ var _Send = _interopRequireDefault(require("@mui/icons-material/Send"));
22
+ var _i18n = _interopRequireDefault(require("../../i18n"));
23
+ var _Error = _interopRequireDefault(require("../../Dialogs/Error"));
24
+ var _ConfigGeneric2 = _interopRequireDefault(require("./ConfigGeneric"));
25
+ function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
26
+ function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
27
+ var styles = function styles(theme) {
28
+ return {
29
+ fullWidth: {
30
+ width: '100%'
31
+ },
32
+ icon: {
33
+ width: 24,
34
+ height: 24,
35
+ marginRight: 4
36
+ },
37
+ licLabel: {
38
+ fontWeight: 'bold',
39
+ minWidth: 100,
40
+ textTransform: 'capitalize',
41
+ display: 'inline-block'
42
+ },
43
+ licValue: {
44
+ fontWeight: 'normal'
45
+ },
46
+ errorTitle: {
47
+ color: theme.palette.mode === 'dark' ? '#e39191' : '#b62020'
48
+ },
49
+ okTitle: {
50
+ color: theme.palette.mode === 'dark' ? '#6fd56f' : '#007c00'
51
+ },
52
+ errorText: {
53
+ color: theme.palette.mode === 'dark' ? '#e39191' : '#b62020',
54
+ marginBottom: 30
55
+ }
56
+ };
57
+ };
58
+ var ConfigCheckLicense = /*#__PURE__*/function (_ConfigGeneric) {
59
+ (0, _inherits2["default"])(ConfigCheckLicense, _ConfigGeneric);
60
+ var _super = _createSuper(ConfigCheckLicense);
61
+ function ConfigCheckLicense() {
62
+ (0, _classCallCheck2["default"])(this, ConfigCheckLicense);
63
+ return _super.apply(this, arguments);
64
+ }
65
+ (0, _createClass2["default"])(ConfigCheckLicense, [{
66
+ key: "componentDidMount",
67
+ value: function () {
68
+ var _componentDidMount = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee() {
69
+ return _regenerator["default"].wrap(function _callee$(_context) {
70
+ while (1) {
71
+ switch (_context.prev = _context.next) {
72
+ case 0:
73
+ (0, _get2["default"])((0, _getPrototypeOf2["default"])(ConfigCheckLicense.prototype), "componentDidMount", this).call(this);
74
+ this.setState({
75
+ _error: '',
76
+ running: false,
77
+ showLicenseData: null,
78
+ foundSuitableLicense: false,
79
+ licenseOfflineCheck: false,
80
+ result: null
81
+ });
82
+ case 2:
83
+ case "end":
84
+ return _context.stop();
85
+ }
86
+ }
87
+ }, _callee, this);
88
+ }));
89
+ function componentDidMount() {
90
+ return _componentDidMount.apply(this, arguments);
91
+ }
92
+ return componentDidMount;
93
+ }()
94
+ }, {
95
+ key: "renderErrorDialog",
96
+ value: function renderErrorDialog() {
97
+ var _this = this;
98
+ if (this.state._error && !this.state.showLicenseData) {
99
+ return /*#__PURE__*/_react["default"].createElement(_Error["default"], {
100
+ text: this.state._error,
101
+ classes: undefined,
102
+ onClose: function onClose() {
103
+ return _this.setState({
104
+ _error: ''
105
+ });
106
+ }
107
+ });
108
+ } else {
109
+ return null;
110
+ }
111
+ }
112
+ }, {
113
+ key: "renderMessageDialog",
114
+ value: function renderMessageDialog() {
115
+ var _this2 = this;
116
+ if (this.state.showLicenseData) {
117
+ var pre = Object.keys(this.state.showLicenseData).map(function (key) {
118
+ return /*#__PURE__*/_react["default"].createElement("div", {
119
+ key: key
120
+ }, /*#__PURE__*/_react["default"].createElement("div", {
121
+ className: _this2.props.classes.licLabel
122
+ }, key.replace(/_/g, ' '), ":"), " ", _this2.state.showLicenseData[key]);
123
+ });
124
+ return /*#__PURE__*/_react["default"].createElement(_material.Dialog, {
125
+ open: !0,
126
+ onClose: function onClose() {
127
+ return _this2.setState({
128
+ showLicenseData: null
129
+ });
130
+ }
131
+ }, /*#__PURE__*/_react["default"].createElement(_material.DialogTitle, null, /*#__PURE__*/_react["default"].createElement("span", {
132
+ className: this.state.result ? this.props.classes.okTitle : this.props.classes.errorTitle
133
+ }, _i18n["default"].t('ra_License %s', this.state.result ? 'OK' : 'INVALID'))), /*#__PURE__*/_react["default"].createElement(_material.DialogContent, null, this.state._error ? /*#__PURE__*/_react["default"].createElement("div", {
134
+ className: this.props.classes.errorText
135
+ }, this.state._error) : null, pre), /*#__PURE__*/_react["default"].createElement(_material.DialogActions, null, /*#__PURE__*/_react["default"].createElement(_material.Button, {
136
+ onClick: function onClick() {
137
+ return _this2.setState({
138
+ showLicenseData: null
139
+ });
140
+ },
141
+ color: "primary",
142
+ variant: "contained"
143
+ }, _i18n["default"].t('ra_Close'))));
144
+ } else {
145
+ return null;
146
+ }
147
+ }
148
+ }, {
149
+ key: "findInLicenseManager",
150
+ value: function () {
151
+ var _findInLicenseManager = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2(adapterName) {
152
+ var _licenses$native, _licenses$native$lice;
153
+ var licenses, _useLicense, useLicense, now, uuid, _uuidObj$native, uuidObj, version, _aObj$common, aObj;
154
+ return _regenerator["default"].wrap(function _callee2$(_context2) {
155
+ while (1) {
156
+ switch (_context2.prev = _context2.next) {
157
+ case 0:
158
+ _context2.next = 2;
159
+ return this.props.socket.getObject('system.licenses');
160
+ case 2:
161
+ licenses = _context2.sent;
162
+ if (!(licenses !== null && licenses !== void 0 && (_licenses$native = licenses["native"]) !== null && _licenses$native !== void 0 && (_licenses$native$lice = _licenses$native.licenses) !== null && _licenses$native$lice !== void 0 && _licenses$native$lice.length)) {
163
+ _context2.next = 19;
164
+ break;
165
+ }
166
+ // enable license manager
167
+ now = Date.now();
168
+ if (!this.props.schema.uuid) {
169
+ _context2.next = 10;
170
+ break;
171
+ }
172
+ _context2.next = 8;
173
+ return this.props.socket.getObject('system.meta.uuid');
174
+ case 8:
175
+ uuidObj = _context2.sent;
176
+ uuid = uuidObj === null || uuidObj === void 0 ? void 0 : (_uuidObj$native = uuidObj["native"]) === null || _uuidObj$native === void 0 ? void 0 : _uuidObj$native.uuid;
177
+ case 10:
178
+ if (!this.props.schema.version) {
179
+ _context2.next = 15;
180
+ break;
181
+ }
182
+ _context2.next = 13;
183
+ return this.props.socket.getObject("system.adapter.".concat(adapterName));
184
+ case 13:
185
+ aObj = _context2.sent;
186
+ version = aObj === null || aObj === void 0 ? void 0 : (_aObj$common = aObj.common) === null || _aObj$common === void 0 ? void 0 : _aObj$common.version;
187
+ case 15:
188
+ // find license for vis
189
+ licenses["native"].licenses.forEach(function (license) {
190
+ if (!license.validTill || license.validTill === '0000-00-00 00:00:00' || new Date(license.validTill).getTime() > now) {
191
+ var parts = (license.product || '').split('.');
192
+ if (parts[1] === adapterName && (!useLicense || license.invoice !== 'free') && (!uuid || !license.uuid || license.uuid === uuid) && ConfigCheckLicense.isVersionValid(version, license.version, license.invoice, adapterName)) {
193
+ useLicense = license;
194
+ }
195
+ }
196
+ });
197
+ return _context2.abrupt("return", (_useLicense = useLicense) === null || _useLicense === void 0 ? void 0 : _useLicense.json);
198
+ case 19:
199
+ return _context2.abrupt("return", false);
200
+ case 20:
201
+ case "end":
202
+ return _context2.stop();
203
+ }
204
+ }
205
+ }, _callee2, this);
206
+ }));
207
+ function findInLicenseManager(_x) {
208
+ return _findInLicenseManager.apply(this, arguments);
209
+ }
210
+ return findInLicenseManager;
211
+ }()
212
+ }, {
213
+ key: "checkLicense",
214
+ value: function () {
215
+ var _checkLicense = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3(license, adapterName) {
216
+ var uuid, _uuidObj$native2, uuidObj, version, _aObj$common2, aObj, _data, response, data, _data2, showLicenseData, validTill, parts, _error$response, _data3, _parts;
217
+ return _regenerator["default"].wrap(function _callee3$(_context3) {
218
+ while (1) {
219
+ switch (_context3.prev = _context3.next) {
220
+ case 0:
221
+ if (!this.props.schema.uuid) {
222
+ _context3.next = 5;
223
+ break;
224
+ }
225
+ _context3.next = 3;
226
+ return this.props.socket.getObject('system.meta.uuid');
227
+ case 3:
228
+ uuidObj = _context3.sent;
229
+ uuid = uuidObj === null || uuidObj === void 0 ? void 0 : (_uuidObj$native2 = uuidObj["native"]) === null || _uuidObj$native2 === void 0 ? void 0 : _uuidObj$native2.uuid;
230
+ case 5:
231
+ if (!this.props.schema.version) {
232
+ _context3.next = 10;
233
+ break;
234
+ }
235
+ _context3.next = 8;
236
+ return this.props.socket.getObject("system.adapter.".concat(adapterName));
237
+ case 8:
238
+ aObj = _context3.sent;
239
+ version = aObj === null || aObj === void 0 ? void 0 : (_aObj$common2 = aObj.common) === null || _aObj$common2 === void 0 ? void 0 : _aObj$common2.version;
240
+ case 10:
241
+ _context3.prev = 10;
242
+ _context3.next = 13;
243
+ return window.fetch('https://iobroker.net/api/v1/public/cert/', {
244
+ method: 'POST',
245
+ body: JSON.stringify({
246
+ json: license,
247
+ uuid: uuid
248
+ }),
249
+ headers: {
250
+ 'Content-Type': 'text/plain'
251
+ }
252
+ });
253
+ case 13:
254
+ response = _context3.sent;
255
+ _context3.next = 16;
256
+ return response.text();
257
+ case 16:
258
+ data = _context3.sent;
259
+ try {
260
+ data = JSON.parse(data);
261
+ } catch (e) {
262
+ // ignore
263
+ }
264
+ if (!((_data = data) !== null && _data !== void 0 && _data.error)) {
265
+ _context3.next = 30;
266
+ break;
267
+ }
268
+ _context3.prev = 19;
269
+ _data2 = ConfigCheckLicense.parseJwt(license);
270
+ return _context3.abrupt("return", this.setState({
271
+ _error: _data2.error,
272
+ showLicenseData: _data2,
273
+ result: false,
274
+ running: false
275
+ }));
276
+ case 24:
277
+ _context3.prev = 24;
278
+ _context3.t0 = _context3["catch"](19);
279
+ console.log('Cannot parse license');
280
+ return _context3.abrupt("return", this.setState({
281
+ _error: data.error,
282
+ result: false,
283
+ running: false
284
+ }));
285
+ case 28:
286
+ _context3.next = 49;
287
+ break;
288
+ case 30:
289
+ showLicenseData = null;
290
+ try {
291
+ showLicenseData = ConfigCheckLicense.parseJwt(license);
292
+ } catch (e) {}
293
+ if (!data) {
294
+ _context3.next = 48;
295
+ break;
296
+ }
297
+ validTill = data.validTill || data.valid_till;
298
+ if (!(validTill && validTill !== '0000-00-00 00:00:00' && new Date(validTill).getTime() < Date.now())) {
299
+ _context3.next = 36;
300
+ break;
301
+ }
302
+ return _context3.abrupt("return", this.setState({
303
+ _error: _i18n["default"].t('ra_License expired on %s', new Date(validTill).toLocaleString()),
304
+ licenseOfflineCheck: true,
305
+ showLicenseData: showLicenseData,
306
+ result: false,
307
+ running: false
308
+ }));
309
+ case 36:
310
+ parts = (data.name || '').split('.');
311
+ if (!(parts[1] === adapterName)) {
312
+ _context3.next = 45;
313
+ break;
314
+ }
315
+ if (!(uuid && data.uuid && data.uuid !== uuid)) {
316
+ _context3.next = 40;
317
+ break;
318
+ }
319
+ return _context3.abrupt("return", this.setState({
320
+ _error: _i18n["default"].t('ra_Serial number (UUID) "%s" in license is for other device.', data.uuid),
321
+ licenseOfflineCheck: true,
322
+ showLicenseData: showLicenseData,
323
+ result: false,
324
+ running: false
325
+ }));
326
+ case 40:
327
+ if (ConfigCheckLicense.isVersionValid(version, data.version, data.invoice, adapterName)) {
328
+ _context3.next = 42;
329
+ break;
330
+ }
331
+ return _context3.abrupt("return", this.setState({
332
+ _error: _i18n["default"].t('ra_License is for version %s, but required version is %s', data.version, this.props.schema.version),
333
+ licenseOfflineCheck: true,
334
+ showLicenseData: showLicenseData,
335
+ result: false,
336
+ running: false
337
+ }));
338
+ case 42:
339
+ return _context3.abrupt("return", this.setState({
340
+ licenseOfflineCheck: true,
341
+ showLicenseData: showLicenseData,
342
+ result: true,
343
+ running: false
344
+ }));
345
+ case 45:
346
+ return _context3.abrupt("return", this.setState({
347
+ _error: _i18n["default"].t('ra_License for other product "%s"', data.name),
348
+ licenseOfflineCheck: true,
349
+ showLicenseData: showLicenseData,
350
+ result: false,
351
+ running: false
352
+ }));
353
+ case 46:
354
+ _context3.next = 49;
355
+ break;
356
+ case 48:
357
+ throw new Error('ra_Invalid answer from server');
358
+ case 49:
359
+ _context3.next = 74;
360
+ break;
361
+ case 51:
362
+ _context3.prev = 51;
363
+ _context3.t1 = _context3["catch"](10);
364
+ if (!((_context3.t1 === null || _context3.t1 === void 0 ? void 0 : (_error$response = _context3.t1.response) === null || _error$response === void 0 ? void 0 : _error$response.status) === 404)) {
365
+ _context3.next = 55;
366
+ break;
367
+ }
368
+ return _context3.abrupt("return", this.setState({
369
+ _error: _i18n["default"].t('ra_License does not exist'),
370
+ result: false,
371
+ running: false
372
+ }));
373
+ case 55:
374
+ _context3.prev = 55;
375
+ _data3 = ConfigCheckLicense.parseJwt(license);
376
+ _parts = (_data3.name || '').split('.');
377
+ if (!(_data3.valid_till && _data3.valid_till !== '0000-00-00 00:00:00' && new Date(_data3.valid_till).getTime() < Date.now())) {
378
+ _context3.next = 60;
379
+ break;
380
+ }
381
+ return _context3.abrupt("return", this.setState({
382
+ _error: _i18n["default"].t('ra_License expired on %s', new Date(_data3.valid_till).toLocaleString()),
383
+ showLicenseData: _data3,
384
+ licenseOfflineCheck: true,
385
+ running: false,
386
+ result: false
387
+ }));
388
+ case 60:
389
+ if (!(_parts[1] === adapterName)) {
390
+ _context3.next = 68;
391
+ break;
392
+ }
393
+ if (!(uuid && _data3.uuid && _data3.uuid !== uuid)) {
394
+ _context3.next = 63;
395
+ break;
396
+ }
397
+ return _context3.abrupt("return", this.setState({
398
+ _error: _i18n["default"].t('ra_Serial number (UUID) "%s" in license is for other device.', _data3.uuid),
399
+ showLicenseData: _data3,
400
+ licenseOfflineCheck: true,
401
+ result: false,
402
+ running: false
403
+ }));
404
+ case 63:
405
+ if (ConfigCheckLicense.isVersionValid(version, _data3.version, _data3.invoice, adapterName)) {
406
+ _context3.next = 65;
407
+ break;
408
+ }
409
+ return _context3.abrupt("return", this.setState({
410
+ _error: _i18n["default"].t('ra_License is for version %s, but required version is %s', _data3.version, this.props.schema.version),
411
+ licenseOfflineCheck: true,
412
+ showLicenseData: _data3,
413
+ result: false,
414
+ running: false
415
+ }));
416
+ case 65:
417
+ return _context3.abrupt("return", this.setState({
418
+ result: true,
419
+ licenseOfflineCheck: true
420
+ }));
421
+ case 68:
422
+ return _context3.abrupt("return", this.setState({
423
+ _error: _i18n["default"].t('ra_License for other product "%s"', _data3.name),
424
+ licenseOfflineCheck: true,
425
+ showLicenseData: _data3,
426
+ result: false,
427
+ running: false
428
+ }));
429
+ case 69:
430
+ _context3.next = 74;
431
+ break;
432
+ case 71:
433
+ _context3.prev = 71;
434
+ _context3.t2 = _context3["catch"](55);
435
+ return _context3.abrupt("return", this.setState({
436
+ _error: _i18n["default"].t('ra_Cannot decode license'),
437
+ result: false,
438
+ licenseOfflineCheck: true,
439
+ running: false
440
+ }));
441
+ case 74:
442
+ case "end":
443
+ return _context3.stop();
444
+ }
445
+ }
446
+ }, _callee3, this, [[10, 51], [19, 24], [55, 71]]);
447
+ }));
448
+ function checkLicense(_x2, _x3) {
449
+ return _checkLicense.apply(this, arguments);
450
+ }
451
+ return checkLicense;
452
+ }()
453
+ }, {
454
+ key: "_onClick",
455
+ value: function () {
456
+ var _onClick2 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee4() {
457
+ var license;
458
+ return _regenerator["default"].wrap(function _callee4$(_context4) {
459
+ while (1) {
460
+ switch (_context4.prev = _context4.next) {
461
+ case 0:
462
+ this.setState({
463
+ running: true
464
+ });
465
+ if (!this.props.data.useLicenseManager) {
466
+ _context4.next = 7;
467
+ break;
468
+ }
469
+ _context4.next = 4;
470
+ return this.findInLicenseManager(this.props.adapterName);
471
+ case 4:
472
+ license = _context4.sent;
473
+ _context4.next = 8;
474
+ break;
475
+ case 7:
476
+ license = this.props.data.license;
477
+ case 8:
478
+ if (!license) {
479
+ _context4.next = 13;
480
+ break;
481
+ }
482
+ _context4.next = 11;
483
+ return this.checkLicense(license, this.props.adapterName, this.props.schema.uuid);
484
+ case 11:
485
+ _context4.next = 14;
486
+ break;
487
+ case 13:
488
+ this.setState({
489
+ _error: _i18n["default"].t('ra_Suitable license not found in license manager'),
490
+ result: false,
491
+ running: false
492
+ });
493
+ case 14:
494
+ case "end":
495
+ return _context4.stop();
496
+ }
497
+ }
498
+ }, _callee4, this);
499
+ }));
500
+ function _onClick() {
501
+ return _onClick2.apply(this, arguments);
502
+ }
503
+ return _onClick;
504
+ }()
505
+ }, {
506
+ key: "renderItem",
507
+ value: function renderItem(error, disabled, defaultValue) {
508
+ var _this3 = this;
509
+ return /*#__PURE__*/_react["default"].createElement("div", {
510
+ className: this.props.classes.fullWidth
511
+ }, /*#__PURE__*/_react["default"].createElement(_material.Button, {
512
+ variant: this.props.schema.variant || 'outlined',
513
+ color: this.props.schema.color || 'primary',
514
+ className: this.props.classes.fullWidth,
515
+ disabled: !this.props.data.license && !this.props.data.useLicenseManager,
516
+ startIcon: /*#__PURE__*/_react["default"].createElement(_Send["default"], null),
517
+ onClick: function onClick() {
518
+ return _this3._onClick();
519
+ }
520
+ }, this.state.running ? /*#__PURE__*/_react["default"].createElement(_material.CircularProgress, {
521
+ size: 20,
522
+ style: {
523
+ marginRight: 8
524
+ }
525
+ }) : null, this.getText(this.props.schema.label || 'ra_Check license', this.props.schema.noTranslation)), this.renderMessageDialog());
526
+ }
527
+ }], [{
528
+ key: "parseJwt",
529
+ value: function parseJwt(token) {
530
+ var base64Url = token.split('.')[1];
531
+ var base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/');
532
+ var jsonPayload = decodeURIComponent(atob(base64).split('').map(function (c) {
533
+ return "%".concat("00".concat(c.charCodeAt(0).toString(16)).slice(-2));
534
+ }).join(''));
535
+ try {
536
+ return JSON.parse(jsonPayload);
537
+ } catch (e) {
538
+ return null;
539
+ }
540
+ }
541
+ }, {
542
+ key: "isVersionValid",
543
+ value: function isVersionValid(version, rule, invoice, adapterName) {
544
+ if (!rule || !version) {
545
+ return true;
546
+ }
547
+ var result = true;
548
+ var _version$split = version.split('.'),
549
+ _version$split2 = (0, _slicedToArray2["default"])(_version$split, 1),
550
+ major = _version$split2[0];
551
+ if (rule.startsWith('>=')) {
552
+ result = parseInt(major, 10) >= parseInt(rule.substring(2, 10));
553
+ } else if (rule.startsWith('<=')) {
554
+ result = parseInt(major, 10) <= parseInt(rule.substring(2, 10));
555
+ } else if (rule.startsWith('>')) {
556
+ result = parseInt(major, 10) > parseInt(rule.substring(1, 10));
557
+ } else if (rule.startsWith('<')) {
558
+ result = parseInt(major, 10) < parseInt(rule.substring(1, 10));
559
+ } else if (rule.startsWith('=')) {
560
+ result = parseInt(major, 10) === parseInt(rule.substring(1, 10));
561
+ } else if (rule.startsWith('==')) {
562
+ result = parseInt(major, 10) === parseInt(rule.substring(2, 10));
563
+ } else if (rule.startsWith('===')) {
564
+ result = parseInt(major, 10) === parseInt(rule.substring(3, 10));
565
+ }
566
+ if (!result && invoice && adapterName) {
567
+ // all commercial licenses are valid for all versions
568
+ if (invoice !== 'free') {
569
+ return true;
570
+ }
571
+ }
572
+ return true;
573
+ }
574
+ }]);
575
+ return ConfigCheckLicense;
576
+ }(_ConfigGeneric2["default"]);
577
+ ConfigCheckLicense.propTypes = {
578
+ socket: _propTypes["default"].object.isRequired,
579
+ themeType: _propTypes["default"].string,
580
+ themeName: _propTypes["default"].string,
581
+ style: _propTypes["default"].object,
582
+ className: _propTypes["default"].string,
583
+ data: _propTypes["default"].object.isRequired,
584
+ schema: _propTypes["default"].object,
585
+ onError: _propTypes["default"].func,
586
+ onChange: _propTypes["default"].func,
587
+ adapterName: _propTypes["default"].string,
588
+ instance: _propTypes["default"].number
589
+ };
590
+ var _default = (0, _styles.withStyles)(styles)(ConfigCheckLicense);
591
+ exports["default"] = _default;
592
+ //# sourceMappingURL=ConfigCheckLicense.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConfigCheckLicense.js","names":["styles","theme","fullWidth","width","icon","height","marginRight","licLabel","fontWeight","minWidth","textTransform","display","licValue","errorTitle","color","palette","mode","okTitle","errorText","marginBottom","ConfigCheckLicense","setState","_error","running","showLicenseData","foundSuitableLicense","licenseOfflineCheck","result","state","undefined","pre","Object","keys","map","key","props","classes","replace","I18n","t","adapterName","socket","getObject","licenses","length","now","Date","schema","uuid","uuidObj","version","aObj","common","forEach","license","validTill","getTime","parts","product","split","useLicense","invoice","isVersionValid","json","window","fetch","method","body","JSON","stringify","headers","response","text","data","parse","e","error","parseJwt","console","log","valid_till","toLocaleString","name","Error","status","useLicenseManager","findInLicenseManager","checkLicense","disabled","defaultValue","variant","_onClick","getText","label","noTranslation","renderMessageDialog","token","base64Url","base64","jsonPayload","decodeURIComponent","atob","c","charCodeAt","toString","slice","join","rule","major","startsWith","parseInt","substring","ConfigGeneric","propTypes","PropTypes","object","isRequired","themeType","string","themeName","style","className","onError","func","onChange","instance","number","withStyles"],"sources":["JsonConfigComponent/ConfigCheckLicense.jsx"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@mui/styles';\n\nimport {\n Button,\n CircularProgress,\n Dialog,\n DialogContent,\n DialogActions,\n DialogTitle,\n} from '@mui/material';\n\nimport IconSend from '@mui/icons-material/Send';\n\nimport I18n from '../../i18n';\nimport DialogError from '../../Dialogs/Error';\n\nimport ConfigGeneric from './ConfigGeneric';\n\nconst styles = theme => ({\n fullWidth: {\n width: '100%'\n },\n icon: {\n width: 24,\n height: 24,\n marginRight: 4\n },\n licLabel: {\n fontWeight: 'bold',\n minWidth: 100,\n textTransform: 'capitalize',\n display: 'inline-block',\n },\n licValue: {\n fontWeight: 'normal'\n },\n errorTitle: {\n color: theme.palette.mode === 'dark' ? '#e39191' : '#b62020',\n },\n okTitle: {\n color: theme.palette.mode === 'dark' ? '#6fd56f' : '#007c00',\n },\n errorText: {\n color: theme.palette.mode === 'dark' ? '#e39191' : '#b62020',\n marginBottom: 30,\n }\n});\n\nclass ConfigCheckLicense extends ConfigGeneric {\n async componentDidMount() {\n super.componentDidMount();\n this.setState( {\n _error: '',\n running: false,\n showLicenseData: null,\n foundSuitableLicense: false,\n licenseOfflineCheck: false,\n result: null,\n });\n }\n\n renderErrorDialog() {\n if (this.state._error && !this.state.showLicenseData) {\n return <DialogError text={this.state._error} classes={undefined} onClose={() => this.setState({_error: ''})} />;\n } else {\n return null;\n }\n }\n\n renderMessageDialog() {\n if (this.state.showLicenseData) {\n const pre = Object.keys(this.state.showLicenseData).map(key =>\n <div key={key}><div className={this.props.classes.licLabel}>{key.replace(/_/g, ' ')}:</div> {this.state.showLicenseData[key]}</div>);\n\n return <Dialog\n open={!0}\n onClose={() => this.setState({ showLicenseData: null })}\n >\n <DialogTitle>\n <span\n className={this.state.result ? this.props.classes.okTitle : this.props.classes.errorTitle}\n >\n {I18n.t('ra_License %s', this.state.result ? 'OK' : 'INVALID')}\n </span>\n </DialogTitle>\n <DialogContent>\n {this.state._error ? <div className={this.props.classes.errorText}>{this.state._error}</div> : null}\n {pre}\n </DialogContent>\n <DialogActions>\n <Button\n onClick={() => this.setState({ showLicenseData: null })}\n color=\"primary\"\n variant=\"contained\"\n >\n {I18n.t('ra_Close')}\n </Button>\n </DialogActions>\n </Dialog>\n } else {\n return null;\n }\n }\n\n static parseJwt(token) {\n const base64Url = token.split('.')[1];\n const base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/');\n const jsonPayload = decodeURIComponent(atob(base64).split('').map(c => `%${(`00${c.charCodeAt(0).toString(16)}`).slice(-2)}`).join(''));\n try {\n return JSON.parse(jsonPayload);\n } catch (e) {\n return null;\n }\n }\n\n static isVersionValid(version, rule, invoice, adapterName) {\n if (!rule || !version) {\n return true;\n }\n let result = true;\n const [major] = version.split('.');\n if (rule.startsWith('>=')) {\n result = parseInt(major, 10) >= parseInt(rule.substring(2, 10));\n } else if (rule.startsWith('<=')) {\n result = parseInt(major, 10) <= parseInt(rule.substring(2, 10));\n } else if (rule.startsWith('>')) {\n result = parseInt(major, 10) > parseInt(rule.substring(1, 10));\n } else if (rule.startsWith('<')) {\n result = parseInt(major, 10) < parseInt(rule.substring(1, 10));\n } else if (rule.startsWith('=')) {\n result = parseInt(major, 10) === parseInt(rule.substring(1, 10));\n } else if (rule.startsWith('==')) {\n result = parseInt(major, 10) === parseInt(rule.substring(2, 10));\n } else if (rule.startsWith('===')) {\n result = parseInt(major, 10) === parseInt(rule.substring(3, 10));\n }\n\n if (!result && invoice && adapterName) {\n // all commercial licenses are valid for all versions\n if (invoice !== 'free') {\n return true;\n }\n }\n\n return true;\n }\n\n async findInLicenseManager(adapterName) {\n // read if license manager is supported\n const licenses = await this.props.socket.getObject('system.licenses');\n if (licenses?.native?.licenses?.length) {\n // enable license manager\n let useLicense;\n const now = Date.now();\n\n let uuid;\n if (this.props.schema.uuid) {\n const uuidObj = await this.props.socket.getObject('system.meta.uuid');\n uuid = uuidObj?.native?.uuid;\n }\n let version;\n if (this.props.schema.version) {\n const aObj = await this.props.socket.getObject(`system.adapter.${adapterName}`);\n version = aObj?.common?.version;\n }\n\n // find license for vis\n licenses.native.licenses.forEach(license => {\n if (!license.validTill || license.validTill === '0000-00-00 00:00:00' || new Date(license.validTill).getTime() > now) {\n const parts = (license.product || '').split('.');\n if (parts[1] === adapterName &&\n (!useLicense || license.invoice !== 'free') &&\n (!uuid || !license.uuid || license.uuid === uuid) &&\n ConfigCheckLicense.isVersionValid(version, license.version, license.invoice, adapterName)\n ) {\n useLicense = license;\n }\n }\n });\n\n return useLicense?.json;\n } else {\n return false;\n }\n }\n\n async checkLicense(license, adapterName) {\n let uuid;\n if (this.props.schema.uuid) {\n const uuidObj = await this.props.socket.getObject('system.meta.uuid');\n uuid = uuidObj?.native?.uuid;\n }\n let version;\n if (this.props.schema.version) {\n const aObj = await this.props.socket.getObject(`system.adapter.${adapterName}`);\n version = aObj?.common?.version;\n }\n\n try {\n const response = await window.fetch('https://iobroker.net/api/v1/public/cert/', {\n method: 'POST',\n body: JSON.stringify({json: license, uuid}),\n headers: {\n 'Content-Type': 'text/plain'\n },\n });\n let data = await response.text();\n try {\n data = JSON.parse(data);\n } catch (e) {\n // ignore\n }\n\n if (data?.error) {\n try {\n const data = ConfigCheckLicense.parseJwt(license);\n return this.setState({\n _error: data.error,\n showLicenseData: data,\n result: false,\n running: false,\n });\n } catch (e) {\n console.log('Cannot parse license')\n return this.setState({ _error: data.error, result: false, running: false });\n }\n } else {\n let showLicenseData = null;\n try {\n showLicenseData = ConfigCheckLicense.parseJwt(license);\n } catch (e) {\n\n }\n if (data) {\n const validTill = data.validTill || data.valid_till;\n if (validTill && validTill !== '0000-00-00 00:00:00' && new Date(validTill).getTime() < Date.now()) {\n return this.setState({\n _error: I18n.t('ra_License expired on %s', new Date(validTill).toLocaleString()),\n licenseOfflineCheck: true,\n showLicenseData,\n result: false,\n running: false,\n });\n }\n const parts = (data.name || '').split('.');\n if (parts[1] === adapterName) {\n // check UUID\n if (uuid && data.uuid && data.uuid !== uuid) {\n return this.setState({\n _error: I18n.t('ra_Serial number (UUID) \"%s\" in license is for other device.', data.uuid),\n licenseOfflineCheck: true,\n showLicenseData,\n result: false,\n running: false,\n });\n }\n\n if (!ConfigCheckLicense.isVersionValid(version, data.version, data.invoice, adapterName)) {\n return this.setState({\n _error: I18n.t('ra_License is for version %s, but required version is %s', data.version, this.props.schema.version),\n licenseOfflineCheck: true,\n showLicenseData,\n result: false,\n running: false,\n });\n }\n\n return this.setState({\n licenseOfflineCheck: true,\n showLicenseData,\n result: true,\n running: false,\n });\n } else {\n return this.setState({\n _error: I18n.t('ra_License for other product \"%s\"', data.name),\n licenseOfflineCheck: true,\n showLicenseData,\n result: false,\n running: false,\n });\n }\n } else {\n throw new Error('ra_Invalid answer from server');\n }\n }\n } catch (error) {\n if (error?.response?.status === 404) {\n return this.setState({ _error: I18n.t('ra_License does not exist'), result: false, running: false });\n }\n // check offline\n try {\n const data = ConfigCheckLicense.parseJwt(license);\n const parts = (data.name || '').split('.');\n\n if (data.valid_till && data.valid_till !== '0000-00-00 00:00:00' && new Date(data.valid_till).getTime() < Date.now()) {\n return this.setState({\n _error: I18n.t('ra_License expired on %s', new Date(data.valid_till).toLocaleString()),\n showLicenseData: data,\n licenseOfflineCheck: true,\n running: false,\n result: false,\n });\n }\n if (parts[1] === adapterName) {\n // check UUID\n if (uuid && data.uuid && data.uuid !== uuid) {\n return this.setState({\n _error: I18n.t('ra_Serial number (UUID) \"%s\" in license is for other device.', data.uuid),\n showLicenseData: data,\n licenseOfflineCheck: true,\n result: false,\n running: false,\n });\n }\n\n if (!ConfigCheckLicense.isVersionValid(version, data.version, data.invoice, adapterName)) {\n return this.setState({\n _error: I18n.t('ra_License is for version %s, but required version is %s', data.version, this.props.schema.version),\n licenseOfflineCheck: true,\n showLicenseData: data,\n result: false,\n running: false,\n });\n }\n\n return this.setState({ result: true, licenseOfflineCheck: true });\n } else {\n return this.setState({\n _error: I18n.t('ra_License for other product \"%s\"', data.name),\n licenseOfflineCheck: true,\n showLicenseData: data,\n result: false,\n running: false,\n });\n }\n } catch (e) {\n return this.setState({ _error: I18n.t('ra_Cannot decode license'), result: false, licenseOfflineCheck: true, running: false });\n }\n }\n }\n\n async _onClick() {\n this.setState({ running: true });\n let license;\n if (this.props.data.useLicenseManager) {\n license = await this.findInLicenseManager(this.props.adapterName);\n } else {\n license = this.props.data.license;\n }\n if (license) {\n await this.checkLicense(license, this.props.adapterName, this.props.schema.uuid);\n } else {\n this.setState({ _error: I18n.t('ra_Suitable license not found in license manager'), result: false, running: false });\n }\n }\n\n renderItem(error, disabled, defaultValue) {\n return <div className={this.props.classes.fullWidth}>\n <Button\n variant={this.props.schema.variant || 'outlined'}\n color={this.props.schema.color || 'primary'}\n className={this.props.classes.fullWidth}\n disabled={!this.props.data.license && !this.props.data.useLicenseManager}\n startIcon={<IconSend />}\n onClick={() => this._onClick()}\n >\n {this.state.running ? <CircularProgress size={20} style={{ marginRight: 8 }} /> : null}\n {this.getText(this.props.schema.label || 'ra_Check license', this.props.schema.noTranslation)}\n </Button>\n {this.renderMessageDialog()}\n </div>;\n }\n}\n\nConfigCheckLicense.propTypes = {\n socket: PropTypes.object.isRequired,\n themeType: PropTypes.string,\n themeName: PropTypes.string,\n style: PropTypes.object,\n className: PropTypes.string,\n data: PropTypes.object.isRequired,\n schema: PropTypes.object,\n onError: PropTypes.func,\n onChange: PropTypes.func,\n adapterName: PropTypes.string,\n instance: PropTypes.number,\n};\n\nexport default withStyles(styles)(ConfigCheckLicense);"],"mappings":"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"}