@ps-aux/nodebup 0.4.0 → 0.5.0

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.
@@ -21,24 +21,24 @@ var _AppLogger = require("../log/AppLogger");
21
21
 
22
22
  var _Path = require("../fs/path/Path");
23
23
 
24
- var _StorageBackendProvider = require("../storage/StorageBackendProvider");
25
-
26
24
  var _config = require("../config");
27
25
 
26
+ var _BackupController = require("./BackupController");
27
+
28
28
  var _dec, _dec2, _dec3, _dec4, _class;
29
29
 
30
30
  function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
31
31
 
32
32
  let AggregateBackupController = (_dec = (0, _inversify.injectable)(), _dec2 = function (target, key) {
33
33
  return (0, _inversify.inject)(_ContextSymbols.AppConfig_)(target, undefined, 6);
34
- }, _dec3 = Reflect.metadata("design:type", Function), _dec4 = Reflect.metadata("design:paramtypes", [typeof _Gpg.Gpg === "undefined" ? Object : _Gpg.Gpg, typeof _SshKeyManager.SshKeyManager === "undefined" ? Object : _SshKeyManager.SshKeyManager, typeof _Fs.Fs === "undefined" ? Object : _Fs.Fs, typeof _FsSyncer.FsSyncer === "undefined" ? Object : _FsSyncer.FsSyncer, typeof _AppLogger.AppLogger === "undefined" ? Object : _AppLogger.AppLogger, typeof _StorageBackendProvider.StorageBackendProvider === "undefined" ? Object : _StorageBackendProvider.StorageBackendProvider, typeof _config.Config === "undefined" ? Object : _config.Config]), _dec(_class = _dec2(_class = _dec3(_class = _dec4(_class = class AggregateBackupController {
35
- constructor(gpg, ssh, fs, fsSyncer, log, storageBackendProvider, cfg) {
34
+ }, _dec3 = Reflect.metadata("design:type", Function), _dec4 = Reflect.metadata("design:paramtypes", [typeof _Gpg.Gpg === "undefined" ? Object : _Gpg.Gpg, typeof _SshKeyManager.SshKeyManager === "undefined" ? Object : _SshKeyManager.SshKeyManager, typeof _Fs.Fs === "undefined" ? Object : _Fs.Fs, typeof _FsSyncer.FsSyncer === "undefined" ? Object : _FsSyncer.FsSyncer, typeof _AppLogger.AppLogger === "undefined" ? Object : _AppLogger.AppLogger, typeof _BackupController.BackupController === "undefined" ? Object : _BackupController.BackupController, typeof _config.Config === "undefined" ? Object : _config.Config]), _dec(_class = _dec2(_class = _dec3(_class = _dec4(_class = class AggregateBackupController {
35
+ constructor(gpg, ssh, fs, fsSyncer, log, backupController, cfg) {
36
36
  this.gpg = gpg;
37
37
  this.ssh = ssh;
38
38
  this.fs = fs;
39
39
  this.fsSyncer = fsSyncer;
40
40
  this.log = log;
41
- this.storageBackendProvider = storageBackendProvider;
41
+ this.backupController = backupController;
42
42
  this.cfg = cfg;
43
43
 
44
44
  _defineProperty(this, "backup", async (aggrName, storage) => {
@@ -56,7 +56,7 @@ let AggregateBackupController = (_dec = (0, _inversify.injectable)(), _dec2 = fu
56
56
  file.forEach(f => this.runFileTask(f, aggrDir));
57
57
  sshKey.forEach(k => this.runSshKeyTask(k, aggrDir));
58
58
  gpgKey.forEach(k => this.runGpgKeyTask(k, aggrDir));
59
- this.storageBackendProvider.provide(storage).store(aggrDir);
59
+ this.backupController.backup(storage, aggrDir);
60
60
  } finally {
61
61
  this.log.debug();
62
62
  this.fs.rmDir(aggrDir);
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.BackupController = void 0;
7
+
8
+ var _FsSyncer = require("../fs/fssync/FsSyncer");
9
+
10
+ var _Gpg = require("../tools/gpg/Gpg");
11
+
12
+ var _Fs = require("../fs/Fs");
13
+
14
+ var _SshKeyManager = require("../tools/ssh/SshKeyManager");
15
+
16
+ var _inversify = require("inversify");
17
+
18
+ var _ContextSymbols = require("../ctx/ContextSymbols");
19
+
20
+ var _AppLogger = require("../log/AppLogger");
21
+
22
+ var _StorageBackendProvider = require("../storage/StorageBackendProvider");
23
+
24
+ var _config = require("../config");
25
+
26
+ var _dec, _dec2, _dec3, _dec4, _class;
27
+
28
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
29
+
30
+ let BackupController = (_dec = (0, _inversify.injectable)(), _dec2 = function (target, key) {
31
+ return (0, _inversify.inject)(_ContextSymbols.AppConfig_)(target, undefined, 6);
32
+ }, _dec3 = Reflect.metadata("design:type", Function), _dec4 = Reflect.metadata("design:paramtypes", [typeof _Gpg.Gpg === "undefined" ? Object : _Gpg.Gpg, typeof _SshKeyManager.SshKeyManager === "undefined" ? Object : _SshKeyManager.SshKeyManager, typeof _Fs.Fs === "undefined" ? Object : _Fs.Fs, typeof _FsSyncer.FsSyncer === "undefined" ? Object : _FsSyncer.FsSyncer, typeof _AppLogger.AppLogger === "undefined" ? Object : _AppLogger.AppLogger, typeof _StorageBackendProvider.StorageBackendProvider === "undefined" ? Object : _StorageBackendProvider.StorageBackendProvider, typeof _config.Config === "undefined" ? Object : _config.Config]), _dec(_class = _dec2(_class = _dec3(_class = _dec4(_class = class BackupController {
33
+ constructor(gpg, ssh, fs, fsSyncer, log, storageBackendProvider, cfg) {
34
+ this.gpg = gpg;
35
+ this.ssh = ssh;
36
+ this.fs = fs;
37
+ this.fsSyncer = fsSyncer;
38
+ this.log = log;
39
+ this.storageBackendProvider = storageBackendProvider;
40
+ this.cfg = cfg;
41
+
42
+ _defineProperty(this, "backup", (storageName, path) => {
43
+ this.log.info(`Backing up from ${path} to '${storageName}'`);
44
+ this.storage(storageName).store(path);
45
+ });
46
+
47
+ _defineProperty(this, "restore", (storageName, path) => {
48
+ this.log.info(`Restoring from '${storageName}' to ${path}`);
49
+ this.storage(storageName).restore(path);
50
+ });
51
+
52
+ _defineProperty(this, "storage", name => this.storageBackendProvider.provide(name));
53
+ }
54
+
55
+ }) || _class) || _class) || _class) || _class);
56
+ exports.BackupController = BackupController;
package/lib/cli/app.js CHANGED
@@ -17,18 +17,33 @@ var _AggregateBackupController = require("../bup/AggregateBackupController");
17
17
 
18
18
  var _ResticController = require("../storage/restic/ResticController");
19
19
 
20
+ var _BackupController = require("../bup/BackupController");
21
+
22
+ var _Path = require("../fs/path/Path");
23
+
20
24
  const createApp = () => _nclif.CliApp.of({
21
25
  commands: {
22
- restic: (0, _nclif.cmdGroup)({
23
- commands: {
24
- 'init-repo': (0, _nclif.cmd)({
25
- positionals: [{
26
- name: 'resticStorageName',
27
- required: true
28
- }],
29
- run: (arg, c) => c.get(_ResticController.ResticController).initRepo(arg.resticStorageName)
30
- })
31
- }
26
+ backup: (0, _nclif.cmd)({
27
+ description: 'Backup a dir to the given storage',
28
+ positionals: [{
29
+ name: 'path',
30
+ required: true
31
+ }, {
32
+ name: 'storageName',
33
+ required: true
34
+ }],
35
+ run: (a, c) => c.get(_BackupController.BackupController).backup(a.storageName, _Path.AbsPath.from(a.path))
36
+ }),
37
+ restore: (0, _nclif.cmd)({
38
+ description: 'Restore the storage to the given dir',
39
+ positionals: [{
40
+ name: 'storageName',
41
+ required: true
42
+ }, {
43
+ name: 'path',
44
+ required: true
45
+ }],
46
+ run: (a, c) => c.get(_BackupController.BackupController).restore(a.storageName, _Path.AbsPath.from(a.path))
32
47
  }),
33
48
  aggr: (0, _nclif.cmdGroup)({
34
49
  commands: {
@@ -36,20 +51,30 @@ const createApp = () => _nclif.CliApp.of({
36
51
  description: 'Run backup',
37
52
  positionals: [{
38
53
  name: 'aggregateName',
39
- type: 'string',
40
54
  required: true
41
55
  }, {
42
56
  name: 'storageName',
43
- type: 'string',
44
57
  required: true
45
58
  }],
46
59
  run: (a, c) => c.get(_AggregateBackupController.AggregateBackupController).backup(a.aggregateName, a.storageName)
47
60
  })
48
61
  }
49
- })
62
+ }),
63
+ restic
50
64
  }
51
65
  }).addObjectConfig(pwd => (0, _Config.readConfig)(pwd)).context(({
52
66
  config
53
67
  }) => (0, _Context.createContext)(config));
54
68
 
55
- exports.createApp = createApp;
69
+ exports.createApp = createApp;
70
+ const restic = (0, _nclif.cmdGroup)({
71
+ commands: {
72
+ 'init-repo': (0, _nclif.cmd)({
73
+ positionals: [{
74
+ name: 'resticStorageName',
75
+ required: true
76
+ }],
77
+ run: (arg, c) => c.get(_ResticController.ResticController).initRepo(arg.resticStorageName)
78
+ })
79
+ }
80
+ });
@@ -14,9 +14,6 @@ var _validateConfigAgainstSchema = require("./validateConfigAgainstSchema");
14
14
  var _expandAndCreatePath = require("./expandAndCreatePath");
15
15
 
16
16
  const expandPaths = (cfg, exp, cwd) => {
17
- cfg.storage.filter(s => s.type === 'file').map(s => s).forEach(s => {
18
- s.path = exp(s.path);
19
- });
20
17
  cfg.storage.filter(s => s.type === 'restic' || s.type === 'rclone').map(s => s).forEach(s => {
21
18
  if (s.credentialsFile) s.credentialsFile = exp(s.credentialsFile);
22
19
  s.passwordFile = exp(s.passwordFile);
@@ -9,6 +9,5 @@ exports.StorageTypeConst = StorageTypeConst;
9
9
 
10
10
  (function (StorageTypeConst) {
11
11
  StorageTypeConst["Restic"] = "restic";
12
- StorageTypeConst["File"] = "file";
13
12
  StorageTypeConst["RClone"] = "rclone";
14
13
  })(StorageTypeConst || (exports.StorageTypeConst = StorageTypeConst = {}));
@@ -25,7 +25,7 @@ const KeyTaskSchema = _joi.default.object({
25
25
 
26
26
  const createStorageSchema = props => _joi.default.object({
27
27
  name: _joi.default.string(),
28
- type: _joi.default.string().valid(_index.StorageTypeConst.Restic, _index.StorageTypeConst.File, _index.StorageTypeConst.RClone),
28
+ type: _joi.default.string().valid(_index.StorageTypeConst.Restic, _index.StorageTypeConst.RClone),
29
29
  ...props
30
30
  });
31
31
 
@@ -4,10 +4,6 @@ var _validateConfigAgainstSchema = require("./validateConfigAgainstSchema");
4
4
 
5
5
  const f1 = {
6
6
  storage: [{
7
- name: 'fs',
8
- type: 'file',
9
- path: '~/tmp/nodepub/test-store'
10
- }, {
11
7
  name: 'restic',
12
8
  type: 'restic',
13
9
  repo: 'b2:reo',
@@ -33,13 +33,15 @@ var _B2CredentialsProvider = require("../storage/b2/B2CredentialsProvider");
33
33
 
34
34
  var _RCloneClientFactory = require("../storage/rclone/RCloneClientFactory");
35
35
 
36
+ var _BackupController = require("../bup/BackupController");
37
+
36
38
  const createContext = cfg => {
37
39
  const c = new _inversify.Container();
38
40
  c.bind(_ContextSymbols.AppConfig_).toConstantValue(cfg);
39
41
  const log = new _AppLogger.AppLogger();
40
42
  c.bind(_ContextSymbols.Log_).toConstantValue(log);
41
43
  c.bind(_AppLogger.AppLogger).toConstantValue(log);
42
- const self = [_Gpg.Gpg, _Shell.Shell, _Fs.Fs, _FsSyncer.FsSyncer, _SshKeyManager.SshKeyManager, _StorageBackendProvider.StorageBackendProvider, _ResticClientFactory.ResticClientFactory, _AggregateBackupController.AggregateBackupController, _ResticController.ResticController, _B2CredentialsProvider.B2CredentialsProvider, _RCloneClientFactory.RCloneClientFactory];
44
+ const self = [_Gpg.Gpg, _Shell.Shell, _Fs.Fs, _FsSyncer.FsSyncer, _SshKeyManager.SshKeyManager, _StorageBackendProvider.StorageBackendProvider, _ResticClientFactory.ResticClientFactory, _AggregateBackupController.AggregateBackupController, _ResticController.ResticController, _B2CredentialsProvider.B2CredentialsProvider, _RCloneClientFactory.RCloneClientFactory, _BackupController.BackupController];
43
45
  self.forEach(s => c.bind(s).toSelf());
44
46
  return c;
45
47
  };
@@ -9,12 +9,12 @@ var _ConsoleLogger = require("./ConsoleLogger");
9
9
 
10
10
  var _inversify = require("inversify");
11
11
 
12
- var _dec, _class;
12
+ var _dec, _dec2, _dec3, _class;
13
13
 
14
14
  function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
15
15
 
16
- let AppLogger = (_dec = (0, _inversify.injectable)(), _dec(_class = class AppLogger {
17
- constructor() {
16
+ let AppLogger = (_dec = (0, _inversify.injectable)(), _dec2 = Reflect.metadata("design:type", Function), _dec3 = Reflect.metadata("design:paramtypes", [void 0]), _dec(_class = _dec2(_class = _dec3(_class = class AppLogger {
17
+ constructor(mute = false) {
18
18
  _defineProperty(this, "log", new _ConsoleLogger.ConsoleLogger());
19
19
 
20
20
  _defineProperty(this, "debug", this.log.debug);
@@ -22,7 +22,9 @@ let AppLogger = (_dec = (0, _inversify.injectable)(), _dec(_class = class AppLog
22
22
  _defineProperty(this, "info", this.log.info);
23
23
 
24
24
  _defineProperty(this, "error", this.log.error);
25
+
26
+ if (mute) this.log.setEnabled(false);
25
27
  }
26
28
 
27
- }) || _class);
29
+ }) || _class) || _class) || _class);
28
30
  exports.AppLogger = AppLogger;
@@ -16,6 +16,10 @@ class BackupClientStorageBackend {
16
16
  _defineProperty(this, "store", from => {
17
17
  this.client.backup(from, _Path.RelativePath.from('.'));
18
18
  });
19
+
20
+ _defineProperty(this, "restore", to => {
21
+ this.client.restore(to);
22
+ });
19
23
  }
20
24
 
21
25
  }
@@ -7,10 +7,6 @@ exports.StorageBackendProvider = void 0;
7
7
 
8
8
  var _inversify = require("inversify");
9
9
 
10
- var _FsSyncer = require("../fs/fssync/FsSyncer");
11
-
12
- var _LocalFileStorageBackend = require("./local-file/LocalFileStorageBackend");
13
-
14
10
  var _ContextSymbols = require("../ctx/ContextSymbols");
15
11
 
16
12
  var _config = require("../config");
@@ -19,8 +15,6 @@ var _ResticClientFactory = require("./restic/ResticClientFactory");
19
15
 
20
16
  var _BackupClientStorageBackend = require("./BackupClientStorageBackend");
21
17
 
22
- var _Fs = require("../fs/Fs");
23
-
24
18
  var _RCloneClientFactory = require("./rclone/RCloneClientFactory");
25
19
 
26
20
  var _dec, _dec2, _dec3, _dec4, _class;
@@ -28,13 +22,11 @@ var _dec, _dec2, _dec3, _dec4, _class;
28
22
  function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
29
23
 
30
24
  let StorageBackendProvider = (_dec = (0, _inversify.injectable)(), _dec2 = function (target, key) {
31
- return (0, _inversify.inject)(_ContextSymbols.AppConfig_)(target, undefined, 4);
32
- }, _dec3 = Reflect.metadata("design:type", Function), _dec4 = Reflect.metadata("design:paramtypes", [typeof _FsSyncer.FsSyncer === "undefined" ? Object : _FsSyncer.FsSyncer, typeof _ResticClientFactory.ResticClientFactory === "undefined" ? Object : _ResticClientFactory.ResticClientFactory, typeof _RCloneClientFactory.RCloneClientFactory === "undefined" ? Object : _RCloneClientFactory.RCloneClientFactory, typeof _Fs.Fs === "undefined" ? Object : _Fs.Fs, typeof _config.Config === "undefined" ? Object : _config.Config]), _dec(_class = _dec2(_class = _dec3(_class = _dec4(_class = class StorageBackendProvider {
33
- constructor(fsSyncer, resticFac, rcloneFac, fs, cfg) {
34
- this.fsSyncer = fsSyncer;
25
+ return (0, _inversify.inject)(_ContextSymbols.AppConfig_)(target, undefined, 2);
26
+ }, _dec3 = Reflect.metadata("design:type", Function), _dec4 = Reflect.metadata("design:paramtypes", [typeof _ResticClientFactory.ResticClientFactory === "undefined" ? Object : _ResticClientFactory.ResticClientFactory, typeof _RCloneClientFactory.RCloneClientFactory === "undefined" ? Object : _RCloneClientFactory.RCloneClientFactory, typeof _config.Config === "undefined" ? Object : _config.Config]), _dec(_class = _dec2(_class = _dec3(_class = _dec4(_class = class StorageBackendProvider {
27
+ constructor(resticFac, rcloneFac, cfg) {
35
28
  this.resticFac = resticFac;
36
29
  this.rcloneFac = rcloneFac;
37
- this.fs = fs;
38
30
  this.cfg = cfg;
39
31
 
40
32
  _defineProperty(this, "provide", name => {
@@ -43,33 +35,17 @@ let StorageBackendProvider = (_dec = (0, _inversify.injectable)(), _dec2 = funct
43
35
  let b;
44
36
 
45
37
  switch (s.type) {
46
- case _config.StorageTypeConst.File:
47
- b = this.localFile(s);
48
- break;
49
-
50
38
  case _config.StorageTypeConst.Restic:
51
- b = this.restic(s);
39
+ b = this.resticFac.create(s);
52
40
  break;
53
41
 
54
42
  case _config.StorageTypeConst.RClone:
55
- b = this.rclone(s);
43
+ b = this.rcloneFac.create(s);
56
44
  break;
57
45
  }
58
46
 
59
47
  if (!b) throw new Error(`Unsupported storage type ${s.type}`);
60
- return b;
61
- });
62
-
63
- _defineProperty(this, "rclone", cfg => {
64
- return new _BackupClientStorageBackend.BackupClientStorageBackend(this.rcloneFac.create(cfg));
65
- });
66
-
67
- _defineProperty(this, "restic", cfg => {
68
- return new _BackupClientStorageBackend.BackupClientStorageBackend(this.resticFac.create(cfg));
69
- });
70
-
71
- _defineProperty(this, "localFile", cfg => {
72
- return new _LocalFileStorageBackend.LocalFileStorageBackend(this.fsSyncer, cfg.path);
48
+ return new _BackupClientStorageBackend.BackupClientStorageBackend(b);
73
49
  });
74
50
  }
75
51
 
@@ -1,7 +1,5 @@
1
1
  "use strict";
2
2
 
3
- var _AppLogger = require("../../log/AppLogger");
4
-
5
3
  var _Shell = require("../../tools/shell/Shell");
6
4
 
7
5
  var _test = require("../../../test");
@@ -17,7 +15,7 @@ var _b2TestConfig = require("../../../test/b2TestConfig");
17
15
  var _testHelper = require("../../../test/testHelper");
18
16
 
19
17
  describe('RcloneClient', () => {
20
- const l = new _AppLogger.AppLogger();
18
+ const l = _testHelper.testLog;
21
19
  const getRestoreDir = (0, _test.testdataDirBuilder)('b2/restore');
22
20
  describe('local', () => {
23
21
  const backupDir = (0, _test.testDir)('backup/1');
@@ -2,8 +2,6 @@
2
2
 
3
3
  var _ResticClient = require("./ResticClient");
4
4
 
5
- var _AppLogger = require("../../log/AppLogger");
6
-
7
5
  var _Shell = require("../../tools/shell/Shell");
8
6
 
9
7
  var _test = require("../../../test");
@@ -17,7 +15,7 @@ var _testHelper = require("../../../test/testHelper");
17
15
  var _b2TestConfig = require("../../../test/b2TestConfig");
18
16
 
19
17
  describe('ResticClient', () => {
20
- const l = new _AppLogger.AppLogger();
18
+ const l = _testHelper.testLog;
21
19
  const password = 'foo123';
22
20
  describe('local', () => {
23
21
  const backupDir = (0, _test.testDir)('backup/1');
@@ -1,7 +1,5 @@
1
1
  "use strict";
2
2
 
3
- var _AppLogger = require("../../log/AppLogger");
4
-
5
3
  var _Gpg = require("./Gpg");
6
4
 
7
5
  var _Shell = require("../shell/Shell");
@@ -10,10 +8,12 @@ var _test = require("../../../test");
10
8
 
11
9
  var _fs = _interopRequireDefault(require("fs"));
12
10
 
11
+ var _testHelper = require("../../../test/testHelper");
12
+
13
13
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
14
14
 
15
15
  it('works', () => {
16
- const sut = new _Gpg.Gpg(new _Shell.Shell(new _AppLogger.AppLogger()));
16
+ const sut = new _Gpg.Gpg(new _Shell.Shell(_testHelper.testLog));
17
17
 
18
18
  const key = _fs.default.readFileSync((0, _test.testDir)('gpg/john.doe@foo.com.key.asc')).toString();
19
19
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ps-aux/nodebup",
3
- "version": "0.4.0",
3
+ "version": "0.5.0",
4
4
  "description": "",
5
5
  "module": "lib/index.js",
6
6
  "main": "lib/index.js",
@@ -1,22 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.LocalFileStorageBackend = void 0;
7
-
8
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
9
-
10
- class LocalFileStorageBackend {
11
- constructor(fsSyncer, dst) {
12
- this.fsSyncer = fsSyncer;
13
- this.dst = dst;
14
-
15
- _defineProperty(this, "store", from => {
16
- this.fsSyncer.syncDirs(from, this.dst);
17
- });
18
- }
19
-
20
- }
21
-
22
- exports.LocalFileStorageBackend = LocalFileStorageBackend;