UNPKG

penguins-eggs

Version:

A remaster system tool, compatible with Almalinux, Alpine, Arch, Debian, Devuan, Fedora, Manjaro, Opensuse, Ubuntu and derivatives

82 lines (81 loc) 2.7 kB
/** * ./src/classes/ovary.d/luks-helpers.ts * penguins-eggs v.25.10.x / ecmascript 2020 * author: Piero Proietti * email: piero.proietti@gmail.com * license: MIT */ import { spawn } from 'node:child_process'; import Utils from '../utils.js'; const noop = () => { }; /** * Funzione helper per eseguire comandi esterni in modo asincrono, * gestendo lo standard input per passare le password. * Restituisce una Promise che si risolve al successo o si rigetta in caso di errore. */ export function luksExecuteCommand(command, args, stdinData) { if (!this.hidden) { Utils.info(`${command} ${args.join(' ')}`); } return new Promise((resolve, reject) => { // Se passiamo dati a stdin, dobbiamo usare 'pipe'. Altrimenti, 'inherit'. const stdioConfig = stdinData ? ['pipe', 'inherit', 'inherit'] : 'inherit'; const process = spawn(command, args, { stdio: stdioConfig }); // Se fornito, scriviamo i dati (es. la password) nello stdin del processo. if (stdinData && process.stdin) { process.stdin.write(stdinData); process.stdin.end(); } process.on('error', (err) => { reject(new Error(`Error starting command "${command}": ${err.message}`)); }); process.on('close', (code) => { if (code === 0) { resolve(); // Success } else { reject(new Error(`Command "${command} ${args.join(' ')}" ended with error code ${code}`)); } }); }); } /** * buildLuksFormatArgs */ export function buildLuksFormatArgs(config, luksFile) { const args = [ '--batch-mode', // Per saltare la conferma "YES" 'luksFormat', '--type', 'luks2', // Parametri base '--cipher', config.cipher, '--key-size', config['key-size'].toString(), '--hash', config.hash, '--sector-size', config['sector-size'].toString(), '--pbkdf', config.pbkdf ]; // Aggiungi i parametri condizionali del PBKDF switch (config.pbkdf) { case 'argon2i': case 'argon2id': { const argonConfig = config; args.push('--pbkdf-memory', argonConfig['pbkdf-memory (KiB)'].toString()); args.push('--pbkdf-parallel', argonConfig['pbkdf-parallel (threads)'].toString()); break; } case 'pbkdf2': { const pbkdf2Config = config; args.push('--iter-time', pbkdf2Config['iter-time (ms)'].toString()); break; } } // Aggiungi il file di destinazione args.push(luksFile); return args; }