-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathstorage.js
70 lines (57 loc) · 1.58 KB
/
storage.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
var aesjs = require('aes-js');
var fs = require('fs');
var path = require('path');
var zlib = require('zlib');
const FILE_PATH = path.join(userDataPath, 'storage.dat');
const PASSWORD = aesjs.utils.utf8.toBytes('7ri+!l3+OEf@afLaHlEq7eN?ezlenieT');
exports.read = function () {
var data = {};
try {
let aesCtr = new aesjs.ModeOfOperation.ctr(PASSWORD);
let encrypted = new Uint8Array(fs.readFileSync(FILE_PATH));
let zip = aesCtr.decrypt(encrypted);
let json = zlib.gunzipSync(zip);
data = JSON.parse(json);
} catch (e) {
if (fs.existsSync(FILE_PATH)) {
fs.renameSync(FILE_PATH, FILE_PATH + '_broken_' + Date.now());
}
}
return data;
};
exports.readServers = function () {
var data = exports.read();
let servers = [];
if (data && data.servers) {
servers = data.servers;
}
return servers;
};
exports.createServer = function (server) {
exports.deleteServer(server);
var servers = exports.readServers();
servers.push(server);
writeServers(servers);
};
exports.deleteServer = function (server) {
if (!server.name) {
return;
}
var servers = exports.readServers()
.filter(function (s) {
return (s.name !== server.name);
});
writeServers(servers);
};
var write = function (data) {
let aesCtr = new aesjs.ModeOfOperation.ctr(PASSWORD);
let json = JSON.stringify(data);
let zip = new Uint8Array(zlib.gzipSync(json));
let encrypted = aesCtr.encrypt(zip);
fs.writeFileSync(FILE_PATH, encrypted);
};
var writeServers = function (servers) {
var data = exports.read();
data.servers = servers;
write(data);
};