mirror of
https://github.com/bitwarden/browser.git
synced 2024-11-14 10:26:19 +01:00
2ce8500391
* 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>
89 lines
2.5 KiB
TypeScript
89 lines
2.5 KiB
TypeScript
export type RendererMenuItem = {
|
|
label?: string;
|
|
type?: "normal" | "separator" | "submenu" | "checkbox" | "radio";
|
|
click?: () => any;
|
|
};
|
|
|
|
export function invokeMenu(menu: RendererMenuItem[]) {
|
|
const menuWithoutClick = menu.map((m) => {
|
|
return { label: m.label, type: m.type };
|
|
});
|
|
// FIXME: Verify that this floating promise is intentional. If it is, add an explanatory comment and ensure there is proper error handling.
|
|
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
ipc.platform.openContextMenu(menuWithoutClick).then((i: number) => {
|
|
if (i !== -1) {
|
|
menu[i].click();
|
|
}
|
|
});
|
|
}
|
|
|
|
export function isDev() {
|
|
// ref: https://github.com/sindresorhus/electron-is-dev
|
|
if ("ELECTRON_IS_DEV" in process.env) {
|
|
return parseInt(process.env.ELECTRON_IS_DEV, 10) === 1;
|
|
}
|
|
return process.defaultApp || /node_modules[\\/]electron[\\/]/.test(process.execPath);
|
|
}
|
|
|
|
export function isLinux() {
|
|
return process.platform === "linux";
|
|
}
|
|
|
|
export function isAppImage() {
|
|
return isLinux() && "APPIMAGE" in process.env;
|
|
}
|
|
|
|
export function isSnapStore() {
|
|
return isLinux() && process.env.SNAP_USER_DATA != null;
|
|
}
|
|
|
|
export function isMac() {
|
|
return process.platform === "darwin";
|
|
}
|
|
|
|
export function isMacAppStore() {
|
|
return isMac() && process.mas === true;
|
|
}
|
|
|
|
export function isWindows() {
|
|
return process.platform === "win32";
|
|
}
|
|
|
|
export function isWindowsStore() {
|
|
const windows = isWindows();
|
|
let windowsStore = process.windowsStore;
|
|
if (
|
|
windows &&
|
|
!windowsStore &&
|
|
process.resourcesPath?.indexOf("8bitSolutionsLLC.bitwardendesktop_") > -1
|
|
) {
|
|
windowsStore = true;
|
|
}
|
|
return windows && windowsStore === true;
|
|
}
|
|
|
|
export function isFlatpak() {
|
|
return process.platform === "linux" && process.env.container != null;
|
|
}
|
|
|
|
export function isWindowsPortable() {
|
|
return isWindows() && process.env.PORTABLE_EXECUTABLE_DIR != null;
|
|
}
|
|
|
|
/**
|
|
* Sanitize user agent so external resources used by the app can't built data on our users.
|
|
*/
|
|
export function cleanUserAgent(userAgent: string): string {
|
|
const userAgentItem = (startString: string, endString: string) => {
|
|
const startIndex = userAgent.indexOf(startString);
|
|
return userAgent.substring(startIndex, userAgent.indexOf(endString, startIndex) + 1);
|
|
};
|
|
const systemInformation = "(Windows NT 10.0; Win64; x64)";
|
|
|
|
// Set system information, remove bitwarden, and electron information
|
|
return userAgent
|
|
.replace(userAgentItem("(", ")"), systemInformation)
|
|
.replace(userAgentItem("Bitwarden", " "), "")
|
|
.replace(userAgentItem("Electron", " "), "");
|
|
}
|