iobroker.mywebui 1.37.24 → 1.37.26
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/admin/i18n.json +104 -6
- package/admin/jsonConfig.json +184 -75
- package/dist/backend/LicenseValidator.js +1 -1
- package/dist/backend/main.js +1 -1
- package/io-package.json +21 -2
- package/package.json +3 -2
- package/webExtension.js +35 -0
- package/www/dist/frontend/common/IobrokerHandler.js +5 -0
package/admin/i18n.json
CHANGED
|
@@ -10,13 +10,16 @@
|
|
|
10
10
|
"es": "Configuración del adaptador WebUI",
|
|
11
11
|
"pl": "Konfiguracja adaptera WebUI",
|
|
12
12
|
"uk": "Конфігурація адаптера WebUI",
|
|
13
|
-
"zh-cn": "WebUI 适配器配置"
|
|
13
|
+
"zh-cn": "WebUI 适配器配置",
|
|
14
|
+
"az": "WebUI Adapter Konfiqurasiyası",
|
|
15
|
+
"tr": "WebUI Adaptör Yapılandırması"
|
|
14
16
|
},
|
|
15
17
|
"This adapter requires a valid license key to operate. The license is bound to your hardware for security purposes.": {
|
|
16
18
|
"en": "This adapter requires a valid license key to operate. The license is bound to your hardware for security purposes.",
|
|
17
19
|
"de": "Dieser Adapter benötigt einen gültigen Lizenzschlüssel. Die Lizenz ist aus Sicherheitsgründen an Ihre Hardware gebunden.",
|
|
18
20
|
"ru": "Для работы этого адаптера требуется действительный лицензионный ключ. Лицензия привязана к вашему оборудованию в целях безопасности.",
|
|
19
|
-
"az": "Bu adapter işləmək üçün etibarlı lisenziya açarı tələb edir. Lisenziya təhlükəsizlik məqsədləri üçün avadanlığınıza bağlıdır."
|
|
21
|
+
"az": "Bu adapter işləmək üçün etibarlı lisenziya açarı tələb edir. Lisenziya təhlükəsizlik məqsədləri üçün avadanlığınıza bağlıdır.",
|
|
22
|
+
"tr": "Bu adaptör çalışmak için geçerli bir lisans anahtarı gerektirir. Lisans güvenlik amacıyla donanımınıza bağlıdır."
|
|
20
23
|
},
|
|
21
24
|
"License Key": {
|
|
22
25
|
"en": "License Key",
|
|
@@ -30,24 +33,119 @@
|
|
|
30
33
|
"pl": "Klucz licencyjny",
|
|
31
34
|
"uk": "Ліцензійний ключ",
|
|
32
35
|
"zh-cn": "许可证密钥",
|
|
33
|
-
"az": "Lisenziya açarı"
|
|
36
|
+
"az": "Lisenziya açarı",
|
|
37
|
+
"tr": "Lisans Anahtarı"
|
|
34
38
|
},
|
|
35
39
|
"Enter your license key here": {
|
|
36
40
|
"en": "Enter your license key here",
|
|
37
41
|
"de": "Geben Sie hier Ihren Lizenzschlüssel ein",
|
|
38
42
|
"ru": "Введите лицензионный ключ здесь",
|
|
39
|
-
"az": "Lisenziya açarınızı bura daxil edin"
|
|
43
|
+
"az": "Lisenziya açarınızı bura daxil edin",
|
|
44
|
+
"tr": "Lisans anahtarınızı buraya girin"
|
|
40
45
|
},
|
|
41
46
|
"Contact gokturk413 for a valid license key": {
|
|
42
47
|
"en": "Contact gokturk413 for a valid license key",
|
|
43
48
|
"de": "Kontaktieren Sie gokturk413 für einen gültigen Lizenzschlüssel",
|
|
44
49
|
"ru": "Свяжитесь с gokturk413 для получения действительного лицензионного ключа",
|
|
45
|
-
"az": "Etibarlı lisenziya açarı üçün gokturk413 ilə əlaqə saxlayın"
|
|
50
|
+
"az": "Etibarlı lisenziya açarı üçün gokturk413 ilə əlaqə saxlayın",
|
|
51
|
+
"tr": "Geçerli bir lisans anahtarı için gokturk413 ile iletişime geçin"
|
|
46
52
|
},
|
|
47
53
|
"Setup Instructions": {
|
|
48
54
|
"en": "Setup Instructions",
|
|
49
55
|
"de": "Einrichtungsanleitung",
|
|
50
56
|
"ru": "Инструкции по настройке",
|
|
51
|
-
"az": "Quraşdırma təlimatları"
|
|
57
|
+
"az": "Quraşdırma təlimatları",
|
|
58
|
+
"tr": "Kurulum Talimatları"
|
|
59
|
+
},
|
|
60
|
+
"License": {
|
|
61
|
+
"en": "License",
|
|
62
|
+
"de": "Lizenz",
|
|
63
|
+
"ru": "Лицензия",
|
|
64
|
+
"az": "Lisenziya",
|
|
65
|
+
"tr": "Lisans"
|
|
66
|
+
},
|
|
67
|
+
"Grafana": {
|
|
68
|
+
"en": "Grafana",
|
|
69
|
+
"de": "Grafana",
|
|
70
|
+
"ru": "Grafana",
|
|
71
|
+
"az": "Grafana",
|
|
72
|
+
"tr": "Grafana"
|
|
73
|
+
},
|
|
74
|
+
"Grafana Integration": {
|
|
75
|
+
"en": "Grafana Integration",
|
|
76
|
+
"de": "Grafana-Integration",
|
|
77
|
+
"ru": "Интеграция с Grafana",
|
|
78
|
+
"az": "Grafana İnteqrasiyası",
|
|
79
|
+
"tr": "Grafana Entegrasyonu"
|
|
80
|
+
},
|
|
81
|
+
"If Grafana is not installed or nginx is not configured, keep this disabled. The adapter will not throw any errors.": {
|
|
82
|
+
"en": "If Grafana is not installed or nginx is not configured, keep this disabled. The adapter will not throw any errors.",
|
|
83
|
+
"de": "Wenn Grafana nicht installiert oder nginx nicht konfiguriert ist, lassen Sie dies deaktiviert. Der Adapter wirft keine Fehler.",
|
|
84
|
+
"ru": "Если Grafana не установлена или nginx не настроен, оставьте это отключённым. Адаптер не будет выдавать ошибок.",
|
|
85
|
+
"az": "Grafana quraşdırılmayıbsa və ya nginx konfiqurasiya edilməyibsə, bu seçimi söndürün. Adapter heç bir xəta verməyəcək.",
|
|
86
|
+
"tr": "Grafana kurulu değilse veya nginx yapılandırılmamışsa, bunu devre dışı bırakın. Adaptör hata vermeyecektir."
|
|
87
|
+
},
|
|
88
|
+
"Enable Grafana Integration": {
|
|
89
|
+
"en": "Enable Grafana Integration",
|
|
90
|
+
"de": "Grafana-Integration aktivieren",
|
|
91
|
+
"ru": "Включить интеграцию с Grafana",
|
|
92
|
+
"az": "Grafana İnteqrasiyasını Aktivləşdir",
|
|
93
|
+
"tr": "Grafana Entegrasyonunu Etkinleştir"
|
|
94
|
+
},
|
|
95
|
+
"Grafana Connection": {
|
|
96
|
+
"en": "Grafana Connection",
|
|
97
|
+
"de": "Grafana-Verbindung",
|
|
98
|
+
"ru": "Подключение к Grafana",
|
|
99
|
+
"az": "Grafana Bağlantısı",
|
|
100
|
+
"tr": "Grafana Bağlantısı"
|
|
101
|
+
},
|
|
102
|
+
"Grafana Internal URL": {
|
|
103
|
+
"en": "Grafana Internal URL",
|
|
104
|
+
"de": "Grafana interne URL",
|
|
105
|
+
"ru": "Внутренний URL Grafana",
|
|
106
|
+
"az": "Grafana daxili URL",
|
|
107
|
+
"tr": "Grafana İç URL"
|
|
108
|
+
},
|
|
109
|
+
"Internal URL of Grafana (not nginx proxy URL)": {
|
|
110
|
+
"en": "Internal URL of Grafana (not nginx proxy URL)",
|
|
111
|
+
"de": "Interne URL von Grafana (nicht die nginx-Proxy-URL)",
|
|
112
|
+
"ru": "Внутренний URL Grafana (не URL nginx-прокси)",
|
|
113
|
+
"az": "Grafana-nın daxili URL-i (nginx proxy URL deyil)",
|
|
114
|
+
"tr": "Grafana'nın iç URL'si (nginx proxy URL'si değil)"
|
|
115
|
+
},
|
|
116
|
+
"Features": {
|
|
117
|
+
"en": "Features",
|
|
118
|
+
"de": "Funktionen",
|
|
119
|
+
"ru": "Функции",
|
|
120
|
+
"az": "Funksiyalar",
|
|
121
|
+
"tr": "Özellikler"
|
|
122
|
+
},
|
|
123
|
+
"Language Sync (webui → Grafana)": {
|
|
124
|
+
"en": "Language Sync (webui → Grafana)",
|
|
125
|
+
"de": "Sprachsynchronisierung (webui → Grafana)",
|
|
126
|
+
"ru": "Синхронизация языка (webui → Grafana)",
|
|
127
|
+
"az": "Dil sinxronizasiyası (webui → Grafana)",
|
|
128
|
+
"tr": "Dil Senkronizasyonu (webui → Grafana)"
|
|
129
|
+
},
|
|
130
|
+
"When user changes language in webui, also update Grafana UI language": {
|
|
131
|
+
"en": "When user changes language in webui, also update Grafana UI language",
|
|
132
|
+
"de": "Wenn der Benutzer die Sprache in webui ändert, auch die Grafana-UI-Sprache aktualisieren",
|
|
133
|
+
"ru": "При изменении языка в webui также обновлять язык интерфейса Grafana",
|
|
134
|
+
"az": "İstifadəçi webui-da dili dəyişdikdə, Grafana UI dilini də yenilə",
|
|
135
|
+
"tr": "Kullanıcı webui'de dil değiştirdiğinde Grafana arayüz dilini de güncelle"
|
|
136
|
+
},
|
|
137
|
+
"SSO via nginx auth_request": {
|
|
138
|
+
"en": "SSO via nginx auth_request",
|
|
139
|
+
"de": "SSO über nginx auth_request",
|
|
140
|
+
"ru": "SSO через nginx auth_request",
|
|
141
|
+
"az": "nginx auth_request vasitəsilə SSO",
|
|
142
|
+
"tr": "nginx auth_request ile SSO"
|
|
143
|
+
},
|
|
144
|
+
"nginx auth_request forwards ioBroker session to Grafana — users auto-login to Grafana iframe": {
|
|
145
|
+
"en": "nginx auth_request forwards ioBroker session to Grafana — users auto-login to Grafana iframe",
|
|
146
|
+
"de": "nginx auth_request leitet die ioBroker-Sitzung an Grafana weiter — Benutzer werden automatisch im Grafana-iframe angemeldet",
|
|
147
|
+
"ru": "nginx auth_request передаёт сессию ioBroker в Grafana — пользователи автоматически входят в iframe Grafana",
|
|
148
|
+
"az": "nginx auth_request ioBroker sesiyasını Grafana-ya ötürür — istifadəçilər Grafana iframe-ə avtomatik daxil olur",
|
|
149
|
+
"tr": "nginx auth_request ioBroker oturumunu Grafana'ya iletir — kullanıcılar Grafana iframe'e otomatik giriş yapar"
|
|
52
150
|
}
|
|
53
151
|
}
|
package/admin/jsonConfig.json
CHANGED
|
@@ -1,83 +1,192 @@
|
|
|
1
1
|
{
|
|
2
|
-
"type": "
|
|
2
|
+
"type": "tabs",
|
|
3
3
|
"i18n": true,
|
|
4
4
|
"items": {
|
|
5
|
-
"
|
|
6
|
-
"type": "
|
|
7
|
-
"
|
|
8
|
-
"
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
"
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
"
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
"
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
"
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
5
|
+
"tab_license": {
|
|
6
|
+
"type": "tab",
|
|
7
|
+
"label": "License",
|
|
8
|
+
"items": {
|
|
9
|
+
"_info": {
|
|
10
|
+
"type": "header",
|
|
11
|
+
"text": "WebUI Adapter Configuration",
|
|
12
|
+
"size": 3
|
|
13
|
+
},
|
|
14
|
+
"_licenseInfo": {
|
|
15
|
+
"type": "staticText",
|
|
16
|
+
"text": "This adapter requires a valid license key to operate. The license is bound to your hardware for security purposes.",
|
|
17
|
+
"style": {
|
|
18
|
+
"fontSize": 14,
|
|
19
|
+
"color": "#666",
|
|
20
|
+
"marginBottom": 20
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
"licenseKey": {
|
|
24
|
+
"type": "password",
|
|
25
|
+
"label": "License Key",
|
|
26
|
+
"sm": 12,
|
|
27
|
+
"md": 8,
|
|
28
|
+
"lg": 6,
|
|
29
|
+
"help": "Enter your license key here. Contact gokturk413 for a valid license key.",
|
|
30
|
+
"visible": true,
|
|
31
|
+
"repeat": false
|
|
32
|
+
},
|
|
33
|
+
"_licenseWarning": {
|
|
34
|
+
"type": "staticText",
|
|
35
|
+
"text": "⚠️ Important: License keys are cryptographically bound to hardware IDs. To add a new computer, contact gokturk413 with your Hardware ID.",
|
|
36
|
+
"style": {
|
|
37
|
+
"fontSize": 13,
|
|
38
|
+
"color": "#ff9800",
|
|
39
|
+
"marginTop": 10,
|
|
40
|
+
"padding": "10px",
|
|
41
|
+
"backgroundColor": "#fff3e0",
|
|
42
|
+
"borderRadius": "4px"
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
"_hardwareIdInfo": {
|
|
46
|
+
"type": "staticText",
|
|
47
|
+
"text": "ℹ️ Your Hardware ID will be shown in the adapter logs on first start. You cannot manually add hardware IDs - they are encrypted in the license key.",
|
|
48
|
+
"style": {
|
|
49
|
+
"fontSize": 12,
|
|
50
|
+
"color": "#2196F3",
|
|
51
|
+
"marginTop": 10,
|
|
52
|
+
"padding": "8px",
|
|
53
|
+
"backgroundColor": "#e3f2fd",
|
|
54
|
+
"borderRadius": "4px"
|
|
55
|
+
}
|
|
56
|
+
},
|
|
57
|
+
"_separator": {
|
|
58
|
+
"type": "divider"
|
|
59
|
+
},
|
|
60
|
+
"_instructionsHeader": {
|
|
61
|
+
"type": "header",
|
|
62
|
+
"text": "Setup Instructions",
|
|
63
|
+
"size": 4
|
|
64
|
+
},
|
|
65
|
+
"_instructions": {
|
|
66
|
+
"type": "staticText",
|
|
67
|
+
"text": "1. Start the adapter (it will fail on first run)\n2. Check logs: iobroker logs webui --lines 50\n3. Copy your Hardware ID from logs\n4. Send Hardware ID to gokturk413 to get a license\n5. Enter the license key here\n6. Restart the adapter\n\n💡 To add another computer: Send its Hardware ID to get an updated license key.",
|
|
68
|
+
"style": {
|
|
69
|
+
"fontSize": 13,
|
|
70
|
+
"fontFamily": "monospace",
|
|
71
|
+
"whiteSpace": "pre-line",
|
|
72
|
+
"padding": "10px",
|
|
73
|
+
"backgroundColor": "#f5f5f5",
|
|
74
|
+
"borderRadius": "4px"
|
|
75
|
+
}
|
|
76
|
+
},
|
|
77
|
+
"_contactInfo": {
|
|
78
|
+
"type": "staticText",
|
|
79
|
+
"text": "📧 Contact: gokturk413 | 🔒 Licensed Software",
|
|
80
|
+
"style": {
|
|
81
|
+
"fontSize": 12,
|
|
82
|
+
"color": "#999",
|
|
83
|
+
"marginTop": 20,
|
|
84
|
+
"textAlign": "center"
|
|
85
|
+
}
|
|
86
|
+
}
|
|
71
87
|
}
|
|
72
88
|
},
|
|
73
|
-
"
|
|
74
|
-
"type": "
|
|
75
|
-
"
|
|
76
|
-
"
|
|
77
|
-
"
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
89
|
+
"tab_grafana": {
|
|
90
|
+
"type": "tab",
|
|
91
|
+
"label": "Grafana",
|
|
92
|
+
"items": {
|
|
93
|
+
"_grafanaHeader": {
|
|
94
|
+
"type": "header",
|
|
95
|
+
"text": "Grafana Integration",
|
|
96
|
+
"size": 3
|
|
97
|
+
},
|
|
98
|
+
"_grafanaInfo": {
|
|
99
|
+
"type": "staticText",
|
|
100
|
+
"text": "If Grafana is not installed or nginx is not configured, keep this disabled. The adapter will not throw any errors.",
|
|
101
|
+
"style": {
|
|
102
|
+
"fontSize": 13,
|
|
103
|
+
"color": "#666",
|
|
104
|
+
"marginBottom": 16,
|
|
105
|
+
"padding": "8px",
|
|
106
|
+
"backgroundColor": "#f5f5f5",
|
|
107
|
+
"borderRadius": "4px"
|
|
108
|
+
}
|
|
109
|
+
},
|
|
110
|
+
"grafanaEnabled": {
|
|
111
|
+
"type": "checkbox",
|
|
112
|
+
"label": "Enable Grafana Integration",
|
|
113
|
+
"sm": 12,
|
|
114
|
+
"default": false
|
|
115
|
+
},
|
|
116
|
+
"_sep1": {
|
|
117
|
+
"type": "divider",
|
|
118
|
+
"hidden": "!data.grafanaEnabled"
|
|
119
|
+
},
|
|
120
|
+
"_grafanaUrlHeader": {
|
|
121
|
+
"type": "header",
|
|
122
|
+
"text": "Grafana Connection",
|
|
123
|
+
"size": 4,
|
|
124
|
+
"hidden": "!data.grafanaEnabled"
|
|
125
|
+
},
|
|
126
|
+
"grafanaUrl": {
|
|
127
|
+
"type": "text",
|
|
128
|
+
"label": "Grafana Internal URL",
|
|
129
|
+
"sm": 12,
|
|
130
|
+
"md": 8,
|
|
131
|
+
"lg": 6,
|
|
132
|
+
"default": "http://localhost:3000",
|
|
133
|
+
"help": "Internal URL of Grafana (not nginx proxy URL)",
|
|
134
|
+
"hidden": "!data.grafanaEnabled"
|
|
135
|
+
},
|
|
136
|
+
"_sep2": {
|
|
137
|
+
"type": "divider",
|
|
138
|
+
"hidden": "!data.grafanaEnabled"
|
|
139
|
+
},
|
|
140
|
+
"_featuresHeader": {
|
|
141
|
+
"type": "header",
|
|
142
|
+
"text": "Features",
|
|
143
|
+
"size": 4,
|
|
144
|
+
"hidden": "!data.grafanaEnabled"
|
|
145
|
+
},
|
|
146
|
+
"grafanaLangSyncEnabled": {
|
|
147
|
+
"type": "checkbox",
|
|
148
|
+
"label": "Language Sync (webui → Grafana)",
|
|
149
|
+
"sm": 12,
|
|
150
|
+
"default": false,
|
|
151
|
+
"help": "When user changes language in webui, also update Grafana UI language",
|
|
152
|
+
"hidden": "!data.grafanaEnabled"
|
|
153
|
+
},
|
|
154
|
+
"_langSyncInfo": {
|
|
155
|
+
"type": "staticText",
|
|
156
|
+
"text": "ℹ️ Requires Grafana Auth Proxy (X-WEBAUTH-USER) to be enabled in grafana.ini.\n[auth.proxy]\nenabled = true\nheader_name = X-WEBAUTH-USER\nauto_sign_up = true",
|
|
157
|
+
"style": {
|
|
158
|
+
"fontSize": 12,
|
|
159
|
+
"color": "#2196F3",
|
|
160
|
+
"padding": "8px",
|
|
161
|
+
"backgroundColor": "#e3f2fd",
|
|
162
|
+
"borderRadius": "4px",
|
|
163
|
+
"whiteSpace": "pre-line",
|
|
164
|
+
"fontFamily": "monospace"
|
|
165
|
+
},
|
|
166
|
+
"hidden": "!data.grafanaEnabled || !data.grafanaLangSyncEnabled"
|
|
167
|
+
},
|
|
168
|
+
"grafanaSsoEnabled": {
|
|
169
|
+
"type": "checkbox",
|
|
170
|
+
"label": "SSO via nginx auth_request",
|
|
171
|
+
"sm": 12,
|
|
172
|
+
"default": false,
|
|
173
|
+
"help": "nginx auth_request forwards ioBroker session to Grafana — users auto-login to Grafana iframe",
|
|
174
|
+
"hidden": "!data.grafanaEnabled"
|
|
175
|
+
},
|
|
176
|
+
"_ssoInfo": {
|
|
177
|
+
"type": "staticText",
|
|
178
|
+
"text": "ℹ️ Requires nginx to be configured with auth_request.\nAdd to nginx grafana location:\n auth_request /mywebui-auth-check;\n auth_request_set $auth_user $upstream_http_x_user;\n proxy_set_header X-WEBAUTH-USER $auth_user;",
|
|
179
|
+
"style": {
|
|
180
|
+
"fontSize": 12,
|
|
181
|
+
"color": "#2196F3",
|
|
182
|
+
"padding": "8px",
|
|
183
|
+
"backgroundColor": "#e3f2fd",
|
|
184
|
+
"borderRadius": "4px",
|
|
185
|
+
"whiteSpace": "pre-line",
|
|
186
|
+
"fontFamily": "monospace"
|
|
187
|
+
},
|
|
188
|
+
"hidden": "!data.grafanaEnabled || !data.grafanaSsoEnabled"
|
|
189
|
+
}
|
|
81
190
|
}
|
|
82
191
|
}
|
|
83
192
|
}
|