iobroker.admin 7.7.1 → 7.7.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (152) hide show
  1. package/README.md +44 -11
  2. package/admin/admin.png +0 -0
  3. package/admin/i18n/de.json +1 -1
  4. package/admin/i18n/es.json +1 -1
  5. package/admin/i18n/fr.json +1 -1
  6. package/admin/i18n/it.json +1 -1
  7. package/admin/i18n/nl.json +1 -1
  8. package/admin/i18n/pl.json +1 -1
  9. package/admin/i18n/pt.json +1 -1
  10. package/admin/i18n/ru.json +1 -1
  11. package/admin/i18n/uk.json +1 -1
  12. package/admin/i18n/zh-cn.json +1 -1
  13. package/admin/jsonConfig.json5 +1 -2
  14. package/adminWww/assets/{AdapterUpdateDialog-Bgswiqs9.js → AdapterUpdateDialog-BQUTMe7v.js} +1 -1
  15. package/adminWww/assets/Adapters-KuMqwfzU.js +9 -0
  16. package/adminWww/assets/Config-LH40Fzyp.js +1 -0
  17. package/adminWww/assets/CustomModal-UQ6ICKdg.js +1 -0
  18. package/adminWww/assets/CustomTab-CE2qvngn.js +1 -0
  19. package/adminWww/assets/DefaultPropsProvider-BxjOYH1h.js +30 -0
  20. package/adminWww/assets/EasyMode-XXQKZmWs.js +1 -0
  21. package/adminWww/assets/{Enums-8m252lzC.js → Enums-Ddmi-fYo.js} +3 -3
  22. package/adminWww/assets/{Fields-lI3YkIzQ.js → Fields-CQNdUYkd.js} +1 -1
  23. package/adminWww/assets/{Files-fQpSPYWI.js → Files-DgOiCRiN.js} +2 -2
  24. package/adminWww/assets/FilledInput-B9JSi0Ta.js +2 -0
  25. package/adminWww/assets/Hosts-BgDpLhdl.js +121 -0
  26. package/adminWww/assets/Instances-DikJwBl0.js +2 -0
  27. package/adminWww/assets/Intro-vxIHtYzr.js +2 -0
  28. package/adminWww/assets/Logs-DZUWTbJn.js +1 -0
  29. package/adminWww/assets/Objects-Dm1_4aGR.js +60 -0
  30. package/adminWww/assets/{State-nZ6sjU9_.js → State-CrcWiBdx.js} +1 -1
  31. package/adminWww/assets/TextField-j-uewRwI.js +138 -0
  32. package/adminWww/assets/ThemeProvider-DHntAcOp.js +29 -0
  33. package/adminWww/assets/Users-GcWjwa7A.js +1 -0
  34. package/adminWww/assets/ace-1DqSbvTN.js +985 -0
  35. package/adminWww/assets/bootstrap-B3ZI_-0g.js +2024 -0
  36. package/adminWww/assets/{createSvgIcon-DuKI6CvW.js → createSvgIcon-Ds12z7B3.js} +1 -1
  37. package/adminWww/assets/emotion-cache.browser.esm-BgJfNZJN.js +1 -0
  38. package/adminWww/assets/emotion-react.browser.esm-CBtpmfsG.js +8 -0
  39. package/adminWww/assets/emotion-serialize.esm-Q4o_CgeF.js +1 -0
  40. package/adminWww/assets/emotion-styled.browser.esm-BeD8nBzN.js +1 -0
  41. package/adminWww/assets/emotion-use-insertion-effect-with-fallbacks.browser.esm-BIy6Leuu.js +1 -0
  42. package/adminWww/assets/geosearch.module-B6h9BuIR.js +1 -0
  43. package/adminWww/assets/hostInit-fzxL8JAx.js +1 -1
  44. package/adminWww/assets/iconBase-BAOnvyiQ.js +1 -0
  45. package/adminWww/assets/{index-BP5kWU3L.js → index-BOnh7es7.js} +1 -1
  46. package/adminWww/assets/{index-BmWdDCX_.js → index-BSfwmoAE.js} +4 -4
  47. package/adminWww/assets/{index-gHyOgbGJ.js → index-BVgYaw7t.js} +1 -1
  48. package/adminWww/assets/{index-D7Rlw-5R.js → index-C9i3HTsG.js} +1 -1
  49. package/adminWww/assets/{index-DH1kmwK1.js → index-CELb-gCK.js} +2 -2
  50. package/adminWww/assets/{index-HOidq_rM.js → index-CU6eZCem.js} +1 -1
  51. package/adminWww/assets/{index-Bsv_DXxB.js → index-DZ0MncEz.js} +2 -2
  52. package/adminWww/assets/index-Dg-s3k0-.js +10 -0
  53. package/adminWww/assets/index-tS5iCAF7.js +55 -0
  54. package/adminWww/assets/iobroker_admin__loadShare___mf_0_emotion_mf_1_react__loadShare__-CXogaIXO.js +1 -0
  55. package/adminWww/assets/{iobroker_admin__loadShare__leaflet__loadShare__-B1OZ7tj-.js → iobroker_admin__loadShare__leaflet__loadShare__-DIpcqFbm.js} +1 -1
  56. package/adminWww/assets/iobroker_admin__loadShare__prop_mf_2_types__loadShare__-pDONiJUe.js +1 -0
  57. package/adminWww/assets/{iobroker_admin__loadShare__react__loadShare__-DtlEM_52.js → iobroker_admin__loadShare__react__loadShare__-CuzHmAOj.js} +1 -1
  58. package/adminWww/assets/iobroker_admin__mf_v__runtimeInit__mf_v__-CHE4rLsT.js +5 -0
  59. package/adminWww/assets/leaflet-src-BRBM-1HK.js +4 -0
  60. package/adminWww/assets/{sentry-CNy_SQq1.js → sentry-B6yHtsbd.js} +1 -1
  61. package/adminWww/assets/{zh-cn-DZTx1vAh.js → zh-cn-heTcsLnU.js} +15 -15
  62. package/adminWww/img/admin.png +0 -0
  63. package/adminWww/index.html +2 -2
  64. package/adminWww/mf-manifest.json +1 -1
  65. package/adminWww/remoteEntry.js +2 -2
  66. package/adminWww/static/js/worker-javascript.js +1 -1
  67. package/adminWww/static/js/worker-yaml.js +1 -1
  68. package/build/i18n/de.json +18 -0
  69. package/build/i18n/es.json +18 -0
  70. package/build/i18n/fr.json +18 -0
  71. package/build/i18n/it.json +18 -0
  72. package/build/i18n/nl.json +18 -0
  73. package/build/i18n/pl.json +18 -0
  74. package/build/i18n/pt.json +18 -0
  75. package/build/i18n/ru.json +18 -0
  76. package/build/i18n/uk.json +18 -0
  77. package/build/i18n/zh-cn.json +18 -0
  78. package/build/lib/DockerManager.js +1315 -0
  79. package/build/lib/DockerManager.js.map +1 -0
  80. package/build/lib/dockerManager.types.js +3 -0
  81. package/build/lib/dockerManager.types.js.map +1 -0
  82. package/{build-backend → build}/lib/testPassword.js +1 -1
  83. package/{build-backend → build}/lib/testPassword.js.map +1 -1
  84. package/{build-backend/src → build}/lib/translations.js +16 -1
  85. package/build/lib/translations.js.map +1 -0
  86. package/{build-backend → build}/main.js +58 -5
  87. package/build/main.js.map +1 -0
  88. package/io-package.json +27 -27
  89. package/package.json +13 -12
  90. package/adminWww/assets/Adapters-yQiEeoh8.js +0 -7
  91. package/adminWww/assets/Config-C1Gjt8DC.js +0 -1
  92. package/adminWww/assets/CustomModal-CgEtkfCG.js +0 -1
  93. package/adminWww/assets/CustomTab-CwioFUor.js +0 -1
  94. package/adminWww/assets/DefaultPropsProvider-DxsXuIyE.js +0 -30
  95. package/adminWww/assets/EasyMode-CN-reJVI.js +0 -1
  96. package/adminWww/assets/FilledInput-CKswrNd5.js +0 -2
  97. package/adminWww/assets/Hosts-BPdUlXV5.js +0 -121
  98. package/adminWww/assets/Instances-BStmfz4r.js +0 -2
  99. package/adminWww/assets/Intro-Dr1-aqO9.js +0 -2
  100. package/adminWww/assets/Logs-xCCrWV30.js +0 -1
  101. package/adminWww/assets/Objects-BF8brXaf.js +0 -60
  102. package/adminWww/assets/Tabs-BJ1rL35Z.js +0 -138
  103. package/adminWww/assets/Users-B0iasrSG.js +0 -1
  104. package/adminWww/assets/ace-CFIUQz8j.js +0 -970
  105. package/adminWww/assets/blueGrey-D-KQaGde.js +0 -29
  106. package/adminWww/assets/bootstrap-DDrI3lVl.js +0 -2036
  107. package/adminWww/assets/emotion-cache.browser.esm-B8BFze5o.js +0 -1
  108. package/adminWww/assets/emotion-react.browser.esm-DApPKwaj.js +0 -8
  109. package/adminWww/assets/emotion-serialize.esm-BUa21YfQ.js +0 -1
  110. package/adminWww/assets/emotion-styled.browser.esm-Dc05hmeu.js +0 -1
  111. package/adminWww/assets/emotion-utils.browser.esm-DOjH6Olm.js +0 -1
  112. package/adminWww/assets/geosearch.module-CWfRtxrN.js +0 -1
  113. package/adminWww/assets/iconBase-CgxZ5MMC.js +0 -1
  114. package/adminWww/assets/index-BjVqnwqt.js +0 -10
  115. package/adminWww/assets/index-RvHSqeMD.js +0 -55
  116. package/adminWww/assets/iobroker_admin__loadShare___mf_0_emotion_mf_1_react__loadShare__-gw2iqPBS.js +0 -1
  117. package/adminWww/assets/iobroker_admin__loadShare__prop_mf_2_types__loadShare__-BGyJCibC.js +0 -1
  118. package/adminWww/assets/iobroker_admin__mf_v__runtimeInit__mf_v__-VDoBF19b.js +0 -10
  119. package/adminWww/assets/leaflet-src-A2ZHl6nF.js +0 -4
  120. package/build-backend/i18n/de.json +0 -18
  121. package/build-backend/i18n/es.json +0 -18
  122. package/build-backend/i18n/fr.json +0 -18
  123. package/build-backend/i18n/it.json +0 -18
  124. package/build-backend/i18n/nl.json +0 -18
  125. package/build-backend/i18n/pl.json +0 -18
  126. package/build-backend/i18n/pt.json +0 -18
  127. package/build-backend/i18n/ru.json +0 -18
  128. package/build-backend/i18n/uk.json +0 -18
  129. package/build-backend/i18n/zh-cn.json +0 -18
  130. package/build-backend/lib/translations.js +0 -27
  131. package/build-backend/lib/translations.js.map +0 -1
  132. package/build-backend/main.js.map +0 -1
  133. package/build-backend/src/lib/checkLinuxPass.js +0 -280
  134. package/build-backend/src/lib/checkLinuxPass.js.map +0 -1
  135. package/build-backend/src/lib/testPassword.js +0 -58
  136. package/build-backend/src/lib/testPassword.js.map +0 -1
  137. package/build-backend/src/lib/translations.js.map +0 -1
  138. package/build-backend/src/lib/utils.js +0 -344
  139. package/build-backend/src/lib/utils.js.map +0 -1
  140. package/build-backend/src/lib/web.js +0 -1165
  141. package/build-backend/src/lib/web.js.map +0 -1
  142. package/build-backend/src/main.js +0 -1704
  143. package/build-backend/src/main.js.map +0 -1
  144. package/build-backend/src-admin/src/components/Adapters/Utils.js +0 -39
  145. package/build-backend/src-admin/src/components/Adapters/Utils.js.map +0 -1
  146. /package/{build-backend → build}/i18n/en.json +0 -0
  147. /package/{build-backend → build}/lib/checkLinuxPass.js +0 -0
  148. /package/{build-backend → build}/lib/checkLinuxPass.js.map +0 -0
  149. /package/{build-backend → build}/lib/utils.js +0 -0
  150. /package/{build-backend → build}/lib/utils.js.map +0 -0
  151. /package/{build-backend → build}/lib/web.js +0 -0
  152. /package/{build-backend → build}/lib/web.js.map +0 -0
@@ -1,280 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.checkWellKnownPasswords = checkWellKnownPasswords;
4
- exports.setLinuxPassword = setLinuxPassword;
5
- const child_process_1 = require("child_process");
6
- const WELL_KNOWN_CREDENTIALS = [
7
- ['root', 'root'],
8
- ['admin', 'admin'],
9
- ['admin', 'default'],
10
- ['root', 'default'],
11
- ['iob', '2024=smart!'],
12
- ['pi', 'pi'],
13
- ['pi', '12345'],
14
- ['pi', 'raspberry'],
15
- ['pi', 'default'],
16
- ['pi', 'pi12345'],
17
- ];
18
- // Function to execute 'su' command and provide password
19
- function checkLinuxPassword(login, password) {
20
- // Check the os
21
- if (process.platform !== 'linux') {
22
- console.error('This function is only available on Linux');
23
- return Promise.resolve(false);
24
- }
25
- if (login === 'Password:' || login === 'failure') {
26
- console.error('This function requires a login name');
27
- return Promise.resolve(false);
28
- }
29
- console.log(`\n[LOG] -------- Check ${login}/${password}`);
30
- return new Promise((resolve, reject) => {
31
- try {
32
- const su = (0, child_process_1.spawn)('su', [login]);
33
- let closed = false;
34
- let result = false;
35
- let responseTimeout = setTimeout(() => {
36
- closed = true;
37
- responseTimeout = null;
38
- su.kill();
39
- }, 3000);
40
- function _checkPassword(data) {
41
- if (!responseTimeout || closed) {
42
- return;
43
- }
44
- data = data.replace(/\r/g, ' ').replace(/\n/g, ' ').trim();
45
- console.log(`[STDX] "${data}"`);
46
- if (data.endsWith(':')) {
47
- try {
48
- su.stdin?.write(`${password}\n`);
49
- }
50
- catch {
51
- return;
52
- }
53
- setTimeout(() => {
54
- if (!responseTimeout || closed) {
55
- return;
56
- }
57
- console.log(`[LOG] write whoami`);
58
- try {
59
- su.stdin?.write(`whoami\n`);
60
- }
61
- catch {
62
- // ignore
63
- }
64
- }, 50);
65
- }
66
- else if (data === login) {
67
- result = true;
68
- su.kill();
69
- // todo: add ru, uk, pt,....
70
- }
71
- else if (data.toLowerCase().includes('failure') || data.toLowerCase().includes('fehler')) {
72
- su.kill();
73
- }
74
- }
75
- su.stdin?.on('error', () => {
76
- closed = true;
77
- });
78
- su.stdout?.on('error', () => {
79
- closed = true;
80
- });
81
- su.stderr?.on('error', () => {
82
- closed = true;
83
- });
84
- su.stdin?.on('finish', () => {
85
- closed = true;
86
- });
87
- su.stdout?.on('finish', () => {
88
- closed = true;
89
- });
90
- su.stderr?.on('finish', () => {
91
- closed = true;
92
- });
93
- su.stdin?.on('close', () => {
94
- closed = true;
95
- });
96
- su.stdout?.on('close', () => {
97
- closed = true;
98
- });
99
- su.stderr?.on('close', () => {
100
- closed = true;
101
- });
102
- // Listen for data on stdout
103
- su.stdout.on('data', data => {
104
- if (data && responseTimeout) {
105
- _checkPassword(data.toString());
106
- }
107
- });
108
- // Listen for data on stderr
109
- su.stderr.on('data', data => {
110
- if (data && responseTimeout) {
111
- _checkPassword(data.toString());
112
- }
113
- });
114
- // Listen for the close event
115
- su.on('close', () => {
116
- closed = true;
117
- console.log(`[LOG] -------- closed with result: ${result}\n`);
118
- if (responseTimeout) {
119
- clearTimeout(responseTimeout);
120
- responseTimeout = null;
121
- }
122
- resolve(result);
123
- });
124
- }
125
- catch (e) {
126
- closed = true;
127
- console.error(`[LOG] -------- Error by execution: ${e.message}\n`);
128
- reject(new Error(e));
129
- }
130
- });
131
- }
132
- /** Check if the system has well-known passwords */
133
- async function checkWellKnownPasswords() {
134
- // Check the os
135
- if (process.platform !== 'linux') {
136
- console.error('This function is only available on Linux');
137
- throw new Error('This function is only available on Linux');
138
- }
139
- for (const [login, password] of WELL_KNOWN_CREDENTIALS) {
140
- if (await checkLinuxPassword(login, password)) {
141
- return { login, password };
142
- }
143
- }
144
- return null;
145
- }
146
- /*
147
- pi@NanoPi-R5S:/opt$ su pi
148
- Password: [OLD PASSWORD]\n
149
-
150
- pi@NanoPi-R5S:/opt$ passwd
151
- Changing password for pi.
152
- Current password: [OLD PASSWORD]\n
153
-
154
- New password: [NEW PASSWORD]\n
155
-
156
- Retype new password: [NEW PASSWORD]\n
157
-
158
- The password has not been changed.
159
-
160
- New password:
161
- Retype new password:
162
-
163
- You must choose a longer password.
164
-
165
- New password:
166
- Retype new password:
167
-
168
- passwd: password updated successfully
169
- pi@NanoPi-R5S:/opt$ exit
170
- */
171
- /*
172
- Ändern des Passworts für pi.
173
- Geben Sie das aktuelle Passwort ein:
174
- passwd: Fehler beim Ändern des Authentifizierungstoken
175
- passwd: Passwort nicht geändert
176
- pi@NanoPi-R5S:~$ passwd pi
177
- Ändern des Passworts für pi.
178
- Geben Sie das aktuelle Passwort ein:
179
- Geben Sie ein neues Passwort ein:
180
- Geben Sie das neue Passwort erneut ein:
181
- passwd: Passwort erfolgreich geändert
182
-
183
- */
184
- const STATES = {
185
- S_0_SU_WAIT_PROMPT: 0,
186
- S_1_PASSWD_WAIT_PROMPT_CURRENT_PASSWORD: 1,
187
- S_2_PASSWD_WAIT_PROMPT_NEW_PASSWORD: 2,
188
- S_3_PASSWD_WAIT_PROMPT_RETYPE_NEW_PASSWORD: 3,
189
- S_4_PASSWD_WAIT_RESPONSE: 4,
190
- };
191
- function setLinuxPassword(login, oldPassword, newPassword) {
192
- return new Promise(resolve => {
193
- if (WELL_KNOWN_CREDENTIALS.find(item => item[0] === newPassword || item[1] === newPassword)) {
194
- resolve('New password is well-known too');
195
- return;
196
- }
197
- try {
198
- const su = (0, child_process_1.spawn)('su', [login]);
199
- let result = 'Cannot change password';
200
- let responseTimeout = setTimeout(() => {
201
- responseTimeout = null;
202
- result = 'Timeout';
203
- su.kill();
204
- }, 3000);
205
- let state = STATES.S_0_SU_WAIT_PROMPT;
206
- function _checkPassword(data) {
207
- data = data.replace(/\r/g, ' ').replace(/\n/g, ' ').trim();
208
- console.log(`[STDX]: ${data}`);
209
- if (state === STATES.S_0_SU_WAIT_PROMPT) {
210
- // Password: [OLD PASSWORD]\n
211
- if (data.endsWith(':')) {
212
- console.log(`[LOG]: received request to enter old password`);
213
- su.stdin.write(`${oldPassword}\n`);
214
- setTimeout(() => {
215
- state = STATES.S_1_PASSWD_WAIT_PROMPT_CURRENT_PASSWORD;
216
- su.stdin.write(`passwd\n`);
217
- }, 50);
218
- // todo: add ru, uk, pt,....
219
- }
220
- else if (data.toLowerCase().includes('failure') || data.toLowerCase().includes('fehler')) {
221
- console.log(`[LOG]: received failure message`);
222
- result = 'Old password not accepted';
223
- su.kill();
224
- }
225
- }
226
- else if (state === STATES.S_1_PASSWD_WAIT_PROMPT_CURRENT_PASSWORD) {
227
- // Changing password for pi.
228
- // Current password: [OLD PASSWORD]\n
229
- if (data.endsWith(':')) {
230
- console.log(`[LOG]: received request to enter new password`);
231
- state = STATES.S_2_PASSWD_WAIT_PROMPT_NEW_PASSWORD;
232
- su.stdin.write(`${oldPassword}\n`);
233
- }
234
- }
235
- else if (state === STATES.S_2_PASSWD_WAIT_PROMPT_NEW_PASSWORD) {
236
- // New password: [NEW PASSWORD]\n
237
- if (data.endsWith(':')) {
238
- console.log(`[LOG]: received request to enter new password`);
239
- state = STATES.S_3_PASSWD_WAIT_PROMPT_RETYPE_NEW_PASSWORD;
240
- su.stdin.write(`${newPassword}\n`);
241
- }
242
- }
243
- else if (state === STATES.S_3_PASSWD_WAIT_PROMPT_RETYPE_NEW_PASSWORD) {
244
- // Retype new password: [NEW PASSWORD]\n
245
- if (data.endsWith(':')) {
246
- console.log(`[LOG]: received request to repeat new password`);
247
- state = STATES.S_4_PASSWD_WAIT_RESPONSE;
248
- su.stdin.write(`${newPassword}\n`);
249
- }
250
- }
251
- else if (state === STATES.S_4_PASSWD_WAIT_RESPONSE) {
252
- // todo: add ru, uk, pt,....
253
- if (data.toLowerCase().includes('successfully') || data.toLowerCase().includes('erfolgreich')) {
254
- result = true;
255
- }
256
- else {
257
- // failure
258
- result = data;
259
- }
260
- su.kill();
261
- }
262
- }
263
- // Listen for data on stdout
264
- su.stdout.on('data', data => _checkPassword(data.toString()));
265
- // Listen for data on stderr
266
- su.stderr.on('data', data => _checkPassword(data.toString()));
267
- // Listen for the close event
268
- su.on('close', () => {
269
- responseTimeout && clearTimeout(responseTimeout);
270
- responseTimeout = null;
271
- resolve(result);
272
- });
273
- }
274
- catch (e) {
275
- console.error(`Cannot change password: ${e.toString()}`);
276
- throw new Error(e);
277
- }
278
- });
279
- }
280
- //# sourceMappingURL=checkLinuxPass.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"checkLinuxPass.js","sourceRoot":"","sources":["../../../src/lib/checkLinuxPass.ts"],"names":[],"mappings":"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","sourcesContent":["import { spawn } from 'child_process';\n\nconst WELL_KNOWN_CREDENTIALS = [\n ['root', 'root'],\n ['admin', 'admin'],\n ['admin', 'default'],\n ['root', 'default'],\n ['iob', '2024=smart!'],\n ['pi', 'pi'],\n ['pi', '12345'],\n ['pi', 'raspberry'],\n ['pi', 'default'],\n ['pi', 'pi12345'],\n];\n\n// Function to execute 'su' command and provide password\nfunction checkLinuxPassword(login: string, password: string): Promise<boolean> {\n // Check the os\n if (process.platform !== 'linux') {\n console.error('This function is only available on Linux');\n return Promise.resolve(false);\n }\n\n if (login === 'Password:' || login === 'failure') {\n console.error('This function requires a login name');\n return Promise.resolve(false);\n }\n console.log(`\\n[LOG] -------- Check ${login}/${password}`);\n\n return new Promise((resolve, reject) => {\n try {\n const su = spawn('su', [login]);\n let closed = false;\n let result = false;\n let responseTimeout: NodeJS.Timeout | null = setTimeout(() => {\n closed = true;\n responseTimeout = null;\n su.kill();\n }, 3000);\n\n function _checkPassword(data: string): void {\n if (!responseTimeout || closed) {\n return;\n }\n data = data.replace(/\\r/g, ' ').replace(/\\n/g, ' ').trim();\n console.log(`[STDX] \"${data}\"`);\n if (data.endsWith(':')) {\n try {\n su.stdin?.write(`${password}\\n`);\n } catch {\n return;\n }\n setTimeout(() => {\n if (!responseTimeout || closed) {\n return;\n }\n console.log(`[LOG] write whoami`);\n try {\n su.stdin?.write(`whoami\\n`);\n } catch {\n // ignore\n }\n }, 50);\n } else if (data === login) {\n result = true;\n su.kill();\n // todo: add ru, uk, pt,....\n } else if (data.toLowerCase().includes('failure') || data.toLowerCase().includes('fehler')) {\n su.kill();\n }\n }\n su.stdin?.on('error', (): void => {\n closed = true;\n });\n su.stdout?.on('error', (): void => {\n closed = true;\n });\n su.stderr?.on('error', (): void => {\n closed = true;\n });\n su.stdin?.on('finish', (): void => {\n closed = true;\n });\n su.stdout?.on('finish', (): void => {\n closed = true;\n });\n su.stderr?.on('finish', (): void => {\n closed = true;\n });\n su.stdin?.on('close', (): void => {\n closed = true;\n });\n su.stdout?.on('close', (): void => {\n closed = true;\n });\n su.stderr?.on('close', (): void => {\n closed = true;\n });\n\n // Listen for data on stdout\n su.stdout.on('data', data => {\n if (data && responseTimeout) {\n _checkPassword(data.toString());\n }\n });\n\n // Listen for data on stderr\n su.stderr.on('data', data => {\n if (data && responseTimeout) {\n _checkPassword(data.toString());\n }\n });\n\n // Listen for the close event\n su.on('close', () => {\n closed = true;\n console.log(`[LOG] -------- closed with result: ${result}\\n`);\n if (responseTimeout) {\n clearTimeout(responseTimeout);\n responseTimeout = null;\n }\n resolve(result);\n });\n } catch (e: unknown) {\n closed = true;\n console.error(`[LOG] -------- Error by execution: ${(e as Error).message}\\n`);\n reject(new Error(e as string));\n }\n });\n}\n\n/** Check if the system has well-known passwords */\nexport async function checkWellKnownPasswords(): Promise<{ login: string; password: string } | null> {\n // Check the os\n if (process.platform !== 'linux') {\n console.error('This function is only available on Linux');\n throw new Error('This function is only available on Linux');\n }\n for (const [login, password] of WELL_KNOWN_CREDENTIALS) {\n if (await checkLinuxPassword(login, password)) {\n return { login, password };\n }\n }\n return null;\n}\n\n/*\npi@NanoPi-R5S:/opt$ su pi\nPassword: [OLD PASSWORD]\\n\n\npi@NanoPi-R5S:/opt$ passwd\nChanging password for pi.\nCurrent password: [OLD PASSWORD]\\n\n\nNew password: [NEW PASSWORD]\\n\n\nRetype new password: [NEW PASSWORD]\\n\n\nThe password has not been changed.\n\nNew password:\nRetype new password:\n\nYou must choose a longer password.\n\nNew password:\nRetype new password:\n\npasswd: password updated successfully\npi@NanoPi-R5S:/opt$ exit\n*/\n\n/*\nÄndern des Passworts für pi.\nGeben Sie das aktuelle Passwort ein:\npasswd: Fehler beim Ändern des Authentifizierungstoken\npasswd: Passwort nicht geändert\npi@NanoPi-R5S:~$ passwd pi\nÄndern des Passworts für pi.\nGeben Sie das aktuelle Passwort ein:\nGeben Sie ein neues Passwort ein:\nGeben Sie das neue Passwort erneut ein:\npasswd: Passwort erfolgreich geändert\n\n */\nconst STATES = {\n S_0_SU_WAIT_PROMPT: 0,\n S_1_PASSWD_WAIT_PROMPT_CURRENT_PASSWORD: 1,\n S_2_PASSWD_WAIT_PROMPT_NEW_PASSWORD: 2,\n S_3_PASSWD_WAIT_PROMPT_RETYPE_NEW_PASSWORD: 3,\n S_4_PASSWD_WAIT_RESPONSE: 4,\n};\n\nexport function setLinuxPassword(login: string, oldPassword: string, newPassword: string): Promise<true | string> {\n return new Promise(resolve => {\n if (WELL_KNOWN_CREDENTIALS.find(item => item[0] === newPassword || item[1] === newPassword)) {\n resolve('New password is well-known too');\n return;\n }\n try {\n const su = spawn('su', [login]);\n let result: true | string = 'Cannot change password';\n let responseTimeout = setTimeout(() => {\n responseTimeout = null;\n result = 'Timeout';\n su.kill();\n }, 3000);\n\n let state = STATES.S_0_SU_WAIT_PROMPT;\n\n function _checkPassword(data: string): void {\n data = data.replace(/\\r/g, ' ').replace(/\\n/g, ' ').trim();\n console.log(`[STDX]: ${data}`);\n if (state === STATES.S_0_SU_WAIT_PROMPT) {\n // Password: [OLD PASSWORD]\\n\n if (data.endsWith(':')) {\n console.log(`[LOG]: received request to enter old password`);\n su.stdin.write(`${oldPassword}\\n`);\n setTimeout(() => {\n state = STATES.S_1_PASSWD_WAIT_PROMPT_CURRENT_PASSWORD;\n su.stdin.write(`passwd\\n`);\n }, 50);\n // todo: add ru, uk, pt,....\n } else if (data.toLowerCase().includes('failure') || data.toLowerCase().includes('fehler')) {\n console.log(`[LOG]: received failure message`);\n result = 'Old password not accepted';\n su.kill();\n }\n } else if (state === STATES.S_1_PASSWD_WAIT_PROMPT_CURRENT_PASSWORD) {\n // Changing password for pi.\n // Current password: [OLD PASSWORD]\\n\n if (data.endsWith(':')) {\n console.log(`[LOG]: received request to enter new password`);\n state = STATES.S_2_PASSWD_WAIT_PROMPT_NEW_PASSWORD;\n su.stdin.write(`${oldPassword}\\n`);\n }\n } else if (state === STATES.S_2_PASSWD_WAIT_PROMPT_NEW_PASSWORD) {\n // New password: [NEW PASSWORD]\\n\n if (data.endsWith(':')) {\n console.log(`[LOG]: received request to enter new password`);\n state = STATES.S_3_PASSWD_WAIT_PROMPT_RETYPE_NEW_PASSWORD;\n su.stdin.write(`${newPassword}\\n`);\n }\n } else if (state === STATES.S_3_PASSWD_WAIT_PROMPT_RETYPE_NEW_PASSWORD) {\n // Retype new password: [NEW PASSWORD]\\n\n if (data.endsWith(':')) {\n console.log(`[LOG]: received request to repeat new password`);\n state = STATES.S_4_PASSWD_WAIT_RESPONSE;\n su.stdin.write(`${newPassword}\\n`);\n }\n } else if (state === STATES.S_4_PASSWD_WAIT_RESPONSE) {\n // todo: add ru, uk, pt,....\n if (data.toLowerCase().includes('successfully') || data.toLowerCase().includes('erfolgreich')) {\n result = true;\n } else {\n // failure\n result = data;\n }\n su.kill();\n }\n }\n\n // Listen for data on stdout\n su.stdout.on('data', data => _checkPassword(data.toString()));\n\n // Listen for data on stderr\n su.stderr.on('data', data => _checkPassword(data.toString()));\n\n // Listen for the close event\n su.on('close', () => {\n responseTimeout && clearTimeout(responseTimeout);\n responseTimeout = null;\n resolve(result);\n });\n } catch (e) {\n console.error(`Cannot change password: ${e.toString()}`);\n throw new Error(e);\n }\n });\n}\n"]}
@@ -1,58 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const node_readline_1 = require("node:readline");
4
- const checkLinuxPass_1 = require("./checkLinuxPass");
5
- const node_stream_1 = require("node:stream");
6
- let maskOutput = false;
7
- // this file is used for test on different locales
8
- // node /opt/iobroker/node_modules/iobroker.admin/build-backend/lib/testPassword
9
- const mutableStdout = new node_stream_1.Writable({
10
- write: (_chunk, _encoding, callback) => {
11
- if (maskOutput) {
12
- process.stdout.write('*');
13
- }
14
- else {
15
- process.stdout.write(_chunk, _encoding);
16
- }
17
- callback();
18
- },
19
- });
20
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
21
- (0, checkLinuxPass_1.checkWellKnownPasswords)().then(found => {
22
- if (found) {
23
- console.log(`Found well-known password: ${JSON.stringify(found)}`);
24
- // enter new password
25
- const rl = (0, node_readline_1.createInterface)({
26
- input: process.stdin,
27
- output: mutableStdout,
28
- terminal: true,
29
- });
30
- rl.question(`Enter new password for "${found.login} (min 6 chars): `, (password) => {
31
- maskOutput = false;
32
- password = password.replace(/\r/g, '').replace(/\n/g, '');
33
- if (password.length < 6) {
34
- console.error('password is too short');
35
- process.exit(1);
36
- }
37
- rl.question(`Repeat new password for "${found.login}: `, (passwordRepeat) => {
38
- maskOutput = false;
39
- passwordRepeat = passwordRepeat.replace(/\r/g, '').replace(/\n/g, '');
40
- if (password !== passwordRepeat) {
41
- console.error('passwords are not equal');
42
- process.exit(1);
43
- }
44
- rl.close();
45
- void (0, checkLinuxPass_1.setLinuxPassword)(found.login, found.password, password).then(result => {
46
- console.log(`Result: ${JSON.stringify(result)}`);
47
- });
48
- });
49
- maskOutput = true;
50
- });
51
- maskOutput = true;
52
- }
53
- else {
54
- console.log(`No well known passwords found`);
55
- process.exit(0);
56
- }
57
- });
58
- //# sourceMappingURL=testPassword.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"testPassword.js","sourceRoot":"","sources":["../../../src/lib/testPassword.ts"],"names":[],"mappings":";;AAAA,iDAAgD;AAChD,qDAA6E;AAC7E,6CAAuC;AAEvC,IAAI,UAAU,GAAG,KAAK,CAAC;AACvB,kDAAkD;AAClD,gFAAgF;AAChF,MAAM,aAAa,GAAG,IAAI,sBAAQ,CAAC;IAC/B,KAAK,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE;QACnC,IAAI,UAAU,EAAE,CAAC;YACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC9B,CAAC;aAAM,CAAC;YACJ,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAC5C,CAAC;QACD,QAAQ,EAAE,CAAC;IACf,CAAC;CACJ,CAAC,CAAC;AAEH,mEAAmE;AACnE,IAAA,wCAAuB,GAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;IACnC,IAAI,KAAK,EAAE,CAAC;QACR,OAAO,CAAC,GAAG,CAAC,8BAA8B,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACnE,qBAAqB;QACrB,MAAM,EAAE,GAAG,IAAA,+BAAe,EAAC;YACvB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,MAAM,EAAE,aAAa;YACrB,QAAQ,EAAE,IAAI;SACjB,CAAC,CAAC;QACH,EAAE,CAAC,QAAQ,CAAC,2BAA2B,KAAK,CAAC,KAAK,kBAAkB,EAAE,CAAC,QAAgB,EAAE,EAAE;YACvF,UAAU,GAAG,KAAK,CAAC;YACnB,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAC1D,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACtB,OAAO,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;gBACvC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACpB,CAAC;YACD,EAAE,CAAC,QAAQ,CAAC,4BAA4B,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,cAAsB,EAAE,EAAE;gBAChF,UAAU,GAAG,KAAK,CAAC;gBACnB,cAAc,GAAG,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;gBACtE,IAAI,QAAQ,KAAK,cAAc,EAAE,CAAC;oBAC9B,OAAO,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;oBACzC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACpB,CAAC;gBACD,EAAE,CAAC,KAAK,EAAE,CAAC;gBACX,KAAK,IAAA,iCAAgB,EAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;oBACvE,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBACrD,CAAC,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;YACH,UAAU,GAAG,IAAI,CAAC;QACtB,CAAC,CAAC,CAAC;QACH,UAAU,GAAG,IAAI,CAAC;IACtB,CAAC;SAAM,CAAC;QACJ,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;QAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import { createInterface } from 'node:readline';\nimport { setLinuxPassword, checkWellKnownPasswords } from './checkLinuxPass';\nimport { Writable } from 'node:stream';\n\nlet maskOutput = false;\n// this file is used for test on different locales\n// node /opt/iobroker/node_modules/iobroker.admin/build-backend/lib/testPassword\nconst mutableStdout = new Writable({\n write: (_chunk, _encoding, callback) => {\n if (maskOutput) {\n process.stdout.write('*');\n } else {\n process.stdout.write(_chunk, _encoding);\n }\n callback();\n },\n});\n\n// eslint-disable-next-line @typescript-eslint/no-floating-promises\ncheckWellKnownPasswords().then(found => {\n if (found) {\n console.log(`Found well-known password: ${JSON.stringify(found)}`);\n // enter new password\n const rl = createInterface({\n input: process.stdin,\n output: mutableStdout,\n terminal: true,\n });\n rl.question(`Enter new password for \"${found.login} (min 6 chars): `, (password: string) => {\n maskOutput = false;\n password = password.replace(/\\r/g, '').replace(/\\n/g, '');\n if (password.length < 6) {\n console.error('password is too short');\n process.exit(1);\n }\n rl.question(`Repeat new password for \"${found.login}: `, (passwordRepeat: string) => {\n maskOutput = false;\n passwordRepeat = passwordRepeat.replace(/\\r/g, '').replace(/\\n/g, '');\n if (password !== passwordRepeat) {\n console.error('passwords are not equal');\n process.exit(1);\n }\n rl.close();\n void setLinuxPassword(found.login, found.password, password).then(result => {\n console.log(`Result: ${JSON.stringify(result)}`);\n });\n });\n maskOutput = true;\n });\n maskOutput = true;\n } else {\n console.log(`No well known passwords found`);\n process.exit(0);\n }\n});\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"translations.js","sourceRoot":"","sources":["../../../src/lib/translations.ts"],"names":[],"mappings":";;AA4BA,oDAOC;AAxBD,MAAM,UAAU,GAAuC;IACnD,EAAE,EAAE,wEAAwE;IAC5E,EAAE,EAAE,kFAAkF;IACtF,EAAE,EAAE,0EAA0E;IAC9E,EAAE,EAAE,iFAAiF;IACrF,EAAE,EAAE,gFAAgF;IACpF,EAAE,EAAE,gFAAgF;IACpF,EAAE,EAAE,iFAAiF;IACrF,EAAE,EAAE,8EAA8E;IAClF,EAAE,EAAE,iFAAiF;IACrF,EAAE,EAAE,oEAAoE;IACxE,OAAO,EAAE,qDAAqD;CACjE,CAAC;AAEF;;GAEG;AACH,SAAgB,oBAAoB,CAAC,OAA6B;IAC9D,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;IAEhE,OAAO,UAAU,CAAC,IAAI,CAAC;SAClB,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC;SAC5B,OAAO,CAAC,mBAAmB,EAAE,gBAAgB,CAAC;SAC9C,OAAO,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;AAC5C,CAAC","sourcesContent":["interface AdapterUpdateOptions {\n /** Language to translate text to */\n lang: ioBroker.Languages;\n /** The adapter to update */\n adapter: string;\n /** The installed version */\n installedVersion: string;\n /** The new available version */\n newVersion: string;\n}\n\nconst updateText: Record<ioBroker.Languages, string> = {\n en: 'Adapter %adapter can be updated from %installedVersion to %newVersion.',\n de: 'Adapter %adapter kann von %installedVersion auf %newVersion aktualisiert werden.',\n ru: 'Адаптер %adapter может быть обновлен с %installedVersion до %newVersion.',\n pt: 'O adaptador %adapter pode ser atualizado de %installedVersion para %newVersion.',\n nl: 'Adapter %adapter kan worden bijgewerkt van %installedVersion naar %newVersion.',\n fr: \"L'adaptateur %adapter peut être mis à jour de %installedVersion à %newVersion.\",\n it: \"L'adattatore %adapter può essere aggiornato da %installedVersion a %newVersion.\",\n es: 'El adaptador %adapter puede actualizarse de %installedVersion a %newVersion.',\n pl: 'Adapter %adapter może zostać zaktualizowany z %installedVersion do %newVersion.',\n uk: 'Адаптер %adapter можна оновити з %installedVersion до %newVersion.',\n 'zh-cn': '适配器 %adapter 可以从 %installedVersion 升级到 %newVersion。',\n};\n\n/**\n * Get text for a message about adapter update in given language\n */\nexport function getAdapterUpdateText(options: AdapterUpdateOptions): string {\n const { lang, adapter, installedVersion, newVersion } = options;\n\n return updateText[lang]\n .replace('%adapter', adapter)\n .replace('%installedVersion', installedVersion)\n .replace('%newVersion', newVersion);\n}\n"]}