@iobroker/js-controller-cli 7.0.2-alpha.0-20241026-8055a2557 → 7.0.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.
- package/build/cjs/index.js +2 -1
- package/build/cjs/index.js.map +2 -2
- package/build/cjs/lib/_Types.d.ts +0 -1
- package/build/cjs/lib/cli/cliCert.js +17 -0
- package/build/cjs/lib/cli/cliCert.js.map +1 -1
- package/build/cjs/lib/cli/cliCommand.d.ts +0 -1
- package/build/cjs/lib/cli/cliCommand.js +6 -0
- package/build/cjs/lib/cli/cliCommand.js.map +1 -1
- package/build/cjs/lib/cli/cliCompact.js +30 -1
- package/build/cjs/lib/cli/cliCompact.js.map +1 -1
- package/build/cjs/lib/cli/cliDebug.js +16 -0
- package/build/cjs/lib/cli/cliDebug.js.map +1 -1
- package/build/cjs/lib/cli/cliHost.js +35 -0
- package/build/cjs/lib/cli/cliHost.js.map +1 -1
- package/build/cjs/lib/cli/cliLogs.js +33 -3
- package/build/cjs/lib/cli/cliLogs.js.map +3 -3
- package/build/cjs/lib/cli/cliMessage.js +10 -0
- package/build/cjs/lib/cli/cliMessage.js.map +1 -1
- package/build/cjs/lib/cli/cliObjects.d.ts +0 -1
- package/build/cjs/lib/cli/cliObjects.js +85 -0
- package/build/cjs/lib/cli/cliObjects.js.map +1 -1
- package/build/cjs/lib/cli/cliPlugin.js +23 -2
- package/build/cjs/lib/cli/cliPlugin.js.map +3 -3
- package/build/cjs/lib/cli/cliProcess.js +65 -2
- package/build/cjs/lib/cli/cliProcess.js.map +1 -1
- package/build/cjs/lib/cli/cliStates.d.ts +0 -1
- package/build/cjs/lib/cli/cliStates.js +38 -0
- package/build/cjs/lib/cli/cliStates.js.map +1 -1
- package/build/cjs/lib/cli/cliTools.js.map +1 -1
- package/build/cjs/lib/cli/messages.d.ts +27 -23
- package/build/cjs/lib/cli/messages.js.map +1 -1
- package/build/cjs/lib/setup/dbConnection.js +9 -0
- package/build/cjs/lib/setup/dbConnection.js.map +1 -1
- package/build/cjs/lib/setup/formatters.js.map +1 -1
- package/build/cjs/lib/setup/multihostClient.d.ts +0 -1
- package/build/cjs/lib/setup/multihostClient.js +36 -0
- package/build/cjs/lib/setup/multihostClient.js.map +1 -1
- package/build/cjs/lib/setup/setupBackup.js +112 -2
- package/build/cjs/lib/setup/setupBackup.js.map +1 -1
- package/build/cjs/lib/setup/setupInstall.d.ts +6 -6
- package/build/cjs/lib/setup/setupInstall.js +198 -57
- package/build/cjs/lib/setup/setupInstall.js.map +4 -4
- package/build/cjs/lib/setup/setupLicense.js +9 -0
- package/build/cjs/lib/setup/setupLicense.js.map +1 -1
- package/build/cjs/lib/setup/setupList.d.ts +0 -1
- package/build/cjs/lib/setup/setupList.js +4 -0
- package/build/cjs/lib/setup/setupList.js.map +1 -1
- package/build/cjs/lib/setup/setupMultihost.d.ts +2 -5
- package/build/cjs/lib/setup/setupMultihost.js +58 -33
- package/build/cjs/lib/setup/setupMultihost.js.map +3 -3
- package/build/cjs/lib/setup/setupPacketManager.js +41 -0
- package/build/cjs/lib/setup/setupPacketManager.js.map +1 -1
- package/build/cjs/lib/setup/setupRepo.js +60 -0
- package/build/cjs/lib/setup/setupRepo.js.map +1 -1
- package/build/cjs/lib/setup/setupSetup.d.ts +0 -1
- package/build/cjs/lib/setup/setupSetup.js +79 -5
- package/build/cjs/lib/setup/setupSetup.js.map +3 -3
- package/build/cjs/lib/setup/setupUpgrade.js +34 -0
- package/build/cjs/lib/setup/setupUpgrade.js.map +1 -1
- package/build/cjs/lib/setup/setupUpload.d.ts +0 -3
- package/build/cjs/lib/setup/setupUpload.js +43 -0
- package/build/cjs/lib/setup/setupUpload.js.map +1 -1
- package/build/cjs/lib/setup/setupUsers.d.ts +0 -1
- package/build/cjs/lib/setup/setupUsers.js +109 -0
- package/build/cjs/lib/setup/setupUsers.js.map +1 -1
- package/build/cjs/lib/setup/setupVendor.js +18 -1
- package/build/cjs/lib/setup/setupVendor.js.map +1 -1
- package/build/cjs/lib/setup/setupVisDebug.js +16 -0
- package/build/cjs/lib/setup/setupVisDebug.js.map +1 -1
- package/build/cjs/lib/setup/utils.d.ts +1 -1
- package/build/cjs/lib/setup/utils.js +8 -4
- package/build/cjs/lib/setup/utils.js.map +2 -2
- package/build/cjs/lib/setup.js +17 -6
- package/build/cjs/lib/setup.js.map +3 -3
- package/build/esm/index.d.ts.map +1 -1
- package/build/esm/index.js +1 -0
- package/build/esm/index.js.map +1 -1
- package/build/esm/lib/_Types.d.ts +0 -1
- package/build/esm/lib/_Types.d.ts.map +1 -1
- package/build/esm/lib/cli/cliCommand.d.ts +0 -1
- package/build/esm/lib/cli/cliCommand.d.ts.map +1 -1
- package/build/esm/lib/cli/cliObjects.d.ts +0 -1
- package/build/esm/lib/cli/cliObjects.d.ts.map +1 -1
- package/build/esm/lib/cli/cliStates.d.ts +0 -1
- package/build/esm/lib/cli/cliStates.d.ts.map +1 -1
- package/build/esm/lib/cli/messages.d.ts +27 -23
- package/build/esm/lib/cli/messages.d.ts.map +1 -1
- package/build/esm/lib/setup/multihostClient.d.ts +0 -1
- package/build/esm/lib/setup/multihostClient.d.ts.map +1 -1
- package/build/esm/lib/setup/setupInstall.d.ts +6 -6
- package/build/esm/lib/setup/setupInstall.d.ts.map +1 -1
- package/build/esm/lib/setup/setupInstall.js +37 -70
- package/build/esm/lib/setup/setupInstall.js.map +1 -1
- package/build/esm/lib/setup/setupList.d.ts +0 -1
- package/build/esm/lib/setup/setupList.d.ts.map +1 -1
- package/build/esm/lib/setup/setupMultihost.d.ts +2 -5
- package/build/esm/lib/setup/setupMultihost.d.ts.map +1 -1
- package/build/esm/lib/setup/setupMultihost.js +12 -37
- package/build/esm/lib/setup/setupMultihost.js.map +1 -1
- package/build/esm/lib/setup/setupSetup.d.ts +0 -1
- package/build/esm/lib/setup/setupSetup.d.ts.map +1 -1
- package/build/esm/lib/setup/setupUpload.d.ts +0 -3
- package/build/esm/lib/setup/setupUpload.d.ts.map +1 -1
- package/build/esm/lib/setup/setupUsers.d.ts +0 -1
- package/build/esm/lib/setup/setupUsers.d.ts.map +1 -1
- package/build/esm/lib/setup/utils.d.ts +1 -1
- package/build/esm/lib/setup/utils.d.ts.map +1 -1
- package/build/esm/lib/setup/utils.js +3 -3
- package/build/esm/lib/setup/utils.js.map +1 -1
- package/build/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +4 -4
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/lib/setup/setupLicense.ts"],
|
|
4
4
|
"sourcesContent": ["import type { Client as ObjectsRedisClient } from '@iobroker/db-objects-redis';\nimport { tools } from '@iobroker/js-controller-common';\nimport fs from 'fs-extra';\nimport jwt from 'jsonwebtoken';\n\nexport interface CLILicenseOptions {\n objects: ObjectsRedisClient;\n}\n\nexport class License {\n private readonly objects: ObjectsRedisClient;\n\n constructor(options: CLILicenseOptions) {\n this.objects = options.objects;\n }\n\n /**\n * Read info from '/etc/iob_vendor.json' and executes instructions stored there\n *\n * @param file path of license file\n */\n async setLicense(file: string): Promise<void> {\n if (fs.existsSync(file)) {\n file = fs.readFileSync(file, 'utf8');\n }\n // try to encode license\n const license = jwt.decode(file);\n if (!license) {\n throw new Error('License cannot be decoded');\n }\n if (!tools.isObject(license) || !license.name) {\n throw new Error('Name not found in the license');\n }\n const adapter = license.name.split('.')[1];\n if (!adapter) {\n throw new Error(`Invalid license name ${license.name}`);\n }\n\n // read all instances of this adapter\n const arr = await this.objects.getObjectListAsync(\n {\n startkey: `system.adapter.${adapter}.`,\n endkey: `system.adapter.${adapter}.\\u9999`,\n },\n { checked: true },\n );\n\n let updated = 0;\n\n if (arr.rows.length) {\n for (let g = 0; g < arr.rows.length; g++) {\n const obj = arr.rows[g].value;\n if (obj && obj.type === 'instance') {\n obj.native = obj.native || {};\n obj.native.license = file;\n updated++;\n try {\n await this.objects.setObjectAsync(obj._id, obj);\n console.log(`Instance \"${obj._id}\" updated`);\n } catch (err) {\n console.error(`Cannot update \"${obj._id}\": ${err}`);\n }\n }\n }\n }\n\n if (!updated) {\n console.warn(`no instances of ${adapter} found`);\n if (arr.rows.length) {\n for (let g = 0; g < arr.rows.length; g++) {\n const obj = arr.rows[g].value;\n if (obj && obj.type === 'adapter') {\n obj.native = obj.native || {};\n obj.native.license = file;\n updated++;\n try {\n await this.objects.setObjectAsync(obj._id, obj);\n console.log(`Adapter \"${obj._id}\" updated`);\n } catch (err) {\n console.error(`Cannot update \"${obj._id}\": ${err}`);\n }\n }\n }\n }\n }\n\n if (!updated) {\n console.error(`no installations of ${adapter} found`);\n }\n }\n}\n"],
|
|
5
|
-
"mappings": "
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA;;;;;AAAA,kCAAsB;AACtB,sBAAe;AACf,0BAAgB;AAMV,MAAO,QAAO;EACC;EAEjB,YAAY,SAA0B;AAClC,SAAK,UAAU,QAAQ;EAC3B;;;;;;EAOA,MAAM,WAAW,MAAY;AACzB,QAAI,gBAAAA,QAAG,WAAW,IAAI,GAAG;AACrB,aAAO,gBAAAA,QAAG,aAAa,MAAM,MAAM;IACvC;AAEA,UAAM,UAAU,oBAAAC,QAAI,OAAO,IAAI;AAC/B,QAAI,CAAC,SAAS;AACV,YAAM,IAAI,MAAM,2BAA2B;IAC/C;AACA,QAAI,CAAC,kCAAM,SAAS,OAAO,KAAK,CAAC,QAAQ,MAAM;AAC3C,YAAM,IAAI,MAAM,+BAA+B;IACnD;AACA,UAAM,UAAU,QAAQ,KAAK,MAAM,GAAG,EAAE,CAAC;AACzC,QAAI,CAAC,SAAS;AACV,YAAM,IAAI,MAAM,wBAAwB,QAAQ,IAAI,EAAE;IAC1D;AAGA,UAAM,MAAM,MAAM,KAAK,QAAQ,mBAC3B;MACI,UAAU,kBAAkB,OAAO;MACnC,QAAQ,kBAAkB,OAAO;OAErC,EAAE,SAAS,KAAI,CAAE;AAGrB,QAAI,UAAU;AAEd,QAAI,IAAI,KAAK,QAAQ;AACjB,eAAS,IAAI,GAAG,IAAI,IAAI,KAAK,QAAQ,KAAK;AACtC,cAAM,MAAM,IAAI,KAAK,CAAC,EAAE;AACxB,YAAI,OAAO,IAAI,SAAS,YAAY;AAChC,cAAI,SAAS,IAAI,UAAU,CAAA;AAC3B,cAAI,OAAO,UAAU;AACrB;AACA,cAAI;AACA,kBAAM,KAAK,QAAQ,eAAe,IAAI,KAAK,GAAG;AAC9C,oBAAQ,IAAI,aAAa,IAAI,GAAG,WAAW;UAC/C,SAAS,KAAK;AACV,oBAAQ,MAAM,kBAAkB,IAAI,GAAG,MAAM,GAAG,EAAE;UACtD;QACJ;MACJ;IACJ;AAEA,QAAI,CAAC,SAAS;AACV,cAAQ,KAAK,mBAAmB,OAAO,QAAQ;AAC/C,UAAI,IAAI,KAAK,QAAQ;AACjB,iBAAS,IAAI,GAAG,IAAI,IAAI,KAAK,QAAQ,KAAK;AACtC,gBAAM,MAAM,IAAI,KAAK,CAAC,EAAE;AACxB,cAAI,OAAO,IAAI,SAAS,WAAW;AAC/B,gBAAI,SAAS,IAAI,UAAU,CAAA;AAC3B,gBAAI,OAAO,UAAU;AACrB;AACA,gBAAI;AACA,oBAAM,KAAK,QAAQ,eAAe,IAAI,KAAK,GAAG;AAC9C,sBAAQ,IAAI,YAAY,IAAI,GAAG,WAAW;YAC9C,SAAS,KAAK;AACV,sBAAQ,MAAM,kBAAkB,IAAI,GAAG,MAAM,GAAG,EAAE;YACtD;UACJ;QACJ;MACJ;IACJ;AAEA,QAAI,CAAC,SAAS;AACV,cAAQ,MAAM,uBAAuB,OAAO,QAAQ;IACxD;EACJ;;",
|
|
6
6
|
"names": ["fs", "jwt"]
|
|
7
7
|
}
|
|
@@ -18,6 +18,10 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
18
18
|
return to;
|
|
19
19
|
};
|
|
20
20
|
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
21
25
|
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
22
26
|
mod
|
|
23
27
|
));
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/lib/setup/setupList.ts"],
|
|
4
4
|
"sourcesContent": ["/**\n * List different objects for CLI\n *\n * Copyright 2013-2024 bluefox <dogafox@gmail.com>\n *\n * MIT License\n *\n */\n\nimport { EXIT_CODES } from '@iobroker/js-controller-common';\nimport fs from 'fs-extra';\nimport { tools } from '@iobroker/js-controller-common';\nimport type { Client as StatesRedisClient } from '@iobroker/db-states-redis';\nimport type { Client as ObjectsRedisClient } from '@iobroker/db-objects-redis';\n\ninterface File {\n adapter: string;\n path: string;\n file: ioBroker.ReadDirResult;\n}\n\ninterface IdValueObject {\n id: string;\n value: any;\n}\n\ninterface FlagObject {\n alive?: boolean;\n enabled?: boolean;\n disabled?: boolean;\n port?: number;\n ssl?: boolean;\n ip?: string;\n}\n\ninterface CLIListOptions {\n states: StatesRedisClient;\n objects: ObjectsRedisClient;\n processExit: (exitCode?: number) => void;\n}\n\nexport type ListType =\n | 'objects'\n | 'o'\n | 'states'\n | 's'\n | 'adapters'\n | 'a'\n | 'instances'\n | 'i'\n | 'users'\n | 'u'\n | 'groups'\n | 'g'\n | 'hosts'\n | 'h'\n | 'enums'\n | 'e'\n | 'files'\n | 'f';\n\ninterface AdapterListEntry {\n /** The object id */\n id: string;\n /** Adapter name */\n name: string;\n /** Version of adapter */\n version: string;\n /** The configured upgrade policy */\n 'upgrade policy': ioBroker.AutoUpgradePolicy;\n}\n\nexport class List {\n private config: Record<string, any>;\n private objects: ObjectsRedisClient;\n private states: StatesRedisClient;\n private readonly processExit: (exitCode?: number) => void;\n\n constructor(options: CLIListOptions) {\n options = options || {};\n\n if (!options.states) {\n throw new Error('Invalid Modified arguments: states is missing');\n }\n if (!options.objects) {\n throw new Error('Invalid arguments: objects is missing');\n }\n if (!options.processExit) {\n throw new Error('Invalid arguments: processExit is missing');\n }\n\n this.config = fs.readJSONSync(tools.getConfigFileName());\n\n this.objects = options.objects;\n this.states = options.states;\n this.processExit = options.processExit;\n }\n\n private static _perm2str(perm: number): string {\n let result = '';\n // user\n result += perm & 0x400 ? 'r' : '-';\n result += perm & 0x200 ? 'w' : '-';\n result += perm & 0x100 ? 'x' : '-';\n // group\n result += perm & 0x040 ? 'r' : '-';\n result += perm & 0x020 ? 'w' : '-';\n result += perm & 0x010 ? 'x' : '-';\n // any\n result += perm & 0x004 ? 'r' : '-';\n result += perm & 0x002 ? 'w' : '-';\n result += perm & 0x001 ? 'x' : '-';\n return result;\n }\n\n showFileHeader(adapter?: string): void {\n if (adapter) {\n console.log(`\\n-- ${adapter} --`);\n }\n\n console.log(' Modified at |Permission| User | Group | Size | Name');\n console.log('----------------+----------+--------------+--------------+------+---------');\n }\n\n showFile(adapter: string, path: string, file: ioBroker.ReadDirResult): void {\n //drwxr-xr-x 1 odroid odroid 43 Oct 3 2013 .xsessionrc\n let text = '';\n let time = '';\n if (file.modifiedAt) {\n const ts = new Date(file.modifiedAt);\n time = ts.toISOString();\n time = time.replace('T', ' ');\n time = `${time.substring(0, 16)} `;\n }\n text += time.padEnd(17);\n\n if (file.acl) {\n text += (file.isDir ? 'd' : '-') + List._perm2str(file.acl.permissions || 0);\n let owner = file.acl.owner;\n // cut system.user.\n owner = owner.substring(12);\n\n text += ` ${owner.padStart(14)}`;\n let group = file.acl.ownerGroup;\n // cut system.group.\n group = group.substring(13);\n text += ` ${group.padStart(14)}`;\n } else {\n text += `${file.isDir ? 'd' : '-'}?????????${new Array(31).join(' ')}`;\n }\n const size = file.stats && file.stats.size ? file.stats.size.toString() : '';\n\n text += ` ${size.padStart(6)} ${adapter}${!path || path[0] === '/' ? '' : '/'}${path}/${file.file}`;\n if (file.isDir) {\n text += '/';\n console.log(text);\n } else {\n console.log(text);\n }\n }\n\n showObjectHeader(): void {\n console.log('ObjectAC | StateAC | User | Group | ID');\n console.log('---------+---------+--------------+--------------+--------------');\n }\n\n showObject(obj: ioBroker.AnyObject): void {\n //drwxr-xr-x 1 odroid odroid 43 Oct 3 2013 .xsessionrc\n let text = '';\n if (obj.acl) {\n text += `${List._perm2str(obj.acl.object || 0)} ${\n obj.type === 'state' ? List._perm2str(obj.acl.state || 0) : ' '\n }`;\n let owner = obj.acl.owner;\n // cut system.user.\n owner = owner.substring(12);\n\n text += ` ${owner.padStart(14)}`;\n let group = obj.acl.ownerGroup;\n // cut system.group.\n group = group.substring(13);\n text += ` ${group.padStart(14)}`;\n } else {\n text += `?????????${obj.type === 'state' ? ' ?????????' : ' '}${new Array(31).join(' ')}`;\n }\n text += ` ${obj._id}`;\n console.log(text);\n }\n\n listDirectory(\n adapter: string,\n path: string | null | undefined,\n allFiles?: File[] | ((allFiles: File[]) => void),\n callback?: (allFiles: File[]) => void,\n ): void {\n if (typeof path === 'function') {\n callback = path;\n path = '';\n allFiles = [];\n }\n if (typeof allFiles === 'function') {\n callback = allFiles;\n allFiles = [];\n }\n const _allFiles = allFiles || [];\n const _path = path || '';\n\n this.objects.readDir(adapter, _path, null, (err, files) => {\n if (err && err.code === 'ENOTDIR') {\n const pos = _path.lastIndexOf('/');\n if (pos !== -1) {\n const dir = _path.substring(0, pos);\n const fname = _path.substring(pos + 1);\n this.objects.readDir(adapter, dir, null, (err, files) => {\n if (err) {\n console.log(`Cannot read \"${path}\": ${err.message}`);\n typeof callback === 'function' && callback(_allFiles);\n } else {\n // @ts-expect-error if no error, files are guranteed to be an Array https://github.com/ioBroker/adapter-core/issues/455\n for (const file of files) {\n if (file.file === '.' || file.file === '..') {\n continue;\n }\n if (file.file === fname) {\n _allFiles.push({ adapter, path: _path, file });\n break;\n }\n }\n typeof callback === 'function' && callback(_allFiles);\n }\n });\n } else if (typeof callback === 'function') {\n callback(_allFiles);\n }\n } else {\n let count = 0;\n // @ts-expect-error if no error, files are guranteed to be an Array https://github.com/ioBroker/adapter-core/issues/455\n for (const file of files) {\n if (file.file === '.' || file.file === '..') {\n continue;\n }\n _allFiles.push({ adapter: adapter, path: _path, file });\n if (file.isDir) {\n count++;\n this.listDirectory(adapter, `${path}/${file.file}`, allFiles, () => {\n if (!--count && callback) {\n typeof callback === 'function' && callback(_allFiles);\n }\n });\n }\n }\n if (!count && typeof callback === 'function') {\n callback(_allFiles);\n }\n }\n });\n }\n\n sortFiles(a: File, b: File): number {\n let a1 = a.path + a.file.file;\n if (a1[0] !== '/') {\n a1 = `/${a1}`;\n }\n let b1 = b.path + b.file.file;\n if (b1[0] !== '/') {\n b1 = `/${b1}`;\n }\n return a1.localeCompare(b1);\n }\n\n listAdaptersFiles(adapters: string[], filter?: null | string, callback?: () => void): void | Promise<void> {\n if (typeof filter === 'function') {\n callback = filter;\n filter = null;\n }\n if (filter) {\n filter = filter.replace(/\\*/g, '');\n if (filter[filter.length - 1] === '/') {\n filter = filter.substring(0, filter.length - 1);\n }\n }\n\n if (adapters && adapters.length) {\n const adapter = adapters.shift() as string;\n this.listDirectory(adapter, filter, files => {\n files.sort(this.sortFiles);\n this.showFileHeader(adapter);\n\n files\n .filter(f => !filter || `${f.path}/${f.file.file}`.startsWith(filter))\n .forEach(f => this.showFile(f.adapter, f.path, f.file));\n\n this.listAdaptersFiles(adapters, filter, callback);\n });\n } else {\n return tools.maybeCallback(callback);\n }\n }\n\n private _readOnlineState(\n lines: IdValueObject[],\n flags: FlagObject,\n cb: (res: any[]) => void,\n _result?: any[],\n ): void {\n const result = _result || [];\n if (!lines || !lines.length) {\n cb(result);\n } else {\n const task = lines.shift() as IdValueObject;\n const id = `${task.id}.alive`;\n this.states.getState(id, (err, state) => {\n if (state && state.val) {\n result.push(`+ ${task.value}`);\n } else if (!flags.alive) {\n result.push(` ${task.value}`);\n }\n setImmediate(() => this._readOnlineState(lines, flags, cb, result));\n });\n }\n }\n\n list(type: ListType, filter: string, flags: FlagObject): void {\n this.objects.getObject('system.config', (err, systemConf) => {\n const lang: ioBroker.Languages = systemConf?.common?.language || 'en';\n switch (type) {\n case 'objects':\n case 'o':\n this.objects.getObjectList({}, (err, objs) => {\n if (!objs) {\n this.processExit();\n return;\n }\n const reg = filter ? new RegExp(tools.pattern2RegEx(filter)) : null;\n for (const obj of objs.rows) {\n let name = obj.value?.common?.name;\n if (tools.isObject(name)) {\n name = name[lang] || name.en;\n }\n\n if (!reg || reg.test(obj.value._id) || (name && reg.test(name))) {\n if (obj.value.type) {\n const id = obj.value._id;\n const type = obj.value.type;\n\n console.log(`${id.padStart(39)}: ${type.padStart(39)} - ${name || ''}`);\n }\n }\n }\n this.processExit();\n });\n break;\n\n case 'states':\n case 's':\n this.states.getKeys(filter || '*', (err, keys) => {\n if (err) {\n console.error(err);\n return void this.processExit(EXIT_CODES.CANNOT_GET_STATES);\n }\n\n if (!keys) {\n return void this.processExit();\n }\n\n this.states.getStates(keys, (err, states) => {\n if (err || !states) {\n console.error(err);\n return void this.processExit(EXIT_CODES.CANNOT_GET_STATES);\n }\n for (let i = 0; i < states.length; i++) {\n const state = states[i];\n if (!state) {\n continue;\n }\n\n const id = keys[i];\n const from = state.from || '';\n const type = typeof state.val;\n\n console.log(\n `${id.padEnd(39)}: from [${from.padEnd(29)}] (${type.padEnd(9)}) ${\n state.ack ? ' ack' : 'not ack'\n } ${JSON.stringify(state.val)}`,\n );\n }\n this.processExit();\n });\n });\n break;\n\n case 'adapters':\n case 'a':\n this.objects.getObjectList(\n { startkey: 'system.adapter.', endkey: 'system.adapter.\\u9999' },\n (err, objs) => {\n if (!objs) {\n this.processExit();\n return;\n }\n const reg = filter ? new RegExp(tools.pattern2RegEx(`system.adapter.${filter}`)) : null;\n const adapterList: AdapterListEntry[] = [];\n for (const obj of objs.rows) {\n if (obj.value.type !== 'adapter') {\n continue;\n }\n\n if (\n !reg ||\n reg.test(obj.value._id) ||\n (obj.value.common && reg.test(obj.value.common.name))\n ) {\n const id = obj.value._id;\n let name = obj.value.common.name;\n if (tools.isObject(name)) {\n name = name[lang] || name.en;\n }\n\n adapterList.push({\n id,\n name,\n version: obj.value.common.version,\n 'upgrade policy': obj.value.common.automaticUpgrade ?? 'none',\n });\n }\n }\n\n console.table(adapterList);\n this.processExit();\n },\n );\n break;\n\n case 'instances':\n case 'i':\n this.objects.getObjectList(\n { startkey: 'system.adapter.', endkey: 'system.adapter.\\u9999' },\n (err, objs) => {\n if (!objs) {\n this.processExit();\n return;\n }\n const reg = filter ? new RegExp(tools.pattern2RegEx(`system.adapter.${filter}`)) : null;\n objs.rows.sort((a, b) => {\n if (a.id > b.id) {\n return 1;\n } else if (a.id < b.id) {\n return -1;\n }\n return 0;\n });\n const lines = [];\n for (const row of objs.rows) {\n if (row.value.type !== 'instance') {\n continue;\n }\n\n let name = row.value.common?.name;\n\n if (tools.isObject(name)) {\n name = name[lang] || name.en;\n }\n\n if (!reg || reg.test(row.value._id) || (name && reg.test(name))) {\n if (flags.enabled && !row.value.common.enabled) {\n continue;\n }\n if (flags.disabled && row.value.common.enabled) {\n continue;\n }\n if (flags.port && row.value.native.port === undefined) {\n continue;\n }\n if (flags.ssl && row.value.native.secure === undefined) {\n continue;\n }\n if (flags.ip && row.value.native.bind === undefined) {\n continue;\n }\n\n let id: string = row.value._id;\n let host = row.value.common.host;\n\n if (id.length < 40) {\n id = id.padEnd(40);\n }\n if (name && name.length < 22) {\n name = name.padEnd(22);\n }\n\n if (host && host.length < 40) {\n host = host.padEnd(40);\n }\n\n let text = `${id}: ${name || ''}: ${host} - ${\n row.value.common.enabled ? ' enabled' : 'disabled'\n }`;\n\n if (this.config.system && this.config.system.compact && row.value.common.compact) {\n text += `, compact ${\n row.value.common.compact && row.value.common.runAsCompactMode\n ? `enabled (group ${\n row.value.common.compactGroup !== undefined\n ? row.value.common.compactGroup\n : 1\n })`\n : 'disabled'\n }`;\n }\n\n if (row.value.native && row.value.native.port) {\n text += `, port: ${row.value.native.port}`;\n }\n if (row.value.native && row.value.native.bind) {\n text += `, bind: ${row.value.native.bind}`;\n }\n if (row.value.native && row.value.native.secure) {\n text += ' (SSL)';\n }\n if (row.value.native && row.value.native.defaultUser) {\n text += `, run as: ${row.value.native.defaultUser}`;\n }\n lines.push({ id: row.value._id, value: text });\n }\n }\n this._readOnlineState(lines, flags, result => {\n console.log(result.join('\\n'));\n console.log('\\n+ instance is alive');\n this.processExit();\n });\n },\n );\n break;\n\n case 'users':\n case 'u':\n this.objects.getObjectList(\n { startkey: 'system.user.', endkey: 'system.user.\\u9999' },\n (err, objs) => {\n this.objects.getObjectList(\n { startkey: 'system.group.', endkey: 'system.group.\\u9999' },\n (err, groups) => {\n if (!objs) {\n this.processExit();\n return;\n }\n const reg = filter\n ? new RegExp(tools.pattern2RegEx(`system.user.${filter}`))\n : null;\n console.log(\n ' ID | Name | Active | Groups',\n );\n console.log(\n '---------------------------------------+-------------+----------+--------------',\n );\n for (const obj of objs.rows) {\n if (obj.value.type !== 'user') {\n continue;\n }\n\n if (\n !reg ||\n reg.test(obj.value._id) ||\n (obj.value.common &&\n reg.test(\n tools.isObject(obj.value.common.name)\n ? obj.value.common.name[lang] || obj.value.common.name.en\n : obj.value.common.name,\n ))\n ) {\n const id = obj.value._id;\n let name = obj.value.common.name;\n if (tools.isObject(name)) {\n name = name[lang] || name.en;\n }\n\n const text = `${id.padEnd(39)}| ${name.padEnd(11)} | ${\n obj.value.common.enabled ? ' enabled' : 'disabled'\n } |`;\n if (groups) {\n const gs = [];\n // find all groups\n for (const group of groups.rows) {\n if (\n group.value.common.members &&\n group.value.common.members.indexOf(obj.value._id) !== -1\n ) {\n gs.push(group.value._id.substring(13));\n }\n }\n console.log(`${text} ${gs.join(', ')}`);\n }\n }\n }\n this.processExit();\n },\n );\n },\n );\n break;\n\n case 'groups':\n case 'g':\n this.objects.getObjectList(\n { startkey: 'system.group.', endkey: 'system.group.\\u9999' },\n (err, objs) => {\n if (!objs) {\n this.processExit();\n return;\n }\n const reg = filter ? new RegExp(tools.pattern2RegEx(`system.group.${filter}`)) : null;\n console.log('');\n console.log(\n ' system.group | object | state | file | user | others | users',\n );\n console.log(\n ' | l r w d | l r w d | l r w c d | w c d | |',\n );\n console.log(\n '--------------------+---------+---------+-----------+-------+------------------------+---------',\n );\n for (const obj of objs.rows) {\n if (obj.value.type !== 'group') {\n continue;\n }\n if (\n !reg ||\n reg.test(obj.value._id) ||\n (obj.value.common &&\n reg.test(\n tools.isObject(obj.value.common.name)\n ? obj.value.common.name[lang] || obj.value.common.name.en\n : obj.value.common.name,\n ))\n ) {\n const id = obj.value._id.substring(13);\n if (id === 'administrator') {\n obj.value.common.acl = {\n file: {\n read: true,\n write: true,\n delete: true,\n create: true,\n list: true,\n },\n object: {\n read: true,\n write: true,\n create: true,\n delete: true,\n list: true,\n },\n state: {\n read: true,\n write: true,\n delete: true,\n create: true,\n list: true,\n },\n users: {\n write: true,\n create: true,\n delete: true,\n list: true,\n read: true,\n },\n other: {\n execute: true,\n http: true,\n sendto: true,\n },\n };\n }\n\n let text = id.padEnd(19);\n text += ' | ';\n if (obj.value.common.acl?.object) {\n text += `${obj.value.common.acl.object.list ? '+' : '-'} `;\n text += `${obj.value.common.acl.object.read ? '+' : '-'} `;\n text += `${obj.value.common.acl.object.write ? '+' : '-'} `;\n text += `${obj.value.common.acl.object.delete ? '+' : '-'} `;\n text += '|';\n } else {\n text += ' |';\n }\n if (obj.value.common.acl?.state) {\n text += ' ';\n text += `${obj.value.common.acl.state.list ? '+' : '-'} `;\n text += `${obj.value.common.acl.state.read ? '+' : '-'} `;\n text += `${obj.value.common.acl.state.write ? '+' : '-'} `;\n text += `${obj.value.common.acl.state.delete ? '+' : '-'} `;\n text += '|';\n } else {\n text += ' |';\n }\n if (obj.value.common.acl?.file) {\n text += ' ';\n text += `${obj.value.common.acl.file.list ? '+' : '-'} `;\n text += `${obj.value.common.acl.file.read ? '+' : '-'} `;\n text += `${obj.value.common.acl.file.write ? '+' : '-'} `;\n text += `${obj.value.common.acl.file.create ? '+' : '-'} `;\n text += `${obj.value.common.acl.file.delete ? '+' : '-'} `;\n text += '|';\n } else {\n text += ' |';\n }\n if (obj.value.common.acl?.users) {\n text += ' ';\n text += `${obj.value.common.acl.users.write ? '+' : '-'} `;\n text += `${obj.value.common.acl.users.create ? '+' : '-'} `;\n text += `${obj.value.common.acl.users.delete ? '+' : '-'} `;\n text += '|';\n } else {\n text += ' |';\n }\n if (obj.value.common.acl?.other) {\n text += ' ';\n let others = '';\n for (const [r, otherPerm] of Object.entries(obj.value.common.acl.other)) {\n others += `${r + (otherPerm ? '+' : '-')} `;\n }\n\n text += `${others.padEnd(22)}|`;\n } else {\n text += `${new Array(25).join(' ')}|`;\n }\n\n if (obj.value.common.members) {\n for (let m = 0; m < obj.value.common.members.length; m++) {\n obj.value.common.members[m] = obj.value.common.members[m].substring(\n 12,\n ) as ioBroker.ObjectIDs.User;\n }\n text += ` ${obj.value.common.members.join(', ')}`;\n }\n console.log(text);\n }\n }\n\n console.log(\n '--------------------+---------+---------+-----------+-------+------------------------+---------',\n );\n console.log('Legend: (l)ist, (r)ead, (w)rite, (c)reate, (d)elete');\n this.processExit();\n },\n );\n break;\n\n case 'h':\n case 'hosts':\n this.objects.getObjectList(\n { startkey: 'system.host.', endkey: 'system.host.\\u9999' },\n (err, objs) => {\n if (!objs) {\n this.processExit();\n return;\n }\n this.states.getKeys('system.host.*', (err, keys) => {\n if (!keys) {\n this.processExit();\n return;\n }\n this.states.getStates(keys, (err, states) => {\n if (!states) {\n this.processExit();\n return;\n }\n\n const reg = filter\n ? new RegExp(tools.pattern2RegEx(`system.host.${filter}`))\n : null;\n\n for (const obj of objs.rows) {\n if (obj.value.type !== 'host') {\n continue;\n }\n if (\n !reg ||\n reg.test(obj.value._id) ||\n (obj.value.common && reg.test(obj.value.common.name))\n ) {\n const id = obj.value._id.substring(12);\n let name = obj.value.common.name;\n if (tools.isObject(name)) {\n name = name[lang] || name.en;\n }\n\n const hostname = obj.value.common.hostname;\n\n const version = obj.value.common.installedVersion;\n let alive = '';\n let uptime = '';\n for (let k = 0; k < keys.length; k++) {\n if (keys[k] === `${obj.value._id}.alive`) {\n alive = 'alive';\n }\n if (keys[k] === `${obj.value._id}.uptime`) {\n uptime = states[k]!.val?.toString() || '-';\n }\n }\n alive = alive || 'dead';\n\n if (!uptime) {\n uptime = '-';\n }\n const text = `${id.padEnd(\n 19,\n )} ${name} (version: ${version}, hostname: ${hostname.padEnd(\n 14,\n )}, ${alive}, uptime: ${uptime})`;\n // todo\n console.log(text);\n }\n }\n\n this.processExit();\n });\n });\n },\n );\n break;\n\n case 'enums':\n case 'e':\n this.objects.getObjectList({ startkey: 'enum.', endkey: 'enum.\\u9999' }, (err, objs) => {\n if (!objs) {\n this.processExit();\n return;\n }\n const reg = filter ? new RegExp(tools.pattern2RegEx(`enum.${filter}`)) : null;\n for (const obj of objs.rows) {\n if (obj.value.type !== 'enum') {\n continue;\n }\n\n let name = obj.value.common?.name;\n if (tools.isObject(name)) {\n name = name[lang] || name.en;\n }\n\n if (!reg || reg.test(obj.value._id) || (name && reg.test(name))) {\n console.log(\n '\\n=====================================================================================',\n );\n const id = obj.value._id.substring(5);\n\n console.log(`${id.padEnd(19)}(${name})`);\n console.log(\n '-------------------------------------------------------------------------------------',\n );\n\n if (obj.value.common.members) {\n console.log(obj.value.common.members.join(', '));\n }\n }\n }\n this.processExit();\n });\n break;\n\n case 'files':\n case 'f':\n this.objects.getObjectList({ startkey: '', endkey: '\\u9999' }, (err, objs) => {\n if (!objs) {\n this.processExit();\n return;\n }\n\n const adapter = filter || null;\n const names = filter ? filter.split('/') : null;\n if (names && !names[0]) {\n names.splice(0, 1);\n }\n\n const adapters = objs.rows\n .filter(\n row =>\n row.value.type === 'meta' &&\n !(\n names &&\n adapter &&\n row.value._id !== names[0] &&\n !row.value._id.startsWith(`${names[0]}.`)\n ),\n )\n .map(row => row.value._id);\n\n if (names) {\n names.shift();\n }\n\n this.listAdaptersFiles(adapters, names ? names.join('/') : null, () => this.processExit());\n });\n break;\n }\n });\n }\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["import_js_controller_common", "fs", "err", "files", "type"]
|
|
7
7
|
}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
/// <reference types="@iobroker/types-dev" />
|
|
2
1
|
import type { Client as ObjectsRedisClient } from '@iobroker/db-objects-redis';
|
|
3
2
|
import { MHClient, type BrowseResultEntry } from './multihostClient.js';
|
|
4
3
|
interface MHParams {
|
|
@@ -16,7 +15,7 @@ export declare class Multihost {
|
|
|
16
15
|
private objects;
|
|
17
16
|
constructor(options: CLIMultihostOptions);
|
|
18
17
|
/**
|
|
19
|
-
*
|
|
18
|
+
* Retrieve config (iobroker.json content)
|
|
20
19
|
*/
|
|
21
20
|
getConfig(): ioBroker.IoBrokerJson;
|
|
22
21
|
/**
|
|
@@ -49,10 +48,8 @@ export declare class Multihost {
|
|
|
49
48
|
status(): void;
|
|
50
49
|
/**
|
|
51
50
|
* Read password from cli
|
|
52
|
-
*
|
|
53
|
-
* @param callback
|
|
54
51
|
*/
|
|
55
|
-
readPassword(
|
|
52
|
+
readPassword(): string;
|
|
56
53
|
/**
|
|
57
54
|
* Connect to given MH server
|
|
58
55
|
*
|
|
@@ -18,6 +18,10 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
18
18
|
return to;
|
|
19
19
|
};
|
|
20
20
|
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
21
25
|
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
22
26
|
mod
|
|
23
27
|
));
|
|
@@ -29,10 +33,11 @@ __export(setupMultihost_exports, {
|
|
|
29
33
|
module.exports = __toCommonJS(setupMultihost_exports);
|
|
30
34
|
var import_fs_extra = __toESM(require("fs-extra"), 1);
|
|
31
35
|
var import_node_path = __toESM(require("node:path"), 1);
|
|
36
|
+
var import_node_readline = __toESM(require("node:readline"), 1);
|
|
32
37
|
var import_js_controller_common = require("@iobroker/js-controller-common");
|
|
33
38
|
var import_js_controller_common2 = require("@iobroker/js-controller-common");
|
|
34
39
|
var import_multihostClient = require("./multihostClient.js");
|
|
35
|
-
var
|
|
40
|
+
var import_readline_sync = __toESM(require("readline-sync"), 1);
|
|
36
41
|
var import_prompt = __toESM(require("prompt"), 1);
|
|
37
42
|
class Multihost {
|
|
38
43
|
configName;
|
|
@@ -43,6 +48,9 @@ class Multihost {
|
|
|
43
48
|
this.params = options.params || {};
|
|
44
49
|
this.objects = options.objects;
|
|
45
50
|
}
|
|
51
|
+
/**
|
|
52
|
+
* Retrieve config (iobroker.json content)
|
|
53
|
+
*/
|
|
46
54
|
getConfig() {
|
|
47
55
|
let config;
|
|
48
56
|
try {
|
|
@@ -56,6 +64,11 @@ class Multihost {
|
|
|
56
64
|
}
|
|
57
65
|
return config;
|
|
58
66
|
}
|
|
67
|
+
/**
|
|
68
|
+
* Show hosts on CLI
|
|
69
|
+
*
|
|
70
|
+
* @param list list of hosts
|
|
71
|
+
*/
|
|
59
72
|
showHosts(list) {
|
|
60
73
|
if (!list || !list.length) {
|
|
61
74
|
console.info("No Multihost server found. Make sure iobroker is running on the host where you enabled multihost discovery (and it is not this host)!");
|
|
@@ -65,6 +78,9 @@ class Multihost {
|
|
|
65
78
|
}
|
|
66
79
|
}
|
|
67
80
|
}
|
|
81
|
+
/**
|
|
82
|
+
* Start MH browsing
|
|
83
|
+
*/
|
|
68
84
|
async browse() {
|
|
69
85
|
const mhClient = new import_multihostClient.MHClient();
|
|
70
86
|
try {
|
|
@@ -74,6 +90,12 @@ class Multihost {
|
|
|
74
90
|
throw new Error(`Multihost discovery client: Cannot browse: ${e.message}`);
|
|
75
91
|
}
|
|
76
92
|
}
|
|
93
|
+
/**
|
|
94
|
+
* Show MH state on CLI
|
|
95
|
+
*
|
|
96
|
+
* @param config iob config
|
|
97
|
+
* @param changed if config has changed
|
|
98
|
+
*/
|
|
77
99
|
async showMHState(config, changed) {
|
|
78
100
|
if (config.multihostService.enabled) {
|
|
79
101
|
let warningShown = false;
|
|
@@ -115,6 +137,12 @@ Change "bind 127.0.0.1" to "bind ${import_js_controller_common.tools.getListenAl
|
|
|
115
137
|
console.log(`Objects: ${config.objects.type} on ${config.objects.host}`);
|
|
116
138
|
console.log(`States: ${config.states.type} on ${config.states.host}`);
|
|
117
139
|
}
|
|
140
|
+
/**
|
|
141
|
+
* Enables or disables the multihost discovery server in the config json
|
|
142
|
+
*
|
|
143
|
+
* @param isEnable - if the server should be activated or deactivated
|
|
144
|
+
* @param callback - callback function to be executed
|
|
145
|
+
*/
|
|
118
146
|
enable(isEnable, callback) {
|
|
119
147
|
let changed = false;
|
|
120
148
|
const config = this.getConfig();
|
|
@@ -187,37 +215,28 @@ Change "bind 127.0.0.1" to "bind ${import_js_controller_common.tools.getListenAl
|
|
|
187
215
|
callback();
|
|
188
216
|
}
|
|
189
217
|
}
|
|
218
|
+
/**
|
|
219
|
+
* Show the MH status
|
|
220
|
+
*/
|
|
190
221
|
status() {
|
|
191
222
|
const config = this.getConfig();
|
|
192
223
|
config.multihostService = config.multihostService || { enabled: false, secure: true };
|
|
193
224
|
this.showMHState(config, false);
|
|
194
225
|
}
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
});
|
|
200
|
-
function hidden(query, callback2) {
|
|
201
|
-
const stdin = process.openStdin();
|
|
202
|
-
process.stdin.on("data", (_char) => {
|
|
203
|
-
const char = _char.toString();
|
|
204
|
-
switch (char) {
|
|
205
|
-
case "\n":
|
|
206
|
-
case "\r":
|
|
207
|
-
case "":
|
|
208
|
-
stdin.pause();
|
|
209
|
-
break;
|
|
210
|
-
default:
|
|
211
|
-
process.stdout.write(`\x1B[2K\x1B[200D${query}${new Array(rl.line.length + 1).join("*")}`);
|
|
212
|
-
break;
|
|
213
|
-
}
|
|
214
|
-
});
|
|
215
|
-
rl.question(query, (value) => {
|
|
216
|
-
callback2(value);
|
|
217
|
-
});
|
|
218
|
-
}
|
|
219
|
-
hidden("Enter secret phrase for connection: ", (password) => callback(password));
|
|
226
|
+
/**
|
|
227
|
+
* Read password from cli
|
|
228
|
+
*/
|
|
229
|
+
readPassword() {
|
|
230
|
+
return import_readline_sync.default.question("Enter secret phrase for connection: ", { hideEchoBack: true });
|
|
220
231
|
}
|
|
232
|
+
/**
|
|
233
|
+
* Connect to given MH server
|
|
234
|
+
*
|
|
235
|
+
* @param mhClient mhclient used for connection
|
|
236
|
+
* @param ip ip address of server
|
|
237
|
+
* @param pass password
|
|
238
|
+
* @param callback
|
|
239
|
+
*/
|
|
221
240
|
connectHelper(mhClient, ip, pass, callback) {
|
|
222
241
|
mhClient.connect(ip, pass, async (err, oObjects, oStates, ipHost) => {
|
|
223
242
|
if (err) {
|
|
@@ -246,6 +265,13 @@ Change "bind 127.0.0.1" to "bind ${import_js_controller_common.tools.getListenAl
|
|
|
246
265
|
}
|
|
247
266
|
});
|
|
248
267
|
}
|
|
268
|
+
/**
|
|
269
|
+
* Connect to MH Server
|
|
270
|
+
*
|
|
271
|
+
* @param index index of host to connect to
|
|
272
|
+
* @param pass password
|
|
273
|
+
* @param callback
|
|
274
|
+
*/
|
|
249
275
|
async connect(index, pass, callback) {
|
|
250
276
|
if (typeof pass === "function") {
|
|
251
277
|
callback = pass;
|
|
@@ -290,13 +316,12 @@ Change "bind 127.0.0.1" to "bind ${import_js_controller_common.tools.getListenAl
|
|
|
290
316
|
callback(new Error(`Invalid index: ${answer}`));
|
|
291
317
|
} else {
|
|
292
318
|
if (listEntry.auth) {
|
|
293
|
-
this.readPassword(
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
});
|
|
319
|
+
const password = this.readPassword();
|
|
320
|
+
if (password) {
|
|
321
|
+
this.connectHelper(mhClient, listEntry.ip, password, callback);
|
|
322
|
+
} else {
|
|
323
|
+
callback(new Error("No password entered!"));
|
|
324
|
+
}
|
|
300
325
|
} else {
|
|
301
326
|
this.connectHelper(mhClient, listEntry.ip, "", callback);
|
|
302
327
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/lib/setup/setupMultihost.ts"],
|
|
4
|
-
"sourcesContent": ["import fs from 'fs-extra';\nimport path from 'node:path';\nimport { tools } from '@iobroker/js-controller-common';\nimport { isLocalObjectsDbServer, isLocalStatesDbServer } from '@iobroker/js-controller-common';\nimport type { Client as ObjectsRedisClient } from '@iobroker/db-objects-redis';\nimport { MHClient, type BrowseResultEntry } from './multihostClient.js';\nimport readline from 'node:readline';\nimport prompt from 'prompt';\n\ninterface MHParams {\n secure?: boolean;\n persist?: boolean;\n debug?: boolean;\n}\n\nexport interface CLIMultihostOptions {\n objects: ObjectsRedisClient;\n params?: MHParams;\n}\n\nexport class Multihost {\n private readonly configName: string;\n private params: MHParams;\n private objects: ObjectsRedisClient;\n\n constructor(options: CLIMultihostOptions) {\n this.configName = tools.getConfigFileName();\n this.params = options.params || {};\n this.objects = options.objects;\n }\n\n /**\n * Retrive config (iobroker.json content)\n */\n getConfig(): ioBroker.IoBrokerJson {\n let config;\n // read actual configuration\n try {\n if (fs.existsSync(this.configName)) {\n config = fs.readJsonSync(this.configName);\n } else {\n config = fs.readJsonSync(\n path.join(tools.getControllerDir(), 'conf', `${tools.appName.toLowerCase()}-dist.json`),\n );\n }\n } catch {\n config = fs.readJsonSync(\n path.join(tools.getControllerDir(), 'conf', `${tools.appName.toLowerCase()}-dist.json`),\n );\n }\n return config;\n }\n\n /**\n * Show hosts on CLI\n *\n * @param list list of hosts\n */\n showHosts(list: BrowseResultEntry[]): void {\n if (!list || !list.length) {\n console.info(\n 'No Multihost server found. Make sure iobroker is running on the host where you enabled multihost discovery (and it is not this host)!',\n );\n } else {\n for (let i = 0; i < list.length; i++) {\n console.log(\n `${i + 1} | ${list[i].hostname!.padStart(20)} | ${list[i].slave ? 'slave' : ' host'} | ${list[\n i\n ].ip!.padStart(20)} | ${JSON.stringify(list[i].info)}`,\n );\n }\n }\n }\n\n /**\n * Start MH browsing\n */\n async browse(): Promise<BrowseResultEntry[]> {\n const mhClient = new MHClient();\n try {\n const res = await mhClient.browse(2_000, !!this.params.debug);\n return res;\n } catch (e) {\n throw new Error(`Multihost discovery client: Cannot browse: ${e.message}`);\n }\n }\n\n /**\n * Show MH state on CLI\n *\n * @param config iob config\n * @param changed if config has changed\n */\n private async showMHState(config: ioBroker.IoBrokerJson, changed: boolean): Promise<void> {\n if (config.multihostService.enabled) {\n let warningShown = false;\n\n const hasLocalObjectsServer = await isLocalObjectsDbServer(config.objects.type, config.objects.host, true);\n\n if (hasLocalObjectsServer) {\n console.log('Changing objects server to accept connections on all IP addresses.');\n config.objects.host = tools.getListenAllAddress();\n changed = true;\n } else if (config.objects.type === 'redis') {\n warningShown = true;\n console.log(\n `Please check the binding of redis service. By default it is only local: http://download.redis.io/redis-stable/redis.conf\\nChange \"bind 127.0.0.1\" to \"bind ${tools.getListenAllAddress()}\" or to others.`,\n );\n } else {\n warningShown = true;\n console.log(\n `Please check the binding of the configured ${config.objects.type} server to allow remote connections.`,\n );\n }\n\n const hasLocalStatesServer = await isLocalStatesDbServer(config.states.type, config.states.host, true);\n\n if (hasLocalStatesServer) {\n console.log('Changing states server to accept connections on all IP addresses.');\n config.states.host = tools.getListenAllAddress();\n changed = true;\n } else if (config.states.type === 'redis') {\n !warningShown &&\n console.log(\n `Please check the binding of redis service. By default it is only local: http://download.redis.io/redis-stable/redis.conf\\nChange \"bind 127.0.0.1\" to \"bind ${tools.getListenAllAddress()}\" or to others.`,\n );\n } else {\n !warningShown &&\n console.log(\n `Please check the binding of the configured ${config.states.type} server to allow remote connections.`,\n );\n }\n }\n if (!changed) {\n console.log('No configuration change needed.');\n } else {\n fs.writeFileSync(this.configName, JSON.stringify(config, null, 2));\n console.log('Please restart ioBroker for the changes to take effect: \"iobroker restart\"');\n }\n console.log('\\n');\n console.log(`Multihost discovery server: ${config.multihostService.enabled ? 'enabled' : 'disabled'}`);\n console.log(`Discovery authentication: ${config.multihostService.secure ? 'enabled' : 'disabled'}`);\n console.log(\n `Persistent activation: ${\n config.multihostService.enabled && config.multihostService.persist ? 'enabled' : 'disabled'\n }`,\n );\n console.log(`Objects: ${config.objects.type} on ${config.objects.host}`);\n console.log(`States: ${config.states.type} on ${config.states.host}`);\n }\n\n /**\n * Enables or disables the multihost discovery server in the config json\n *\n * @param isEnable - if the server should be activated or deactivated\n * @param callback - callback function to be executed\n */\n enable(isEnable: boolean, callback: (err?: Error) => void): void {\n let changed = false;\n const config = this.getConfig();\n config.multihostService = config.multihostService || { enabled: false, secure: true };\n\n if (isEnable && !config.multihostService.enabled) {\n changed = true;\n config.multihostService.enabled = true;\n config.multihostService.password = '';\n console.log(\n 'Multihost discovery server activated on this host. If iobroker is currently not running please start befeore trying to discover this host.',\n );\n console.log(\n 'Important: Multihost discovery works with UDP packets. Make sure they are routed correctly in your network. If you use Docker you also need to configure this correctly.',\n );\n if (!this.params.persist) {\n console.log(\n 'Multihost discovery will be automatically deactivated after 15 minutes. If you want to activate it permanently use the --persist flag',\n );\n }\n } else if (!isEnable && config.multihostService.enabled) {\n changed = true;\n config.multihostService.enabled = false;\n config.multihostService.password = '';\n console.log('Multihost discovery server deactivated on this host.');\n }\n if (this.params.secure === undefined) {\n this.params.secure = true;\n }\n\n this.params.persist = !!this.params.persist;\n\n if (\n isEnable &&\n (config.multihostService.secure !== this.params.secure ||\n (config.multihostService.secure && !config.multihostService.password) ||\n config.multihostService.persist !== this.params.persist)\n ) {\n changed = true;\n config.multihostService.secure = this.params.secure;\n config.multihostService.persist = this.params.persist;\n console.log(`Discovery authentication ${this.params.secure ? 'activated' : 'deactivated'}.`);\n if (config.multihostService.secure) {\n prompt.message = '';\n prompt.delimiter = '';\n const schema = {\n properties: {\n password: {\n description: 'Enter secret phrase for connection:',\n pattern: /^[^'\"]+$/,\n message: 'No \" are allowed',\n hidden: true,\n },\n passwordRepeat: {\n description: 'Repeat secret phrase for connection:',\n pattern: /^[^'\"]+$/,\n message: 'No \" are allowed',\n hidden: true,\n },\n },\n };\n prompt.start();\n\n prompt.get(schema, (err, password) => {\n if (password?.password) {\n if (password.password !== password.passwordRepeat) {\n callback(new Error('Secret phrases are not equal!'));\n } else {\n this.objects.getObject('system.config', (err, obj) => {\n config.multihostService.password = tools.encrypt(\n obj!.native.secret,\n password.password as string,\n );\n this.showMHState(config, changed);\n callback();\n });\n }\n } else {\n callback(new Error('No secret phrase entered!'));\n }\n });\n } else {\n this.showMHState(config, changed);\n callback();\n }\n } else {\n this.showMHState(config, changed);\n callback();\n }\n }\n\n /**\n * Show the MH status\n */\n status(): void {\n const config = this.getConfig();\n config.multihostService = config.multihostService || { enabled: false, secure: true };\n this.showMHState(config, false);\n }\n\n /**\n * Read password from cli\n *\n * @param callback\n */\n readPassword(callback: (password: string) => void): void {\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n\n function hidden(query: string, callback: (pw: string) => void): void {\n const stdin = process.openStdin();\n process.stdin.on('data', _char => {\n const char = _char.toString();\n switch (char) {\n case '\\n':\n case '\\r':\n case '\\u0004':\n stdin.pause();\n break;\n\n default:\n process.stdout.write(`\\x1B[2K\\x1B[200D${query}${new Array(rl.line.length + 1).join('*')}`);\n break;\n }\n });\n\n rl.question(query, value => {\n callback(value);\n });\n }\n\n hidden('Enter secret phrase for connection: ', password => callback(password));\n }\n\n /**\n * Connect to given MH server\n *\n * @param mhClient mhclient used for connection\n * @param ip ip address of server\n * @param pass password\n * @param callback\n */\n connectHelper(mhClient: MHClient, ip: string, pass: string, callback: (err?: Error) => void): void {\n mhClient.connect(ip, pass, async (err, oObjects, oStates, ipHost) => {\n if (err) {\n callback(new Error(`Cannot connect to \"${ip}\": ${err.message}`));\n } else if (oObjects && oStates) {\n const config = this.getConfig();\n config.objects = oObjects;\n config.states = oStates;\n\n const hasLocalObjectsServer = await isLocalObjectsDbServer(\n config.objects.type,\n config.objects.host,\n true,\n );\n const hasLocalStatesServer = await isLocalStatesDbServer(config.states.type, config.states.host, true);\n\n if (hasLocalObjectsServer || hasLocalStatesServer) {\n callback(\n new Error(\n `IP Address of the remote host is ${tools.getLocalAddress()}. Connections from this host will not be accepted. Please change the configuration of this host to accept remote connections.`,\n ),\n );\n } else {\n if (tools.isListenAllAddress(config.states.host)) {\n // TODO: why we set the remote IP only when the local config allows full connectivity?\n config.states.host = ipHost ?? '';\n }\n if (tools.isListenAllAddress(config.objects.host)) {\n // TODO: why we set the remote IP only when the local config allows full connectivity?\n config.objects.host = ipHost ?? '';\n }\n\n fs.writeFileSync(this.configName, JSON.stringify(config, null, 2));\n console.log('Config ok. Please restart ioBroker: \"iobroker restart\"');\n callback();\n }\n } else {\n callback(new Error('No configuration received!'));\n }\n });\n }\n\n /**\n * Connect to MH Server\n *\n * @param index index of host to connect to\n * @param pass password\n * @param callback\n */\n async connect(\n index: number | null,\n pass: string | null,\n callback: (err?: Error, list?: BrowseResultEntry[]) => void,\n ): Promise<void> {\n if (typeof pass === 'function') {\n callback = pass;\n pass = null;\n }\n if (typeof index === 'function') {\n callback = index;\n index = null;\n }\n\n const mhClient = new MHClient();\n let list: BrowseResultEntry[];\n\n try {\n list = await mhClient.browse(2_000, !!this.params.debug);\n } catch (e) {\n callback(new Error(`Cannot browse: ${e.message}`));\n return;\n }\n\n this.showHosts(list);\n\n if (index !== null && index !== undefined && index > 0) {\n if (list && index < list.length + 1) {\n if (!pass) {\n callback(new Error('No password defined: please use \"multihost connect <NUMBER> <PASSWORD>\"'));\n } else {\n this.connectHelper(mhClient, list[index - 1].ip!, pass, callback);\n }\n } else {\n callback(new Error(`Invalid index: ${index}`));\n }\n } else if (list && list.length) {\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n rl.question('Please select host [1]: ', answer => {\n if (answer === '' || answer === null || answer === undefined) {\n index = 1;\n }\n index = parseInt(answer, 10) - 1;\n const listEntry = list[index];\n if (!listEntry) {\n rl.close();\n callback(new Error(`Invalid index: ${answer}`));\n } else {\n if (listEntry.auth) {\n this.readPassword(password => {\n if (password) {\n this.connectHelper(mhClient, listEntry.ip!, password, callback);\n } else {\n callback(new Error('No password entered!'));\n }\n });\n } else {\n this.connectHelper(mhClient, listEntry.ip!, '', callback);\n }\n }\n });\n } else {\n callback(undefined, list);\n }\n }\n}\n"],
|
|
5
|
-
"mappings": "
|
|
6
|
-
"names": ["import_js_controller_common", "fs", "path", "prompt", "err", "
|
|
4
|
+
"sourcesContent": ["import fs from 'fs-extra';\nimport path from 'node:path';\nimport readline from 'node:readline';\nimport { tools } from '@iobroker/js-controller-common';\nimport { isLocalObjectsDbServer, isLocalStatesDbServer } from '@iobroker/js-controller-common';\nimport type { Client as ObjectsRedisClient } from '@iobroker/db-objects-redis';\nimport { MHClient, type BrowseResultEntry } from './multihostClient.js';\nimport readlineSync from 'readline-sync';\nimport prompt from 'prompt';\n\ninterface MHParams {\n secure?: boolean;\n persist?: boolean;\n debug?: boolean;\n}\n\nexport interface CLIMultihostOptions {\n objects: ObjectsRedisClient;\n params?: MHParams;\n}\n\nexport class Multihost {\n private readonly configName: string;\n private params: MHParams;\n private objects: ObjectsRedisClient;\n\n constructor(options: CLIMultihostOptions) {\n this.configName = tools.getConfigFileName();\n this.params = options.params || {};\n this.objects = options.objects;\n }\n\n /**\n * Retrieve config (iobroker.json content)\n */\n getConfig(): ioBroker.IoBrokerJson {\n let config;\n // read actual configuration\n try {\n if (fs.existsSync(this.configName)) {\n config = fs.readJsonSync(this.configName);\n } else {\n config = fs.readJsonSync(\n path.join(tools.getControllerDir(), 'conf', `${tools.appName.toLowerCase()}-dist.json`),\n );\n }\n } catch {\n config = fs.readJsonSync(\n path.join(tools.getControllerDir(), 'conf', `${tools.appName.toLowerCase()}-dist.json`),\n );\n }\n return config;\n }\n\n /**\n * Show hosts on CLI\n *\n * @param list list of hosts\n */\n showHosts(list: BrowseResultEntry[]): void {\n if (!list || !list.length) {\n console.info(\n 'No Multihost server found. Make sure iobroker is running on the host where you enabled multihost discovery (and it is not this host)!',\n );\n } else {\n for (let i = 0; i < list.length; i++) {\n console.log(\n `${i + 1} | ${list[i].hostname!.padStart(20)} | ${list[i].slave ? 'slave' : ' host'} | ${list[\n i\n ].ip!.padStart(20)} | ${JSON.stringify(list[i].info)}`,\n );\n }\n }\n }\n\n /**\n * Start MH browsing\n */\n async browse(): Promise<BrowseResultEntry[]> {\n const mhClient = new MHClient();\n try {\n const res = await mhClient.browse(2_000, !!this.params.debug);\n return res;\n } catch (e) {\n throw new Error(`Multihost discovery client: Cannot browse: ${e.message}`);\n }\n }\n\n /**\n * Show MH state on CLI\n *\n * @param config iob config\n * @param changed if config has changed\n */\n private async showMHState(config: ioBroker.IoBrokerJson, changed: boolean): Promise<void> {\n if (config.multihostService.enabled) {\n let warningShown = false;\n\n const hasLocalObjectsServer = await isLocalObjectsDbServer(config.objects.type, config.objects.host, true);\n\n if (hasLocalObjectsServer) {\n console.log('Changing objects server to accept connections on all IP addresses.');\n config.objects.host = tools.getListenAllAddress();\n changed = true;\n } else if (config.objects.type === 'redis') {\n warningShown = true;\n console.log(\n `Please check the binding of redis service. By default it is only local: http://download.redis.io/redis-stable/redis.conf\\nChange \"bind 127.0.0.1\" to \"bind ${tools.getListenAllAddress()}\" or to others.`,\n );\n } else {\n warningShown = true;\n console.log(\n `Please check the binding of the configured ${config.objects.type} server to allow remote connections.`,\n );\n }\n\n const hasLocalStatesServer = await isLocalStatesDbServer(config.states.type, config.states.host, true);\n\n if (hasLocalStatesServer) {\n console.log('Changing states server to accept connections on all IP addresses.');\n config.states.host = tools.getListenAllAddress();\n changed = true;\n } else if (config.states.type === 'redis') {\n !warningShown &&\n console.log(\n `Please check the binding of redis service. By default it is only local: http://download.redis.io/redis-stable/redis.conf\\nChange \"bind 127.0.0.1\" to \"bind ${tools.getListenAllAddress()}\" or to others.`,\n );\n } else {\n !warningShown &&\n console.log(\n `Please check the binding of the configured ${config.states.type} server to allow remote connections.`,\n );\n }\n }\n if (!changed) {\n console.log('No configuration change needed.');\n } else {\n fs.writeFileSync(this.configName, JSON.stringify(config, null, 2));\n console.log('Please restart ioBroker for the changes to take effect: \"iobroker restart\"');\n }\n console.log('\\n');\n console.log(`Multihost discovery server: ${config.multihostService.enabled ? 'enabled' : 'disabled'}`);\n console.log(`Discovery authentication: ${config.multihostService.secure ? 'enabled' : 'disabled'}`);\n console.log(\n `Persistent activation: ${\n config.multihostService.enabled && config.multihostService.persist ? 'enabled' : 'disabled'\n }`,\n );\n console.log(`Objects: ${config.objects.type} on ${config.objects.host}`);\n console.log(`States: ${config.states.type} on ${config.states.host}`);\n }\n\n /**\n * Enables or disables the multihost discovery server in the config json\n *\n * @param isEnable - if the server should be activated or deactivated\n * @param callback - callback function to be executed\n */\n enable(isEnable: boolean, callback: (err?: Error) => void): void {\n let changed = false;\n const config = this.getConfig();\n config.multihostService = config.multihostService || { enabled: false, secure: true };\n\n if (isEnable && !config.multihostService.enabled) {\n changed = true;\n config.multihostService.enabled = true;\n config.multihostService.password = '';\n console.log(\n 'Multihost discovery server activated on this host. If iobroker is currently not running please start befeore trying to discover this host.',\n );\n console.log(\n 'Important: Multihost discovery works with UDP packets. Make sure they are routed correctly in your network. If you use Docker you also need to configure this correctly.',\n );\n if (!this.params.persist) {\n console.log(\n 'Multihost discovery will be automatically deactivated after 15 minutes. If you want to activate it permanently use the --persist flag',\n );\n }\n } else if (!isEnable && config.multihostService.enabled) {\n changed = true;\n config.multihostService.enabled = false;\n config.multihostService.password = '';\n console.log('Multihost discovery server deactivated on this host.');\n }\n if (this.params.secure === undefined) {\n this.params.secure = true;\n }\n\n this.params.persist = !!this.params.persist;\n\n if (\n isEnable &&\n (config.multihostService.secure !== this.params.secure ||\n (config.multihostService.secure && !config.multihostService.password) ||\n config.multihostService.persist !== this.params.persist)\n ) {\n changed = true;\n config.multihostService.secure = this.params.secure;\n config.multihostService.persist = this.params.persist;\n console.log(`Discovery authentication ${this.params.secure ? 'activated' : 'deactivated'}.`);\n if (config.multihostService.secure) {\n prompt.message = '';\n prompt.delimiter = '';\n const schema = {\n properties: {\n password: {\n description: 'Enter secret phrase for connection:',\n pattern: /^[^'\"]+$/,\n message: 'No \" are allowed',\n hidden: true,\n },\n passwordRepeat: {\n description: 'Repeat secret phrase for connection:',\n pattern: /^[^'\"]+$/,\n message: 'No \" are allowed',\n hidden: true,\n },\n },\n };\n prompt.start();\n\n prompt.get(schema, (err, password) => {\n if (password?.password) {\n if (password.password !== password.passwordRepeat) {\n callback(new Error('Secret phrases are not equal!'));\n } else {\n this.objects.getObject('system.config', (err, obj) => {\n config.multihostService.password = tools.encrypt(\n obj!.native.secret,\n password.password as string,\n );\n this.showMHState(config, changed);\n callback();\n });\n }\n } else {\n callback(new Error('No secret phrase entered!'));\n }\n });\n } else {\n this.showMHState(config, changed);\n callback();\n }\n } else {\n this.showMHState(config, changed);\n callback();\n }\n }\n\n /**\n * Show the MH status\n */\n status(): void {\n const config = this.getConfig();\n config.multihostService = config.multihostService || { enabled: false, secure: true };\n this.showMHState(config, false);\n }\n\n /**\n * Read password from cli\n */\n readPassword(): string {\n return readlineSync.question('Enter secret phrase for connection: ', { hideEchoBack: true });\n }\n\n /**\n * Connect to given MH server\n *\n * @param mhClient mhclient used for connection\n * @param ip ip address of server\n * @param pass password\n * @param callback\n */\n connectHelper(mhClient: MHClient, ip: string, pass: string, callback: (err?: Error) => void): void {\n mhClient.connect(ip, pass, async (err, oObjects, oStates, ipHost) => {\n if (err) {\n callback(new Error(`Cannot connect to \"${ip}\": ${err.message}`));\n } else if (oObjects && oStates) {\n const config = this.getConfig();\n config.objects = oObjects;\n config.states = oStates;\n\n const hasLocalObjectsServer = await isLocalObjectsDbServer(\n config.objects.type,\n config.objects.host,\n true,\n );\n const hasLocalStatesServer = await isLocalStatesDbServer(config.states.type, config.states.host, true);\n\n if (hasLocalObjectsServer || hasLocalStatesServer) {\n callback(\n new Error(\n `IP Address of the remote host is ${tools.getLocalAddress()}. Connections from this host will not be accepted. Please change the configuration of this host to accept remote connections.`,\n ),\n );\n } else {\n if (tools.isListenAllAddress(config.states.host)) {\n // TODO: why we set the remote IP only when the local config allows full connectivity?\n config.states.host = ipHost ?? '';\n }\n if (tools.isListenAllAddress(config.objects.host)) {\n // TODO: why we set the remote IP only when the local config allows full connectivity?\n config.objects.host = ipHost ?? '';\n }\n\n fs.writeFileSync(this.configName, JSON.stringify(config, null, 2));\n console.log('Config ok. Please restart ioBroker: \"iobroker restart\"');\n callback();\n }\n } else {\n callback(new Error('No configuration received!'));\n }\n });\n }\n\n /**\n * Connect to MH Server\n *\n * @param index index of host to connect to\n * @param pass password\n * @param callback\n */\n async connect(\n index: number | null,\n pass: string | null,\n callback: (err?: Error, list?: BrowseResultEntry[]) => void,\n ): Promise<void> {\n if (typeof pass === 'function') {\n callback = pass;\n pass = null;\n }\n if (typeof index === 'function') {\n callback = index;\n index = null;\n }\n\n const mhClient = new MHClient();\n let list: BrowseResultEntry[];\n\n try {\n list = await mhClient.browse(2_000, !!this.params.debug);\n } catch (e) {\n callback(new Error(`Cannot browse: ${e.message}`));\n return;\n }\n\n this.showHosts(list);\n\n if (index !== null && index !== undefined && index > 0) {\n if (list && index < list.length + 1) {\n if (!pass) {\n callback(new Error('No password defined: please use \"multihost connect <NUMBER> <PASSWORD>\"'));\n } else {\n this.connectHelper(mhClient, list[index - 1].ip!, pass, callback);\n }\n } else {\n callback(new Error(`Invalid index: ${index}`));\n }\n } else if (list && list.length) {\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n rl.question('Please select host [1]: ', answer => {\n if (answer === '' || answer === null || answer === undefined) {\n index = 1;\n }\n index = parseInt(answer, 10) - 1;\n const listEntry = list[index];\n if (!listEntry) {\n rl.close();\n callback(new Error(`Invalid index: ${answer}`));\n } else {\n if (listEntry.auth) {\n const password = this.readPassword();\n if (password) {\n this.connectHelper(mhClient, listEntry.ip!, password, callback);\n } else {\n callback(new Error('No password entered!'));\n }\n } else {\n this.connectHelper(mhClient, listEntry.ip!, '', callback);\n }\n }\n });\n } else {\n callback(undefined, list);\n }\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["import_js_controller_common", "fs", "path", "prompt", "err", "readlineSync", "readline"]
|
|
7
7
|
}
|