Get either 'Bitwarden' and 'Bitwarden_biometric' keys. (#1904)
* Get either 'Bitwarden' and 'Bitwarden_biometric' keys. * Fix let var typo * Fix string handling error * Retrieve biometric key from Desktop * Null check key
This commit is contained in:
parent
20df6fe230
commit
f35f3550a7
|
@ -10,7 +10,6 @@ import {
|
||||||
CollectionService,
|
CollectionService,
|
||||||
ConstantsService,
|
ConstantsService,
|
||||||
ContainerService,
|
ContainerService,
|
||||||
CryptoService,
|
|
||||||
EnvironmentService,
|
EnvironmentService,
|
||||||
FolderService,
|
FolderService,
|
||||||
PasswordGenerationService,
|
PasswordGenerationService,
|
||||||
|
@ -82,6 +81,7 @@ import WindowsBackground from './windows.background';
|
||||||
|
|
||||||
import { PopupUtilsService } from '../popup/services/popup-utils.service';
|
import { PopupUtilsService } from '../popup/services/popup-utils.service';
|
||||||
import AutofillService from '../services/autofill.service';
|
import AutofillService from '../services/autofill.service';
|
||||||
|
import { BrowserCryptoService } from '../services/browserCrypto.service';
|
||||||
import BrowserMessagingService from '../services/browserMessaging.service';
|
import BrowserMessagingService from '../services/browserMessaging.service';
|
||||||
import BrowserPlatformUtilsService from '../services/browserPlatformUtils.service';
|
import BrowserPlatformUtilsService from '../services/browserPlatformUtils.service';
|
||||||
import BrowserStorageService from '../services/browserStorage.service';
|
import BrowserStorageService from '../services/browserStorage.service';
|
||||||
|
@ -173,7 +173,7 @@ export default class MainBackground {
|
||||||
this.i18nService = new I18nService(BrowserApi.getUILanguage(window));
|
this.i18nService = new I18nService(BrowserApi.getUILanguage(window));
|
||||||
this.cryptoFunctionService = new WebCryptoFunctionService(window, this.platformUtilsService);
|
this.cryptoFunctionService = new WebCryptoFunctionService(window, this.platformUtilsService);
|
||||||
this.consoleLogService = new ConsoleLogService(false);
|
this.consoleLogService = new ConsoleLogService(false);
|
||||||
this.cryptoService = new CryptoService(this.storageService, this.secureStorageService,
|
this.cryptoService = new BrowserCryptoService(this.storageService, this.secureStorageService,
|
||||||
this.cryptoFunctionService, this.platformUtilsService, this.consoleLogService);
|
this.cryptoFunctionService, this.platformUtilsService, this.consoleLogService);
|
||||||
this.tokenService = new TokenService(this.storageService);
|
this.tokenService = new TokenService(this.storageService);
|
||||||
this.appIdService = new AppIdService(this.storageService);
|
this.appIdService = new AppIdService(this.storageService);
|
||||||
|
|
|
@ -4,6 +4,7 @@ import LocalAuthentication
|
||||||
|
|
||||||
let SFExtensionMessageKey = "message"
|
let SFExtensionMessageKey = "message"
|
||||||
let ServiceName = "Bitwarden"
|
let ServiceName = "Bitwarden"
|
||||||
|
let ServiceNameBiometric = ServiceName + "_biometric"
|
||||||
|
|
||||||
class SafariWebExtensionHandler: NSObject, NSExtensionRequestHandling {
|
class SafariWebExtensionHandler: NSObject, NSExtensionRequestHandling {
|
||||||
|
|
||||||
|
@ -118,8 +119,11 @@ class SafariWebExtensionHandler: NSObject, NSExtensionRequestHandling {
|
||||||
var passwordLength: UInt32 = 0
|
var passwordLength: UInt32 = 0
|
||||||
var passwordPtr: UnsafeMutableRawPointer? = nil
|
var passwordPtr: UnsafeMutableRawPointer? = nil
|
||||||
|
|
||||||
let status = SecKeychainFindGenericPassword(nil, UInt32(ServiceName.utf8.count), ServiceName, UInt32(passwordName.utf8.count), passwordName, &passwordLength, &passwordPtr, nil)
|
var status = SecKeychainFindGenericPassword(nil, UInt32(ServiceNameBiometric.utf8.count), ServiceNameBiometric, UInt32(passwordName.utf8.count), passwordName, &passwordLength, &passwordPtr, nil)
|
||||||
|
if status != errSecSuccess {
|
||||||
|
status = SecKeychainFindGenericPassword(nil, UInt32(ServiceName.utf8.count), ServiceName, UInt32(passwordName.utf8.count), passwordName, &passwordLength, &passwordPtr, nil)
|
||||||
|
}
|
||||||
|
|
||||||
if status == errSecSuccess {
|
if status == errSecSuccess {
|
||||||
let result = NSString(bytes: passwordPtr!, length: Int(passwordLength), encoding: String.Encoding.utf8.rawValue) as String?
|
let result = NSString(bytes: passwordPtr!, length: Int(passwordLength), encoding: String.Encoding.utf8.rawValue) as String?
|
||||||
SecKeychainItemFreeContent(nil, passwordPtr)
|
SecKeychainItemFreeContent(nil, passwordPtr)
|
||||||
|
|
|
@ -0,0 +1,14 @@
|
||||||
|
import { KeySuffixOptions } from 'jslib-common/abstractions/storage.service';
|
||||||
|
import { CryptoService } from 'jslib-common/services/crypto.service';
|
||||||
|
|
||||||
|
export class BrowserCryptoService extends CryptoService {
|
||||||
|
protected async retrieveKeyFromStorage(keySuffix: KeySuffixOptions) {
|
||||||
|
if (keySuffix === 'biometric') {
|
||||||
|
await this.platformUtilService.authenticateBiometric();
|
||||||
|
return (await this.getKey())?.keyB64;
|
||||||
|
}
|
||||||
|
|
||||||
|
return await super.retrieveKeyFromStorage(keySuffix);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue