iobroker.admin 7.6.2 → 7.6.4
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 +12 -14
- package/admin/custom/assets/AdminComponentEasyAccessSet__loadShare___mf_0_iobroker_mf_1_adapter_mf_2_react_mf_2_v5__loadShare__-DnBKtZGU.js +1 -0
- package/admin/custom/assets/AdminComponentEasyAccessSet__loadShare__react__loadShare__-CEWlgS6L.js +1 -0
- package/admin/custom/assets/AdminComponentEasyAccessSet__loadShare__react_mf_2_dom__loadShare__-BaTCLP1q.js +1 -0
- package/admin/custom/assets/Components-BGVs6Dmn.js +1 -0
- package/admin/custom/assets/TextField-ChPwodvp.js +109 -0
- package/admin/custom/assets/_commonjsHelpers-D6-XlEtG.js +1 -0
- package/admin/custom/assets/bootstrap-CTERJrgr.js +1 -0
- package/admin/custom/assets/createSvgIcon-D2osie2l.js +7 -0
- package/admin/custom/assets/defaultTheme-CFicWEn0.js +16 -0
- package/admin/custom/assets/hostInit-DAQ2zgXM.js +1 -1
- package/admin/custom/assets/index-BqaC8TTV.js +1397 -0
- package/admin/custom/assets/index-BwCOsmBT.js +31 -0
- package/admin/custom/assets/index-C9L9KccV.js +779 -0
- package/admin/custom/assets/index-CGID5h1b.js +779 -0
- package/{adminWww/assets/index-Di7Jseht.js → admin/custom/assets/index-Co3YA5NW.js} +1 -1
- package/admin/custom/assets/index-DIVai5gZ.js +119 -0
- package/admin/custom/assets/index-DrWcIcrD.js +1 -0
- package/admin/custom/assets/index-IIKn7Ixx.js +1 -0
- package/admin/custom/assets/index-PIXQ0sh_.js +2 -0
- package/admin/custom/assets/index-eQxyhk2m.js +24 -0
- package/admin/custom/assets/jsx-runtime-Bhtgc1Ek.js +9 -0
- package/admin/custom/assets/useTheme-COyz47gO.js +1 -0
- package/admin/custom/assets/virtualExposes-BufY-8i6.js +2 -0
- package/admin/custom/customComponents.js +2 -2
- package/admin/i18n/{de/translations.json → de.json} +35 -34
- package/admin/i18n/{en/translations.json → en.json} +38 -37
- package/admin/i18n/{es/translations.json → es.json} +39 -38
- package/admin/i18n/{fr/translations.json → fr.json} +39 -38
- package/admin/i18n/{it/translations.json → it.json} +39 -38
- package/admin/i18n/{nl/translations.json → nl.json} +39 -38
- package/admin/i18n/{pl/translations.json → pl.json} +39 -38
- package/admin/i18n/{pt/translations.json → pt.json} +39 -38
- package/admin/i18n/{ru/translations.json → ru.json} +39 -38
- package/admin/i18n/{uk/translations.json → uk.json} +7 -6
- package/admin/i18n/{zh-cn/translations.json → zh-cn.json} +39 -38
- package/admin/jsonConfig.json5 +9 -0
- package/adminWww/assets/{AdapterUpdateDialog-CdDzwRjx.js → AdapterUpdateDialog-D5A35Ofn.js} +1 -1
- package/adminWww/assets/{Adapters-BtSoe3ny.js → Adapters-QfGvr9Xv.js} +1 -1
- package/adminWww/assets/{Config-DV-y10Fh.js → Config-J_9jPJSh.js} +1 -1
- package/adminWww/assets/{CustomModal-CYOPWjwy.js → CustomModal-_hsT1UfZ.js} +1 -1
- package/adminWww/assets/{CustomTab-cprIlE4B.js → CustomTab-k0r6if9B.js} +1 -1
- package/adminWww/assets/{DefaultPropsProvider-Beyggw1o.js → DefaultPropsProvider-BrbE0teb.js} +2 -2
- package/adminWww/assets/{EasyMode-Cd88-W7q.js → EasyMode-BR5t1u_s.js} +1 -1
- package/adminWww/assets/{Enums-nUibAZSg.js → Enums-DyPrfI2O.js} +1 -1
- package/adminWww/assets/{Fields-vrlzBhCD.js → Fields-Vpif7eQH.js} +1 -1
- package/adminWww/assets/{Files-DClcJEP9.js → Files-XKQDh_3j.js} +1 -1
- package/adminWww/assets/FilledInput-D-tz8rvg.js +2 -0
- package/adminWww/assets/{Hosts-DLnI_Hxs.js → Hosts-Dt3S3r7E.js} +1 -1
- package/adminWww/assets/Instances-Da-mNkXP.js +2 -0
- package/adminWww/assets/{Intro-wT4JOxpS.js → Intro-pr1AT7Gn.js} +1 -1
- package/adminWww/assets/{Logs-CSsFxtVG.js → Logs-CoAIXCkZ.js} +1 -1
- package/adminWww/assets/{Objects-Bbrov7BJ.js → Objects-CwBnoFN-.js} +1 -1
- package/adminWww/assets/{State-CmEur1zC.js → State-XZNqqv8y.js} +1 -1
- package/adminWww/assets/{Tabs-CmlBtpRi.js → Tabs-CFvfAcjP.js} +10 -10
- package/adminWww/assets/{Users-CPHL5ErP.js → Users-y0PgSeFL.js} +1 -1
- package/adminWww/assets/_commonjsHelpers-D6-XlEtG.js +1 -0
- package/adminWww/assets/ace-B1YQ8uqS.js +980 -0
- package/adminWww/assets/blueGrey-B0oIowPK.js +29 -0
- package/adminWww/assets/{bootstrap-CoF0Rq1_.js → bootstrap-FVlt-hkS.js} +94 -95
- package/adminWww/assets/{createSvgIcon-DHNqxcCi.js → createSvgIcon-DH-uXnd0.js} +1 -1
- package/adminWww/assets/{emotion-react.browser.esm-DHkeNZGw.js → emotion-react.browser.esm-DApPKwaj.js} +1 -1
- package/adminWww/assets/{emotion-styled.browser.esm-DkldMRyw.js → emotion-styled.browser.esm-Dc05hmeu.js} +1 -1
- package/adminWww/assets/{emotion-utils.browser.esm-CKteYtrd.js → emotion-utils.browser.esm-DOjH6Olm.js} +1 -1
- package/adminWww/assets/{geosearch.module-cgRkjHe4.js → geosearch.module-CWfRtxrN.js} +1 -1
- package/adminWww/assets/{iconBase-CxzgaDaB.js → iconBase-CgxZ5MMC.js} +1 -1
- package/adminWww/assets/{index-ChNtEgbM.js → index-BN8A2xkW.js} +1 -1
- package/adminWww/assets/{index-DO87nxhY.js → index-BXSb0Ud9.js} +2 -2
- package/adminWww/assets/index-Bj8P5tgE.js +55 -0
- package/adminWww/assets/{index-C3WYIc6x.js → index-Bsv_DXxB.js} +1 -1
- package/adminWww/assets/{index-SuMq84bM.js → index-C1TmeS7j.js} +1 -1
- package/adminWww/assets/{index-BMTRswnc.js → index-CJvbfjSs.js} +1 -1
- package/adminWww/assets/index-Cm4u8yKm.js +7 -0
- package/adminWww/assets/index-Co3YA5NW.js +9 -0
- package/adminWww/assets/{index-DgvYPGcD.js → index-D7Rlw-5R.js} +1 -1
- package/adminWww/assets/{index-BmaLPlND.js → index-DiMYzxTU.js} +1 -1
- package/adminWww/assets/{index-CFcKrkeG.js → index-HOidq_rM.js} +1 -1
- package/adminWww/assets/{index-Dhk9onlg.js → index-gHyOgbGJ.js} +1 -1
- package/adminWww/assets/{iobroker_admin__loadShare__leaflet__loadShare__-FMqZHPyC.js → iobroker_admin__loadShare__leaflet__loadShare__-B1OZ7tj-.js} +1 -1
- package/adminWww/assets/{iobroker_admin__loadShare__prop_mf_2_types__loadShare__-C8Lvs8Es.js → iobroker_admin__loadShare__prop_mf_2_types__loadShare__-BGyJCibC.js} +1 -1
- package/adminWww/assets/{iobroker_admin__loadShare__react__loadShare__-T96CJO0k.js → iobroker_admin__loadShare__react__loadShare__-DtlEM_52.js} +1 -1
- package/adminWww/assets/{leaflet-src-CnimXdd7.js → leaflet-src-A2ZHl6nF.js} +1 -1
- package/adminWww/assets/{sentry-Cc5WioqD.js → sentry-AXxoSb7Q.js} +1 -1
- package/adminWww/assets/{zh-cn-CzBq9Ifq.js → zh-cn-49uPQVT0.js} +1 -1
- package/adminWww/index.html +1 -1
- package/adminWww/mf-manifest.json +1 -1
- package/adminWww/remoteEntry.js +2 -2
- package/build-backend/lib/utils.js +10 -10
- package/build-backend/lib/utils.js.map +1 -1
- package/build-backend/lib/web.js +9 -2
- package/build-backend/lib/web.js.map +1 -1
- package/build-backend/main.js +4 -1
- package/build-backend/main.js.map +1 -1
- package/io-package.json +38 -27
- package/package.json +10 -11
- package/adminWww/assets/FilledInput-Bfz0Aef-.js +0 -2
- package/adminWww/assets/Instances-BaExCFtw.js +0 -2
- package/adminWww/assets/_commonjsHelpers-BosuxZz1.js +0 -1
- package/adminWww/assets/ace-BAuRYJjv.js +0 -978
- package/adminWww/assets/blueGrey-BKTirx-Z.js +0 -29
- package/adminWww/assets/index-BKyxHMBB.js +0 -55
- package/adminWww/assets/index-yI_g3hCZ.js +0 -7
package/adminWww/remoteEntry.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./assets/index-
|
|
2
|
-
import{i as m,a as p}from"./assets/iobroker_admin__mf_v__runtimeInit__mf_v__-VDoBF19b.js";import s from"./assets/virtualExposes-BIHI7g3E.js";import{_ as a}from"./assets/preload-helper-C1FmrZbK.js";const n={"@mui/x-date-pickers":async()=>await a(()=>import("./assets/index-
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./assets/index-Cm4u8yKm.js","./assets/iobroker_admin__loadShare__react__loadShare__-DtlEM_52.js","./assets/_commonjsHelpers-D6-XlEtG.js","./assets/iobroker_admin__mf_v__runtimeInit__mf_v__-VDoBF19b.js","./assets/DefaultPropsProvider-BrbE0teb.js","./assets/iobroker_admin__loadShare__prop_mf_2_types__loadShare__-BGyJCibC.js","./assets/emotion-serialize.esm-BUa21YfQ.js","./assets/iobroker_admin__loadShare___mf_0_emotion_mf_1_react__loadShare__-gw2iqPBS.js","./assets/createSvgIcon-DH-uXnd0.js","./assets/extends-CF3RwP-h.js","./assets/Tabs-CFvfAcjP.js","./assets/FilledInput-D-tz8rvg.js","./assets/index-Co3YA5NW.js","./assets/index-Bsv_DXxB.js","./assets/index-Bj8P5tgE.js","./assets/blueGrey-B0oIowPK.js","./assets/emotion-cache.browser.esm-B8BFze5o.js","./assets/index-C1TmeS7j.js","./assets/index-DiMYzxTU.js","./assets/leaflet-src-A2ZHl6nF.js","./assets/geosearch.module-CWfRtxrN.js","./assets/iobroker_admin__loadShare__leaflet__loadShare__-B1OZ7tj-.js","./assets/index-D7Rlw-5R.js","./assets/index-CJvbfjSs.js","./assets/index-BN8A2xkW.js","./assets/ace-B1YQ8uqS.js","./assets/emotion-styled.browser.esm-Dc05hmeu.js","./assets/emotion-utils.browser.esm-DOjH6Olm.js","./assets/emotion-react.browser.esm-DApPKwaj.js"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{i as m,a as p}from"./assets/iobroker_admin__mf_v__runtimeInit__mf_v__-VDoBF19b.js";import s from"./assets/virtualExposes-BIHI7g3E.js";import{_ as a}from"./assets/preload-helper-C1FmrZbK.js";const n={"@mui/x-date-pickers":async()=>await a(()=>import("./assets/index-Cm4u8yKm.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11]),import.meta.url),react:async()=>await a(()=>import("./assets/index-Co3YA5NW.js").then(t=>t.i),__vite__mapDeps([12,2]),import.meta.url),"react-dom":async()=>await a(()=>import("./assets/index-Bsv_DXxB.js").then(t=>t.i),__vite__mapDeps([13,2,1,3]),import.meta.url),"@mui/material":async()=>await a(()=>import("./assets/index-Bj8P5tgE.js"),__vite__mapDeps([14,4,1,2,3,5,6,7,15,16,11,10,8,9]),import.meta.url),"@mui/icons-material":async()=>await a(()=>import("./assets/index-C1TmeS7j.js"),__vite__mapDeps([17,4,1,2,3,5,6,7,8]),import.meta.url),semver:async()=>await a(()=>import("./assets/index-DiMYzxTU.js").then(t=>t.i),__vite__mapDeps([18,2]),import.meta.url),leaflet:async()=>await a(()=>import("./assets/leaflet-src-A2ZHl6nF.js").then(t=>t.l),__vite__mapDeps([19,2]),import.meta.url),"leaflet-geosearch":async()=>await a(()=>import("./assets/geosearch.module-CWfRtxrN.js"),__vite__mapDeps([20,21,2,3]),import.meta.url),"react-dropzone":async()=>await a(()=>import("./assets/index-D7Rlw-5R.js"),__vite__mapDeps([22,1,2,3,5]),import.meta.url),"prop-types":async()=>await a(()=>import("./assets/index-CJvbfjSs.js").then(t=>t.i),__vite__mapDeps([23,2]),import.meta.url),"react-ace":async()=>await a(()=>import("./assets/index-BN8A2xkW.js").then(t=>t.i),__vite__mapDeps([24,25,5,2,3,1]),import.meta.url),"@emotion/styled":async()=>await a(()=>import("./assets/emotion-styled.browser.esm-Dc05hmeu.js"),__vite__mapDeps([26,9,7,3,6,27,1,2]),import.meta.url),"@emotion/react":async()=>await a(()=>import("./assets/emotion-react.browser.esm-DApPKwaj.js"),__vite__mapDeps([28,1,2,3,16,9,27,6]),import.meta.url),"date-fns/locale":async()=>await a(()=>import("./assets/locale-9HzB0nxi.js"),[],import.meta.url)},o={"@mui/x-date-pickers":{name:"@mui/x-date-pickers",version:"7.28.2",scope:["default"],loaded:!1,from:"iobroker_admin",async get(){o["@mui/x-date-pickers"].loaded=!0;const{"@mui/x-date-pickers":e}=n,r={...await e()};return Object.defineProperty(r,"__esModule",{value:!0,enumerable:!1}),function(){return r}},shareConfig:{singleton:!0,requiredVersion:"*"}},react:{name:"react",version:"18.3.1",scope:["default"],loaded:!1,from:"iobroker_admin",async get(){o.react.loaded=!0;const{react:e}=n,r={...await e()};return Object.defineProperty(r,"__esModule",{value:!0,enumerable:!1}),function(){return r}},shareConfig:{singleton:!0,requiredVersion:"*"}},"react-dom":{name:"react-dom",version:"18.3.1",scope:["default"],loaded:!1,from:"iobroker_admin",async get(){o["react-dom"].loaded=!0;const{"react-dom":e}=n,r={...await e()};return Object.defineProperty(r,"__esModule",{value:!0,enumerable:!1}),function(){return r}},shareConfig:{singleton:!0,requiredVersion:"*"}},"@mui/material":{name:"@mui/material",version:"6.4.10",scope:["default"],loaded:!1,from:"iobroker_admin",async get(){o["@mui/material"].loaded=!0;const{"@mui/material":e}=n,r={...await e()};return Object.defineProperty(r,"__esModule",{value:!0,enumerable:!1}),function(){return r}},shareConfig:{singleton:!0,requiredVersion:"*"}},"@mui/icons-material":{name:"@mui/icons-material",version:"6.4.10",scope:["default"],loaded:!1,from:"iobroker_admin",async get(){o["@mui/icons-material"].loaded=!0;const{"@mui/icons-material":e}=n,r={...await e()};return Object.defineProperty(r,"__esModule",{value:!0,enumerable:!1}),function(){return r}},shareConfig:{singleton:!0,requiredVersion:"*"}},semver:{name:"semver",version:"7.7.1",scope:["default"],loaded:!1,from:"iobroker_admin",async get(){o.semver.loaded=!0;const{semver:e}=n,r={...await e()};return Object.defineProperty(r,"__esModule",{value:!0,enumerable:!1}),function(){return r}},shareConfig:{singleton:!0,requiredVersion:"*"}},leaflet:{name:"leaflet",version:"1.9.4",scope:["default"],loaded:!1,from:"iobroker_admin",async get(){o.leaflet.loaded=!0;const{leaflet:e}=n,r={...await e()};return Object.defineProperty(r,"__esModule",{value:!0,enumerable:!1}),function(){return r}},shareConfig:{singleton:!0,requiredVersion:"*"}},"leaflet-geosearch":{name:"leaflet-geosearch",version:"4.2.0",scope:["default"],loaded:!1,from:"iobroker_admin",async get(){o["leaflet-geosearch"].loaded=!0;const{"leaflet-geosearch":e}=n,r={...await e()};return Object.defineProperty(r,"__esModule",{value:!0,enumerable:!1}),function(){return r}},shareConfig:{singleton:!0,requiredVersion:"*"}},"react-dropzone":{name:"react-dropzone",version:"14.3.8",scope:["default"],loaded:!1,from:"iobroker_admin",async get(){o["react-dropzone"].loaded=!0;const{"react-dropzone":e}=n,r={...await e()};return Object.defineProperty(r,"__esModule",{value:!0,enumerable:!1}),function(){return r}},shareConfig:{singleton:!0,requiredVersion:"*"}},"prop-types":{name:"prop-types",version:"15.8.1",scope:["default"],loaded:!1,from:"iobroker_admin",async get(){o["prop-types"].loaded=!0;const{"prop-types":e}=n,r={...await e()};return Object.defineProperty(r,"__esModule",{value:!0,enumerable:!1}),function(){return r}},shareConfig:{singleton:!0,requiredVersion:"*"}},"react-ace":{name:"react-ace",version:"14.0.1",scope:["default"],loaded:!1,from:"iobroker_admin",async get(){o["react-ace"].loaded=!0;const{"react-ace":e}=n,r={...await e()};return Object.defineProperty(r,"__esModule",{value:!0,enumerable:!1}),function(){return r}},shareConfig:{singleton:!0,requiredVersion:"*"}},"@emotion/styled":{name:"@emotion/styled",version:"11.14.0",scope:["default"],loaded:!1,from:"iobroker_admin",async get(){o["@emotion/styled"].loaded=!0;const{"@emotion/styled":e}=n,r={...await e()};return Object.defineProperty(r,"__esModule",{value:!0,enumerable:!1}),function(){return r}},shareConfig:{singleton:!0,requiredVersion:"*"}},"@emotion/react":{name:"@emotion/react",version:"11.14.0",scope:["default"],loaded:!1,from:"iobroker_admin",async get(){o["@emotion/react"].loaded=!0;const{"@emotion/react":e}=n,r={...await e()};return Object.defineProperty(r,"__esModule",{value:!0,enumerable:!1}),function(){return r}},shareConfig:{singleton:!0,requiredVersion:"*"}},"date-fns/locale":{name:"date-fns/locale",version:"4.1.0",scope:["default"],loaded:!1,from:"iobroker_admin",async get(){o["date-fns/locale"].loaded=!0;const{"date-fns/locale":e}=n,r={...await e()};return Object.defineProperty(r,"__esModule",{value:!0,enumerable:!1}),function(){return r}},shareConfig:{singleton:!0,requiredVersion:"*"}}},f=[],u={},l="default",d="iobroker_admin";async function k(e={},t=[]){const r=m.init({name:d,remotes:f,shared:o,plugins:[],shareStrategy:"version-first"});var i=u[l];if(i||(i=u[l]={from:d}),!(t.indexOf(i)>=0)){t.push(i),r.initShareScopeMap("default",e);try{await Promise.all(await r.initializeSharing("default",{strategy:"version-first",from:"build",initScope:t}))}catch(c){console.error(c)}return p.initResolve(r),r}}function v(e){if(!(e in s))throw new Error(`Module ${e} does not exist in container.`);return s[e]().then(t=>()=>t)}export{v as get,k as init};
|
|
@@ -21,7 +21,7 @@ function findNetworkAddressOfHost(obj, localIp) {
|
|
|
21
21
|
if (!networkInterfaces) {
|
|
22
22
|
return null;
|
|
23
23
|
}
|
|
24
|
-
let hostIp;
|
|
24
|
+
let hostIp = null;
|
|
25
25
|
for (const networkInterface of Object.values(networkInterfaces)) {
|
|
26
26
|
if (!networkInterface) {
|
|
27
27
|
continue;
|
|
@@ -29,13 +29,13 @@ function findNetworkAddressOfHost(obj, localIp) {
|
|
|
29
29
|
for (let i = 0; i < networkInterface.length; i++) {
|
|
30
30
|
const ip = networkInterface[i];
|
|
31
31
|
if (ip.internal) {
|
|
32
|
-
|
|
32
|
+
continue;
|
|
33
33
|
}
|
|
34
34
|
if (localIp.includes(':') && ip.family !== 'IPv6') {
|
|
35
|
-
|
|
35
|
+
continue;
|
|
36
36
|
}
|
|
37
37
|
if (localIp.includes('.') && !localIp.match(/[^.\d]/) && ip.family !== 'IPv4') {
|
|
38
|
-
|
|
38
|
+
continue;
|
|
39
39
|
}
|
|
40
40
|
if (localIp === '127.0.0.0' || localIp === 'localhost' || localIp.match(/[^.\d]/)) {
|
|
41
41
|
// if DNS name
|
|
@@ -59,13 +59,13 @@ function findNetworkAddressOfHost(obj, localIp) {
|
|
|
59
59
|
for (let i = 0; i < networkInterface.length; i++) {
|
|
60
60
|
const ip = networkInterface[i];
|
|
61
61
|
if (ip.internal) {
|
|
62
|
-
|
|
62
|
+
continue;
|
|
63
63
|
}
|
|
64
64
|
if (localIp.includes(':') && ip.family !== 'IPv6') {
|
|
65
|
-
|
|
65
|
+
continue;
|
|
66
66
|
}
|
|
67
67
|
if (localIp.includes('.') && !localIp.match(/[^.\d]/) && ip.family !== 'IPv4') {
|
|
68
|
-
|
|
68
|
+
continue;
|
|
69
69
|
}
|
|
70
70
|
if (localIp === '127.0.0.0' || localIp === 'localhost' || localIp.match(/[^.\d]/)) {
|
|
71
71
|
// if DNS name
|
|
@@ -85,7 +85,7 @@ function findNetworkAddressOfHost(obj, localIp) {
|
|
|
85
85
|
for (let i = 0; i < networkInterface.length; i++) {
|
|
86
86
|
const ip = networkInterface[i];
|
|
87
87
|
if (ip.internal) {
|
|
88
|
-
|
|
88
|
+
continue;
|
|
89
89
|
}
|
|
90
90
|
hostIp = ip.address;
|
|
91
91
|
}
|
|
@@ -94,7 +94,7 @@ function findNetworkAddressOfHost(obj, localIp) {
|
|
|
94
94
|
return hostIp;
|
|
95
95
|
}
|
|
96
96
|
function getHostname(instanceObj, objects, hosts, currentHostname, adminInstance) {
|
|
97
|
-
if (!instanceObj
|
|
97
|
+
if (!instanceObj?.common) {
|
|
98
98
|
return null;
|
|
99
99
|
}
|
|
100
100
|
let hostname;
|
|
@@ -212,7 +212,7 @@ function replaceLink(link, adapter, instance, context) {
|
|
|
212
212
|
ip = getHostname(instanceObj, context.instances, context.hosts, context.hostname, context.adminInstance);
|
|
213
213
|
}
|
|
214
214
|
if (_urls.length) {
|
|
215
|
-
_urls.forEach(item => (item.url = item.url.replace('%ip%', ip)));
|
|
215
|
+
_urls.forEach(item => (item.url = item.url.replace('%ip%', ip || '')));
|
|
216
216
|
}
|
|
217
217
|
else {
|
|
218
218
|
link = link.replace('%ip%', ip || '');
|
|
@@ -1 +1 @@
|
|
|
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"]}
|
|
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: string | null = null;\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 continue;\n }\n if (localIp.includes(':') && ip.family !== 'IPv6') {\n continue;\n }\n if (localIp.includes('.') && !localIp.match(/[^.\\d]/) && ip.family !== 'IPv4') {\n continue;\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 continue;\n }\n if (localIp.includes(':') && ip.family !== 'IPv6') {\n continue;\n }\n if (localIp.includes('.') && !localIp.match(/[^.\\d]/) && ip.family !== 'IPv4') {\n continue;\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 continue;\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 | null {\n if (!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 | undefined;\n instance?: string;\n}[] {\n const _urls: {\n url: string;\n port: number | undefined;\n instance?: string;\n }[] = [];\n let port: number | undefined;\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 | null = (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"]}
|
package/build-backend/lib/web.js
CHANGED
|
@@ -126,7 +126,8 @@ class Web {
|
|
|
126
126
|
};
|
|
127
127
|
LOGIN_PAGE = '/index.html?login';
|
|
128
128
|
/** URL to the JSON config schema */
|
|
129
|
-
JSON_CONFIG_SCHEMA_URL = 'https://raw.githubusercontent.com/ioBroker/
|
|
129
|
+
JSON_CONFIG_SCHEMA_URL = 'https://raw.githubusercontent.com/ioBroker/ioBroker.admin/master/packages/jsonConfig/schemas/jsonConfig.json';
|
|
130
|
+
// 'https://raw.githubusercontent.com/ioBroker/adapter-react-v5/main/schemas/jsonConfig.json';
|
|
130
131
|
store = null;
|
|
131
132
|
indexHTML;
|
|
132
133
|
baseDir = (0, node_path_1.join)(__dirname, '..', '..');
|
|
@@ -141,6 +142,7 @@ class Web {
|
|
|
141
142
|
onReady;
|
|
142
143
|
systemLanguage;
|
|
143
144
|
checkTimeout;
|
|
145
|
+
oauth2Model;
|
|
144
146
|
/**
|
|
145
147
|
* Create a new instance of Web
|
|
146
148
|
*
|
|
@@ -172,6 +174,9 @@ class Web {
|
|
|
172
174
|
void this.adapter.setState('info.connection', false, true);
|
|
173
175
|
this.server.server?.close();
|
|
174
176
|
}
|
|
177
|
+
processMessage(msg) {
|
|
178
|
+
return this.oauth2Model?.processMessage(msg);
|
|
179
|
+
}
|
|
175
180
|
async prepareIndex() {
|
|
176
181
|
let template = (0, node_fs_1.readFileSync)((0, node_path_1.join)(this.wwwDir, 'index.html')).toString('utf8');
|
|
177
182
|
const m = template.match(/(["']?@@\w+@@["']?)/g);
|
|
@@ -263,6 +268,7 @@ class Web {
|
|
|
263
268
|
async validateJsonConfig(adapterName) {
|
|
264
269
|
let schema = null;
|
|
265
270
|
try {
|
|
271
|
+
this.adapter.log.debug(`retrieving json schema from ${this.JSON_CONFIG_SCHEMA_URL}`);
|
|
266
272
|
const schemaRes = await axios_1.default.get(this.JSON_CONFIG_SCHEMA_URL);
|
|
267
273
|
schema = schemaRes.data;
|
|
268
274
|
}
|
|
@@ -399,11 +405,12 @@ class Web {
|
|
|
399
405
|
this.server.app.use(cookieParser());
|
|
400
406
|
this.server.app.use(bodyParser.urlencoded({ extended: true }));
|
|
401
407
|
this.server.app.use(bodyParser.json());
|
|
402
|
-
(0, webserver_1.createOAuth2Server)(this.adapter, {
|
|
408
|
+
this.oauth2Model = (0, webserver_1.createOAuth2Server)(this.adapter, {
|
|
403
409
|
app: this.server.app,
|
|
404
410
|
secure: this.settings.secure,
|
|
405
411
|
accessLifetime: this.settings.ttl,
|
|
406
412
|
refreshLifetime: 60 * 60 * 24 * 7, // 1 week (Maybe adjustable?)
|
|
413
|
+
noBasicAuth: this.settings.noBasicAuth,
|
|
407
414
|
loginPage: (req) => {
|
|
408
415
|
const isDev = req.url.includes('?dev');
|
|
409
416
|
let origin = req.url.split('origin=')[1];
|