@iobroker/js-controller-cli 7.2.2 → 7.2.3-alpha.1-20260621-61726ea22
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/lib/_Types.d.ts +7 -0
- package/build/cjs/lib/cli/cliCert.d.ts +5 -2
- package/build/cjs/lib/cli/cliCert.js +5 -2
- package/build/cjs/lib/cli/cliCert.js.map +2 -2
- package/build/cjs/lib/cli/cliCommand.d.ts +32 -1
- package/build/cjs/lib/cli/cliCommand.js +4 -1
- package/build/cjs/lib/cli/cliCommand.js.map +2 -2
- package/build/cjs/lib/cli/cliCompact.d.ts +4 -1
- package/build/cjs/lib/cli/cliCompact.js +4 -1
- package/build/cjs/lib/cli/cliCompact.js.map +2 -2
- package/build/cjs/lib/cli/cliDebug.d.ts +4 -1
- package/build/cjs/lib/cli/cliDebug.js +4 -1
- package/build/cjs/lib/cli/cliDebug.js.map +2 -2
- package/build/cjs/lib/cli/cliHost.d.ts +8 -5
- package/build/cjs/lib/cli/cliHost.js +8 -5
- package/build/cjs/lib/cli/cliHost.js.map +2 -2
- package/build/cjs/lib/cli/cliLogs.d.ts +4 -1
- package/build/cjs/lib/cli/cliLogs.js +4 -1
- package/build/cjs/lib/cli/cliLogs.js.map +2 -2
- package/build/cjs/lib/cli/cliMessage.d.ts +1 -0
- package/build/cjs/lib/cli/cliMessage.js.map +2 -2
- package/build/cjs/lib/cli/cliObjects.d.ts +12 -9
- package/build/cjs/lib/cli/cliObjects.js +12 -9
- package/build/cjs/lib/cli/cliObjects.js.map +2 -2
- package/build/cjs/lib/cli/cliPlugin.js.map +1 -1
- package/build/cjs/lib/cli/cliProcess.d.ts +4 -0
- package/build/cjs/lib/cli/cliProcess.js +3 -0
- package/build/cjs/lib/cli/cliProcess.js.map +2 -2
- package/build/cjs/lib/cli/cliStates.d.ts +3 -0
- package/build/cjs/lib/cli/cliStates.js +3 -0
- package/build/cjs/lib/cli/cliStates.js.map +2 -2
- package/build/cjs/lib/setup/customError.d.ts +4 -0
- package/build/cjs/lib/setup/customError.js +3 -0
- package/build/cjs/lib/setup/customError.js.map +2 -2
- package/build/cjs/lib/setup/formatters.d.ts +4 -4
- package/build/cjs/lib/setup/formatters.js.map +1 -1
- package/build/cjs/lib/setup/pluginInfos.d.ts +5 -0
- package/build/cjs/lib/setup/pluginInfos.js.map +2 -2
- package/build/cjs/lib/setup/setupBackup.d.ts +34 -0
- package/build/cjs/lib/setup/setupBackup.js +22 -0
- package/build/cjs/lib/setup/setupBackup.js.map +2 -2
- package/build/cjs/lib/setup/setupInstall.d.ts +37 -14
- package/build/cjs/lib/setup/setupInstall.js +28 -14
- package/build/cjs/lib/setup/setupInstall.js.map +2 -2
- package/build/cjs/lib/setup/setupLicense.d.ts +8 -0
- package/build/cjs/lib/setup/setupLicense.js +3 -0
- package/build/cjs/lib/setup/setupLicense.js.map +2 -2
- package/build/cjs/lib/setup/setupList.d.ts +54 -0
- package/build/cjs/lib/setup/setupList.js +51 -0
- package/build/cjs/lib/setup/setupList.js.map +2 -2
- package/build/cjs/lib/setup/setupPacketManager.d.ts +10 -0
- package/build/cjs/lib/setup/setupPacketManager.js +6 -0
- package/build/cjs/lib/setup/setupPacketManager.js.map +2 -2
- package/build/cjs/lib/setup/setupRepo.d.ts +6 -0
- package/build/cjs/lib/setup/setupRepo.js +3 -0
- package/build/cjs/lib/setup/setupRepo.js.map +2 -2
- package/build/cjs/lib/setup/setupSetup.d.ts +27 -0
- package/build/cjs/lib/setup/setupSetup.js +18 -0
- package/build/cjs/lib/setup/setupSetup.js.map +2 -2
- package/build/cjs/lib/setup/setupUpgrade.d.ts +6 -0
- package/build/cjs/lib/setup/setupUpgrade.js +3 -0
- package/build/cjs/lib/setup/setupUpgrade.js.map +2 -2
- package/build/cjs/lib/setup/setupUpload.d.ts +71 -0
- package/build/cjs/lib/setup/setupUpload.js +65 -1
- package/build/cjs/lib/setup/setupUpload.js.map +2 -2
- package/build/cjs/lib/setup/setupUsers.d.ts +23 -14
- package/build/cjs/lib/setup/setupUsers.js +17 -14
- package/build/cjs/lib/setup/setupUsers.js.map +2 -2
- package/build/cjs/lib/setup/setupVendor.d.ts +9 -1
- package/build/cjs/lib/setup/setupVendor.js +4 -1
- package/build/cjs/lib/setup/setupVendor.js.map +2 -2
- package/build/cjs/lib/setup/setupVisDebug.d.ts +9 -0
- package/build/cjs/lib/setup/setupVisDebug.js +3 -0
- package/build/cjs/lib/setup/setupVisDebug.js.map +2 -2
- package/build/esm/lib/_Types.d.ts +7 -0
- package/build/esm/lib/_Types.d.ts.map +1 -1
- package/build/esm/lib/cli/cliCert.d.ts +5 -2
- package/build/esm/lib/cli/cliCert.d.ts.map +1 -1
- package/build/esm/lib/cli/cliCert.js +5 -2
- package/build/esm/lib/cli/cliCert.js.map +1 -1
- package/build/esm/lib/cli/cliCommand.d.ts +32 -1
- package/build/esm/lib/cli/cliCommand.d.ts.map +1 -1
- package/build/esm/lib/cli/cliCommand.js +4 -1
- package/build/esm/lib/cli/cliCommand.js.map +1 -1
- package/build/esm/lib/cli/cliCompact.d.ts +4 -1
- package/build/esm/lib/cli/cliCompact.d.ts.map +1 -1
- package/build/esm/lib/cli/cliCompact.js +4 -1
- package/build/esm/lib/cli/cliCompact.js.map +1 -1
- package/build/esm/lib/cli/cliDebug.d.ts +4 -1
- package/build/esm/lib/cli/cliDebug.d.ts.map +1 -1
- package/build/esm/lib/cli/cliDebug.js +4 -1
- package/build/esm/lib/cli/cliDebug.js.map +1 -1
- package/build/esm/lib/cli/cliHost.d.ts +8 -5
- package/build/esm/lib/cli/cliHost.d.ts.map +1 -1
- package/build/esm/lib/cli/cliHost.js +8 -5
- package/build/esm/lib/cli/cliHost.js.map +1 -1
- package/build/esm/lib/cli/cliLogs.d.ts +4 -1
- package/build/esm/lib/cli/cliLogs.d.ts.map +1 -1
- package/build/esm/lib/cli/cliLogs.js +4 -1
- package/build/esm/lib/cli/cliLogs.js.map +1 -1
- package/build/esm/lib/cli/cliMessage.d.ts +1 -0
- package/build/esm/lib/cli/cliMessage.d.ts.map +1 -1
- package/build/esm/lib/cli/cliMessage.js +1 -0
- package/build/esm/lib/cli/cliMessage.js.map +1 -1
- package/build/esm/lib/cli/cliObjects.d.ts +12 -9
- package/build/esm/lib/cli/cliObjects.d.ts.map +1 -1
- package/build/esm/lib/cli/cliObjects.js +17 -14
- package/build/esm/lib/cli/cliObjects.js.map +1 -1
- package/build/esm/lib/cli/cliPlugin.js +1 -1
- package/build/esm/lib/cli/cliProcess.d.ts +4 -0
- package/build/esm/lib/cli/cliProcess.d.ts.map +1 -1
- package/build/esm/lib/cli/cliProcess.js +5 -1
- package/build/esm/lib/cli/cliProcess.js.map +1 -1
- package/build/esm/lib/cli/cliStates.d.ts +3 -0
- package/build/esm/lib/cli/cliStates.d.ts.map +1 -1
- package/build/esm/lib/cli/cliStates.js +3 -0
- package/build/esm/lib/cli/cliStates.js.map +1 -1
- package/build/esm/lib/setup/customError.d.ts +4 -0
- package/build/esm/lib/setup/customError.d.ts.map +1 -1
- package/build/esm/lib/setup/customError.js +3 -0
- package/build/esm/lib/setup/customError.js.map +1 -1
- package/build/esm/lib/setup/formatters.d.ts +4 -4
- package/build/esm/lib/setup/formatters.js +4 -4
- package/build/esm/lib/setup/pluginInfos.d.ts +5 -0
- package/build/esm/lib/setup/pluginInfos.d.ts.map +1 -1
- package/build/esm/lib/setup/pluginInfos.js +5 -0
- package/build/esm/lib/setup/pluginInfos.js.map +1 -1
- package/build/esm/lib/setup/setupBackup.d.ts +34 -0
- package/build/esm/lib/setup/setupBackup.d.ts.map +1 -1
- package/build/esm/lib/setup/setupBackup.js +25 -0
- package/build/esm/lib/setup/setupBackup.js.map +1 -1
- package/build/esm/lib/setup/setupInstall.d.ts +37 -14
- package/build/esm/lib/setup/setupInstall.d.ts.map +1 -1
- package/build/esm/lib/setup/setupInstall.js +31 -14
- package/build/esm/lib/setup/setupInstall.js.map +1 -1
- package/build/esm/lib/setup/setupLicense.d.ts +8 -0
- package/build/esm/lib/setup/setupLicense.d.ts.map +1 -1
- package/build/esm/lib/setup/setupLicense.js +6 -0
- package/build/esm/lib/setup/setupLicense.js.map +1 -1
- package/build/esm/lib/setup/setupList.d.ts +54 -0
- package/build/esm/lib/setup/setupList.d.ts.map +1 -1
- package/build/esm/lib/setup/setupList.js +54 -0
- package/build/esm/lib/setup/setupList.js.map +1 -1
- package/build/esm/lib/setup/setupPacketManager.d.ts +10 -0
- package/build/esm/lib/setup/setupPacketManager.d.ts.map +1 -1
- package/build/esm/lib/setup/setupPacketManager.js +9 -0
- package/build/esm/lib/setup/setupPacketManager.js.map +1 -1
- package/build/esm/lib/setup/setupRepo.d.ts +6 -0
- package/build/esm/lib/setup/setupRepo.d.ts.map +1 -1
- package/build/esm/lib/setup/setupRepo.js +6 -0
- package/build/esm/lib/setup/setupRepo.js.map +1 -1
- package/build/esm/lib/setup/setupSetup.d.ts +27 -0
- package/build/esm/lib/setup/setupSetup.d.ts.map +1 -1
- package/build/esm/lib/setup/setupSetup.js +21 -0
- package/build/esm/lib/setup/setupSetup.js.map +1 -1
- package/build/esm/lib/setup/setupUpgrade.d.ts +6 -0
- package/build/esm/lib/setup/setupUpgrade.d.ts.map +1 -1
- package/build/esm/lib/setup/setupUpgrade.js +6 -0
- package/build/esm/lib/setup/setupUpgrade.js.map +1 -1
- package/build/esm/lib/setup/setupUpload.d.ts +71 -0
- package/build/esm/lib/setup/setupUpload.d.ts.map +1 -1
- package/build/esm/lib/setup/setupUpload.js +68 -1
- package/build/esm/lib/setup/setupUpload.js.map +1 -1
- package/build/esm/lib/setup/setupUsers.d.ts +23 -14
- package/build/esm/lib/setup/setupUsers.d.ts.map +1 -1
- package/build/esm/lib/setup/setupUsers.js +20 -14
- package/build/esm/lib/setup/setupUsers.js.map +1 -1
- package/build/esm/lib/setup/setupVendor.d.ts +9 -1
- package/build/esm/lib/setup/setupVendor.d.ts.map +1 -1
- package/build/esm/lib/setup/setupVendor.js +7 -1
- package/build/esm/lib/setup/setupVendor.js.map +1 -1
- package/build/esm/lib/setup/setupVisDebug.d.ts +9 -0
- package/build/esm/lib/setup/setupVisDebug.d.ts.map +1 -1
- package/build/esm/lib/setup/setupVisDebug.js +6 -0
- package/build/esm/lib/setup/setupVisDebug.js.map +1 -1
- package/build/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +4 -4
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/lib/setup/setupLicense.ts"],
|
|
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": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA;;;;;AAAA,kCAAsB;AACtB,sBAAe;AACf,0BAAgB;
|
|
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\n/** Options for the license command */\nexport interface CLILicenseOptions {\n /** The objects database client */\n objects: ObjectsRedisClient;\n}\n\n/**\n * CLI command to read and apply ioBroker licenses\n */\nexport class License {\n private readonly objects: ObjectsRedisClient;\n\n /**\n * @param options The objects database client\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": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA;;;;;AAAA,kCAAsB;AACtB,sBAAe;AACf,0BAAgB;AAWV,MAAO,QAAO;EACC;;;;EAKjB,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
|
}
|
|
@@ -27,21 +27,75 @@ interface CLIListOptions {
|
|
|
27
27
|
processExit: (exitCode?: number) => void;
|
|
28
28
|
}
|
|
29
29
|
export type ListType = 'objects' | 'o' | 'states' | 's' | 'adapters' | 'a' | 'instances' | 'i' | 'users' | 'u' | 'groups' | 'g' | 'hosts' | 'h' | 'enums' | 'e' | 'files' | 'f';
|
|
30
|
+
/**
|
|
31
|
+
* CLI command to list adapters, instances, objects and files
|
|
32
|
+
*/
|
|
30
33
|
export declare class List {
|
|
31
34
|
private config;
|
|
32
35
|
private objects;
|
|
33
36
|
private states;
|
|
34
37
|
private readonly processExit;
|
|
38
|
+
/**
|
|
39
|
+
* @param options The objects/states clients, config and process-exit callback
|
|
40
|
+
*/
|
|
35
41
|
constructor(options: CLIListOptions);
|
|
36
42
|
private static _perm2str;
|
|
43
|
+
/**
|
|
44
|
+
* Print the table header for a file listing
|
|
45
|
+
*
|
|
46
|
+
* @param adapter Optional adapter name printed above the header
|
|
47
|
+
*/
|
|
37
48
|
showFileHeader(adapter?: string): void;
|
|
49
|
+
/**
|
|
50
|
+
* Print a single file as a table row
|
|
51
|
+
*
|
|
52
|
+
* @param adapter The adapter the file belongs to
|
|
53
|
+
* @param path The directory path of the file
|
|
54
|
+
* @param file The file entry to print
|
|
55
|
+
*/
|
|
38
56
|
showFile(adapter: string, path: string, file: ioBroker.ReadDirResult): void;
|
|
57
|
+
/**
|
|
58
|
+
* Print the table header for an object listing
|
|
59
|
+
*/
|
|
39
60
|
showObjectHeader(): void;
|
|
61
|
+
/**
|
|
62
|
+
* Print a single object as a table row
|
|
63
|
+
*
|
|
64
|
+
* @param obj The object to print
|
|
65
|
+
*/
|
|
40
66
|
showObject(obj: ioBroker.AnyObject): void;
|
|
67
|
+
/**
|
|
68
|
+
* Recursively list the files in a directory of an adapter
|
|
69
|
+
*
|
|
70
|
+
* @param adapter The adapter the files belong to
|
|
71
|
+
* @param path The directory path to list
|
|
72
|
+
* @param allFiles Accumulator of files collected so far, or the callback
|
|
73
|
+
* @param callback Called with all collected files
|
|
74
|
+
*/
|
|
41
75
|
listDirectory(adapter: string, path: string | null | undefined, allFiles?: File[] | ((allFiles: File[]) => void), callback?: (allFiles: File[]) => void): void;
|
|
76
|
+
/**
|
|
77
|
+
* Comparator that sorts two file entries by their full path
|
|
78
|
+
*
|
|
79
|
+
* @param a The first file entry
|
|
80
|
+
* @param b The second file entry
|
|
81
|
+
*/
|
|
42
82
|
sortFiles(a: File, b: File): number;
|
|
83
|
+
/**
|
|
84
|
+
* List the files of the given adapters
|
|
85
|
+
*
|
|
86
|
+
* @param adapters The adapters whose files should be listed
|
|
87
|
+
* @param filter Optional name filter, or the callback
|
|
88
|
+
* @param callback Called once all files have been listed
|
|
89
|
+
*/
|
|
43
90
|
listAdaptersFiles(adapters: string[], filter?: null | string, callback?: () => void): void | Promise<void>;
|
|
44
91
|
private _readOnlineState;
|
|
92
|
+
/**
|
|
93
|
+
* List items of the given type matching the filter
|
|
94
|
+
*
|
|
95
|
+
* @param type The kind of items to list (e.g. adapters, instances, objects)
|
|
96
|
+
* @param filter A filter applied to the listed items
|
|
97
|
+
* @param flags Additional flags controlling the output
|
|
98
|
+
*/
|
|
45
99
|
list(type: ListType, filter: string, flags: FlagObject): void;
|
|
46
100
|
}
|
|
47
101
|
export {};
|
|
@@ -39,6 +39,9 @@ class List {
|
|
|
39
39
|
objects;
|
|
40
40
|
states;
|
|
41
41
|
processExit;
|
|
42
|
+
/**
|
|
43
|
+
* @param options The objects/states clients, config and process-exit callback
|
|
44
|
+
*/
|
|
42
45
|
constructor(options) {
|
|
43
46
|
options = options || {};
|
|
44
47
|
if (!options.states) {
|
|
@@ -68,6 +71,11 @@ class List {
|
|
|
68
71
|
result += perm & 1 ? "x" : "-";
|
|
69
72
|
return result;
|
|
70
73
|
}
|
|
74
|
+
/**
|
|
75
|
+
* Print the table header for a file listing
|
|
76
|
+
*
|
|
77
|
+
* @param adapter Optional adapter name printed above the header
|
|
78
|
+
*/
|
|
71
79
|
showFileHeader(adapter) {
|
|
72
80
|
if (adapter) {
|
|
73
81
|
console.log(`
|
|
@@ -76,6 +84,13 @@ class List {
|
|
|
76
84
|
console.log(" Modified at |Permission| User | Group | Size | Name");
|
|
77
85
|
console.log("----------------+----------+--------------+--------------+------+---------");
|
|
78
86
|
}
|
|
87
|
+
/**
|
|
88
|
+
* Print a single file as a table row
|
|
89
|
+
*
|
|
90
|
+
* @param adapter The adapter the file belongs to
|
|
91
|
+
* @param path The directory path of the file
|
|
92
|
+
* @param file The file entry to print
|
|
93
|
+
*/
|
|
79
94
|
showFile(adapter, path, file) {
|
|
80
95
|
let text = "";
|
|
81
96
|
let time = "";
|
|
@@ -106,10 +121,18 @@ class List {
|
|
|
106
121
|
console.log(text);
|
|
107
122
|
}
|
|
108
123
|
}
|
|
124
|
+
/**
|
|
125
|
+
* Print the table header for an object listing
|
|
126
|
+
*/
|
|
109
127
|
showObjectHeader() {
|
|
110
128
|
console.log("ObjectAC | StateAC | User | Group | ID");
|
|
111
129
|
console.log("---------+---------+--------------+--------------+--------------");
|
|
112
130
|
}
|
|
131
|
+
/**
|
|
132
|
+
* Print a single object as a table row
|
|
133
|
+
*
|
|
134
|
+
* @param obj The object to print
|
|
135
|
+
*/
|
|
113
136
|
showObject(obj) {
|
|
114
137
|
let text = "";
|
|
115
138
|
if (obj.acl) {
|
|
@@ -126,6 +149,14 @@ class List {
|
|
|
126
149
|
text += ` ${obj._id}`;
|
|
127
150
|
console.log(text);
|
|
128
151
|
}
|
|
152
|
+
/**
|
|
153
|
+
* Recursively list the files in a directory of an adapter
|
|
154
|
+
*
|
|
155
|
+
* @param adapter The adapter the files belong to
|
|
156
|
+
* @param path The directory path to list
|
|
157
|
+
* @param allFiles Accumulator of files collected so far, or the callback
|
|
158
|
+
* @param callback Called with all collected files
|
|
159
|
+
*/
|
|
129
160
|
listDirectory(adapter, path, allFiles, callback) {
|
|
130
161
|
if (typeof path === "function") {
|
|
131
162
|
callback = path;
|
|
@@ -186,6 +217,12 @@ class List {
|
|
|
186
217
|
}
|
|
187
218
|
});
|
|
188
219
|
}
|
|
220
|
+
/**
|
|
221
|
+
* Comparator that sorts two file entries by their full path
|
|
222
|
+
*
|
|
223
|
+
* @param a The first file entry
|
|
224
|
+
* @param b The second file entry
|
|
225
|
+
*/
|
|
189
226
|
sortFiles(a, b) {
|
|
190
227
|
let a1 = a.path + a.file.file;
|
|
191
228
|
if (a1[0] !== "/") {
|
|
@@ -197,6 +234,13 @@ class List {
|
|
|
197
234
|
}
|
|
198
235
|
return a1.localeCompare(b1);
|
|
199
236
|
}
|
|
237
|
+
/**
|
|
238
|
+
* List the files of the given adapters
|
|
239
|
+
*
|
|
240
|
+
* @param adapters The adapters whose files should be listed
|
|
241
|
+
* @param filter Optional name filter, or the callback
|
|
242
|
+
* @param callback Called once all files have been listed
|
|
243
|
+
*/
|
|
200
244
|
listAdaptersFiles(adapters, filter, callback) {
|
|
201
245
|
if (typeof filter === "function") {
|
|
202
246
|
callback = filter;
|
|
@@ -237,6 +281,13 @@ class List {
|
|
|
237
281
|
});
|
|
238
282
|
}
|
|
239
283
|
}
|
|
284
|
+
/**
|
|
285
|
+
* List items of the given type matching the filter
|
|
286
|
+
*
|
|
287
|
+
* @param type The kind of items to list (e.g. adapters, instances, objects)
|
|
288
|
+
* @param filter A filter applied to the listed items
|
|
289
|
+
* @param flags Additional flags controlling the output
|
|
290
|
+
*/
|
|
240
291
|
list(type, filter, flags) {
|
|
241
292
|
this.objects.getObject("system.config", (err, systemConf) => {
|
|
242
293
|
const lang = systemConf?.common?.language || "en";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/lib/setup/setupList.ts"],
|
|
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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",
|
|
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\n/**\n * CLI command to list adapters, instances, objects and files\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 /**\n * @param options The objects/states clients, config and process-exit callback\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 /**\n * Print the table header for a file listing\n *\n * @param adapter Optional adapter name printed above the header\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 /**\n * Print a single file as a table row\n *\n * @param adapter The adapter the file belongs to\n * @param path The directory path of the file\n * @param file The file entry to print\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 /**\n * Print the table header for an object listing\n */\n showObjectHeader(): void {\n console.log('ObjectAC | StateAC | User | Group | ID');\n console.log('---------+---------+--------------+--------------+--------------');\n }\n\n /**\n * Print a single object as a table row\n *\n * @param obj The object to print\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 /**\n * Recursively list the files in a directory of an adapter\n *\n * @param adapter The adapter the files belong to\n * @param path The directory path to list\n * @param allFiles Accumulator of files collected so far, or the callback\n * @param callback Called with all collected files\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 /**\n * Comparator that sorts two file entries by their full path\n *\n * @param a The first file entry\n * @param b The second file entry\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 /**\n * List the files of the given adapters\n *\n * @param adapters The adapters whose files should be listed\n * @param filter Optional name filter, or the callback\n * @param callback Called once all files have been listed\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 /**\n * List items of the given type matching the filter\n *\n * @param type The kind of items to list (e.g. adapters, instances, objects)\n * @param filter A filter applied to the listed items\n * @param flags Additional flags controlling the output\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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",
|
|
6
6
|
"names": ["import_js_controller_common", "fs", "err", "files", "type"]
|
|
7
7
|
}
|
|
@@ -16,12 +16,16 @@ interface PacketManagerOptions {
|
|
|
16
16
|
manager?: Manager;
|
|
17
17
|
logger?: Logger;
|
|
18
18
|
}
|
|
19
|
+
/** Describes a system packet that should be upgraded */
|
|
19
20
|
export interface UpgradePacket {
|
|
20
21
|
/** Name of the packet which should be upgraded */
|
|
21
22
|
name: string;
|
|
22
23
|
/** Optional version */
|
|
23
24
|
version?: string;
|
|
24
25
|
}
|
|
26
|
+
/**
|
|
27
|
+
* Wrapper around the system packet manager (apt or yum) to query and upgrade system packages
|
|
28
|
+
*/
|
|
25
29
|
export declare class PacketManager {
|
|
26
30
|
private manager;
|
|
27
31
|
private readonly logger;
|
|
@@ -29,9 +33,15 @@ export declare class PacketManager {
|
|
|
29
33
|
private sudo;
|
|
30
34
|
private readonly _readyPromise;
|
|
31
35
|
private readonly COMMANDS;
|
|
36
|
+
/**
|
|
37
|
+
* @param options The packet manager to use, a logger and the log level
|
|
38
|
+
*/
|
|
32
39
|
constructor(options?: PacketManagerOptions);
|
|
33
40
|
/** Starts the initialization process */
|
|
34
41
|
private _init;
|
|
42
|
+
/**
|
|
43
|
+
* Resolve once the packet manager has finished its asynchronous initialization
|
|
44
|
+
*/
|
|
35
45
|
ready(): Promise<void>;
|
|
36
46
|
/**
|
|
37
47
|
* Tests if the given command can be executed
|
|
@@ -43,6 +43,9 @@ class PacketManager {
|
|
|
43
43
|
yum: "check-update"
|
|
44
44
|
}
|
|
45
45
|
};
|
|
46
|
+
/**
|
|
47
|
+
* @param options The packet manager to use, a logger and the log level
|
|
48
|
+
*/
|
|
46
49
|
constructor(options = { logLevel: LOG_LEVELS.info }) {
|
|
47
50
|
this.manager = options?.manager || "";
|
|
48
51
|
this.logger = options?.logger || {
|
|
@@ -71,6 +74,9 @@ class PacketManager {
|
|
|
71
74
|
this.logger.debug(`Detected dpkg: ${this.dpkg}`);
|
|
72
75
|
}
|
|
73
76
|
}
|
|
77
|
+
/**
|
|
78
|
+
* Resolve once the packet manager has finished its asynchronous initialization
|
|
79
|
+
*/
|
|
74
80
|
ready() {
|
|
75
81
|
return this._readyPromise;
|
|
76
82
|
}
|