diff --git a/package-lock.json b/package-lock.json index 8b13009b90..9ec941f1ae 100644 --- a/package-lock.json +++ b/package-lock.json @@ -34,6 +34,15 @@ "integrity": "sha512-esk3CG25hRtHsVHm+LOjiSFYdw8be3uIY653WUwR43Bro914HSimPgPpqgajkhTJ0awK3RQfaIxP7zvbtCpcyg==", "dev": true }, + "@types/mkdirp": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@types/mkdirp/-/mkdirp-0.5.2.tgz", + "integrity": "sha512-U5icWpv7YnZYGsN4/cmh3WD2onMY0aJIiTE6+51TwJCttdHvtCYmkBNOobHlXwrJRL0nkH9jH4kD+1FAdMN4Tg==", + "dev": true, + "requires": { + "@types/node": "10.0.8" + } + }, "@types/node": { "version": "10.0.8", "resolved": "https://registry.npmjs.org/@types/node/-/node-10.0.8.tgz", @@ -3102,7 +3111,6 @@ "version": "0.5.1", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, "requires": { "minimist": "0.0.8" }, @@ -3110,8 +3118,7 @@ "minimist": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" } } }, diff --git a/package.json b/package.json index aaea6fd3e8..41ba1690f7 100644 --- a/package.json +++ b/package.json @@ -47,6 +47,7 @@ "@types/commander": "^2.12.2", "@types/lowdb": "^1.0.1", "@types/lunr": "^2.1.5", + "@types/mkdirp": "^0.5.2", "@types/node": "^10.0.8", "@types/node-forge": "^0.7.1", "@types/readline-sync": "^1.4.3", @@ -64,6 +65,7 @@ "chalk": "2.4.1", "commander": "2.15.1", "lowdb": "1.0.0", + "mkdirp": "0.5.1", "node-fetch": "2.1.2", "node-forge": "0.7.1", "readline-sync": "1.4.9" diff --git a/src/program.ts b/src/program.ts index 7f73ee9fd7..eea0c1d3d5 100644 --- a/src/program.ts +++ b/src/program.ts @@ -64,18 +64,18 @@ export class Program { program.on('--help', () => { writeLn('\n Examples:'); writeLn(''); - writeLn(' $ bw login'); - writeLn(' $ bw sync'); - writeLn(' $ bw lock'); - writeLn(' $ bw unlock myPassword321'); - writeLn(' $ bw generate -lusn --length 18'); - writeLn(' $ bw list items --search google'); - writeLn(' $ bw get item 99ee88d2-6046-4ea7-92c2-acac464b1412'); - writeLn(' $ bw get password google.com'); - writeLn(' $ bw delete item 99ee88d2-6046-4ea7-92c2-acac464b1412'); - writeLn(' $ echo \'{"name":"My Folder"}\' | bw encode'); - writeLn(' $ bw create folder eyJuYW1lIjoiTXkgRm9sZGVyIn0K'); - writeLn(' $ bw edit folder c7c7b60b-9c61-40f2-8ccd-36c49595ed72 eyJuYW1lIjoiTXkgRm9sZGVyMiJ9Cg=='); + writeLn(' bw login'); + writeLn(' bw sync'); + writeLn(' bw lock'); + writeLn(' bw unlock myPassword321'); + writeLn(' bw generate -lusn --length 18'); + writeLn(' bw list items --search google'); + writeLn(' bw get item 99ee88d2-6046-4ea7-92c2-acac464b1412'); + writeLn(' bw get password google.com'); + writeLn(' bw delete item 99ee88d2-6046-4ea7-92c2-acac464b1412'); + writeLn(' echo \'{"name":"My Folder"}\' | bw encode'); + writeLn(' bw create folder eyJuYW1lIjoiTXkgRm9sZGVyIn0K'); + writeLn(' bw edit folder c7c7b60b-9c61-40f2-8ccd-36c49595ed72 eyJuYW1lIjoiTXkgRm9sZGVyMiJ9Cg=='); writeLn(''); }); @@ -87,7 +87,7 @@ export class Program { .action(async (email: string, password: string, cmd: program.Command) => { await this.exitIfAuthed(); const command = new LoginCommand(this.main.authService, this.main.apiService, - this.main.cryptoFunctionService); + this.main.cryptoFunctionService, this.main.syncService); const response = await command.run(email, password, cmd); this.processResponse(response); }); diff --git a/src/services/lowdbStorage.service.ts b/src/services/lowdbStorage.service.ts index 96ac3a8a72..5b5ea92f9b 100644 --- a/src/services/lowdbStorage.service.ts +++ b/src/services/lowdbStorage.service.ts @@ -1,5 +1,8 @@ +import * as fs from 'fs'; import * as lowdb from 'lowdb'; import * as FileSync from 'lowdb/adapters/FileSync'; +import * as mkdirp from 'mkdirp'; +import * as path from 'path'; import { StorageService } from 'jslib/abstractions/storage.service'; import { Utils } from 'jslib/misc/utils'; @@ -8,17 +11,20 @@ export class LowdbStorageService implements StorageService { private db: lowdb.LowdbSync; constructor(appDirName: string) { - let path = null; + let p = null; if (process.platform === 'darwin') { - path = process.env.HOME + '/Library/Application Support'; + p = path.join(process.env.HOME, 'Library/Application Support', appDirName); } else if (process.platform === 'win32') { - path = process.env.APPDATA; + p = path.join(process.env.APPDATA, appDirName); } else { - path = process.env.HOME + '/.config'; + p = path.join(process.env.HOME, '.config', appDirName); } - path += ('/' + appDirName + '/data.json'); + if (!fs.existsSync(p)) { + mkdirp.sync(p, 755); + } + p = path.join(p, 'data.json'); - const adapter = new FileSync(path); + const adapter = new FileSync(p); this.db = lowdb(adapter); }