1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- const fs = require('fs');
- const path = require('path');
- const crypto = require('crypto');
- const os = require('os');
- function encryptFile(filePath, password) {
- if (typeof password === 'object' && password.password) {
- password = password.password;
- }
- const key = Buffer.from(password, 'utf-8');
- const iv = crypto.randomBytes(16);
- const cipher = crypto.createCipheriv('aes-256-cbc', key, iv);
- const homeDir = os.homedir();
- const encryptedFilePath = path.join(homeDir, 'oasis.enc');
- const output = fs.createWriteStream(encryptedFilePath);
- const input = fs.createReadStream(filePath);
- input.pipe(cipher).pipe(output);
- return new Promise((resolve, reject) => {
- output.on('finish', () => {
- resolve(encryptedFilePath);
- });
- output.on('error', (err) => {
- reject(err);
- });
- });
- }
- function decryptFile(filePath, password) {
- if (typeof password === 'object' && password.password) {
- password = password.password;
- }
- const key = Buffer.from(password, 'utf-8');
- const iv = crypto.randomBytes(16);
- const decipher = crypto.createDecipheriv('aes-256-cbc', key, iv);
- const homeDir = os.homedir();
- const decryptedFilePath = path.join(homeDir, 'secret');
- const output = fs.createWriteStream(decryptedFilePath);
- const input = fs.createReadStream(filePath);
- input.pipe(decipher).pipe(output);
- return new Promise((resolve, reject) => {
- output.on('finish', () => {
- resolve(decryptedFilePath);
- });
- output.on('error', (err) => {
- console.error('Error deciphering data:', err);
- reject(err);
- });
- });
- }
- module.exports = {
- exportData: async (password) => {
- try {
- const homeDir = os.homedir();
- const secretFilePath = path.join(homeDir, '.ssb', 'secret');
-
- if (!fs.existsSync(secretFilePath)) {
- throw new Error(".ssb/secret file doesn't exist");
- }
- const encryptedFilePath = await encryptFile(secretFilePath, password);
- fs.unlinkSync(secretFilePath);
- return encryptedFilePath;
- } catch (error) {
- throw new Error("Error exporting data: " + error.message);
- }
- },
- importData: async ({ filePath, password }) => {
- try {
- if (!fs.existsSync(filePath)) {
- throw new Error('Encrypted file not found.');
- }
- const decryptedFilePath = await decryptFile(filePath, password);
- if (!fs.existsSync(decryptedFilePath)) {
- throw new Error("Decryption failed.");
- }
- fs.unlinkSync(filePath);
- return decryptedFilePath;
- } catch (error) {
- throw new Error("Error importing data: " + error.message);
- }
- }
- };
|