mirror of
https://github.com/bitwarden/browser
synced 2025-12-06 00:13:28 +00:00
* Update unix biometrics for desktop biometrics rework * Implement polkit policy setup * Enable browser integration on Linux * Remove polkit policy file * Undo change to messages.json * Fix biometrics setup, implement missing functions * Implement osSupportsBiometrics * Fix polkit settings message * Remove unwraps in biometrics unix rust module * Force password reprompt on start on linux with biometrics * Merge branch 'main' into feature/unix-biometrics * Allow browser extension to be unlocked on Linux via Polkit * Implement availability check * Cleanup * Add auto-setup, manual setup, setup detection and change localized prompts * Implement missing methods * Add i18n to polkit message * Implement missing method * Small cleanup * Update polkit consent message * Fix unlock and print errors on failed biometrics * Add dependencies to core crate * Fix reference and update polkit policy * Remove async-trait * Add tsdoc * Add comment about auto setup * Delete unused init * Update help link * Remove additional settings for polkit * Add availability-check to passwords implementation on linux * Add availability test * Add availability check to libsecret * Expose availability check in napi crate * Update d.ts * Update osSupportsBiometric check to detect libsecret presence * Improve secret service detection * Add client half to Linux biometrics * Fix windows build * Remove unencrypted key handling for biometric key * Move rng to rust, align linux bio implementation with windows * Consolidate elevated commands into one * Disable snap support in linux biometrics --------- Co-authored-by: DigitallyRefined <129616584+DigitallyRefined@users.noreply.github.com>
65 lines
1.7 KiB
TypeScript
65 lines
1.7 KiB
TypeScript
import { systemPreferences } from "electron";
|
|
|
|
import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service";
|
|
import { passwords } from "@bitwarden/desktop-napi";
|
|
|
|
import { OsBiometricService } from "./biometrics.service.abstraction";
|
|
|
|
export default class BiometricDarwinMain implements OsBiometricService {
|
|
constructor(private i18nservice: I18nService) {}
|
|
|
|
async osSupportsBiometric(): Promise<boolean> {
|
|
return systemPreferences.canPromptTouchID();
|
|
}
|
|
|
|
async authenticateBiometric(): Promise<boolean> {
|
|
try {
|
|
await systemPreferences.promptTouchID(this.i18nservice.t("touchIdConsentMessage"));
|
|
return true;
|
|
} catch {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
async getBiometricKey(service: string, key: string): Promise<string | null> {
|
|
const success = await this.authenticateBiometric();
|
|
|
|
if (!success) {
|
|
throw new Error("Biometric authentication failed");
|
|
}
|
|
|
|
return await passwords.getPassword(service, key);
|
|
}
|
|
|
|
async setBiometricKey(service: string, key: string, value: string): Promise<void> {
|
|
if (await this.valueUpToDate(service, key, value)) {
|
|
return;
|
|
}
|
|
|
|
return await passwords.setPassword(service, key, value);
|
|
}
|
|
|
|
async deleteBiometricKey(service: string, key: string): Promise<void> {
|
|
return await passwords.deletePassword(service, key);
|
|
}
|
|
|
|
private async valueUpToDate(service: string, key: string, value: string): Promise<boolean> {
|
|
try {
|
|
const existing = await passwords.getPassword(service, key);
|
|
return existing === value;
|
|
} catch {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
async osBiometricsNeedsSetup() {
|
|
return false;
|
|
}
|
|
|
|
async osBiometricsCanAutoSetup(): Promise<boolean> {
|
|
return false;
|
|
}
|
|
|
|
async osBiometricsSetup(): Promise<void> {}
|
|
}
|