Merge pull request #946 from bitwarden/authenticate-with-secure-storage-service
Authenticate with secure storage service
This commit is contained in:
commit
3b4142bd0d
|
@ -34,12 +34,12 @@ jobs:
|
||||||
with:
|
with:
|
||||||
node-version: '14'
|
node-version: '14'
|
||||||
|
|
||||||
- name: Cache Node Modules
|
- name: Cache npm
|
||||||
id: node-modules-cache
|
id: npm-cache
|
||||||
uses: actions/cache@c64c572235d810460d0d6876e9c705ad5002b353 # v2.1.6
|
uses: actions/cache@c64c572235d810460d0d6876e9c705ad5002b353 # v2.1.6
|
||||||
with:
|
with:
|
||||||
path: '**/node_modules'
|
path: '~/.npm'
|
||||||
key: ${{ runner.os }}-${{ github.run_id }}-node-${{ hashFiles('**/package-lock.json') }}
|
key: ${{ runner.os }}-${{ github.run_id }}-npm-${{ hashFiles('**/package-lock.json') }}
|
||||||
|
|
||||||
- name: Set Node options
|
- name: Set Node options
|
||||||
run: echo "NODE_OPTIONS=--max_old_space_size=4096" >> $GITHUB_ENV
|
run: echo "NODE_OPTIONS=--max_old_space_size=4096" >> $GITHUB_ENV
|
||||||
|
@ -71,8 +71,7 @@ jobs:
|
||||||
shell: pwsh
|
shell: pwsh
|
||||||
|
|
||||||
- name: Install Node dependencies
|
- name: Install Node dependencies
|
||||||
if: steps.node-modules-cache.outputs.cache-hit != 'true'
|
run: npm ci
|
||||||
run: npm install
|
|
||||||
|
|
||||||
- name: Run linter
|
- name: Run linter
|
||||||
run: npm run lint
|
run: npm run lint
|
||||||
|
@ -132,12 +131,12 @@ jobs:
|
||||||
with:
|
with:
|
||||||
node-version: '14'
|
node-version: '14'
|
||||||
|
|
||||||
- name: Cache Node Modules
|
- name: Cache npm
|
||||||
id: node-modules-cache
|
id: npm-cache
|
||||||
uses: actions/cache@c64c572235d810460d0d6876e9c705ad5002b353 # v2.1.6
|
uses: actions/cache@c64c572235d810460d0d6876e9c705ad5002b353 # v2.1.6
|
||||||
with:
|
with:
|
||||||
path: '**/node_modules'
|
path: '%AppData%/npm-cache'
|
||||||
key: ${{ runner.os }}-${{ github.run_id }}-node-${{ hashFiles('**/package-lock.json') }}
|
key: ${{ runner.os }}-${{ github.run_id }}-npm-${{ hashFiles('**/package-lock.json') }}
|
||||||
|
|
||||||
- name: Set Node options
|
- name: Set Node options
|
||||||
run: echo "NODE_OPTIONS=--max_old_space_size=4096" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
|
run: echo "NODE_OPTIONS=--max_old_space_size=4096" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
|
||||||
|
@ -185,8 +184,7 @@ jobs:
|
||||||
shell: pwsh
|
shell: pwsh
|
||||||
|
|
||||||
- name: Install Node dependencies
|
- name: Install Node dependencies
|
||||||
if: steps.node-modules-cache.outputs.cache-hit != 'true'
|
run: npm ci
|
||||||
run: npm install
|
|
||||||
|
|
||||||
- name: Run linter
|
- name: Run linter
|
||||||
run: npm run lint
|
run: npm run lint
|
||||||
|
@ -278,12 +276,12 @@ jobs:
|
||||||
with:
|
with:
|
||||||
node-version: '14'
|
node-version: '14'
|
||||||
|
|
||||||
- name: Cache Node Modules
|
- name: Cache npm
|
||||||
id: node-modules-cache
|
id: npm-cache
|
||||||
uses: actions/cache@c64c572235d810460d0d6876e9c705ad5002b353 # v2.1.6
|
uses: actions/cache@c64c572235d810460d0d6876e9c705ad5002b353 # v2.1.6
|
||||||
with:
|
with:
|
||||||
path: '**/node_modules'
|
path: '~/.npm'
|
||||||
key: ${{ runner.os }}-${{ github.run_id }}-node-${{ hashFiles('**/package-lock.json') }}
|
key: ${{ runner.os }}-${{ github.run_id }}-npm-${{ hashFiles('**/package-lock.json') }}
|
||||||
|
|
||||||
- name: Set Node options
|
- name: Set Node options
|
||||||
run: echo "NODE_OPTIONS=--max_old_space_size=4096" >> $GITHUB_ENV
|
run: echo "NODE_OPTIONS=--max_old_space_size=4096" >> $GITHUB_ENV
|
||||||
|
@ -345,8 +343,7 @@ jobs:
|
||||||
shell: pwsh
|
shell: pwsh
|
||||||
|
|
||||||
- name: Install Node dependencies
|
- name: Install Node dependencies
|
||||||
if: steps.node-modules-cache.outputs.cache-hit != 'true'
|
run: npm ci
|
||||||
run: npm install
|
|
||||||
|
|
||||||
- name: Run linter
|
- name: Run linter
|
||||||
run: npm run lint
|
run: npm run lint
|
||||||
|
@ -382,12 +379,12 @@ jobs:
|
||||||
with:
|
with:
|
||||||
node-version: '14'
|
node-version: '14'
|
||||||
|
|
||||||
- name: Cache Node Modules
|
- name: Cache npm
|
||||||
id: node-modules-cache
|
id: npm-cache
|
||||||
uses: actions/cache@c64c572235d810460d0d6876e9c705ad5002b353 # v2.1.6
|
uses: actions/cache@c64c572235d810460d0d6876e9c705ad5002b353 # v2.1.6
|
||||||
with:
|
with:
|
||||||
path: '**/node_modules'
|
path: '~/.npm'
|
||||||
key: ${{ runner.os }}-${{ github.run_id }}-node-${{ hashFiles('**/package-lock.json') }}
|
key: ${{ runner.os }}-${{ github.run_id }}-npm-${{ hashFiles('**/package-lock.json') }}
|
||||||
|
|
||||||
- name: Set Node options
|
- name: Set Node options
|
||||||
run: echo "NODE_OPTIONS=--max_old_space_size=4096" >> $GITHUB_ENV
|
run: echo "NODE_OPTIONS=--max_old_space_size=4096" >> $GITHUB_ENV
|
||||||
|
@ -449,8 +446,7 @@ jobs:
|
||||||
shell: pwsh
|
shell: pwsh
|
||||||
|
|
||||||
- name: NPM install
|
- name: NPM install
|
||||||
if: steps.node-modules-cache.outputs.cache-hit != 'true'
|
run: npm ci
|
||||||
run: npm install
|
|
||||||
|
|
||||||
- name: Build
|
- name: Build
|
||||||
if: steps.build-cache.outputs.cache-hit != 'true'
|
if: steps.build-cache.outputs.cache-hit != 'true'
|
||||||
|
@ -513,12 +509,12 @@ jobs:
|
||||||
with:
|
with:
|
||||||
node-version: '14'
|
node-version: '14'
|
||||||
|
|
||||||
- name: Cache Node Modules
|
- name: Cache npm
|
||||||
id: node-modules-cache
|
id: npm-cache
|
||||||
uses: actions/cache@c64c572235d810460d0d6876e9c705ad5002b353 # v2.1.6
|
uses: actions/cache@c64c572235d810460d0d6876e9c705ad5002b353 # v2.1.6
|
||||||
with:
|
with:
|
||||||
path: '**/node_modules'
|
path: '~/.npm'
|
||||||
key: ${{ runner.os }}-${{ github.run_id }}-node-${{ hashFiles('**/package-lock.json') }}
|
key: ${{ runner.os }}-${{ github.run_id }}-npm-${{ hashFiles('**/package-lock.json') }}
|
||||||
|
|
||||||
- name: Set Node options
|
- name: Set Node options
|
||||||
run: echo "NODE_OPTIONS=--max_old_space_size=4096" >> $GITHUB_ENV
|
run: echo "NODE_OPTIONS=--max_old_space_size=4096" >> $GITHUB_ENV
|
||||||
|
@ -580,8 +576,7 @@ jobs:
|
||||||
shell: pwsh
|
shell: pwsh
|
||||||
|
|
||||||
- name: NPM install
|
- name: NPM install
|
||||||
if: steps.node-modules-cache.outputs.cache-hit != 'true'
|
run: npm ci
|
||||||
run: npm install
|
|
||||||
|
|
||||||
- name: Build
|
- name: Build
|
||||||
if: steps.build-cache.outputs.cache-hit != 'true'
|
if: steps.build-cache.outputs.cache-hit != 'true'
|
||||||
|
@ -639,12 +634,12 @@ jobs:
|
||||||
with:
|
with:
|
||||||
node-version: '14'
|
node-version: '14'
|
||||||
|
|
||||||
- name: Cache Node Modules
|
- name: Cache npm
|
||||||
id: node-modules-cache
|
id: npm-cache
|
||||||
uses: actions/cache@c64c572235d810460d0d6876e9c705ad5002b353 # v2.1.6
|
uses: actions/cache@c64c572235d810460d0d6876e9c705ad5002b353 # v2.1.6
|
||||||
with:
|
with:
|
||||||
path: '**/node_modules'
|
path: '~/.npm'
|
||||||
key: ${{ runner.os }}-${{ github.run_id }}-node-${{ hashFiles('**/package-lock.json') }}
|
key: ${{ runner.os }}-${{ github.run_id }}-npm-${{ hashFiles('**/package-lock.json') }}
|
||||||
|
|
||||||
- name: Set Node options
|
- name: Set Node options
|
||||||
run: echo "NODE_OPTIONS=--max_old_space_size=4096" >> $GITHUB_ENV
|
run: echo "NODE_OPTIONS=--max_old_space_size=4096" >> $GITHUB_ENV
|
||||||
|
@ -706,8 +701,7 @@ jobs:
|
||||||
shell: pwsh
|
shell: pwsh
|
||||||
|
|
||||||
- name: NPM install
|
- name: NPM install
|
||||||
if: steps.node-modules-cache.outputs.cache-hit != 'true'
|
run: npm ci
|
||||||
run: npm install
|
|
||||||
|
|
||||||
- name: Build
|
- name: Build
|
||||||
if: steps.build-cache.outputs.cache-hit != 'true'
|
if: steps.build-cache.outputs.cache-hit != 'true'
|
||||||
|
|
2
jslib
2
jslib
|
@ -1 +1 @@
|
||||||
Subproject commit fdc6f7b1d234c72724db47cbea6c94bff7ec0106
|
Subproject commit 5ba1416679f112e42e4b5dbd5c47949dcd8d0b56
|
11
package.json
11
package.json
|
@ -30,10 +30,13 @@
|
||||||
"lint": "tslint 'src/**/*.ts'",
|
"lint": "tslint 'src/**/*.ts'",
|
||||||
"lint:fix": "tslint 'src/**/*.ts' --fix",
|
"lint:fix": "tslint 'src/**/*.ts' --fix",
|
||||||
"build": "concurrently -n Main,Rend -c yellow,cyan \"npm run build:main\" \"npm run build:renderer\"",
|
"build": "concurrently -n Main,Rend -c yellow,cyan \"npm run build:main\" \"npm run build:renderer\"",
|
||||||
"build:main": "webpack --config webpack.main.js",
|
"build:dev": "concurrently -n Main,Rend -c yellow,cyan \"npm run build:main:dev\" \"npm run build:renderer:dev\"",
|
||||||
"build:renderer": "gulp prebuild:renderer && webpack --config webpack.renderer.js",
|
"build:main": "cross-env NODE_ENV=production webpack --config webpack.main.js",
|
||||||
"build:renderer:watch": "gulp prebuild:renderer && webpack --config webpack.renderer.js --watch",
|
"build:main:dev": "cross-env NODE_ENV=development webpack --config webpack.main.js",
|
||||||
"electron": "npm run build:main && concurrently -k -n Main,Rend -c yellow,cyan \"electron --inspect=5858 ./build --watch\" \"npm run build:renderer:watch\"",
|
"build:renderer": "gulp prebuild:renderer && cross-env NODE_ENV=production webpack --config webpack.renderer.js",
|
||||||
|
"build:renderer:dev": "gulp prebuild:renderer && cross-env NODE_ENV=development webpack --config webpack.renderer.js",
|
||||||
|
"build:renderer:watch": "gulp prebuild:renderer && cross-env NODE_ENV=development webpack --config webpack.renderer.js --watch",
|
||||||
|
"electron": "npm run build:main:dev && concurrently -k -n Main,Rend -c yellow,cyan \"electron --inspect=5858 ./build --watch\" \"npm run build:renderer:watch\"",
|
||||||
"clean:dist": "rimraf ./dist/*",
|
"clean:dist": "rimraf ./dist/*",
|
||||||
"clean:l10n": "git push origin --delete l10n_master",
|
"clean:l10n": "git push origin --delete l10n_master",
|
||||||
"pack:dir": "npm run clean:dist && electron-builder --dir -p never",
|
"pack:dir": "npm run clean:dist && electron-builder --dir -p never",
|
||||||
|
|
|
@ -109,7 +109,6 @@ export class Main {
|
||||||
this.messagingMain.onMessage(message);
|
this.messagingMain.onMessage(message);
|
||||||
});
|
});
|
||||||
|
|
||||||
this.keytarStorageListener = new KeytarStorageListener('Bitwarden');
|
|
||||||
|
|
||||||
if (process.platform === 'win32') {
|
if (process.platform === 'win32') {
|
||||||
const BiometricWindowsMain = require('jslib-electron/biometric.windows.main').default;
|
const BiometricWindowsMain = require('jslib-electron/biometric.windows.main').default;
|
||||||
|
@ -119,6 +118,8 @@ export class Main {
|
||||||
this.biometricMain = new BiometricDarwinMain(this.storageService, this.i18nService);
|
this.biometricMain = new BiometricDarwinMain(this.storageService, this.i18nService);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.keytarStorageListener = new KeytarStorageListener('Bitwarden', this.biometricMain);
|
||||||
|
|
||||||
this.nativeMessagingMain = new NativeMessagingMain(this.logService, this.windowMain, app.getPath('userData'), app.getPath('exe'));
|
this.nativeMessagingMain = new NativeMessagingMain(this.logService, this.windowMain, app.getPath('userData'), app.getPath('exe'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -102,9 +102,10 @@ export class NativeMessagingService {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
const response = await this.platformUtilService.authenticateBiometric();
|
const keyB64 = await (await this.cryptoService.getKey('biometric')).keyB64;
|
||||||
if (response) {
|
|
||||||
this.send({command: 'biometricUnlock', response: 'unlocked', keyB64: (await this.cryptoService.getKey()).keyB64}, appId);
|
if (keyB64 != null) {
|
||||||
|
this.send({ command: 'biometricUnlock', response: 'unlocked', keyB64: keyB64 }, appId);
|
||||||
} else {
|
} else {
|
||||||
this.send({ command: 'biometricUnlock', response: 'canceled' }, appId);
|
this.send({ command: 'biometricUnlock', response: 'canceled' }, appId);
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,6 +5,8 @@ const { CleanWebpackPlugin } = require('clean-webpack-plugin');
|
||||||
const nodeExternals = require('webpack-node-externals');
|
const nodeExternals = require('webpack-node-externals');
|
||||||
const TsconfigPathsPlugin = require('tsconfig-paths-webpack-plugin');
|
const TsconfigPathsPlugin = require('tsconfig-paths-webpack-plugin');
|
||||||
|
|
||||||
|
const NODE_ENV = process.env.NODE_ENV == null ? 'development' : process.env.NODE_ENV;
|
||||||
|
|
||||||
const common = {
|
const common = {
|
||||||
module: {
|
module: {
|
||||||
rules: [
|
rules: [
|
||||||
|
@ -25,14 +27,26 @@ const common = {
|
||||||
extensions: ['.tsx', '.ts', '.js'],
|
extensions: ['.tsx', '.ts', '.js'],
|
||||||
plugins: [new TsconfigPathsPlugin({ configFile: './tsconfig.json' })]
|
plugins: [new TsconfigPathsPlugin({ configFile: './tsconfig.json' })]
|
||||||
},
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
const prod = {
|
||||||
output: {
|
output: {
|
||||||
filename: '[name].js',
|
filename: '[name].js',
|
||||||
path: path.resolve(__dirname, 'build'),
|
path: path.resolve(__dirname, 'build'),
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const dev = {
|
||||||
|
output: {
|
||||||
|
filename: '[name].js',
|
||||||
|
path: path.resolve(__dirname, 'build'),
|
||||||
|
devtoolModuleFilenameTemplate: '[absolute-resource-path]',
|
||||||
|
},
|
||||||
|
devtool: 'cheap-source-map'
|
||||||
|
}
|
||||||
|
|
||||||
const main = {
|
const main = {
|
||||||
mode: 'production',
|
mode: NODE_ENV,
|
||||||
target: 'electron-main',
|
target: 'electron-main',
|
||||||
node: {
|
node: {
|
||||||
__dirname: false,
|
__dirname: false,
|
||||||
|
@ -65,4 +79,4 @@ const main = {
|
||||||
externals: [nodeExternals()],
|
externals: [nodeExternals()],
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports = merge(common, main);
|
module.exports = merge(common, NODE_ENV === 'development' ? dev : prod, main);
|
||||||
|
|
Loading…
Reference in New Issue