Skip to content

Commit c8a9404

Browse files
committed
fix: Unify keychain and keytar, and support Linux libsecret
1 parent 622e632 commit c8a9404

3 files changed

Lines changed: 23 additions & 49 deletions

File tree

package-lock.json

Lines changed: 0 additions & 7 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@
4242
"fs-extra": "^10.1.0",
4343
"inquirer": "^8.2.7",
4444
"js-yaml": "^4.1.1",
45-
"keychain": "^1.5.0",
4645
"keytar": "^7.9.0",
4746
"lodash": "^4.17.13",
4847
"mkdirp": "^3.0.1",

src/box-command.js

Lines changed: 23 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -33,15 +33,8 @@ const CLITokenCache = require('./token-cache');
3333
const utils = require('./util');
3434
const pkg = require('../package.json');
3535
const inquirer = require('inquirer');
36-
const darwinKeychain = require('keychain');
3736
const { stringifyStream } = require('@discoveryjs/json-ext');
3837
const progress = require('cli-progress');
39-
const darwinKeychainSetPassword = promisify(
40-
darwinKeychain.setPassword.bind(darwinKeychain)
41-
);
42-
const darwinKeychainGetPassword = promisify(
43-
darwinKeychain.getPassword.bind(darwinKeychain)
44-
);
4538
let keytar = null;
4639
try {
4740
keytar = require('keytar');
@@ -1803,20 +1796,9 @@ class BoxCommand extends Command {
18031796
async getEnvironments() {
18041797
try {
18051798
switch (process.platform) {
1806-
case 'darwin': {
1807-
try {
1808-
const password = await darwinKeychainGetPassword({
1809-
account: 'Box',
1810-
service: 'boxcli',
1811-
});
1812-
return JSON.parse(password);
1813-
} catch {
1814-
// fallback to env file if not found
1815-
}
1816-
break;
1817-
}
1818-
1819-
case 'win32': {
1799+
case 'darwin':
1800+
case 'win32':
1801+
case 'linux': {
18201802
try {
18211803
if (!keytar) {
18221804
break;
@@ -1829,7 +1811,7 @@ class BoxCommand extends Command {
18291811
return JSON.parse(password);
18301812
}
18311813
} catch {
1832-
// fallback to env file if not found
1814+
// fallback to env file if keytar fails or secure storage not available
18331815
}
18341816
break;
18351817
}
@@ -1859,27 +1841,27 @@ class BoxCommand extends Command {
18591841
Object.assign(environments, updatedEnvironments);
18601842
try {
18611843
let fileContents = JSON.stringify(environments, null, 4);
1844+
18621845
switch (process.platform) {
1863-
case 'darwin': {
1864-
await darwinKeychainSetPassword({
1865-
account: 'Box',
1866-
service: 'boxcli',
1867-
password: JSON.stringify(environments),
1868-
});
1869-
fileContents = '';
1870-
break;
1871-
}
1872-
1873-
case 'win32': {
1874-
if (!keytar) {
1875-
break;
1846+
case 'darwin':
1847+
case 'win32':
1848+
case 'linux': {
1849+
if (keytar) {
1850+
try {
1851+
await keytar.setPassword(
1852+
'boxcli' /* service */,
1853+
'Box' /* account */,
1854+
JSON.stringify(environments) /* password */
1855+
);
1856+
fileContents = '';
1857+
} catch (keytarError) {
1858+
// fallback to file storage if secure storage fails
1859+
DEBUG.init(
1860+
'Could not store credentials in secure storage, falling back to file: %s',
1861+
keytarError.message
1862+
);
1863+
}
18761864
}
1877-
await keytar.setPassword(
1878-
'boxcli' /* service */,
1879-
'Box' /* account */,
1880-
JSON.stringify(environments) /* password */
1881-
);
1882-
fileContents = '';
18831865
break;
18841866
}
18851867

0 commit comments

Comments
 (0)