mirror of
https://github.com/bitwarden/browser
synced 2026-01-08 11:33:28 +00:00
[PM-24748][PM-24072] Chromium importer (#16100)
* Add importer dummy lib, add cargo deps for win/mac * Add Chromium importer source from bitwarden/password-access * Mod crypto is no more * Expose some Chromium importer functions via NAPI, replace home with home_dir crate * Add Chromium importer to the main <-> renderer IPC, export all functions from Rust * Add password and notes fields to the imported logins * Fix windows to use homedir instead of home * Return success/failure results * Import from account logins and join * Linux v10 support * Use mod util on Windows * Use mod util on macOS * Refactor to move shared code into chromium.rs * Fix windows * Fix Linux as well * Linux v11 support for Chrome/Gnome, everything is async now * Support multiple browsers on Linux v11 * Move oo7 to Linux * Fix Windows * Fix macOS * Add support for Brave browser in Linux configuration * Add support for Opera browser in Linux configuration * Fix Edge and add Arc on macOS * Add Opera on macOS * Add support for Vivaldi browser in macOS configuration * Add support for Chromium browser in macOS configuration * Fix Edge on Windows * Add Opera on Windows * Add Vivaldi on windows * Add Chromium to supported browsers on Windows * stub out UI options for chromium direct import * call IPC funcs from import-desktop * add notes to chrome csv importer * remove (csv) from import tool names and format item names as hostnames * Add ABE/v20 encryption support * ABE/v20 architecture description * Add a build step to produce admin.exe and service.exe * Add Windows v20/ABE configuration functionality to specify the full path to the admin.exe and service.exe. Use ipc.platform.chromiumImporter.configureWindowsCryptoService to configure the Chromium importer on Windows. * rename ARCHITECTURE.md to README.md * aligns with guidance from architecture re: in-repository documentation. * also fixes a failing lint. * cargo fmt * cargo clippy fix * Declare feature flag for using chromium importer * Linter fix after executing npm run prettier * Use feature flag to guard the use of the chromium importer * Added temporary logging to further debug, why the Angular change detection isn't working as expected * introduce importer metadata; host metadata from service; includes tests * fix cli build * Register autotype module in lib.rs introduce by a bad merge * Fix web build * Fix issue with loaders being undefined and the feature flag turned off * Add missing Chromium support when selecting chromecsv * debugging * remove chromium support from chromecsv metadata * fix default loader selection * [PM-24753] cargo lib file (#16090) * Add new modules * Fix chromium importer * Fix compile bugs for toolchain * remove importer folder * remove IPC code * undo setting change * clippy fixes * cargo fmt * clippy fixes * clippy fixes * clippy fixes * clippy fixes * lint fix * fix release build * Add files in CODEOWNERS * Create tools owned preload.ts * Move chromium-importer.service under tools-ownership * Fix typeError When accessing the Chromium direct import options the file button is hidden, so trying to access it's values will fail * Fix tools owned preload * Remove dead code and redundant truncation * Remove configureWindowsCryptoService function/methods * Clean up cargo files * Fix unused async * Update apps/desktop/desktop_native/bitwarden_chromium_importer/Cargo.toml Co-authored-by: Oscar Hinton <Hinton@users.noreply.github.com> * Fix napi deps * fix lints * format * fix linux lint * fix windows lints * format * fix missing `?` * fix a different missing `?` --------- Co-authored-by: Dmitry Yakimenko <detunized@gmail.com> Co-authored-by: Kyle Spearrin <kyle.spearrin@gmail.com> Co-authored-by: Daniel James Smith <djsmith85@users.noreply.github.com> Co-authored-by: ✨ Audrey ✨ <ajensen@bitwarden.com> Co-authored-by: ✨ Audrey ✨ <audrey@audreyality.com> Co-authored-by: adudek-bw <adudek@bitwarden.com> Co-authored-by: Oscar Hinton <Hinton@users.noreply.github.com>
This commit is contained in:
committed by
GitHub
parent
b957a0c28f
commit
66f5700a75
15
libs/importer/src/metadata/availability.ts
Normal file
15
libs/importer/src/metadata/availability.ts
Normal file
@@ -0,0 +1,15 @@
|
||||
import { ClientType } from "@bitwarden/client-type";
|
||||
import { deepFreeze } from "@bitwarden/common/tools/util";
|
||||
|
||||
import { Loader } from "./data";
|
||||
import { DataLoader } from "./types";
|
||||
|
||||
/** Describes which loaders are supported on each client */
|
||||
export const LoaderAvailability: Record<DataLoader, ClientType[]> = deepFreeze({
|
||||
[Loader.chromium]: [ClientType.Desktop],
|
||||
[Loader.download]: [ClientType.Browser],
|
||||
[Loader.file]: [ClientType.Browser, ClientType.Desktop, ClientType.Web, ClientType.Cli],
|
||||
|
||||
// FIXME: enable IPC importer on `ClientType.Desktop` once it's ready
|
||||
[Loader.ipc]: [],
|
||||
});
|
||||
27
libs/importer/src/metadata/data.ts
Normal file
27
libs/importer/src/metadata/data.ts
Normal file
@@ -0,0 +1,27 @@
|
||||
/** Mechanisms that load data into the importer. */
|
||||
export const Loader = Object.freeze({
|
||||
/** Data loaded from a file provided by the user/ */
|
||||
file: "file",
|
||||
|
||||
/** Data loaded directly from the chromium browser's data store */
|
||||
chromium: "chromium",
|
||||
|
||||
/** Data provided through an importer ipc channel (e.g. Bitwarden bridge) */
|
||||
ipc: "ipc",
|
||||
|
||||
/** Data provided through direct file download (e.g. a LastPass export) */
|
||||
download: "download",
|
||||
});
|
||||
|
||||
/** Re-branded products often leave their exporters unaltered; when that occurs,
|
||||
* `Instructions` lets us group them together.
|
||||
*
|
||||
* @remarks Instructions values must be mutually exclusive from Loader's values.
|
||||
*/
|
||||
export const Instructions = Object.freeze({
|
||||
/** the instructions are unique to the import type */
|
||||
unique: "unique",
|
||||
|
||||
/** shared chromium instructions */
|
||||
chromium: "chromium",
|
||||
});
|
||||
27
libs/importer/src/metadata/importers.ts
Normal file
27
libs/importer/src/metadata/importers.ts
Normal file
@@ -0,0 +1,27 @@
|
||||
import { deepFreeze } from "@bitwarden/common/tools/util";
|
||||
|
||||
import { ImportType } from "../models";
|
||||
|
||||
import { Loader, Instructions } from "./data";
|
||||
import { ImporterMetadata } from "./types";
|
||||
|
||||
// FIXME: load this data from rust code
|
||||
const importers = [
|
||||
// chromecsv import depends upon operating system, so ironically it doesn't support chromium
|
||||
{ id: "chromecsv", loaders: [Loader.file], instructions: Instructions.chromium },
|
||||
{ id: "operacsv", loaders: [Loader.file, Loader.chromium], instructions: Instructions.chromium },
|
||||
{
|
||||
id: "vivaldicsv",
|
||||
loaders: [Loader.file, Loader.chromium],
|
||||
instructions: Instructions.chromium,
|
||||
},
|
||||
{ id: "bravecsv", loaders: [Loader.file, Loader.chromium], instructions: Instructions.chromium },
|
||||
{ id: "edgecsv", loaders: [Loader.file, Loader.chromium], instructions: Instructions.chromium },
|
||||
|
||||
// FIXME: add other formats and remove `Partial` from export
|
||||
] as const;
|
||||
|
||||
/** Describes which loaders are available for each import type */
|
||||
export const Importers: Partial<Record<ImportType, ImporterMetadata>> = deepFreeze(
|
||||
Object.fromEntries(importers.map((i) => [i.id, i])),
|
||||
);
|
||||
4
libs/importer/src/metadata/index.ts
Normal file
4
libs/importer/src/metadata/index.ts
Normal file
@@ -0,0 +1,4 @@
|
||||
export * from "./availability";
|
||||
export * from "./data";
|
||||
export * from "./types";
|
||||
export * from "./importers";
|
||||
20
libs/importer/src/metadata/types.ts
Normal file
20
libs/importer/src/metadata/types.ts
Normal file
@@ -0,0 +1,20 @@
|
||||
import { ImportType } from "../models";
|
||||
|
||||
import { Instructions, Loader } from "./data";
|
||||
|
||||
/** Mechanisms that load data into the importer. */
|
||||
export type DataLoader = (typeof Loader)[keyof typeof Loader];
|
||||
|
||||
export type InstructionLink = (typeof Instructions)[keyof typeof Instructions];
|
||||
|
||||
/** Mechanisms that load data into the importer. */
|
||||
export type ImporterMetadata = {
|
||||
/** Identifies the importer */
|
||||
type: ImportType;
|
||||
|
||||
/** Identifies the instructions for the importer; this defaults to `unique`. */
|
||||
instructions?: InstructionLink;
|
||||
|
||||
/** Describes the strategies used to obtain imported data */
|
||||
loaders: DataLoader[];
|
||||
};
|
||||
Reference in New Issue
Block a user