mirror of
https://github.com/bitwarden/browser
synced 2025-12-06 00:13:28 +00:00
* 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>
82 lines
3.6 KiB
JavaScript
82 lines
3.6 KiB
JavaScript
/* eslint-disable @typescript-eslint/no-var-requires */
|
|
const child_process = require("child_process");
|
|
const fs = require("fs");
|
|
const path = require("path");
|
|
const process = require("process");
|
|
|
|
// Map of the Node arch equivalents for the rust target triplets, used to move the file to the correct location
|
|
const rustTargetsMap = {
|
|
"i686-pc-windows-msvc": { nodeArch: 'ia32', platform: 'win32' },
|
|
"x86_64-pc-windows-msvc": { nodeArch: 'x64', platform: 'win32' },
|
|
"aarch64-pc-windows-msvc": { nodeArch: 'arm64', platform: 'win32' },
|
|
"x86_64-apple-darwin": { nodeArch: 'x64', platform: 'darwin' },
|
|
"aarch64-apple-darwin": { nodeArch: 'arm64', platform: 'darwin' },
|
|
'x86_64-unknown-linux-musl': { nodeArch: 'x64', platform: 'linux' },
|
|
'aarch64-unknown-linux-musl': { nodeArch: 'arm64', platform: 'linux' },
|
|
}
|
|
|
|
// Ensure the dist directory exists
|
|
fs.mkdirSync(path.join(__dirname, "dist"), { recursive: true });
|
|
|
|
const args = process.argv.slice(2); // Get arguments passed to the script
|
|
const mode = args.includes("--release") ? "release" : "debug";
|
|
const targetArg = args.find(arg => arg.startsWith("--target="));
|
|
const target = targetArg ? targetArg.split("=")[1] : null;
|
|
|
|
let crossPlatform = process.argv.length > 2 && process.argv[2] === "cross-platform";
|
|
|
|
function buildNapiModule(target, release = true) {
|
|
const targetArg = target ? `--target ${target}` : "";
|
|
const releaseArg = release ? "--release" : "";
|
|
child_process.execSync(`npm run build -- ${releaseArg} ${targetArg}`, { stdio: 'inherit', cwd: path.join(__dirname, "napi") });
|
|
}
|
|
|
|
function buildProxyBin(target, release = true) {
|
|
const targetArg = target ? `--target ${target}` : "";
|
|
const releaseArg = release ? "--release" : "";
|
|
child_process.execSync(`cargo build --bin desktop_proxy ${releaseArg} ${targetArg}`, {stdio: 'inherit', cwd: path.join(__dirname, "proxy")});
|
|
|
|
if (target) {
|
|
// Copy the resulting binary to the dist folder
|
|
const targetFolder = release ? "release" : "debug";
|
|
const ext = process.platform === "win32" ? ".exe" : "";
|
|
const nodeArch = rustTargetsMap[target].nodeArch;
|
|
fs.copyFileSync(path.join(__dirname, "target", target, targetFolder, `desktop_proxy${ext}`), path.join(__dirname, "dist", `desktop_proxy.${process.platform}-${nodeArch}${ext}`));
|
|
}
|
|
}
|
|
|
|
function installTarget(target) {
|
|
child_process.execSync(`rustup target add ${target}`, { stdio: 'inherit', cwd: __dirname });
|
|
}
|
|
|
|
if (!crossPlatform && !target) {
|
|
console.log(`Building native modules in ${mode} mode for the native architecture`);
|
|
buildNapiModule(false, mode === "release");
|
|
buildProxyBin(false, mode === "release");
|
|
return;
|
|
}
|
|
|
|
if (target) {
|
|
console.log(`Building for target: ${target} in ${mode} mode`);
|
|
installTarget(target);
|
|
buildNapiModule(target, mode === "release");
|
|
buildProxyBin(target, mode === "release");
|
|
return;
|
|
}
|
|
|
|
// Filter the targets based on the current platform, and build for each of them
|
|
let platformTargets = Object.entries(rustTargetsMap).filter(([_, { platform: p }]) => p === process.platform);
|
|
console.log("Cross building native modules for the targets: ", platformTargets.map(([target, _]) => target).join(", "));
|
|
|
|
// When building for Linux, we need to set some environment variables to allow cross-compilation
|
|
if (process.platform === "linux") {
|
|
process.env["PKG_CONFIG_ALLOW_CROSS"] = "1";
|
|
process.env["PKG_CONFIG_ALL_STATIC"] = "1";
|
|
}
|
|
|
|
platformTargets.forEach(([target, _]) => {
|
|
installTarget(target);
|
|
buildNapiModule(target);
|
|
buildProxyBin(target);
|
|
});
|