iobroker.admin 7.7.1 → 7.7.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.
- package/README.md +3 -4
- package/adminWww/assets/{AdapterUpdateDialog-Bgswiqs9.js → AdapterUpdateDialog-DHGhgEEq.js} +1 -1
- package/adminWww/assets/{Adapters-yQiEeoh8.js → Adapters-CgSIajcF.js} +2 -2
- package/adminWww/assets/{Config-C1Gjt8DC.js → Config-BQSl4bfA.js} +1 -1
- package/adminWww/assets/{CustomModal-CgEtkfCG.js → CustomModal-DNMTLv4y.js} +1 -1
- package/adminWww/assets/{CustomTab-CwioFUor.js → CustomTab-Bl8S8QZW.js} +1 -1
- package/adminWww/assets/{DefaultPropsProvider-DxsXuIyE.js → DefaultPropsProvider-u5xB1Fxz.js} +1 -1
- package/adminWww/assets/{EasyMode-CN-reJVI.js → EasyMode-xDbqrply.js} +1 -1
- package/adminWww/assets/{Enums-8m252lzC.js → Enums-BSICIhWI.js} +1 -1
- package/adminWww/assets/{Fields-lI3YkIzQ.js → Fields-C3JkTmfP.js} +1 -1
- package/adminWww/assets/{Files-fQpSPYWI.js → Files-DK85-COY.js} +2 -2
- package/adminWww/assets/{FilledInput-CKswrNd5.js → FilledInput-CysG4ax_.js} +1 -1
- package/adminWww/assets/{Hosts-BPdUlXV5.js → Hosts-qIsB4Gub.js} +2 -2
- package/adminWww/assets/Instances-BA_DCzs8.js +2 -0
- package/adminWww/assets/{Intro-Dr1-aqO9.js → Intro-00oh6SLw.js} +1 -1
- package/adminWww/assets/{Logs-xCCrWV30.js → Logs-Cvpgh-zN.js} +1 -1
- package/adminWww/assets/Objects-Dp71iotS.js +60 -0
- package/adminWww/assets/{State-nZ6sjU9_.js → State-BqfD2ABf.js} +1 -1
- package/adminWww/assets/{Tabs-BJ1rL35Z.js → Tabs-sxfWgN0b.js} +2 -2
- package/adminWww/assets/{Users-B0iasrSG.js → Users-CDcWqTfZ.js} +1 -1
- package/adminWww/assets/ace-BG5WYul1.js +985 -0
- package/adminWww/assets/{blueGrey-D-KQaGde.js → blueGrey-DYsiMDOn.js} +1 -1
- package/adminWww/assets/{bootstrap-DDrI3lVl.js → bootstrap-BYQTdf9r.js} +91 -103
- package/adminWww/assets/{createSvgIcon-DuKI6CvW.js → createSvgIcon-Bh3KWtyp.js} +1 -1
- package/adminWww/assets/{emotion-react.browser.esm-DApPKwaj.js → emotion-react.browser.esm-BCDt9NrH.js} +1 -1
- package/adminWww/assets/{emotion-styled.browser.esm-Dc05hmeu.js → emotion-styled.browser.esm-CyFqGgyG.js} +1 -1
- package/adminWww/assets/{emotion-utils.browser.esm-DOjH6Olm.js → emotion-utils.browser.esm-pglN4_eI.js} +1 -1
- package/adminWww/assets/{geosearch.module-CWfRtxrN.js → geosearch.module-DH4NhiPj.js} +1 -1
- package/adminWww/assets/hostInit-fzxL8JAx.js +1 -1
- package/adminWww/assets/{iconBase-CgxZ5MMC.js → iconBase-C3vi24ZE.js} +1 -1
- package/adminWww/assets/{index-BmWdDCX_.js → index-B1ITPhEY.js} +2 -2
- package/adminWww/assets/{index-D7Rlw-5R.js → index-D--ojYan.js} +1 -1
- package/adminWww/assets/{index-BjVqnwqt.js → index-D3IAEXXP.js} +1 -1
- package/adminWww/assets/{index-HOidq_rM.js → index-DPDg2YA0.js} +1 -1
- package/adminWww/assets/{index-Bsv_DXxB.js → index-DTGUg51P.js} +1 -1
- package/adminWww/assets/{index-BP5kWU3L.js → index-Qa7Q_Dz5.js} +1 -1
- package/adminWww/assets/{index-RvHSqeMD.js → index-qcIeekse.js} +13 -13
- package/adminWww/assets/{index-gHyOgbGJ.js → index-rKfs-rCa.js} +1 -1
- package/adminWww/assets/{index-DH1kmwK1.js → index-wN1ZlPSW.js} +2 -2
- package/adminWww/assets/iobroker_admin__loadShare___mf_0_emotion_mf_1_react__loadShare__-BOKYvG_W.js +1 -0
- package/adminWww/assets/{iobroker_admin__loadShare__leaflet__loadShare__-B1OZ7tj-.js → iobroker_admin__loadShare__leaflet__loadShare__-h9SMNPLU.js} +1 -1
- package/adminWww/assets/iobroker_admin__loadShare__prop_mf_2_types__loadShare__-BnsS7SOQ.js +1 -0
- package/adminWww/assets/{iobroker_admin__loadShare__react__loadShare__-DtlEM_52.js → iobroker_admin__loadShare__react__loadShare__-Bis6NHgw.js} +1 -1
- package/adminWww/assets/iobroker_admin__mf_v__runtimeInit__mf_v__-CTkuGOOk.js +5 -0
- package/adminWww/assets/{sentry-CNy_SQq1.js → sentry-H_UdJ2zx.js} +1 -1
- package/adminWww/assets/{zh-cn-DZTx1vAh.js → zh-cn-vvAC9zpl.js} +3 -3
- package/adminWww/index.html +2 -2
- package/adminWww/mf-manifest.json +1 -1
- package/adminWww/remoteEntry.js +2 -2
- package/adminWww/static/js/worker-javascript.js +1 -1
- package/adminWww/static/js/worker-yaml.js +1 -1
- package/io-package.json +14 -14
- package/package.json +10 -9
- package/adminWww/assets/Instances-BStmfz4r.js +0 -2
- package/adminWww/assets/Objects-BF8brXaf.js +0 -60
- package/adminWww/assets/ace-CFIUQz8j.js +0 -970
- package/adminWww/assets/iobroker_admin__loadShare___mf_0_emotion_mf_1_react__loadShare__-gw2iqPBS.js +0 -1
- package/adminWww/assets/iobroker_admin__loadShare__prop_mf_2_types__loadShare__-BGyJCibC.js +0 -1
- package/adminWww/assets/iobroker_admin__mf_v__runtimeInit__mf_v__-VDoBF19b.js +0 -10
- package/build-backend/src/lib/checkLinuxPass.js +0 -280
- package/build-backend/src/lib/checkLinuxPass.js.map +0 -1
- package/build-backend/src/lib/testPassword.js +0 -58
- package/build-backend/src/lib/testPassword.js.map +0 -1
- package/build-backend/src/lib/translations.js +0 -27
- package/build-backend/src/lib/translations.js.map +0 -1
- package/build-backend/src/lib/utils.js +0 -344
- package/build-backend/src/lib/utils.js.map +0 -1
- package/build-backend/src/lib/web.js +0 -1165
- package/build-backend/src/lib/web.js.map +0 -1
- package/build-backend/src/main.js +0 -1704
- package/build-backend/src/main.js.map +0 -1
- package/build-backend/src-admin/src/components/Adapters/Utils.js +0 -39
- package/build-backend/src-admin/src/components/Adapters/Utils.js.map +0 -1
|
@@ -1,344 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.AUTO_UPGRADE_OPTIONS_MAPPING = exports.AUTO_UPGRADE_SETTINGS = exports.CONTROLLER_CHANGELOG_URL = void 0;
|
|
4
|
-
exports.replaceLink = replaceLink;
|
|
5
|
-
/** Url where controller changelog is reachable */
|
|
6
|
-
exports.CONTROLLER_CHANGELOG_URL = 'https://github.com/ioBroker/ioBroker.js-controller/blob/master/CHANGELOG.md';
|
|
7
|
-
/** All possible auto upgrade settings */
|
|
8
|
-
exports.AUTO_UPGRADE_SETTINGS = ['none', 'patch', 'minor', 'major'];
|
|
9
|
-
/** Mapping to make it more understandable which upgrades are allowed */
|
|
10
|
-
exports.AUTO_UPGRADE_OPTIONS_MAPPING = {
|
|
11
|
-
none: 'none',
|
|
12
|
-
patch: 'patch',
|
|
13
|
-
minor: 'patch & minor',
|
|
14
|
-
major: 'patch, minor & major',
|
|
15
|
-
};
|
|
16
|
-
function ip2int(ip) {
|
|
17
|
-
return ip.split('.').reduce((ipInt, octet) => (ipInt << 8) + parseInt(octet, 10), 0) >>> 0;
|
|
18
|
-
}
|
|
19
|
-
function findNetworkAddressOfHost(obj, localIp) {
|
|
20
|
-
const networkInterfaces = obj?.native?.hardware?.networkInterfaces;
|
|
21
|
-
if (!networkInterfaces) {
|
|
22
|
-
return null;
|
|
23
|
-
}
|
|
24
|
-
let hostIp;
|
|
25
|
-
for (const networkInterface of Object.values(networkInterfaces)) {
|
|
26
|
-
if (!networkInterface) {
|
|
27
|
-
continue;
|
|
28
|
-
}
|
|
29
|
-
for (let i = 0; i < networkInterface.length; i++) {
|
|
30
|
-
const ip = networkInterface[i];
|
|
31
|
-
if (ip.internal) {
|
|
32
|
-
return;
|
|
33
|
-
}
|
|
34
|
-
if (localIp.includes(':') && ip.family !== 'IPv6') {
|
|
35
|
-
return;
|
|
36
|
-
}
|
|
37
|
-
if (localIp.includes('.') && !localIp.match(/[^.\d]/) && ip.family !== 'IPv4') {
|
|
38
|
-
return;
|
|
39
|
-
}
|
|
40
|
-
if (localIp === '127.0.0.0' || localIp === 'localhost' || localIp.match(/[^.\d]/)) {
|
|
41
|
-
// if DNS name
|
|
42
|
-
hostIp = ip.address;
|
|
43
|
-
}
|
|
44
|
-
else if (ip.family === 'IPv4' &&
|
|
45
|
-
localIp.includes('.') &&
|
|
46
|
-
(ip2int(localIp) & ip2int(ip.netmask)) === (ip2int(ip.address) & ip2int(ip.netmask))) {
|
|
47
|
-
hostIp = ip.address;
|
|
48
|
-
}
|
|
49
|
-
else {
|
|
50
|
-
hostIp = ip.address;
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
if (!hostIp) {
|
|
55
|
-
for (const networkInterface of Object.values(networkInterfaces)) {
|
|
56
|
-
if (!networkInterface) {
|
|
57
|
-
continue;
|
|
58
|
-
}
|
|
59
|
-
for (let i = 0; i < networkInterface.length; i++) {
|
|
60
|
-
const ip = networkInterface[i];
|
|
61
|
-
if (ip.internal) {
|
|
62
|
-
return;
|
|
63
|
-
}
|
|
64
|
-
if (localIp.includes(':') && ip.family !== 'IPv6') {
|
|
65
|
-
return;
|
|
66
|
-
}
|
|
67
|
-
if (localIp.includes('.') && !localIp.match(/[^.\d]/) && ip.family !== 'IPv4') {
|
|
68
|
-
return;
|
|
69
|
-
}
|
|
70
|
-
if (localIp === '127.0.0.0' || localIp === 'localhost' || localIp.match(/[^.\d]/)) {
|
|
71
|
-
// if DNS name
|
|
72
|
-
hostIp = ip.address;
|
|
73
|
-
}
|
|
74
|
-
else {
|
|
75
|
-
hostIp = ip.address;
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
if (!hostIp) {
|
|
81
|
-
for (const networkInterface of Object.values(networkInterfaces)) {
|
|
82
|
-
if (!networkInterface) {
|
|
83
|
-
continue;
|
|
84
|
-
}
|
|
85
|
-
for (let i = 0; i < networkInterface.length; i++) {
|
|
86
|
-
const ip = networkInterface[i];
|
|
87
|
-
if (ip.internal) {
|
|
88
|
-
return;
|
|
89
|
-
}
|
|
90
|
-
hostIp = ip.address;
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
return hostIp;
|
|
95
|
-
}
|
|
96
|
-
function getHostname(instanceObj, objects, hosts, currentHostname, adminInstance) {
|
|
97
|
-
if (!instanceObj || !instanceObj.common) {
|
|
98
|
-
return null;
|
|
99
|
-
}
|
|
100
|
-
let hostname;
|
|
101
|
-
// check if the adapter from the same host as admin
|
|
102
|
-
const adminHost = objects[`system.adapter.${adminInstance}`]?.common?.host;
|
|
103
|
-
if (instanceObj.common.host !== adminHost) {
|
|
104
|
-
// find IP address
|
|
105
|
-
const host = hosts[`system.host.${instanceObj.common.host}`];
|
|
106
|
-
if (host) {
|
|
107
|
-
const ip = findNetworkAddressOfHost(host, currentHostname);
|
|
108
|
-
if (ip) {
|
|
109
|
-
hostname = ip;
|
|
110
|
-
}
|
|
111
|
-
else {
|
|
112
|
-
console.warn(`Cannot find suitable IP in host ${instanceObj.common.host} for ${instanceObj._id}`);
|
|
113
|
-
return null;
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
else {
|
|
117
|
-
console.warn(`Cannot find host ${instanceObj.common.host} for ${instanceObj._id}`);
|
|
118
|
-
return null;
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
else {
|
|
122
|
-
hostname = currentHostname;
|
|
123
|
-
}
|
|
124
|
-
return hostname;
|
|
125
|
-
}
|
|
126
|
-
// internal use
|
|
127
|
-
function _replaceLink(link, objects, adapterInstance, attr, placeholder, hosts, hostname, adminInstance) {
|
|
128
|
-
if (attr === 'protocol') {
|
|
129
|
-
attr = 'secure';
|
|
130
|
-
}
|
|
131
|
-
try {
|
|
132
|
-
const object = objects[`system.adapter.${adapterInstance}`];
|
|
133
|
-
if (link && object) {
|
|
134
|
-
if (attr === 'secure') {
|
|
135
|
-
link = link.replace(`%${placeholder}%`, object.native[attr] ? 'https' : 'http');
|
|
136
|
-
}
|
|
137
|
-
else {
|
|
138
|
-
let value = object.native[attr];
|
|
139
|
-
// workaround for port
|
|
140
|
-
if ((attr === 'webinterfacePort' || attr === 'port') && (!value || value === '0')) {
|
|
141
|
-
if (object.native.secure === true) {
|
|
142
|
-
value = 443;
|
|
143
|
-
}
|
|
144
|
-
else {
|
|
145
|
-
value = 80;
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
if (attr === 'bind' || attr === 'ip') {
|
|
149
|
-
let ip = object.native.bind || object.native.ip;
|
|
150
|
-
if (ip === '0.0.0.0') {
|
|
151
|
-
ip = getHostname(object, objects, hosts, hostname, adminInstance);
|
|
152
|
-
}
|
|
153
|
-
if (!link.includes(`%${placeholder}%`)) {
|
|
154
|
-
link = link.replace(`%native_${placeholder}%`, ip || '');
|
|
155
|
-
}
|
|
156
|
-
else {
|
|
157
|
-
link = link.replace(`%${placeholder}%`, ip || '');
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
else if (!link.includes(`%${placeholder}%`)) {
|
|
161
|
-
link = link.replace(`%native_${placeholder}%`, value);
|
|
162
|
-
}
|
|
163
|
-
else {
|
|
164
|
-
link = link.replace(`%${placeholder}%`, value);
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
else {
|
|
169
|
-
console.log(`Cannot get link ${attr}`);
|
|
170
|
-
link = link.replace(`%${placeholder}%`, '');
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
catch (error) {
|
|
174
|
-
console.log(error);
|
|
175
|
-
}
|
|
176
|
-
return link;
|
|
177
|
-
}
|
|
178
|
-
/**
|
|
179
|
-
* Convert the template link to string
|
|
180
|
-
*
|
|
181
|
-
* Possible placeholders:
|
|
182
|
-
* `%ip%` - `native.bind` or `native.ip` of this adapter. If it is '0.0.0.0', we are trying to find the host IP that is reachable from the current browser.
|
|
183
|
-
* `%protocol%` - `native.protocol` or `native.secure` of this adapter. The result is 'http' or 'https'.
|
|
184
|
-
* `%s%` - `native.protocol` or `native.secure` of this adapter. The result is '' or 's'. The idea is to use the pattern like "http%s%://..."
|
|
185
|
-
* `%instance%` - instance number
|
|
186
|
-
* `%adapterName_nativeAttr%` - Takes the native value `nativeAttr` of all instances of adapterName. This generates many links if more than one instance installed
|
|
187
|
-
* `%adapterName.x_nativeAttr%` - Takes the native value `nativeAttr` of adapterName.x instance
|
|
188
|
-
*
|
|
189
|
-
* @param link pattern for link
|
|
190
|
-
* @param adapter adapter name
|
|
191
|
-
* @param instance adapter instance number
|
|
192
|
-
* @param context Context object
|
|
193
|
-
* @param context.instances Object with all instances
|
|
194
|
-
* @param context.hostname Actual host name
|
|
195
|
-
* @param context.adminInstance Actual admin instance
|
|
196
|
-
* @param context.hosts Object with all hosts
|
|
197
|
-
*/
|
|
198
|
-
function replaceLink(link, adapter, instance, context) {
|
|
199
|
-
const _urls = [];
|
|
200
|
-
let port;
|
|
201
|
-
if (link) {
|
|
202
|
-
const instanceObj = context.instances[`system.adapter.${adapter}.${instance}`];
|
|
203
|
-
const native = instanceObj?.native || {};
|
|
204
|
-
const placeholders = link.match(/%(\w+)%/g);
|
|
205
|
-
if (placeholders) {
|
|
206
|
-
for (let p = 0; p < placeholders.length; p++) {
|
|
207
|
-
let placeholder = placeholders[p];
|
|
208
|
-
if (placeholder === '%ip%') {
|
|
209
|
-
let ip = (native.bind || native.ip);
|
|
210
|
-
if (!ip || ip === '0.0.0.0') {
|
|
211
|
-
// Check host
|
|
212
|
-
ip = getHostname(instanceObj, context.instances, context.hosts, context.hostname, context.adminInstance);
|
|
213
|
-
}
|
|
214
|
-
if (_urls.length) {
|
|
215
|
-
_urls.forEach(item => (item.url = item.url.replace('%ip%', ip)));
|
|
216
|
-
}
|
|
217
|
-
else {
|
|
218
|
-
link = link.replace('%ip%', ip || '');
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
else if (placeholder === '%protocol%') {
|
|
222
|
-
const protocolVal = native.secure === undefined ? native.protocol : native.secure;
|
|
223
|
-
let protocol;
|
|
224
|
-
if (protocolVal === true || protocolVal === 'true') {
|
|
225
|
-
protocol = 'https';
|
|
226
|
-
}
|
|
227
|
-
else if (protocolVal === false || protocolVal === 'false' || !protocolVal) {
|
|
228
|
-
protocol = 'http';
|
|
229
|
-
}
|
|
230
|
-
else {
|
|
231
|
-
protocol = protocolVal.toString().replace(/:$/, '');
|
|
232
|
-
}
|
|
233
|
-
if (_urls.length) {
|
|
234
|
-
_urls.forEach(item => (item.url = item.url.replace('%protocol%', protocol)));
|
|
235
|
-
}
|
|
236
|
-
else {
|
|
237
|
-
link = link.replace('%protocol%', protocol);
|
|
238
|
-
}
|
|
239
|
-
}
|
|
240
|
-
else if (placeholder === '%s%') {
|
|
241
|
-
const protocolVal = native.secure === undefined ? native.protocol : native.secure;
|
|
242
|
-
let protocol;
|
|
243
|
-
if (protocolVal === true || protocolVal === 'true') {
|
|
244
|
-
protocol = 's';
|
|
245
|
-
}
|
|
246
|
-
else if (protocolVal === false || protocolVal === 'false' || !protocolVal) {
|
|
247
|
-
protocol = '';
|
|
248
|
-
}
|
|
249
|
-
else {
|
|
250
|
-
protocol = protocolVal.toString().replace(/:$/, '');
|
|
251
|
-
}
|
|
252
|
-
if (_urls.length) {
|
|
253
|
-
_urls.forEach(item => (item.url = item.url.replace('%s%', protocol)));
|
|
254
|
-
}
|
|
255
|
-
else {
|
|
256
|
-
link = link.replace('%s%', protocol);
|
|
257
|
-
}
|
|
258
|
-
}
|
|
259
|
-
else if (placeholder === '%instance%') {
|
|
260
|
-
link = link.replace('%instance%', instance.toString());
|
|
261
|
-
if (_urls.length) {
|
|
262
|
-
_urls.forEach(item => (item.url = item.url.replace('%instance%', instance.toString())));
|
|
263
|
-
}
|
|
264
|
-
else {
|
|
265
|
-
link = link.replace('%instance%', instance.toString());
|
|
266
|
-
}
|
|
267
|
-
}
|
|
268
|
-
else {
|
|
269
|
-
// remove %%
|
|
270
|
-
placeholder = placeholder.replace(/%/g, '');
|
|
271
|
-
if (placeholder.startsWith('native_')) {
|
|
272
|
-
placeholder = placeholder.substring(7);
|
|
273
|
-
}
|
|
274
|
-
// like web.0_port or web_protocol
|
|
275
|
-
if (!placeholder.includes('_')) {
|
|
276
|
-
// if only one instance
|
|
277
|
-
const adapterInstance = `${adapter}.${instance}`;
|
|
278
|
-
if (_urls.length) {
|
|
279
|
-
_urls.forEach(item => (item.url = _replaceLink(item.url, context.instances, adapterInstance, placeholder, placeholder, context.hosts, context.hostname, context.adminInstance)));
|
|
280
|
-
}
|
|
281
|
-
else {
|
|
282
|
-
link = _replaceLink(link, context.instances, adapterInstance, placeholder, placeholder, context.hosts, context.hostname, context.adminInstance);
|
|
283
|
-
port = context.instances[`system.adapter.${adapterInstance}`]?.native?.port;
|
|
284
|
-
}
|
|
285
|
-
}
|
|
286
|
-
else {
|
|
287
|
-
const [adapterInstance, attr] = placeholder.split('_');
|
|
288
|
-
// if instance number not found
|
|
289
|
-
if (!adapterInstance.match(/\.[0-9]+$/)) {
|
|
290
|
-
// list all possible instances
|
|
291
|
-
let ids;
|
|
292
|
-
if (adapter === adapterInstance) {
|
|
293
|
-
// take only this one instance and that's all
|
|
294
|
-
ids = [`${adapter}.${instance}`];
|
|
295
|
-
}
|
|
296
|
-
else {
|
|
297
|
-
ids = Object.keys(context.instances)
|
|
298
|
-
.filter(id => id.startsWith(`system.adapter.${adapterInstance}.`) &&
|
|
299
|
-
context.instances[id].common.enabled)
|
|
300
|
-
.map(id => id.substring(15));
|
|
301
|
-
// try to get disabled instances
|
|
302
|
-
if (!ids.length) {
|
|
303
|
-
ids = Object.keys(context.instances)
|
|
304
|
-
.filter(id => id.startsWith(`system.adapter.${adapterInstance}.`))
|
|
305
|
-
.map(id => id.substring(15));
|
|
306
|
-
}
|
|
307
|
-
}
|
|
308
|
-
for (const id of ids) {
|
|
309
|
-
if (_urls.length) {
|
|
310
|
-
const item = _urls.find(t => t.instance === id);
|
|
311
|
-
if (item) {
|
|
312
|
-
item.url = _replaceLink(item.url, context.instances, id, attr, placeholder, context.hosts, context.hostname, context.adminInstance);
|
|
313
|
-
}
|
|
314
|
-
else {
|
|
315
|
-
// add new
|
|
316
|
-
const _link = _replaceLink(link, context.instances, id, attr, placeholder, context.hosts, context.hostname, context.adminInstance);
|
|
317
|
-
const _port = context.instances[`system.adapter.${id}`]?.native
|
|
318
|
-
?.port;
|
|
319
|
-
_urls.push({ url: _link, port: _port, instance: id });
|
|
320
|
-
}
|
|
321
|
-
}
|
|
322
|
-
else {
|
|
323
|
-
const _link = _replaceLink(link, context.instances, id, attr, placeholder, context.hosts, context.hostname, context.adminInstance);
|
|
324
|
-
const _port = context.instances[`system.adapter.${id}`]?.native
|
|
325
|
-
?.port;
|
|
326
|
-
_urls.push({ url: _link, port: _port, instance: id });
|
|
327
|
-
}
|
|
328
|
-
}
|
|
329
|
-
}
|
|
330
|
-
else {
|
|
331
|
-
link = _replaceLink(link, context.instances, adapterInstance, attr, placeholder, context.hosts, context.hostname, context.adminInstance);
|
|
332
|
-
port = context.instances[`system.adapter.${adapterInstance}`]?.native?.port;
|
|
333
|
-
}
|
|
334
|
-
}
|
|
335
|
-
}
|
|
336
|
-
}
|
|
337
|
-
}
|
|
338
|
-
}
|
|
339
|
-
if (_urls.length) {
|
|
340
|
-
return _urls;
|
|
341
|
-
}
|
|
342
|
-
return [{ url: link, port }];
|
|
343
|
-
}
|
|
344
|
-
//# sourceMappingURL=utils.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/lib/utils.ts"],"names":[],"mappings":"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","sourcesContent":["/** Url where controller changelog is reachable */\nexport const CONTROLLER_CHANGELOG_URL = 'https://github.com/ioBroker/ioBroker.js-controller/blob/master/CHANGELOG.md';\n\n/** All possible auto upgrade settings */\nexport const AUTO_UPGRADE_SETTINGS: ioBroker.AutoUpgradePolicy[] = ['none', 'patch', 'minor', 'major'];\n\n/** Mapping to make it more understandable which upgrades are allowed */\nexport const AUTO_UPGRADE_OPTIONS_MAPPING: Record<ioBroker.AutoUpgradePolicy, string> = {\n none: 'none',\n patch: 'patch',\n minor: 'patch & minor',\n major: 'patch, minor & major',\n};\n\nfunction ip2int(ip: string): number {\n return ip.split('.').reduce((ipInt, octet) => (ipInt << 8) + parseInt(octet, 10), 0) >>> 0;\n}\n\nfunction findNetworkAddressOfHost(obj: ioBroker.HostObject, localIp: string): null | string {\n const networkInterfaces = obj?.native?.hardware?.networkInterfaces;\n if (!networkInterfaces) {\n return null;\n }\n\n let hostIp;\n for (const networkInterface of Object.values(networkInterfaces)) {\n if (!networkInterface) {\n continue;\n }\n for (let i = 0; i < networkInterface.length; i++) {\n const ip = networkInterface[i];\n if (ip.internal) {\n return;\n }\n if (localIp.includes(':') && ip.family !== 'IPv6') {\n return;\n }\n if (localIp.includes('.') && !localIp.match(/[^.\\d]/) && ip.family !== 'IPv4') {\n return;\n }\n if (localIp === '127.0.0.0' || localIp === 'localhost' || localIp.match(/[^.\\d]/)) {\n // if DNS name\n hostIp = ip.address;\n } else if (\n ip.family === 'IPv4' &&\n localIp.includes('.') &&\n (ip2int(localIp) & ip2int(ip.netmask)) === (ip2int(ip.address) & ip2int(ip.netmask))\n ) {\n hostIp = ip.address;\n } else {\n hostIp = ip.address;\n }\n }\n }\n\n if (!hostIp) {\n for (const networkInterface of Object.values(networkInterfaces)) {\n if (!networkInterface) {\n continue;\n }\n for (let i = 0; i < networkInterface.length; i++) {\n const ip = networkInterface[i];\n if (ip.internal) {\n return;\n }\n if (localIp.includes(':') && ip.family !== 'IPv6') {\n return;\n }\n if (localIp.includes('.') && !localIp.match(/[^.\\d]/) && ip.family !== 'IPv4') {\n return;\n }\n if (localIp === '127.0.0.0' || localIp === 'localhost' || localIp.match(/[^.\\d]/)) {\n // if DNS name\n hostIp = ip.address;\n } else {\n hostIp = ip.address;\n }\n }\n }\n }\n\n if (!hostIp) {\n for (const networkInterface of Object.values(networkInterfaces)) {\n if (!networkInterface) {\n continue;\n }\n for (let i = 0; i < networkInterface.length; i++) {\n const ip = networkInterface[i];\n if (ip.internal) {\n return;\n }\n hostIp = ip.address;\n }\n }\n }\n\n return hostIp;\n}\n\nfunction getHostname(\n instanceObj: ioBroker.InstanceObject,\n objects: Record<string, ioBroker.InstanceObject>,\n hosts: Record<string, ioBroker.HostObject>,\n currentHostname: string,\n adminInstance: string,\n): string {\n if (!instanceObj || !instanceObj.common) {\n return null;\n }\n\n let hostname;\n // check if the adapter from the same host as admin\n const adminHost = objects[`system.adapter.${adminInstance}`]?.common?.host;\n if (instanceObj.common.host !== adminHost) {\n // find IP address\n const host = hosts[`system.host.${instanceObj.common.host}`];\n if (host) {\n const ip = findNetworkAddressOfHost(host, currentHostname);\n if (ip) {\n hostname = ip;\n } else {\n console.warn(`Cannot find suitable IP in host ${instanceObj.common.host} for ${instanceObj._id}`);\n return null;\n }\n } else {\n console.warn(`Cannot find host ${instanceObj.common.host} for ${instanceObj._id}`);\n return null;\n }\n } else {\n hostname = currentHostname;\n }\n\n return hostname;\n}\n\n// internal use\nfunction _replaceLink(\n link: string,\n objects: Record<string, ioBroker.InstanceObject>,\n adapterInstance: string,\n attr: string,\n placeholder: string,\n hosts: Record<string, ioBroker.HostObject>,\n hostname: string,\n adminInstance: string,\n): string {\n if (attr === 'protocol') {\n attr = 'secure';\n }\n\n try {\n const object = objects[`system.adapter.${adapterInstance}`];\n\n if (link && object) {\n if (attr === 'secure') {\n link = link.replace(`%${placeholder}%`, object.native[attr] ? 'https' : 'http');\n } else {\n let value = object.native[attr];\n // workaround for port\n if ((attr === 'webinterfacePort' || attr === 'port') && (!value || value === '0')) {\n if (object.native.secure === true) {\n value = 443;\n } else {\n value = 80;\n }\n }\n\n if (attr === 'bind' || attr === 'ip') {\n let ip = object.native.bind || object.native.ip;\n if (ip === '0.0.0.0') {\n ip = getHostname(object, objects, hosts, hostname, adminInstance);\n }\n if (!link.includes(`%${placeholder}%`)) {\n link = link.replace(`%native_${placeholder}%`, ip || '');\n } else {\n link = link.replace(`%${placeholder}%`, ip || '');\n }\n } else if (!link.includes(`%${placeholder}%`)) {\n link = link.replace(`%native_${placeholder}%`, value);\n } else {\n link = link.replace(`%${placeholder}%`, value);\n }\n }\n } else {\n console.log(`Cannot get link ${attr}`);\n link = link.replace(`%${placeholder}%`, '');\n }\n } catch (error) {\n console.log(error);\n }\n return link;\n}\n\n/**\n * Convert the template link to string\n *\n * Possible placeholders:\n * `%ip%` - `native.bind` or `native.ip` of this adapter. If it is '0.0.0.0', we are trying to find the host IP that is reachable from the current browser.\n * `%protocol%` - `native.protocol` or `native.secure` of this adapter. The result is 'http' or 'https'.\n * `%s%` - `native.protocol` or `native.secure` of this adapter. The result is '' or 's'. The idea is to use the pattern like \"http%s%://...\"\n * `%instance%` - instance number\n * `%adapterName_nativeAttr%` - Takes the native value `nativeAttr` of all instances of adapterName. This generates many links if more than one instance installed\n * `%adapterName.x_nativeAttr%` - Takes the native value `nativeAttr` of adapterName.x instance\n *\n * @param link pattern for link\n * @param adapter adapter name\n * @param instance adapter instance number\n * @param context Context object\n * @param context.instances Object with all instances\n * @param context.hostname Actual host name\n * @param context.adminInstance Actual admin instance\n * @param context.hosts Object with all hosts\n */\nexport function replaceLink(\n link: string,\n adapter: string,\n instance: number,\n context: {\n instances: Record<string, ioBroker.InstanceObject>;\n hostname: string;\n adminInstance: string;\n hosts: Record<string, ioBroker.HostObject>;\n },\n): {\n url: string;\n port: number;\n instance?: string;\n}[] {\n const _urls: {\n url: string;\n port: number;\n instance?: string;\n }[] = [];\n let port: number;\n\n if (link) {\n const instanceObj = context.instances[`system.adapter.${adapter}.${instance}`];\n const native = instanceObj?.native || {};\n\n const placeholders = link.match(/%(\\w+)%/g);\n\n if (placeholders) {\n for (let p = 0; p < placeholders.length; p++) {\n let placeholder = placeholders[p];\n\n if (placeholder === '%ip%') {\n let ip: string = (native.bind || native.ip) as string;\n if (!ip || ip === '0.0.0.0') {\n // Check host\n ip = getHostname(\n instanceObj,\n context.instances,\n context.hosts,\n context.hostname,\n context.adminInstance,\n );\n }\n\n if (_urls.length) {\n _urls.forEach(item => (item.url = item.url.replace('%ip%', ip)));\n } else {\n link = link.replace('%ip%', ip || '');\n }\n } else if (placeholder === '%protocol%') {\n const protocolVal: string | boolean = native.secure === undefined ? native.protocol : native.secure;\n let protocol: 'http' | 'https';\n if (protocolVal === true || protocolVal === 'true') {\n protocol = 'https';\n } else if (protocolVal === false || protocolVal === 'false' || !protocolVal) {\n protocol = 'http';\n } else {\n protocol = protocolVal.toString().replace(/:$/, '') as 'http' | 'https';\n }\n\n if (_urls.length) {\n _urls.forEach(item => (item.url = item.url.replace('%protocol%', protocol)));\n } else {\n link = link.replace('%protocol%', protocol);\n }\n } else if (placeholder === '%s%') {\n const protocolVal: string | boolean = native.secure === undefined ? native.protocol : native.secure;\n let protocol: '' | 's';\n if (protocolVal === true || protocolVal === 'true') {\n protocol = 's';\n } else if (protocolVal === false || protocolVal === 'false' || !protocolVal) {\n protocol = '';\n } else {\n protocol = protocolVal.toString().replace(/:$/, '') as '' | 's';\n }\n\n if (_urls.length) {\n _urls.forEach(item => (item.url = item.url.replace('%s%', protocol)));\n } else {\n link = link.replace('%s%', protocol);\n }\n } else if (placeholder === '%instance%') {\n link = link.replace('%instance%', instance.toString());\n if (_urls.length) {\n _urls.forEach(item => (item.url = item.url.replace('%instance%', instance.toString())));\n } else {\n link = link.replace('%instance%', instance.toString());\n }\n } else {\n // remove %%\n placeholder = placeholder.replace(/%/g, '');\n\n if (placeholder.startsWith('native_')) {\n placeholder = placeholder.substring(7);\n }\n\n // like web.0_port or web_protocol\n if (!placeholder.includes('_')) {\n // if only one instance\n const adapterInstance = `${adapter}.${instance}`;\n if (_urls.length) {\n _urls.forEach(\n item =>\n (item.url = _replaceLink(\n item.url,\n context.instances,\n adapterInstance,\n placeholder,\n placeholder,\n context.hosts,\n context.hostname,\n context.adminInstance,\n )),\n );\n } else {\n link = _replaceLink(\n link,\n context.instances,\n adapterInstance,\n placeholder,\n placeholder,\n context.hosts,\n context.hostname,\n context.adminInstance,\n );\n port = context.instances[`system.adapter.${adapterInstance}`]?.native?.port;\n }\n } else {\n const [adapterInstance, attr] = placeholder.split('_');\n\n // if instance number not found\n if (!adapterInstance.match(/\\.[0-9]+$/)) {\n // list all possible instances\n let ids: string[];\n if (adapter === adapterInstance) {\n // take only this one instance and that's all\n ids = [`${adapter}.${instance}`];\n } else {\n ids = Object.keys(context.instances)\n .filter(\n id =>\n id.startsWith(`system.adapter.${adapterInstance}.`) &&\n context.instances[id].common.enabled,\n )\n .map(id => id.substring(15));\n\n // try to get disabled instances\n if (!ids.length) {\n ids = Object.keys(context.instances)\n .filter(id => id.startsWith(`system.adapter.${adapterInstance}.`))\n .map(id => id.substring(15));\n }\n }\n\n for (const id of ids) {\n if (_urls.length) {\n const item = _urls.find(t => t.instance === id);\n if (item) {\n item.url = _replaceLink(\n item.url,\n context.instances,\n id,\n attr,\n placeholder,\n context.hosts,\n context.hostname,\n context.adminInstance,\n );\n } else {\n // add new\n const _link = _replaceLink(\n link,\n context.instances,\n id,\n attr,\n placeholder,\n context.hosts,\n context.hostname,\n context.adminInstance,\n );\n const _port: number = context.instances[`system.adapter.${id}`]?.native\n ?.port as number;\n\n _urls.push({ url: _link, port: _port, instance: id });\n }\n } else {\n const _link = _replaceLink(\n link,\n context.instances,\n id,\n attr,\n placeholder,\n context.hosts,\n context.hostname,\n context.adminInstance,\n );\n\n const _port: number = context.instances[`system.adapter.${id}`]?.native\n ?.port as number;\n _urls.push({ url: _link, port: _port, instance: id });\n }\n }\n } else {\n link = _replaceLink(\n link,\n context.instances,\n adapterInstance,\n attr,\n placeholder,\n context.hosts,\n context.hostname,\n context.adminInstance,\n );\n\n port = context.instances[`system.adapter.${adapterInstance}`]?.native?.port as number;\n }\n }\n }\n }\n }\n }\n\n if (_urls.length) {\n return _urls;\n }\n return [{ url: link, port }];\n}\n"]}
|