@factiii/stack 0.1.49 → 0.1.52
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/dist/plugins/pipelines/aws/scanfix/credentials.d.ts.map +1 -1
- package/dist/plugins/pipelines/aws/scanfix/credentials.js +70 -10
- package/dist/plugins/pipelines/aws/scanfix/credentials.js.map +1 -1
- package/dist/plugins/pipelines/factiii/index.d.ts.map +1 -1
- package/dist/plugins/pipelines/factiii/index.js +31 -1
- package/dist/plugins/pipelines/factiii/index.js.map +1 -1
- package/dist/plugins/pipelines/factiii/scanfix/env-files.d.ts.map +1 -1
- package/dist/plugins/pipelines/factiii/scanfix/env-files.js +218 -15
- package/dist/plugins/pipelines/factiii/scanfix/env-files.js.map +1 -1
- package/dist/plugins/pipelines/factiii/scanfix/secrets.d.ts.map +1 -1
- package/dist/plugins/pipelines/factiii/scanfix/secrets.js +129 -18
- package/dist/plugins/pipelines/factiii/scanfix/secrets.js.map +1 -1
- package/dist/plugins/pipelines/factiii/scanfix/workflows.d.ts.map +1 -1
- package/dist/plugins/pipelines/factiii/scanfix/workflows.js +124 -1
- package/dist/plugins/pipelines/factiii/scanfix/workflows.js.map +1 -1
- package/dist/types/config.d.ts +1 -0
- package/dist/types/config.d.ts.map +1 -1
- package/dist/utils/config-helpers.d.ts +1 -1
- package/dist/utils/config-helpers.d.ts.map +1 -1
- package/dist/utils/config-helpers.js +1 -0
- package/dist/utils/config-helpers.js.map +1 -1
- package/dist/utils/ssh-helper.d.ts +11 -2
- package/dist/utils/ssh-helper.d.ts.map +1 -1
- package/dist/utils/ssh-helper.js +113 -12
- package/dist/utils/ssh-helper.js.map +1 -1
- package/package.json +1 -1
|
@@ -45,12 +45,40 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
45
45
|
exports.envFileFixes = void 0;
|
|
46
46
|
const fs = __importStar(require("fs"));
|
|
47
47
|
const path = __importStar(require("path"));
|
|
48
|
+
const readline = __importStar(require("readline"));
|
|
48
49
|
const env_validator_js_1 = require("../../../../utils/env-validator.js");
|
|
49
50
|
const config_helpers_js_1 = require("../../../../utils/config-helpers.js");
|
|
50
51
|
/**
|
|
51
52
|
* Values that are commonly identical across environments and shouldn't trigger warnings
|
|
52
53
|
*/
|
|
53
54
|
const TRIVIALLY_IDENTICAL = new Set(['', 'true', 'false', '0', '1', 'yes', 'no']);
|
|
55
|
+
/**
|
|
56
|
+
* Get exception list from stack.yml config
|
|
57
|
+
* Users can set env_match_exceptions: [KEY1, KEY2] to suppress "matches dev" warnings
|
|
58
|
+
*/
|
|
59
|
+
function getExceptionList(config) {
|
|
60
|
+
const exceptions = config.env_match_exceptions;
|
|
61
|
+
if (Array.isArray(exceptions)) {
|
|
62
|
+
return new Set(exceptions.map(String));
|
|
63
|
+
}
|
|
64
|
+
return new Set();
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Prompt user for a single env var value (used during interactive fix)
|
|
68
|
+
*/
|
|
69
|
+
function promptForValue(key, exampleValue) {
|
|
70
|
+
return new Promise((resolve) => {
|
|
71
|
+
const rl = readline.createInterface({
|
|
72
|
+
input: process.stdin,
|
|
73
|
+
output: process.stdout,
|
|
74
|
+
});
|
|
75
|
+
const hint = exampleValue ? ' (example: ' + exampleValue + ')' : '';
|
|
76
|
+
rl.question(' ' + key + hint + ': ', (answer) => {
|
|
77
|
+
rl.close();
|
|
78
|
+
resolve(answer.trim());
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
}
|
|
54
82
|
exports.envFileFixes = [
|
|
55
83
|
// ── File existence checks ──────────────────────────────────────
|
|
56
84
|
{
|
|
@@ -123,7 +151,6 @@ exports.envFileFixes = [
|
|
|
123
151
|
return false;
|
|
124
152
|
const comparison = (0, env_validator_js_1.compareEnvKeys)(dev, staging);
|
|
125
153
|
if (comparison.missing.length > 0) {
|
|
126
|
-
// Store missing keys for display in description
|
|
127
154
|
this._missingKeys = comparison.missing;
|
|
128
155
|
}
|
|
129
156
|
return comparison.missing.length > 0;
|
|
@@ -173,9 +200,12 @@ exports.envFileFixes = [
|
|
|
173
200
|
const staging = (0, env_validator_js_1.parseEnvFile)(path.join(rootDir, '.env.staging'));
|
|
174
201
|
if (!dev || !staging)
|
|
175
202
|
return false;
|
|
203
|
+
const exceptions = getExceptionList(config);
|
|
176
204
|
const matching = (0, env_validator_js_1.findMatchingValues)(dev, staging);
|
|
177
|
-
// Filter out trivially-identical values
|
|
205
|
+
// Filter out trivially-identical values and user-configured exceptions
|
|
178
206
|
const meaningful = matching.filter((key) => {
|
|
207
|
+
if (exceptions.has(key))
|
|
208
|
+
return false;
|
|
179
209
|
const val = dev[key];
|
|
180
210
|
return val !== undefined && !TRIVIALLY_IDENTICAL.has(val);
|
|
181
211
|
});
|
|
@@ -185,7 +215,7 @@ exports.envFileFixes = [
|
|
|
185
215
|
return meaningful.length > 0;
|
|
186
216
|
},
|
|
187
217
|
fix: null,
|
|
188
|
-
manualFix: 'Change these values in .env.staging to differ from .env.example (they should have staging-specific values)',
|
|
218
|
+
manualFix: 'Change these values in .env.staging to differ from .env.example (they should have staging-specific values). If a key is intentionally identical, add it to env_match_exceptions in stack.yml',
|
|
189
219
|
},
|
|
190
220
|
{
|
|
191
221
|
id: 'env-prod-matches-dev',
|
|
@@ -209,8 +239,11 @@ exports.envFileFixes = [
|
|
|
209
239
|
const prod = (0, env_validator_js_1.parseEnvFile)(path.join(rootDir, '.env.prod'));
|
|
210
240
|
if (!dev || !prod)
|
|
211
241
|
return false;
|
|
242
|
+
const exceptions = getExceptionList(config);
|
|
212
243
|
const matching = (0, env_validator_js_1.findMatchingValues)(dev, prod);
|
|
213
244
|
const meaningful = matching.filter((key) => {
|
|
245
|
+
if (exceptions.has(key))
|
|
246
|
+
return false;
|
|
214
247
|
const val = dev[key];
|
|
215
248
|
return val !== undefined && !TRIVIALLY_IDENTICAL.has(val);
|
|
216
249
|
});
|
|
@@ -220,12 +253,12 @@ exports.envFileFixes = [
|
|
|
220
253
|
return meaningful.length > 0;
|
|
221
254
|
},
|
|
222
255
|
fix: null,
|
|
223
|
-
manualFix: 'Change these values in .env.prod to differ from .env.example (they should have production-specific values)',
|
|
256
|
+
manualFix: 'Change these values in .env.prod to differ from .env.example (they should have production-specific values). If a key is intentionally identical, add it to env_match_exceptions in stack.yml',
|
|
224
257
|
},
|
|
225
|
-
// ── Vault storage
|
|
258
|
+
// ── Vault storage (dev stage — checks vault from dev machine) ──
|
|
226
259
|
{
|
|
227
260
|
id: 'env-staging-not-in-vault',
|
|
228
|
-
stage: '
|
|
261
|
+
stage: 'dev',
|
|
229
262
|
severity: 'warning',
|
|
230
263
|
description: '🔐 .env.staging not stored in Ansible Vault',
|
|
231
264
|
scan: async (config, rootDir) => {
|
|
@@ -253,9 +286,14 @@ exports.envFileFixes = [
|
|
|
253
286
|
fix: async (config, rootDir) => {
|
|
254
287
|
if (!config.ansible?.vault_path)
|
|
255
288
|
return false;
|
|
256
|
-
const
|
|
257
|
-
|
|
289
|
+
const envPath = path.join(rootDir, '.env.staging');
|
|
290
|
+
const envVars = (0, env_validator_js_1.parseEnvFile)(envPath);
|
|
291
|
+
if (!envVars || Object.keys(envVars).length === 0) {
|
|
292
|
+
console.log(' No variables found in .env.staging');
|
|
258
293
|
return false;
|
|
294
|
+
}
|
|
295
|
+
console.log(' Found ' + Object.keys(envVars).length + ' vars in .env.staging');
|
|
296
|
+
console.log(' Importing into Ansible Vault as staging_envs...');
|
|
259
297
|
try {
|
|
260
298
|
const { AnsibleVaultSecrets } = await Promise.resolve().then(() => __importStar(require('../../../../utils/ansible-vault-secrets.js')));
|
|
261
299
|
const vault = new AnsibleVaultSecrets({
|
|
@@ -264,7 +302,7 @@ exports.envFileFixes = [
|
|
|
264
302
|
rootDir,
|
|
265
303
|
});
|
|
266
304
|
await vault.setEnvironmentSecrets('staging', envVars);
|
|
267
|
-
console.log(' Stored .
|
|
305
|
+
console.log(' Stored ' + Object.keys(envVars).length + ' staging env vars in vault');
|
|
268
306
|
return true;
|
|
269
307
|
}
|
|
270
308
|
catch (e) {
|
|
@@ -273,11 +311,11 @@ exports.envFileFixes = [
|
|
|
273
311
|
return false;
|
|
274
312
|
}
|
|
275
313
|
},
|
|
276
|
-
manualFix: 'Run: npx stack fix (will
|
|
314
|
+
manualFix: 'Run: npx stack fix --dev (will import .env.staging into Ansible Vault)',
|
|
277
315
|
},
|
|
278
316
|
{
|
|
279
317
|
id: 'env-prod-not-in-vault',
|
|
280
|
-
stage: '
|
|
318
|
+
stage: 'dev',
|
|
281
319
|
severity: 'warning',
|
|
282
320
|
description: '🔐 .env.prod not stored in Ansible Vault',
|
|
283
321
|
scan: async (config, rootDir) => {
|
|
@@ -306,9 +344,14 @@ exports.envFileFixes = [
|
|
|
306
344
|
fix: async (config, rootDir) => {
|
|
307
345
|
if (!config.ansible?.vault_path)
|
|
308
346
|
return false;
|
|
309
|
-
const
|
|
310
|
-
|
|
347
|
+
const envPath = path.join(rootDir, '.env.prod');
|
|
348
|
+
const envVars = (0, env_validator_js_1.parseEnvFile)(envPath);
|
|
349
|
+
if (!envVars || Object.keys(envVars).length === 0) {
|
|
350
|
+
console.log(' No variables found in .env.prod');
|
|
311
351
|
return false;
|
|
352
|
+
}
|
|
353
|
+
console.log(' Found ' + Object.keys(envVars).length + ' vars in .env.prod');
|
|
354
|
+
console.log(' Importing into Ansible Vault as prod_envs...');
|
|
312
355
|
try {
|
|
313
356
|
const { AnsibleVaultSecrets } = await Promise.resolve().then(() => __importStar(require('../../../../utils/ansible-vault-secrets.js')));
|
|
314
357
|
const vault = new AnsibleVaultSecrets({
|
|
@@ -317,7 +360,7 @@ exports.envFileFixes = [
|
|
|
317
360
|
rootDir,
|
|
318
361
|
});
|
|
319
362
|
await vault.setEnvironmentSecrets('prod', envVars);
|
|
320
|
-
console.log(' Stored .
|
|
363
|
+
console.log(' Stored ' + Object.keys(envVars).length + ' prod env vars in vault');
|
|
321
364
|
return true;
|
|
322
365
|
}
|
|
323
366
|
catch (e) {
|
|
@@ -326,7 +369,167 @@ exports.envFileFixes = [
|
|
|
326
369
|
return false;
|
|
327
370
|
}
|
|
328
371
|
},
|
|
329
|
-
manualFix: 'Run: npx stack fix (will
|
|
372
|
+
manualFix: 'Run: npx stack fix --dev (will import .env.prod into Ansible Vault)',
|
|
373
|
+
},
|
|
374
|
+
// ── Vault completeness (vault secrets missing keys from .env.example) ──
|
|
375
|
+
{
|
|
376
|
+
id: 'env-staging-vault-missing-keys',
|
|
377
|
+
stage: 'dev',
|
|
378
|
+
severity: 'critical',
|
|
379
|
+
get description() {
|
|
380
|
+
const keys = this._missingKeys;
|
|
381
|
+
if (keys && keys.length > 0) {
|
|
382
|
+
const shown = keys.slice(0, 5).join(', ');
|
|
383
|
+
const more = keys.length > 5 ? ' (+' + (keys.length - 5) + ' more)' : '';
|
|
384
|
+
return '🔐 Vault staging_envs missing ' + keys.length + ' keys from .env.example: ' + shown + more;
|
|
385
|
+
}
|
|
386
|
+
return '🔐 Vault staging_envs missing keys from .env.example';
|
|
387
|
+
},
|
|
388
|
+
scan: async function (config, rootDir) {
|
|
389
|
+
if (!config.ansible?.vault_path)
|
|
390
|
+
return false;
|
|
391
|
+
const envs = (0, config_helpers_js_1.extractEnvironments)(config);
|
|
392
|
+
if (!envs.staging)
|
|
393
|
+
return false;
|
|
394
|
+
const dev = (0, env_validator_js_1.parseEnvFile)(path.join(rootDir, '.env.example'));
|
|
395
|
+
if (!dev)
|
|
396
|
+
return false;
|
|
397
|
+
try {
|
|
398
|
+
const { AnsibleVaultSecrets } = await Promise.resolve().then(() => __importStar(require('../../../../utils/ansible-vault-secrets.js')));
|
|
399
|
+
const vault = new AnsibleVaultSecrets({
|
|
400
|
+
vault_path: config.ansible.vault_path,
|
|
401
|
+
vault_password_file: config.ansible.vault_password_file ?? '~/.vault_pass',
|
|
402
|
+
rootDir,
|
|
403
|
+
});
|
|
404
|
+
const vaultSecrets = await vault.getEnvironmentSecrets('staging');
|
|
405
|
+
if (Object.keys(vaultSecrets).length === 0)
|
|
406
|
+
return false; // No vault secrets yet, handled by env-staging-not-in-vault
|
|
407
|
+
const comparison = (0, env_validator_js_1.compareEnvKeys)(dev, vaultSecrets);
|
|
408
|
+
if (comparison.missing.length > 0) {
|
|
409
|
+
this._missingKeys = comparison.missing;
|
|
410
|
+
}
|
|
411
|
+
return comparison.missing.length > 0;
|
|
412
|
+
}
|
|
413
|
+
catch {
|
|
414
|
+
return false;
|
|
415
|
+
}
|
|
416
|
+
},
|
|
417
|
+
fix: async function (config, rootDir) {
|
|
418
|
+
if (!config.ansible?.vault_path)
|
|
419
|
+
return false;
|
|
420
|
+
const dev = (0, env_validator_js_1.parseEnvFile)(path.join(rootDir, '.env.example'));
|
|
421
|
+
if (!dev)
|
|
422
|
+
return false;
|
|
423
|
+
try {
|
|
424
|
+
const { AnsibleVaultSecrets } = await Promise.resolve().then(() => __importStar(require('../../../../utils/ansible-vault-secrets.js')));
|
|
425
|
+
const vault = new AnsibleVaultSecrets({
|
|
426
|
+
vault_path: config.ansible.vault_path,
|
|
427
|
+
vault_password_file: config.ansible.vault_password_file ?? '~/.vault_pass',
|
|
428
|
+
rootDir,
|
|
429
|
+
});
|
|
430
|
+
const vaultSecrets = await vault.getEnvironmentSecrets('staging');
|
|
431
|
+
const comparison = (0, env_validator_js_1.compareEnvKeys)(dev, vaultSecrets);
|
|
432
|
+
if (comparison.missing.length === 0)
|
|
433
|
+
return true;
|
|
434
|
+
console.log(' Missing ' + comparison.missing.length + ' keys in vault staging_envs');
|
|
435
|
+
console.log(' Enter values for each missing key (from .env.example):');
|
|
436
|
+
const newSecrets = {};
|
|
437
|
+
for (const key of comparison.missing) {
|
|
438
|
+
const exampleVal = dev[key] ?? '';
|
|
439
|
+
const value = await promptForValue(key, exampleVal);
|
|
440
|
+
newSecrets[key] = value || exampleVal; // Use example value if left blank
|
|
441
|
+
}
|
|
442
|
+
await vault.setEnvironmentSecrets('staging', newSecrets);
|
|
443
|
+
console.log(' Added ' + comparison.missing.length + ' keys to vault staging_envs');
|
|
444
|
+
return true;
|
|
445
|
+
}
|
|
446
|
+
catch (e) {
|
|
447
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
448
|
+
console.log(' Failed: ' + msg);
|
|
449
|
+
return false;
|
|
450
|
+
}
|
|
451
|
+
},
|
|
452
|
+
manualFix: 'Run: npx stack fix --dev (will prompt for missing staging secret values)',
|
|
453
|
+
},
|
|
454
|
+
{
|
|
455
|
+
id: 'env-prod-vault-missing-keys',
|
|
456
|
+
stage: 'dev',
|
|
457
|
+
severity: 'critical',
|
|
458
|
+
get description() {
|
|
459
|
+
const keys = this._missingKeys;
|
|
460
|
+
if (keys && keys.length > 0) {
|
|
461
|
+
const shown = keys.slice(0, 5).join(', ');
|
|
462
|
+
const more = keys.length > 5 ? ' (+' + (keys.length - 5) + ' more)' : '';
|
|
463
|
+
return '🔐 Vault prod_envs missing ' + keys.length + ' keys from .env.example: ' + shown + more;
|
|
464
|
+
}
|
|
465
|
+
return '🔐 Vault prod_envs missing keys from .env.example';
|
|
466
|
+
},
|
|
467
|
+
scan: async function (config, rootDir) {
|
|
468
|
+
if (!config.ansible?.vault_path)
|
|
469
|
+
return false;
|
|
470
|
+
const envs = (0, config_helpers_js_1.extractEnvironments)(config);
|
|
471
|
+
const hasProd = !!envs.prod || !!envs.production;
|
|
472
|
+
if (!hasProd)
|
|
473
|
+
return false;
|
|
474
|
+
const dev = (0, env_validator_js_1.parseEnvFile)(path.join(rootDir, '.env.example'));
|
|
475
|
+
if (!dev)
|
|
476
|
+
return false;
|
|
477
|
+
try {
|
|
478
|
+
const { AnsibleVaultSecrets } = await Promise.resolve().then(() => __importStar(require('../../../../utils/ansible-vault-secrets.js')));
|
|
479
|
+
const vault = new AnsibleVaultSecrets({
|
|
480
|
+
vault_path: config.ansible.vault_path,
|
|
481
|
+
vault_password_file: config.ansible.vault_password_file ?? '~/.vault_pass',
|
|
482
|
+
rootDir,
|
|
483
|
+
});
|
|
484
|
+
const vaultSecrets = await vault.getEnvironmentSecrets('prod');
|
|
485
|
+
if (Object.keys(vaultSecrets).length === 0)
|
|
486
|
+
return false; // No vault secrets yet
|
|
487
|
+
const comparison = (0, env_validator_js_1.compareEnvKeys)(dev, vaultSecrets);
|
|
488
|
+
if (comparison.missing.length > 0) {
|
|
489
|
+
this._missingKeys = comparison.missing;
|
|
490
|
+
}
|
|
491
|
+
return comparison.missing.length > 0;
|
|
492
|
+
}
|
|
493
|
+
catch {
|
|
494
|
+
return false;
|
|
495
|
+
}
|
|
496
|
+
},
|
|
497
|
+
fix: async function (config, rootDir) {
|
|
498
|
+
if (!config.ansible?.vault_path)
|
|
499
|
+
return false;
|
|
500
|
+
const dev = (0, env_validator_js_1.parseEnvFile)(path.join(rootDir, '.env.example'));
|
|
501
|
+
if (!dev)
|
|
502
|
+
return false;
|
|
503
|
+
try {
|
|
504
|
+
const { AnsibleVaultSecrets } = await Promise.resolve().then(() => __importStar(require('../../../../utils/ansible-vault-secrets.js')));
|
|
505
|
+
const vault = new AnsibleVaultSecrets({
|
|
506
|
+
vault_path: config.ansible.vault_path,
|
|
507
|
+
vault_password_file: config.ansible.vault_password_file ?? '~/.vault_pass',
|
|
508
|
+
rootDir,
|
|
509
|
+
});
|
|
510
|
+
const vaultSecrets = await vault.getEnvironmentSecrets('prod');
|
|
511
|
+
const comparison = (0, env_validator_js_1.compareEnvKeys)(dev, vaultSecrets);
|
|
512
|
+
if (comparison.missing.length === 0)
|
|
513
|
+
return true;
|
|
514
|
+
console.log(' Missing ' + comparison.missing.length + ' keys in vault prod_envs');
|
|
515
|
+
console.log(' Enter values for each missing key (from .env.example):');
|
|
516
|
+
const newSecrets = {};
|
|
517
|
+
for (const key of comparison.missing) {
|
|
518
|
+
const exampleVal = dev[key] ?? '';
|
|
519
|
+
const value = await promptForValue(key, exampleVal);
|
|
520
|
+
newSecrets[key] = value || exampleVal;
|
|
521
|
+
}
|
|
522
|
+
await vault.setEnvironmentSecrets('prod', newSecrets);
|
|
523
|
+
console.log(' Added ' + comparison.missing.length + ' keys to vault prod_envs');
|
|
524
|
+
return true;
|
|
525
|
+
}
|
|
526
|
+
catch (e) {
|
|
527
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
528
|
+
console.log(' Failed: ' + msg);
|
|
529
|
+
return false;
|
|
530
|
+
}
|
|
531
|
+
},
|
|
532
|
+
manualFix: 'Run: npx stack fix --dev (will prompt for missing prod secret values)',
|
|
330
533
|
},
|
|
331
534
|
];
|
|
332
535
|
//# sourceMappingURL=env-files.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env-files.js","sourceRoot":"","sources":["../../../../../src/plugins/pipelines/factiii/scanfix/env-files.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"env-files.js","sourceRoot":"","sources":["../../../../../src/plugins/pipelines/factiii/scanfix/env-files.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"secrets.d.ts","sourceRoot":"","sources":["../../../../../src/plugins/pipelines/factiii/scanfix/secrets.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EAAiB,GAAG,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"secrets.d.ts","sourceRoot":"","sources":["../../../../../src/plugins/pipelines/factiii/scanfix/secrets.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EAAiB,GAAG,EAAE,MAAM,4BAA4B,CAAC;AAcrE,eAAO,MAAM,YAAY,EAAE,GAAG,EA+W7B,CAAC"}
|
|
@@ -43,6 +43,7 @@ const os = __importStar(require("os"));
|
|
|
43
43
|
const path = __importStar(require("path"));
|
|
44
44
|
const ansible_vault_secrets_js_1 = require("../../../../utils/ansible-vault-secrets.js");
|
|
45
45
|
const secret_prompts_js_1 = require("../../../../utils/secret-prompts.js");
|
|
46
|
+
const config_helpers_js_1 = require("../../../../utils/config-helpers.js");
|
|
46
47
|
function getAnsibleStore(config, rootDir) {
|
|
47
48
|
if (!config.ansible?.vault_path)
|
|
48
49
|
return null;
|
|
@@ -52,14 +53,6 @@ function getAnsibleStore(config, rootDir) {
|
|
|
52
53
|
rootDir,
|
|
53
54
|
});
|
|
54
55
|
}
|
|
55
|
-
function getSecretNameFromFixId(fixId) {
|
|
56
|
-
const map = {
|
|
57
|
-
'missing-staging-ssh': 'STAGING_SSH',
|
|
58
|
-
'missing-prod-ssh': 'PROD_SSH',
|
|
59
|
-
'missing-aws-secret': 'AWS_SECRET_ACCESS_KEY',
|
|
60
|
-
};
|
|
61
|
-
return map[fixId] ?? '';
|
|
62
|
-
}
|
|
63
56
|
exports.secretsFixes = [
|
|
64
57
|
{
|
|
65
58
|
id: 'missing-ansible-config',
|
|
@@ -81,8 +74,7 @@ exports.secretsFixes = [
|
|
|
81
74
|
severity: 'critical',
|
|
82
75
|
description: '🔑 STAGING_SSH secret not found in Ansible Vault',
|
|
83
76
|
scan: async (config, rootDir) => {
|
|
84
|
-
const
|
|
85
|
-
const environments = extractEnvironments(config);
|
|
77
|
+
const environments = (0, config_helpers_js_1.extractEnvironments)(config);
|
|
86
78
|
// Only check if staging environment is defined in config
|
|
87
79
|
const hasStagingEnv = environments.staging;
|
|
88
80
|
if (!hasStagingEnv)
|
|
@@ -126,8 +118,7 @@ exports.secretsFixes = [
|
|
|
126
118
|
severity: 'critical',
|
|
127
119
|
description: '🔑 PROD_SSH secret not found in Ansible Vault',
|
|
128
120
|
scan: async (config, rootDir) => {
|
|
129
|
-
const
|
|
130
|
-
const environments = extractEnvironments(config);
|
|
121
|
+
const environments = (0, config_helpers_js_1.extractEnvironments)(config);
|
|
131
122
|
// Only check if prod environment is defined in config
|
|
132
123
|
const hasProdEnv = environments.prod;
|
|
133
124
|
if (!hasProdEnv)
|
|
@@ -165,14 +156,117 @@ exports.secretsFixes = [
|
|
|
165
156
|
' 2. Add to server: ssh-copy-id -i ~/.ssh/prod_deploy_key.pub user@prod-host\n' +
|
|
166
157
|
' 3. Store in vault: npx stack secrets set PROD_SSH',
|
|
167
158
|
},
|
|
159
|
+
{
|
|
160
|
+
id: 'missing-staging-ssh-password',
|
|
161
|
+
stage: 'secrets',
|
|
162
|
+
severity: 'warning',
|
|
163
|
+
description: '🔑 STAGING_SSH_PASSWORD not in vault (needed if staging uses password auth)',
|
|
164
|
+
scan: async (config, rootDir) => {
|
|
165
|
+
const environments = (0, config_helpers_js_1.extractEnvironments)(config);
|
|
166
|
+
if (!environments.staging)
|
|
167
|
+
return false;
|
|
168
|
+
// Only flag if there's NO SSH key — password is the fallback
|
|
169
|
+
const keyPath = path.join(os.homedir(), '.ssh', 'staging_deploy_key');
|
|
170
|
+
if (fs.existsSync(keyPath))
|
|
171
|
+
return false;
|
|
172
|
+
const store = getAnsibleStore(config, rootDir);
|
|
173
|
+
if (!store)
|
|
174
|
+
return false;
|
|
175
|
+
// Check if STAGING_SSH key is in vault (if so, no need for password)
|
|
176
|
+
const keyCheck = await store.checkSecrets(['STAGING_SSH']);
|
|
177
|
+
if (!keyCheck.missing?.includes('STAGING_SSH'))
|
|
178
|
+
return false;
|
|
179
|
+
// No SSH key at all — check if password is stored
|
|
180
|
+
const result = await store.checkSecrets(['STAGING_SSH_PASSWORD']);
|
|
181
|
+
return result.missing?.includes('STAGING_SSH_PASSWORD') ?? false;
|
|
182
|
+
},
|
|
183
|
+
fix: async (config, rootDir) => {
|
|
184
|
+
const store = getAnsibleStore(config, rootDir);
|
|
185
|
+
if (!store)
|
|
186
|
+
return false;
|
|
187
|
+
try {
|
|
188
|
+
const environments = (0, config_helpers_js_1.extractEnvironments)(config);
|
|
189
|
+
const envConfig = environments.staging;
|
|
190
|
+
const host = envConfig?.domain ?? 'staging server';
|
|
191
|
+
const user = envConfig?.ssh_user ?? 'root';
|
|
192
|
+
console.log(' Enter the SSH password for ' + user + '@' + host);
|
|
193
|
+
const password = await (0, secret_prompts_js_1.promptSingleLine)(' Password: ', { hidden: true });
|
|
194
|
+
if (!password) {
|
|
195
|
+
console.log(' No password provided');
|
|
196
|
+
return false;
|
|
197
|
+
}
|
|
198
|
+
const result = await store.setSecret('STAGING_SSH_PASSWORD', password);
|
|
199
|
+
if (result.success) {
|
|
200
|
+
console.log(' Stored STAGING_SSH_PASSWORD in Ansible Vault');
|
|
201
|
+
return true;
|
|
202
|
+
}
|
|
203
|
+
return false;
|
|
204
|
+
}
|
|
205
|
+
catch {
|
|
206
|
+
return false;
|
|
207
|
+
}
|
|
208
|
+
},
|
|
209
|
+
manualFix: 'Store SSH password: npx stack secrets set STAGING_SSH_PASSWORD',
|
|
210
|
+
},
|
|
211
|
+
{
|
|
212
|
+
id: 'missing-prod-ssh-password',
|
|
213
|
+
stage: 'secrets',
|
|
214
|
+
severity: 'warning',
|
|
215
|
+
description: '🔑 PROD_SSH_PASSWORD not in vault (needed if prod uses password auth)',
|
|
216
|
+
scan: async (config, rootDir) => {
|
|
217
|
+
const environments = (0, config_helpers_js_1.extractEnvironments)(config);
|
|
218
|
+
if (!environments.prod)
|
|
219
|
+
return false;
|
|
220
|
+
// Only flag if there's NO SSH key — password is the fallback
|
|
221
|
+
const keyPath = path.join(os.homedir(), '.ssh', 'prod_deploy_key');
|
|
222
|
+
if (fs.existsSync(keyPath))
|
|
223
|
+
return false;
|
|
224
|
+
const store = getAnsibleStore(config, rootDir);
|
|
225
|
+
if (!store)
|
|
226
|
+
return false;
|
|
227
|
+
// Check if PROD_SSH key is in vault (if so, no need for password)
|
|
228
|
+
const keyCheck = await store.checkSecrets(['PROD_SSH']);
|
|
229
|
+
if (!keyCheck.missing?.includes('PROD_SSH'))
|
|
230
|
+
return false;
|
|
231
|
+
// No SSH key at all — check if password is stored
|
|
232
|
+
const result = await store.checkSecrets(['PROD_SSH_PASSWORD']);
|
|
233
|
+
return result.missing?.includes('PROD_SSH_PASSWORD') ?? false;
|
|
234
|
+
},
|
|
235
|
+
fix: async (config, rootDir) => {
|
|
236
|
+
const store = getAnsibleStore(config, rootDir);
|
|
237
|
+
if (!store)
|
|
238
|
+
return false;
|
|
239
|
+
try {
|
|
240
|
+
const environments = (0, config_helpers_js_1.extractEnvironments)(config);
|
|
241
|
+
const envConfig = environments.prod;
|
|
242
|
+
const host = envConfig?.domain ?? 'prod server';
|
|
243
|
+
const user = envConfig?.ssh_user ?? 'root';
|
|
244
|
+
console.log(' Enter the SSH password for ' + user + '@' + host);
|
|
245
|
+
const password = await (0, secret_prompts_js_1.promptSingleLine)(' Password: ', { hidden: true });
|
|
246
|
+
if (!password) {
|
|
247
|
+
console.log(' No password provided');
|
|
248
|
+
return false;
|
|
249
|
+
}
|
|
250
|
+
const result = await store.setSecret('PROD_SSH_PASSWORD', password);
|
|
251
|
+
if (result.success) {
|
|
252
|
+
console.log(' Stored PROD_SSH_PASSWORD in Ansible Vault');
|
|
253
|
+
return true;
|
|
254
|
+
}
|
|
255
|
+
return false;
|
|
256
|
+
}
|
|
257
|
+
catch {
|
|
258
|
+
return false;
|
|
259
|
+
}
|
|
260
|
+
},
|
|
261
|
+
manualFix: 'Store SSH password: npx stack secrets set PROD_SSH_PASSWORD',
|
|
262
|
+
},
|
|
168
263
|
{
|
|
169
264
|
id: 'missing-aws-secret',
|
|
170
265
|
stage: 'secrets',
|
|
171
266
|
severity: 'warning',
|
|
172
267
|
description: '🔑 AWS_SECRET_ACCESS_KEY not found in Ansible Vault (needed for ECR)',
|
|
173
268
|
scan: async (config, rootDir) => {
|
|
174
|
-
const
|
|
175
|
-
const environments = extractEnvironments(config);
|
|
269
|
+
const environments = (0, config_helpers_js_1.extractEnvironments)(config);
|
|
176
270
|
// Check if any environment uses AWS pipeline
|
|
177
271
|
const hasAwsEnv = Object.values(environments).some(env => env.pipeline === 'aws' && env.access_key_id);
|
|
178
272
|
if (!hasAwsEnv)
|
|
@@ -188,6 +282,25 @@ exports.secretsFixes = [
|
|
|
188
282
|
if (!store)
|
|
189
283
|
return false;
|
|
190
284
|
try {
|
|
285
|
+
// Try reading from ~/.aws/credentials first
|
|
286
|
+
const awsCredsPath = path.join(os.homedir(), '.aws', 'credentials');
|
|
287
|
+
if (fs.existsSync(awsCredsPath)) {
|
|
288
|
+
const content = fs.readFileSync(awsCredsPath, 'utf8');
|
|
289
|
+
const match = content.match(/aws_secret_access_key\s*=\s*(.+)/);
|
|
290
|
+
if (match && match[1]) {
|
|
291
|
+
const secretKey = match[1].trim();
|
|
292
|
+
if (secretKey && secretKey.length === 40) {
|
|
293
|
+
console.log(' Found AWS_SECRET_ACCESS_KEY in ~/.aws/credentials');
|
|
294
|
+
const result = await store.setSecret('AWS_SECRET_ACCESS_KEY', secretKey);
|
|
295
|
+
if (result.success) {
|
|
296
|
+
console.log(' Stored in Ansible Vault');
|
|
297
|
+
return true;
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
// Fall back to interactive prompt
|
|
303
|
+
console.log(' AWS_SECRET_ACCESS_KEY not found in ~/.aws/credentials');
|
|
191
304
|
const value = await (0, secret_prompts_js_1.promptForSecret)('AWS_SECRET_ACCESS_KEY', config);
|
|
192
305
|
const result = await store.setSecret('AWS_SECRET_ACCESS_KEY', value);
|
|
193
306
|
return result.success;
|
|
@@ -222,8 +335,7 @@ exports.secretsFixes = [
|
|
|
222
335
|
severity: 'critical',
|
|
223
336
|
description: '🔑 SSH_STAGING key file not on disk (required for staging access)',
|
|
224
337
|
scan: async (config) => {
|
|
225
|
-
const
|
|
226
|
-
const environments = extractEnvironments(config);
|
|
338
|
+
const environments = (0, config_helpers_js_1.extractEnvironments)(config);
|
|
227
339
|
if (!environments.staging)
|
|
228
340
|
return false;
|
|
229
341
|
const keyPath = path.join(os.homedir(), '.ssh', 'staging_deploy_key');
|
|
@@ -260,8 +372,7 @@ exports.secretsFixes = [
|
|
|
260
372
|
severity: 'critical',
|
|
261
373
|
description: '🔑 SSH_PROD key file not on disk (required for prod access)',
|
|
262
374
|
scan: async (config) => {
|
|
263
|
-
const
|
|
264
|
-
const environments = extractEnvironments(config);
|
|
375
|
+
const environments = (0, config_helpers_js_1.extractEnvironments)(config);
|
|
265
376
|
if (!environments.prod)
|
|
266
377
|
return false;
|
|
267
378
|
const keyPath = path.join(os.homedir(), '.ssh', 'prod_deploy_key');
|