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,
|
||||
ConstantsService,
|
||||
ContainerService,
|
||||
CryptoService,
|
||||
EnvironmentService,
|
||||
FolderService,
|
||||
PasswordGenerationService,
|
||||
|
@ -82,6 +81,7 @@ import WindowsBackground from './windows.background';
|
|||
|
||||
import { PopupUtilsService } from '../popup/services/popup-utils.service';
|
||||
import AutofillService from '../services/autofill.service';
|
||||
import { BrowserCryptoService } from '../services/browserCrypto.service';
|
||||
import BrowserMessagingService from '../services/browserMessaging.service';
|
||||
import BrowserPlatformUtilsService from '../services/browserPlatformUtils.service';
|
||||
import BrowserStorageService from '../services/browserStorage.service';
|
||||
|
@ -173,7 +173,7 @@ export default class MainBackground {
|
|||
this.i18nService = new I18nService(BrowserApi.getUILanguage(window));
|
||||
this.cryptoFunctionService = new WebCryptoFunctionService(window, this.platformUtilsService);
|
||||
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.tokenService = new TokenService(this.storageService);
|
||||
this.appIdService = new AppIdService(this.storageService);
|
||||
|
|
|
@ -4,6 +4,7 @@ import LocalAuthentication
|
|||
|
||||
let SFExtensionMessageKey = "message"
|
||||
let ServiceName = "Bitwarden"
|
||||
let ServiceNameBiometric = ServiceName + "_biometric"
|
||||
|
||||
class SafariWebExtensionHandler: NSObject, NSExtensionRequestHandling {
|
||||
|
||||
|
@ -118,7 +119,10 @@ class SafariWebExtensionHandler: NSObject, NSExtensionRequestHandling {
|
|||
var passwordLength: UInt32 = 0
|
||||
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 {
|
||||
let result = NSString(bytes: passwordPtr!, length: Int(passwordLength), encoding: String.Encoding.utf8.rawValue) as String?
|
||||
|
|
|
@ -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