@opentdf/ctl 0.1.0-beta.1718 → 0.2.0-beta.1941
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/src/cli.js +233 -175
- package/package.json +15 -12
- package/dist/src/polyfills.js +0 -6
package/README.md
CHANGED
|
@@ -14,14 +14,14 @@ Sample round trip execution:
|
|
|
14
14
|
echo hello-world >sample.txt
|
|
15
15
|
bin/opentdf.mjs encrypt \
|
|
16
16
|
--kasEndpoint http://localhost:65432/api/kas \
|
|
17
|
-
--oidcEndpoint http://localhost:65432/auth/realms/
|
|
17
|
+
--oidcEndpoint http://localhost:65432/auth/realms/opentdf \
|
|
18
18
|
--auth tdf-client:123-456 \
|
|
19
19
|
--containerType tdf3 \
|
|
20
20
|
--output sample.tdf \
|
|
21
21
|
sample.txt
|
|
22
22
|
bin/opentdf.mjs \
|
|
23
23
|
--kasEndpoint http://localhost:65432/api/kas \
|
|
24
|
-
--oidcEndpoint http://localhost:65432/auth/realms/
|
|
24
|
+
--oidcEndpoint http://localhost:65432/auth/realms/opentdf \
|
|
25
25
|
--auth tdf-client:123-456 \
|
|
26
26
|
--containerType tdf3 \
|
|
27
27
|
--userId alice@somewhere.there \
|
package/dist/src/cli.js
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import './polyfills.js';
|
|
2
1
|
import { createWriteStream, openAsBlob } from 'node:fs';
|
|
3
|
-
import {
|
|
2
|
+
import { stat } from 'node:fs/promises';
|
|
4
3
|
import { Writable } from 'node:stream';
|
|
5
4
|
import yargs from 'yargs';
|
|
6
5
|
import { hideBin } from 'yargs/helpers';
|
|
7
|
-
import { AuthProviders,
|
|
6
|
+
import { AuthProviders, version, tdfSpecVersion, OpenTDF, } from '@opentdf/sdk';
|
|
8
7
|
import { CLIError, log } from './logger.js';
|
|
9
8
|
import * as assertions from '@opentdf/sdk/assertions';
|
|
10
9
|
import { attributeFQNsAsValues } from '@opentdf/sdk/nano';
|
|
11
10
|
import { base64 } from '@opentdf/sdk/encodings';
|
|
11
|
+
import { importPKCS8, importSPKI } from 'jose'; // for RS256
|
|
12
12
|
const bindingTypes = ['ecdsa', 'gmac'];
|
|
13
13
|
const containerTypes = ['tdf3', 'nano', 'dataset', 'ztdf'];
|
|
14
14
|
const parseJwt = (jwt, field = 1) => {
|
|
@@ -65,31 +65,112 @@ const rstrip = (str, suffix = ' ') => {
|
|
|
65
65
|
}
|
|
66
66
|
return str;
|
|
67
67
|
};
|
|
68
|
-
function
|
|
69
|
-
|
|
70
|
-
|
|
68
|
+
async function parseAssertionVerificationKeys(s) {
|
|
69
|
+
let u;
|
|
70
|
+
try {
|
|
71
|
+
u = JSON.parse(s);
|
|
72
|
+
}
|
|
73
|
+
catch (err) {
|
|
74
|
+
// try as file name:
|
|
75
|
+
try {
|
|
76
|
+
const jsonFile = await openAsBlob(s);
|
|
77
|
+
u = JSON.parse(await jsonFile.text());
|
|
78
|
+
}
|
|
79
|
+
catch (err2) {
|
|
80
|
+
throw new CLIError('CRITICAL', `Failed to open/parse assertion verification keys as string or file path ${err.message}`, err2);
|
|
81
|
+
}
|
|
71
82
|
}
|
|
72
|
-
if (
|
|
73
|
-
|
|
83
|
+
if (typeof u !== 'object' || u === null) {
|
|
84
|
+
throw new Error('Invalid input: The input must be an object');
|
|
74
85
|
}
|
|
75
|
-
|
|
86
|
+
// handle both cases of "keys"
|
|
87
|
+
if (!('Keys' in u && typeof u.Keys === 'object')) {
|
|
88
|
+
if ('keys' in u && typeof u.keys === 'object') {
|
|
89
|
+
u.Keys = u.keys;
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
throw new CLIError('CRITICAL', 'Invalid input: invalid structure of assertionVerificationKeys');
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
for (const assertionName in u.Keys) {
|
|
96
|
+
const assertionKey = u.Keys[assertionName];
|
|
97
|
+
// Ensure each entry has the required 'key' and 'alg' fields
|
|
98
|
+
if (typeof assertionKey !== 'object' || assertionKey === null) {
|
|
99
|
+
throw new CLIError('CRITICAL', `Invalid assertion for ${assertionName}: Must be an object`);
|
|
100
|
+
}
|
|
101
|
+
if (typeof assertionKey.key !== 'string' || typeof assertionKey.alg !== 'string') {
|
|
102
|
+
throw new CLIError('CRITICAL', `Invalid assertion for ${assertionName}: Missing or invalid 'key' or 'alg'`);
|
|
103
|
+
}
|
|
104
|
+
try {
|
|
105
|
+
u.Keys[assertionName].key = await correctAssertionKeys(assertionKey.alg, assertionKey.key);
|
|
106
|
+
}
|
|
107
|
+
catch (err) {
|
|
108
|
+
throw new CLIError('CRITICAL', `Issue converting assertion key from string: ${err.message}`);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
return u;
|
|
76
112
|
}
|
|
77
|
-
async function
|
|
78
|
-
const
|
|
113
|
+
async function parseReadOptions(argv) {
|
|
114
|
+
const r = { source: await fileAsSource(argv.file) };
|
|
79
115
|
if (argv.noVerifyAssertions) {
|
|
80
|
-
|
|
116
|
+
r.noVerify = true;
|
|
117
|
+
}
|
|
118
|
+
if (argv.assertionVerificationKeys) {
|
|
119
|
+
r.assertionVerificationKeys = await parseAssertionVerificationKeys(argv.assertionVerificationKeys);
|
|
81
120
|
}
|
|
82
121
|
if (argv.concurrencyLimit) {
|
|
83
|
-
|
|
122
|
+
r.concurrencyLimit = argv.concurrencyLimit;
|
|
84
123
|
}
|
|
85
124
|
else {
|
|
86
|
-
|
|
125
|
+
r.concurrencyLimit = 100;
|
|
87
126
|
}
|
|
88
|
-
|
|
89
|
-
return c.build();
|
|
127
|
+
return r;
|
|
90
128
|
}
|
|
91
|
-
function
|
|
92
|
-
|
|
129
|
+
async function correctAssertionKeys(alg, key) {
|
|
130
|
+
if (alg === 'HS256') {
|
|
131
|
+
// Convert key string to Uint8Array
|
|
132
|
+
if (typeof key !== 'string') {
|
|
133
|
+
throw new CLIError('CRITICAL', 'HS256 key must be a string');
|
|
134
|
+
}
|
|
135
|
+
return new TextEncoder().encode(key); // Update array element directly
|
|
136
|
+
}
|
|
137
|
+
else if (alg === 'RS256') {
|
|
138
|
+
// Convert PEM string to a KeyLike object
|
|
139
|
+
if (typeof key !== 'string') {
|
|
140
|
+
throw new CLIError('CRITICAL', 'RS256 key must be a PEM string');
|
|
141
|
+
}
|
|
142
|
+
try {
|
|
143
|
+
return await importPKCS8(key, 'RS256'); // Import private key
|
|
144
|
+
}
|
|
145
|
+
catch (err) {
|
|
146
|
+
// If importing as a private key fails, try importing as a public key
|
|
147
|
+
log('SILLY', `Failed to import RS256 key as private key: ${err.message}`);
|
|
148
|
+
try {
|
|
149
|
+
return await importSPKI(key, 'RS256'); // Import public key
|
|
150
|
+
}
|
|
151
|
+
catch (err) {
|
|
152
|
+
throw new CLIError('CRITICAL', `Issue converting RS256 key: ${err.message}`, err);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
// Otherwise its an unsupported alg
|
|
157
|
+
throw new CLIError('CRITICAL', `Unsupported signing key algorithm: ${alg}`); // Handle unsupported algs
|
|
158
|
+
}
|
|
159
|
+
async function parseAssertionConfig(s) {
|
|
160
|
+
let u;
|
|
161
|
+
try {
|
|
162
|
+
u = JSON.parse(s);
|
|
163
|
+
}
|
|
164
|
+
catch (err) {
|
|
165
|
+
// try as file name:
|
|
166
|
+
try {
|
|
167
|
+
const jsonFile = await openAsBlob(s);
|
|
168
|
+
u = JSON.parse(await jsonFile.text());
|
|
169
|
+
}
|
|
170
|
+
catch (err2) {
|
|
171
|
+
throw new CLIError('CRITICAL', `Failed to open/parse assertions as string or file path ${err.message} [${err2}]`, err);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
93
174
|
// if u is null or empty, return an empty array
|
|
94
175
|
if (!u) {
|
|
95
176
|
return [];
|
|
@@ -99,34 +180,56 @@ function parseAssertionConfig(s) {
|
|
|
99
180
|
if (!assertions.isAssertionConfig(assertion)) {
|
|
100
181
|
throw new CLIError('CRITICAL', `invalid assertion config ${JSON.stringify(assertion)}`);
|
|
101
182
|
}
|
|
183
|
+
if (assertion.signingKey) {
|
|
184
|
+
const { alg, key } = assertion.signingKey;
|
|
185
|
+
try {
|
|
186
|
+
assertion.signingKey.key = await correctAssertionKeys(alg, key);
|
|
187
|
+
}
|
|
188
|
+
catch (err) {
|
|
189
|
+
throw new CLIError('CRITICAL', `Issue converting assertion key from string: ${err.message}`, err);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
102
192
|
}
|
|
103
193
|
return a;
|
|
104
194
|
}
|
|
105
|
-
async function
|
|
106
|
-
const c =
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
}
|
|
195
|
+
async function parseCreateOptions(argv) {
|
|
196
|
+
const c = {
|
|
197
|
+
source: await fileAsSource(argv.file),
|
|
198
|
+
};
|
|
110
199
|
if (argv.attributes?.length) {
|
|
111
|
-
c.
|
|
200
|
+
c.attributes = argv.attributes.split(',');
|
|
112
201
|
}
|
|
113
|
-
|
|
114
|
-
|
|
202
|
+
c.autoconfigure = !!argv.autoconfigure;
|
|
203
|
+
return c;
|
|
204
|
+
}
|
|
205
|
+
async function parseCreateZTDFOptions(argv) {
|
|
206
|
+
const c = await parseCreateOptions(argv);
|
|
207
|
+
if (argv.assertions?.length) {
|
|
208
|
+
c.assertionConfigs = await parseAssertionConfig(argv.assertions);
|
|
115
209
|
}
|
|
116
210
|
if (argv.mimeType?.length) {
|
|
117
|
-
|
|
211
|
+
if (argv.mimeType && /^[a-z]+\/[a-z0-9-+.]+$/.test(argv.mimeType)) {
|
|
212
|
+
c.mimeType = argv.mimeType;
|
|
213
|
+
}
|
|
214
|
+
else {
|
|
215
|
+
throw new CLIError('CRITICAL', 'Invalid mimeType format');
|
|
216
|
+
}
|
|
118
217
|
}
|
|
119
|
-
|
|
120
|
-
|
|
218
|
+
log('DEBUG', `CreateZTDFOptions: ${JSON.stringify(c)}`);
|
|
219
|
+
return c;
|
|
220
|
+
}
|
|
221
|
+
async function parseCreateNanoTDFOptions(argv) {
|
|
222
|
+
const c = await parseCreateOptions(argv);
|
|
223
|
+
const ecdsaBinding = argv.policyBinding?.toLowerCase() == 'ecdsa';
|
|
224
|
+
if (ecdsaBinding) {
|
|
225
|
+
c.bindingType = 'ecdsa';
|
|
121
226
|
}
|
|
122
|
-
//
|
|
123
|
-
c.
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
c.setBufferSource(buffer);
|
|
127
|
-
return c.build();
|
|
227
|
+
// NOTE autoconfigure is not yet supported in nanotdf
|
|
228
|
+
delete c.autoconfigure;
|
|
229
|
+
log('DEBUG', `CreateNanoTDFOptions: ${JSON.stringify(c)}`);
|
|
230
|
+
return c;
|
|
128
231
|
}
|
|
129
|
-
async function
|
|
232
|
+
async function fileAsSource(file) {
|
|
130
233
|
if (!file) {
|
|
131
234
|
throw new CLIError('CRITICAL', 'Must specify file or pipe');
|
|
132
235
|
}
|
|
@@ -137,10 +240,10 @@ async function processDataIn(file) {
|
|
|
137
240
|
}
|
|
138
241
|
}
|
|
139
242
|
catch (e) {
|
|
140
|
-
throw new CLIError('CRITICAL', `File is not accessable [${file}]
|
|
243
|
+
throw new CLIError('CRITICAL', `File is not accessable [${file}]`, e);
|
|
141
244
|
}
|
|
142
245
|
log('DEBUG', `Using input from file [${file}]`);
|
|
143
|
-
return
|
|
246
|
+
return { type: 'file-browser', location: await openAsBlob(file) };
|
|
144
247
|
}
|
|
145
248
|
export const handleArgs = (args) => {
|
|
146
249
|
return (yargs(args)
|
|
@@ -169,7 +272,6 @@ export const handleArgs = (args) => {
|
|
|
169
272
|
})
|
|
170
273
|
// AUTH OPTIONS
|
|
171
274
|
.option('kasEndpoint', {
|
|
172
|
-
demandOption: true,
|
|
173
275
|
group: 'Server Endpoints:',
|
|
174
276
|
type: 'string',
|
|
175
277
|
description: 'URL to non-default KAS instance (https://mykas.net)',
|
|
@@ -201,6 +303,14 @@ export const handleArgs = (args) => {
|
|
|
201
303
|
group: 'Decrypt',
|
|
202
304
|
desc: 'Do not verify assertions',
|
|
203
305
|
type: 'boolean',
|
|
306
|
+
})
|
|
307
|
+
.option('assertionVerificationKeys', {
|
|
308
|
+
alias: 'with-assertion-verification-keys',
|
|
309
|
+
group: 'Decrypt',
|
|
310
|
+
desc: 'keys for assertion verification or path to a json file containing keys for assertion verification',
|
|
311
|
+
type: 'string',
|
|
312
|
+
default: '',
|
|
313
|
+
validate: parseAssertionVerificationKeys,
|
|
204
314
|
})
|
|
205
315
|
.option('concurrencyLimit', {
|
|
206
316
|
alias: 'concurrency-limit',
|
|
@@ -248,7 +358,7 @@ export const handleArgs = (args) => {
|
|
|
248
358
|
.options({
|
|
249
359
|
assertions: {
|
|
250
360
|
group: 'Encrypt Options:',
|
|
251
|
-
desc: 'ZTDF assertion config objects',
|
|
361
|
+
desc: 'ZTDF assertion config objects or path to a json file containing ZTDF assertion config objects',
|
|
252
362
|
type: 'string',
|
|
253
363
|
default: '',
|
|
254
364
|
validate: parseAssertionConfig,
|
|
@@ -290,14 +400,6 @@ export const handleArgs = (args) => {
|
|
|
290
400
|
type: 'string',
|
|
291
401
|
description: 'Owner email address',
|
|
292
402
|
},
|
|
293
|
-
usersWithAccess: {
|
|
294
|
-
alias: 'users-with-access',
|
|
295
|
-
group: 'Encrypt Options:',
|
|
296
|
-
desc: 'Add users to the policy',
|
|
297
|
-
type: 'string',
|
|
298
|
-
default: '',
|
|
299
|
-
validate: (users) => users.split(','),
|
|
300
|
-
},
|
|
301
403
|
})
|
|
302
404
|
// COMMANDS
|
|
303
405
|
.options({
|
|
@@ -333,97 +435,75 @@ export const handleArgs = (args) => {
|
|
|
333
435
|
authProvider.updateClientPublicKey(signingKey);
|
|
334
436
|
log('DEBUG', `Initialized auth provider ${JSON.stringify(authProvider)}`);
|
|
335
437
|
const policyUrl = guessPolicyUrl(argv);
|
|
438
|
+
if (!policyUrl) {
|
|
439
|
+
throw new CLIError('CRITICAL', 'policyEndpoint must be specified');
|
|
440
|
+
}
|
|
336
441
|
const defs = await attributeFQNsAsValues(policyUrl, authProvider, ...argv.attributes.split(','));
|
|
337
442
|
console.log(JSON.stringify(defs, null, 2));
|
|
338
443
|
})
|
|
339
|
-
.command('decrypt [file]', 'Decrypt TDF to string',
|
|
340
|
-
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
341
|
-
(yargs) => {
|
|
444
|
+
.command('decrypt [file]', 'Decrypt TDF to string', (yargs) => {
|
|
342
445
|
yargs.strict().positional('file', {
|
|
343
446
|
describe: 'path to plain text file',
|
|
344
447
|
type: 'string',
|
|
345
448
|
});
|
|
346
449
|
}, async (argv) => {
|
|
347
450
|
log('DEBUG', 'Running decrypt command');
|
|
348
|
-
|
|
451
|
+
let allowedKases = argv.allowList?.split(',');
|
|
452
|
+
if (!allowedKases) {
|
|
453
|
+
allowedKases = argv.kasEndpoint ? [argv.kasEndpoint] : [];
|
|
454
|
+
}
|
|
455
|
+
log('DEBUG', `Allowed KASes: ${allowedKases}`);
|
|
349
456
|
const ignoreAllowList = !!argv.ignoreAllowList;
|
|
350
457
|
const authProvider = await processAuth(argv);
|
|
351
458
|
log('DEBUG', `Initialized auth provider ${JSON.stringify(authProvider)}`);
|
|
352
|
-
const
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
}
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
const
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
log('DEBUG', 'Decrypt data.');
|
|
392
|
-
const plaintext = await client.decrypt(buffer);
|
|
393
|
-
log('DEBUG', 'Handle output.');
|
|
394
|
-
if (argv.output) {
|
|
395
|
-
await writeFile(argv.output, new Uint8Array(plaintext));
|
|
396
|
-
}
|
|
397
|
-
else {
|
|
398
|
-
console.log(new TextDecoder().decode(plaintext));
|
|
459
|
+
const client = new OpenTDF({
|
|
460
|
+
authProvider,
|
|
461
|
+
defaultCreateOptions: {
|
|
462
|
+
defaultKASEndpoint: argv.kasEndpoint,
|
|
463
|
+
},
|
|
464
|
+
defaultReadOptions: {
|
|
465
|
+
allowedKASEndpoints: allowedKases,
|
|
466
|
+
ignoreAllowlist: ignoreAllowList,
|
|
467
|
+
noVerify: !!argv.noVerifyAssertions,
|
|
468
|
+
},
|
|
469
|
+
disableDPoP: !argv.dpop,
|
|
470
|
+
policyEndpoint: guessPolicyUrl(argv),
|
|
471
|
+
});
|
|
472
|
+
try {
|
|
473
|
+
log('SILLY', `Initialized client`);
|
|
474
|
+
log('DEBUG', `About to TDF3 decrypt [${argv.file}]`);
|
|
475
|
+
const ct = await client.read(await parseReadOptions(argv));
|
|
476
|
+
const destination = argv.output ? createWriteStream(argv.output) : process.stdout;
|
|
477
|
+
await ct.pipeTo(Writable.toWeb(destination));
|
|
478
|
+
const lastRequest = authProvider.requestLog[authProvider.requestLog.length - 1];
|
|
479
|
+
log('SILLY', `last request is ${JSON.stringify(lastRequest)}`);
|
|
480
|
+
let accessToken = null;
|
|
481
|
+
let dpopToken = null;
|
|
482
|
+
for (const h of Object.keys(lastRequest.headers)) {
|
|
483
|
+
switch (h.toLowerCase()) {
|
|
484
|
+
case 'dpop':
|
|
485
|
+
console.assert(!dpopToken, 'Multiple dpop headers found');
|
|
486
|
+
dpopToken = parseJwtComplete(lastRequest.headers[h]);
|
|
487
|
+
log('INFO', `dpop: ${JSON.stringify(dpopToken)}`);
|
|
488
|
+
break;
|
|
489
|
+
case 'authorization':
|
|
490
|
+
console.assert(!accessToken, 'Multiple authorization headers found');
|
|
491
|
+
accessToken = parseJwt(lastRequest.headers[h].split(' ')[1]);
|
|
492
|
+
log('INFO', `Access Token: ${JSON.stringify(accessToken)}`);
|
|
493
|
+
if (argv.dpop) {
|
|
494
|
+
console.assert(accessToken.cnf?.jkt, 'Access token must have a cnf.jkt');
|
|
495
|
+
}
|
|
496
|
+
break;
|
|
497
|
+
}
|
|
399
498
|
}
|
|
499
|
+
console.assert(accessToken, 'No access_token found');
|
|
500
|
+
console.assert(!argv.dpop || dpopToken, 'DPoP requested but absent');
|
|
400
501
|
}
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
let dpopToken = null;
|
|
404
|
-
for (const h of Object.keys(lastRequest.headers)) {
|
|
405
|
-
switch (h.toLowerCase()) {
|
|
406
|
-
case 'dpop':
|
|
407
|
-
console.assert(!dpopToken, 'Multiple dpop headers found');
|
|
408
|
-
dpopToken = parseJwtComplete(lastRequest.headers[h]);
|
|
409
|
-
log('INFO', `dpop: ${JSON.stringify(dpopToken)}`);
|
|
410
|
-
break;
|
|
411
|
-
case 'authorization':
|
|
412
|
-
console.assert(!accessToken, 'Multiple authorization headers found');
|
|
413
|
-
accessToken = parseJwt(lastRequest.headers[h].split(' ')[1]);
|
|
414
|
-
log('INFO', `Access Token: ${JSON.stringify(accessToken)}`);
|
|
415
|
-
if (argv.dpop) {
|
|
416
|
-
console.assert(accessToken.cnf?.jkt, 'Access token must have a cnf.jkt');
|
|
417
|
-
}
|
|
418
|
-
break;
|
|
419
|
-
}
|
|
502
|
+
finally {
|
|
503
|
+
client.close();
|
|
420
504
|
}
|
|
421
|
-
console.assert(accessToken, 'No access_token found');
|
|
422
|
-
console.assert(!argv.dpop || dpopToken, 'DPoP requested but absent');
|
|
423
505
|
})
|
|
424
|
-
.command('encrypt [file]', 'Encrypt file or pipe to a TDF',
|
|
425
|
-
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
426
|
-
(yargs) => {
|
|
506
|
+
.command('encrypt [file]', 'Encrypt file or pipe to a TDF', (yargs) => {
|
|
427
507
|
yargs.strict().positional('file', {
|
|
428
508
|
describe: 'path to plain text file',
|
|
429
509
|
type: 'string',
|
|
@@ -432,55 +512,33 @@ export const handleArgs = (args) => {
|
|
|
432
512
|
log('DEBUG', 'Running encrypt command');
|
|
433
513
|
const authProvider = await processAuth(argv);
|
|
434
514
|
log('DEBUG', `Initialized auth provider ${JSON.stringify(authProvider)}`);
|
|
435
|
-
const
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
log('SILLY', `Initialized client ${JSON.stringify(client)}`);
|
|
450
|
-
const ct = await client.encrypt(await tdf3EncryptParamsFor(argv));
|
|
451
|
-
if (!ct) {
|
|
452
|
-
throw new CLIError('CRITICAL', 'Encrypt configuration error: No output?');
|
|
453
|
-
}
|
|
454
|
-
if (argv.output) {
|
|
455
|
-
const destination = createWriteStream(argv.output);
|
|
456
|
-
await ct.stream.pipeTo(Writable.toWeb(destination));
|
|
515
|
+
const client = new OpenTDF({
|
|
516
|
+
authProvider,
|
|
517
|
+
defaultCreateOptions: {
|
|
518
|
+
defaultKASEndpoint: argv.kasEndpoint,
|
|
519
|
+
},
|
|
520
|
+
disableDPoP: !argv.dpop,
|
|
521
|
+
policyEndpoint: guessPolicyUrl(argv),
|
|
522
|
+
});
|
|
523
|
+
try {
|
|
524
|
+
log('SILLY', `Initialized client`);
|
|
525
|
+
let ct;
|
|
526
|
+
if ('tdf3' === argv.containerType || 'ztdf' === argv.containerType) {
|
|
527
|
+
log('DEBUG', `TDF3 Create`);
|
|
528
|
+
ct = await client.createZTDF(await parseCreateZTDFOptions(argv));
|
|
457
529
|
}
|
|
458
530
|
else {
|
|
459
|
-
|
|
531
|
+
log('DEBUG', `Nano Create`);
|
|
532
|
+
ct = await client.createNanoTDF(await parseCreateNanoTDFOptions(argv));
|
|
460
533
|
}
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
const dpopEnabled = !!argv.dpop;
|
|
464
|
-
const ecdsaBinding = argv.policyBinding.toLowerCase() == 'ecdsa';
|
|
465
|
-
const client = argv.containerType === 'nano'
|
|
466
|
-
? new NanoTDFClient({ allowedKases, authProvider, dpopEnabled, kasEndpoint })
|
|
467
|
-
: new NanoTDFDatasetClient({
|
|
468
|
-
allowedKases,
|
|
469
|
-
authProvider,
|
|
470
|
-
dpopEnabled,
|
|
471
|
-
kasEndpoint,
|
|
472
|
-
});
|
|
473
|
-
log('SILLY', `Initialized client ${JSON.stringify(client)}`);
|
|
474
|
-
addParams(client, argv);
|
|
475
|
-
const buffer = await processDataIn(argv.file);
|
|
476
|
-
const cyphertext = await client.encrypt(buffer, { ecdsaBinding });
|
|
477
|
-
log('DEBUG', `Handle cyphertext output ${JSON.stringify(cyphertext)}`);
|
|
478
|
-
if (argv.output) {
|
|
479
|
-
await writeFile(argv.output, new Uint8Array(cyphertext));
|
|
480
|
-
}
|
|
481
|
-
else {
|
|
482
|
-
console.log(base64.encodeArrayBuffer(cyphertext));
|
|
534
|
+
if (!ct) {
|
|
535
|
+
throw new CLIError('CRITICAL', 'Encrypt configuration error: No output?');
|
|
483
536
|
}
|
|
537
|
+
const destination = argv.output ? createWriteStream(argv.output) : process.stdout;
|
|
538
|
+
await ct.pipeTo(Writable.toWeb(destination));
|
|
539
|
+
}
|
|
540
|
+
finally {
|
|
541
|
+
client.close();
|
|
484
542
|
}
|
|
485
543
|
})
|
|
486
544
|
.usage('openTDF CLI\n\nUsage: $0 [options]')
|
|
@@ -496,13 +554,14 @@ export const handleArgs = (args) => {
|
|
|
496
554
|
.version('version', JSON.stringify({
|
|
497
555
|
'@opentdf/ctl': process.env.npm_package_version || 'UNRELEASED',
|
|
498
556
|
'@opentdf/sdk': version,
|
|
557
|
+
tdfSpecVersion,
|
|
499
558
|
}))
|
|
500
559
|
.alias('version', 'V')
|
|
501
560
|
.strict()
|
|
502
561
|
.parseAsync());
|
|
503
562
|
};
|
|
504
563
|
export const main = async (argsPromise) => {
|
|
505
|
-
argsPromise;
|
|
564
|
+
return argsPromise;
|
|
506
565
|
};
|
|
507
566
|
handleArgs(hideBin(process.argv))
|
|
508
567
|
.then(main)
|
|
@@ -513,14 +572,13 @@ handleArgs(hideBin(process.argv))
|
|
|
513
572
|
console.error(err);
|
|
514
573
|
});
|
|
515
574
|
function guessPolicyUrl({ kasEndpoint, policyEndpoint, }) {
|
|
516
|
-
let policyUrl;
|
|
517
575
|
if (policyEndpoint) {
|
|
518
|
-
|
|
576
|
+
return rstrip(policyEndpoint, '/');
|
|
519
577
|
}
|
|
520
|
-
|
|
578
|
+
if (kasEndpoint) {
|
|
521
579
|
const uNoSlash = rstrip(kasEndpoint, '/');
|
|
522
|
-
|
|
580
|
+
return uNoSlash.endsWith('/kas') ? uNoSlash.slice(0, -4) : uNoSlash;
|
|
523
581
|
}
|
|
524
|
-
return
|
|
582
|
+
return undefined;
|
|
525
583
|
}
|
|
526
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NsaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxVQUFVLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDeEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN2QyxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDMUIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4QyxPQUFPLEVBSUwsYUFBYSxFQUNiLGFBQWEsRUFDYixvQkFBb0IsRUFDcEIsVUFBVSxFQUNWLE9BQU8sRUFDUCxvQkFBb0IsRUFFcEIsb0JBQW9CLEdBQ3JCLE1BQU0sY0FBYyxDQUFDO0FBQ3RCLE9BQU8sRUFBRSxRQUFRLEVBQVMsR0FBRyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRW5ELE9BQU8sS0FBSyxVQUFVLE1BQU0seUJBQXlCLENBQUM7QUFDdEQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDMUQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBZWhELE1BQU0sWUFBWSxHQUFHLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBRXZDLE1BQU0sY0FBYyxHQUFHLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFFM0QsTUFBTSxRQUFRLEdBQUcsQ0FBQyxHQUFXLEVBQUUsS0FBSyxHQUFHLENBQUMsRUFBRSxFQUFFO0lBQzFDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFD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
|
|
584
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NsaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsVUFBVSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ3hELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN4QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3ZDLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3hDLE9BQU8sRUFRTCxhQUFhLEVBQ2IsT0FBTyxFQUNQLGNBQWMsRUFDZCxPQUFPLEdBRVIsTUFBTSxjQUFjLENBQUM7QUFDdEIsT0FBTyxFQUFFLFFBQVEsRUFBUyxHQUFHLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFbkQsT0FBTyxLQUFLLFVBQVUsTUFBTSx5QkFBeUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDaEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQVcsTUFBTSxNQUFNLENBQUMsQ0FBQyxZQUFZO0FBZXJFLE1BQU0sWUFBWSxHQUFHLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBRXZDLE1BQU0sY0FBYyxHQUFHLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFFM0QsTUFBTSxRQUFRLEdBQUcsQ0FBQyxHQUFXLEVBQUUsS0FBSyxHQUFHLENBQUMsRUFBRSxFQUFFO0lBQzFDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMs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
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@opentdf/ctl",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0-beta.1941",
|
|
4
4
|
"description": "Node based CLI for opentdf",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -29,26 +29,29 @@
|
|
|
29
29
|
"opentdf": "./bin/opentdf.mjs"
|
|
30
30
|
},
|
|
31
31
|
"devDependencies": {
|
|
32
|
+
"@eslint/eslintrc": "^3.2.0",
|
|
33
|
+
"@eslint/js": "^9.20.0",
|
|
32
34
|
"@esm-bundle/chai": "4.3.4-fix.0",
|
|
33
|
-
"@types/mocha": "10.0.
|
|
34
|
-
"@types/node": "^22.
|
|
35
|
+
"@types/mocha": "10.0.10",
|
|
36
|
+
"@types/node": "^22.13.4",
|
|
35
37
|
"@types/readable-stream": "^4.0.18",
|
|
36
38
|
"@types/sinon": "^17.0.3",
|
|
37
39
|
"@types/yargs": "^17.0.33",
|
|
38
|
-
"
|
|
39
|
-
"
|
|
40
|
-
"chai": "^
|
|
41
|
-
"eslint": "^
|
|
42
|
-
"
|
|
40
|
+
"chai": "^5.2.0",
|
|
41
|
+
"eslint-config-prettier": "^10.0.1",
|
|
42
|
+
"eslint-plugin-chai-friendly": "^1.0.1",
|
|
43
|
+
"eslint-plugin-prettier": "^5.2.3",
|
|
44
|
+
"globals": "^15.15.0",
|
|
43
45
|
"license-checker-rseidelsohn": "^4.4.2",
|
|
44
|
-
"mocha": "^
|
|
45
|
-
"prettier": "^3.
|
|
46
|
+
"mocha": "^11.1.0",
|
|
47
|
+
"prettier": "^3.5.1",
|
|
46
48
|
"sinon": "^19.0.2",
|
|
47
49
|
"ts-node": "^10.9.2",
|
|
48
|
-
"typescript": "^5.
|
|
50
|
+
"typescript": "^5.7.3",
|
|
51
|
+
"typescript-eslint": "^8.24.1"
|
|
49
52
|
},
|
|
50
53
|
"dependencies": {
|
|
51
|
-
"@opentdf/sdk": "^0.
|
|
54
|
+
"@opentdf/sdk": "^0.2.0-beta.1941",
|
|
52
55
|
"yargs": "^17.7.2"
|
|
53
56
|
}
|
|
54
57
|
}
|
package/dist/src/polyfills.js
DELETED
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
if (!('document' in globalThis)) {
|
|
2
|
-
// @ts-expect-error // document is either undefined or readonly
|
|
3
|
-
globalThis.document = { documentElement: { style: {} } };
|
|
4
|
-
}
|
|
5
|
-
export {};
|
|
6
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9seWZpbGxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3BvbHlmaWxscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxJQUFJLENBQUMsQ0FBQyxVQUFVLElBQUksVUFBVSxDQUFDLEVBQUUsQ0FBQztJQUNoQywrREFBK0Q7SUFDL0QsVUFBVSxDQUFDLFFBQVEsR0FBRyxFQUFFLGVBQWUsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQzNELENBQUMifQ==
|