cloudron 4.15.1 → 4.15.2
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/README.md +2 -2
- package/bin/cloudron-backup +2 -2
- package/package.json +1 -1
- package/src/backup-tools.js +8 -8
- package/src/templates/Dockerfile.ejs +1 -1
package/README.md
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
# The Cloudron CLI tool
|
|
2
2
|
|
|
3
|
-
The [Cloudron](https://cloudron.io) CLI tool allows you to install, configure and test apps on your Cloudron.
|
|
3
|
+
The [Cloudron](https://cloudron.io) [CLI tool](https://docs.cloudron.io/packaging/cli/) allows you to install, configure and test apps on your Cloudron.
|
|
4
4
|
It is also used to submit your app to the Cloudron Store. The `machine` subcommand can be used for
|
|
5
5
|
various maintenance tasks on a selfhosted Cloudron.
|
|
6
6
|
|
|
7
|
-
Read the Cloudron.io [documentation](https://cloudron.io/
|
|
7
|
+
Read the Cloudron.io [documentation](https://docs.cloudron.io/) for in-depth information.
|
|
8
8
|
|
|
9
9
|
## Installation
|
|
10
10
|
|
package/bin/cloudron-backup
CHANGED
|
@@ -20,12 +20,12 @@ program.command('list')
|
|
|
20
20
|
.action(actions.backupList);
|
|
21
21
|
|
|
22
22
|
program.command('decrypt <file>')
|
|
23
|
-
.description('Decrypt
|
|
23
|
+
.description('Decrypt an encrypted file')
|
|
24
24
|
.option('--password <password>', 'password')
|
|
25
25
|
.action(backupTools.decrypt);
|
|
26
26
|
|
|
27
27
|
program.command('decrypt-dir <indir> <outdir>')
|
|
28
|
-
.description('Decrypt
|
|
28
|
+
.description('Decrypt an encrypted directory')
|
|
29
29
|
.option('--password <password>', 'password')
|
|
30
30
|
.action(backupTools.decryptDir);
|
|
31
31
|
|
package/package.json
CHANGED
package/src/backup-tools.js
CHANGED
|
@@ -23,7 +23,7 @@ function encryptFilePath(filePath, encryption) {
|
|
|
23
23
|
assert.strictEqual(typeof filePath, 'string');
|
|
24
24
|
assert.strictEqual(typeof encryption, 'object');
|
|
25
25
|
|
|
26
|
-
|
|
26
|
+
const encryptedParts = filePath.split('/').map(function (part) {
|
|
27
27
|
let hmac = crypto.createHmac('sha256', Buffer.from(encryption.filenameHmacKey, 'hex'));
|
|
28
28
|
const iv = hmac.update(part).digest().slice(0, 16); // iv has to be deterministic, for our sync (copy) logic to work
|
|
29
29
|
const cipher = crypto.createCipheriv('aes-256-cbc', Buffer.from(encryption.filenameKey, 'hex'), iv);
|
|
@@ -42,7 +42,7 @@ function decryptFilePath(filePath, encryption) {
|
|
|
42
42
|
assert.strictEqual(typeof filePath, 'string');
|
|
43
43
|
assert.strictEqual(typeof encryption, 'object');
|
|
44
44
|
|
|
45
|
-
|
|
45
|
+
const decryptedParts = [];
|
|
46
46
|
for (let part of filePath.split('/')) {
|
|
47
47
|
part = part + Array(part.length % 4).join('='); // add back = padding
|
|
48
48
|
part = part.replace(/-/g, '/'); // replace with '/'
|
|
@@ -197,9 +197,9 @@ function encrypt(input, options) {
|
|
|
197
197
|
|
|
198
198
|
const encryption = aesKeysFromPassword(options.password);
|
|
199
199
|
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
200
|
+
const inStream = fs.createReadStream(input);
|
|
201
|
+
const outStream = process.stdout;
|
|
202
|
+
const encryptStream = new EncryptStream(encryption);
|
|
203
203
|
|
|
204
204
|
inStream.on('error', exit);
|
|
205
205
|
encryptStream.on('error', exit);
|
|
@@ -227,9 +227,9 @@ function decrypt(input, options) {
|
|
|
227
227
|
|
|
228
228
|
const encryption = aesKeysFromPassword(options.password);
|
|
229
229
|
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
230
|
+
const inStream = fs.createReadStream(input);
|
|
231
|
+
const outStream = process.stdout;
|
|
232
|
+
const decryptStream = new DecryptStream(encryption);
|
|
233
233
|
|
|
234
234
|
inStream.on('error', exit);
|
|
235
235
|
decryptStream.on('error', exit);
|