Files
paperclip-wallet/modules/accounts.js
2019-03-07 08:48:22 +01:00

99 lines
2.4 KiB
JavaScript

const {app, dialog, ipcMain} = require("electron");
const admZip = require("adm-zip");
const path = require("path");
const fs = require("fs-extra");
const os = require("os");
class Accounts {
constructor() {}
getKeyStoreLocation() {
switch (os.type()) {
case "Darwin":
return path.join(os.homedir(), "Library", "Ether1", "keystore");
break;
default:
return path.join(process.env.APPDATA, "Ether1", "keystore");
}
}
exportAccounts() {
var savePath = dialog.showSaveDialog({
defaultPath: path.join(app.getPath("documents"), "accounts.zip")
});
if (savePath) {
const accPath = EthoAccounts.getKeyStoreLocation();
fs.readdir(accPath, function (err, files) {
var zip = new admZip();
for (let filePath of files) {
zip.addFile(filePath, fs.readFileSync(path.join(accPath, filePath)));
}
// store zip to path
zip.writeZip(savePath);
});
}
}
importAccounts(accountsFile) {
var extName = path.extname(accountsFile).toUpperCase();
const accPath = EthoAccounts.getKeyStoreLocation();
if (extName == ".ZIP") {
var zip = new admZip(accountsFile);
zip.extractAllTo(accPath, true);
return {success: true, text: "Accounts ware successfully imported."};
} else {
try {
fs.copySync(accountsFile, path.join(accPath, path.basename(accountsFile)));
return {success: true, text: "Account was successfully imported."};
} catch (err) {
return {success: false, text: err};
}
}
}
saveAccount(account) {
fs.writeFile(path.join(tEthoAccountshis.getKeyStoreLocation(), "0x" + account.address), JSON.stringify(account), "utf8", function () {
// file was written
});
}
}
ipcMain.on("exportAccounts", (event, arg) => {
EthoAccounts.exportAccounts();
});
ipcMain.on("importAccounts", (event, arg) => {
var openPath = dialog.showOpenDialog({
defaultPath: app.getPath("documents"),
filters: [
{
name: "archive",
extensions: ["zip"]
}, {
name: "json",
extensions: ["json"]
}, {
name: "All",
extensions: ["*"]
}
]
});
if (openPath) {
event.returnValue = EthoAccounts.importAccounts(openPath[0]);
} else {
event.returnValue = {};
}
});
ipcMain.on("saveAccount", (event, arg) => {
EthoAccounts.saveAccount(arg);
event.returnValue = true;
});
EthoAccounts = new Accounts();