Skip to content

Commit

Permalink
[rust] Refactor logic to execute commands in the shell
Browse files Browse the repository at this point in the history
  • Loading branch information
bonigarcia committed Aug 6, 2023
1 parent 49e8d43 commit 72f083c
Show file tree
Hide file tree
Showing 10 changed files with 216 additions and 224 deletions.
43 changes: 8 additions & 35 deletions rust/src/chrome.rs
Original file line number Diff line number Diff line change
Expand Up @@ -34,10 +34,9 @@ use crate::metadata::{
create_driver_metadata, get_driver_version_from_metadata, get_metadata, write_metadata,
};
use crate::{
create_browser_metadata, create_http_client, download_to_tmp_folder, format_one_arg,
format_three_args, get_browser_version_from_metadata, uncompress, SeleniumManager, BETA,
DASH_DASH_VERSION, DEV, DOUBLE_QUOTE, NIGHTLY, OFFLINE_REQUEST_ERR_MSG, REG_QUERY,
SINGLE_QUOTE, STABLE, WMIC_COMMAND,
create_browser_metadata, create_http_client, download_to_tmp_folder, format_three_args,
get_browser_version_from_metadata, uncompress, SeleniumManager, BETA, DASH_DASH_VERSION, DEV,
NIGHTLY, OFFLINE_REQUEST_ERR_MSG, REG_VERSION_ARG, STABLE,
};

pub const CHROME_NAME: &str = "chrome";
Expand Down Expand Up @@ -389,37 +388,11 @@ impl SeleniumManager for ChromeManager {
}

fn discover_browser_version(&mut self) -> Option<String> {
let mut commands;
let mut browser_path = self.get_browser_path().to_string();
let escaped_browser_path;
if browser_path.is_empty() {
match self.detect_browser_path() {
Some(path) => {
browser_path = path_buf_to_string(path);
escaped_browser_path = self.get_escaped_path(browser_path.to_string());
commands = vec![format_one_arg(WMIC_COMMAND, &escaped_browser_path)];
if !self.is_browser_version_unstable() {
commands.push(format_one_arg(
REG_QUERY,
r#"HKCU\Software\Google\Chrome\BLBeacon"#,
));
}
}
_ => return None,
}
} else {
escaped_browser_path = self.get_escaped_path(browser_path.to_string());
commands = vec![format_one_arg(WMIC_COMMAND, &escaped_browser_path)];
}
if !WINDOWS.is(self.get_os()) {
commands = vec![
format_three_args(DASH_DASH_VERSION, "", &escaped_browser_path, ""),
format_three_args(DASH_DASH_VERSION, DOUBLE_QUOTE, &browser_path, DOUBLE_QUOTE),
format_three_args(DASH_DASH_VERSION, SINGLE_QUOTE, &browser_path, SINGLE_QUOTE),
format_three_args(DASH_DASH_VERSION, "", &browser_path, ""),
]
}
self.detect_browser_version(commands)
self.discover_general_browser_version(
r#"HKCU\Software\Google\Chrome\BLBeacon"#,
REG_VERSION_ARG,
DASH_DASH_VERSION,
)
}

fn get_driver_name(&self) -> &str {
Expand Down
14 changes: 7 additions & 7 deletions rust/src/config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
use crate::config::OS::{LINUX, MACOS, WINDOWS};
use crate::files::get_cache_folder;
use crate::shell::run_shell_command_by_os;
use crate::{format_one_arg, REQUEST_TIMEOUT_SEC, UNAME_COMMAND};
use crate::{format_one_arg, Command, REQUEST_TIMEOUT_SEC, UNAME_COMMAND};
use crate::{ARCH_AMD64, ARCH_ARM64, ARCH_X86, TTL_BROWSERS_SEC, TTL_DRIVERS_SEC, WMIC_COMMAND_OS};
use std::env;
use std::env::consts::OS;
Expand Down Expand Up @@ -50,8 +50,8 @@ impl ManagerConfig {
pub fn default(browser_name: &str, driver_name: &str) -> ManagerConfig {
let self_os = OS;
let self_arch = if WINDOWS.is(self_os) {
let wmic_output =
run_shell_command_by_os(self_os, vec![WMIC_COMMAND_OS]).unwrap_or_default();
let wmic_command = Command::new_single(WMIC_COMMAND_OS.to_string());
let wmic_output = run_shell_command_by_os(self_os, wmic_command).unwrap_or_default();
if wmic_output.contains("32") {
ARCH_X86.to_string()
} else if wmic_output.contains("ARM") {
Expand All @@ -60,16 +60,16 @@ impl ManagerConfig {
ARCH_AMD64.to_string()
}
} else {
let uname_a = format_one_arg(UNAME_COMMAND, "a");
if run_shell_command_by_os(self_os, vec![&uname_a])
let uname_a_command = Command::new_single(format_one_arg(UNAME_COMMAND, "a"));
if run_shell_command_by_os(self_os, uname_a_command)
.unwrap_or_default()
.to_ascii_lowercase()
.contains(ARCH_ARM64)
{
ARCH_ARM64.to_string()
} else {
let uname_m = format_one_arg(UNAME_COMMAND, "m");
run_shell_command_by_os(self_os, vec![&uname_m]).unwrap_or_default()
let uname_m_command = Command::new_single(format_one_arg(UNAME_COMMAND, "m"));
run_shell_command_by_os(self_os, uname_m_command).unwrap_or_default()
}
};

Expand Down
43 changes: 8 additions & 35 deletions rust/src/edge.rs
Original file line number Diff line number Diff line change
Expand Up @@ -24,14 +24,13 @@ use std::path::PathBuf;
use crate::config::ARCH::{ARM64, X32};
use crate::config::OS::{LINUX, MACOS, WINDOWS};
use crate::downloads::read_version_from_link;
use crate::files::{compose_driver_path_in_cache, path_buf_to_string, BrowserPath};
use crate::files::{compose_driver_path_in_cache, BrowserPath};
use crate::metadata::{
create_driver_metadata, get_driver_version_from_metadata, get_metadata, write_metadata,
};
use crate::{
create_http_client, format_one_arg, format_three_args, Logger, SeleniumManager, BETA,
DASH_DASH_VERSION, DEV, DOUBLE_QUOTE, NIGHTLY, OFFLINE_REQUEST_ERR_MSG, REG_QUERY,
SINGLE_QUOTE, STABLE, WMIC_COMMAND,
create_http_client, Logger, SeleniumManager, BETA, DASH_DASH_VERSION, DEV, NIGHTLY,
OFFLINE_REQUEST_ERR_MSG, REG_VERSION_ARG, STABLE,
};

pub const EDGE_NAMES: &[&str] = &["edge", "msedge", "microsoftedge"];
Expand Down Expand Up @@ -122,37 +121,11 @@ impl SeleniumManager for EdgeManager {
}

fn discover_browser_version(&mut self) -> Option<String> {
let mut commands;
let mut browser_path = self.get_browser_path().to_string();
let escaped_browser_path;
if browser_path.is_empty() {
match self.detect_browser_path() {
Some(path) => {
browser_path = path_buf_to_string(path);
escaped_browser_path = self.get_escaped_path(browser_path.to_string());
commands = vec![format_one_arg(WMIC_COMMAND, &escaped_browser_path)];
if !self.is_browser_version_unstable() {
commands.push(format_one_arg(
REG_QUERY,
r#"HKCU\Software\Microsoft\Edge\BLBeacon"#,
));
}
}
_ => return None,
}
} else {
escaped_browser_path = self.get_escaped_path(browser_path.to_string());
commands = vec![format_one_arg(WMIC_COMMAND, &escaped_browser_path)];
}
if !WINDOWS.is(self.get_os()) {
commands = vec![
format_three_args(DASH_DASH_VERSION, "", &escaped_browser_path, ""),
format_three_args(DASH_DASH_VERSION, DOUBLE_QUOTE, &browser_path, DOUBLE_QUOTE),
format_three_args(DASH_DASH_VERSION, SINGLE_QUOTE, &browser_path, SINGLE_QUOTE),
format_three_args(DASH_DASH_VERSION, "", &browser_path, ""),
]
}
self.detect_browser_version(commands)
self.discover_general_browser_version(
r#"HKCU\Software\Microsoft\Edge\BLBeacon"#,
REG_VERSION_ARG,
DASH_DASH_VERSION,
)
}

fn get_driver_name(&self) -> &str {
Expand Down
44 changes: 8 additions & 36 deletions rust/src/firefox.rs
Original file line number Diff line number Diff line change
Expand Up @@ -24,14 +24,13 @@ use std::path::PathBuf;
use crate::config::ARCH::{ARM64, X32};
use crate::config::OS::{LINUX, MACOS, WINDOWS};
use crate::downloads::read_redirect_from_link;
use crate::files::{compose_driver_path_in_cache, path_buf_to_string, BrowserPath};
use crate::files::{compose_driver_path_in_cache, BrowserPath};
use crate::metadata::{
create_driver_metadata, get_driver_version_from_metadata, get_metadata, write_metadata,
};
use crate::{
create_http_client, format_one_arg, format_three_args, format_two_args, Logger,
SeleniumManager, BETA, DASH_VERSION, DEV, DOUBLE_QUOTE, NIGHTLY, OFFLINE_REQUEST_ERR_MSG,
REG_QUERY_FIND, SINGLE_QUOTE, STABLE, WMIC_COMMAND,
create_http_client, Logger, SeleniumManager, BETA, DASH_VERSION, DEV, NIGHTLY,
OFFLINE_REQUEST_ERR_MSG, REG_CURRENT_VERSION_ARG, STABLE,
};

pub const FIREFOX_NAME: &str = "firefox";
Expand Down Expand Up @@ -119,38 +118,11 @@ impl SeleniumManager for FirefoxManager {
}

fn discover_browser_version(&mut self) -> Option<String> {
let mut commands;
let mut browser_path = self.get_browser_path().to_string();
let escaped_browser_path;
if browser_path.is_empty() {
match self.detect_browser_path() {
Some(path) => {
browser_path = path_buf_to_string(path);
escaped_browser_path = self.get_escaped_path(browser_path.to_string());
commands = vec![format_one_arg(WMIC_COMMAND, &escaped_browser_path)];
if !self.is_browser_version_unstable() {
commands.push(format_two_args(
REG_QUERY_FIND,
r#"HKCU\Software\Mozilla"#,
self.browser_name,
));
}
}
_ => return None,
}
} else {
escaped_browser_path = self.get_escaped_path(browser_path.to_string());
commands = vec![format_one_arg(WMIC_COMMAND, &escaped_browser_path)];
}
if !WINDOWS.is(self.get_os()) {
commands = vec![
format_three_args(DASH_VERSION, "", &escaped_browser_path, ""),
format_three_args(DASH_VERSION, DOUBLE_QUOTE, &browser_path, DOUBLE_QUOTE),
format_three_args(DASH_VERSION, SINGLE_QUOTE, &browser_path, SINGLE_QUOTE),
format_three_args(DASH_VERSION, "", &browser_path, ""),
]
}
self.detect_browser_version(commands)
self.discover_general_browser_version(
r#"HKCU\Software\Mozilla\Mozilla Firefox"#,
REG_CURRENT_VERSION_ARG,
DASH_VERSION,
)
}

fn get_driver_name(&self) -> &str {
Expand Down
35 changes: 8 additions & 27 deletions rust/src/iexplorer.rs
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,12 @@ use std::collections::HashMap;
use std::error::Error;
use std::path::PathBuf;

use crate::files::{compose_driver_path_in_cache, path_buf_to_string, BrowserPath};
use crate::files::{compose_driver_path_in_cache, BrowserPath};

use crate::downloads::parse_json_from_url;
use crate::{
create_http_client, format_one_arg, parse_version, Logger, SeleniumManager,
OFFLINE_REQUEST_ERR_MSG, REG_QUERY, STABLE, WINDOWS, WMIC_COMMAND,
create_http_client, parse_version, Logger, SeleniumManager, OFFLINE_REQUEST_ERR_MSG,
REG_VERSION_ARG, STABLE, WINDOWS,
};

use crate::metadata::{
Expand Down Expand Up @@ -95,30 +95,11 @@ impl SeleniumManager for IExplorerManager {
}

fn discover_browser_version(&mut self) -> Option<String> {
let commands;
let mut browser_path = self.get_browser_path().to_string();
let escaped_browser_path;
if browser_path.is_empty() {
match self.detect_browser_path() {
Some(path) => {
browser_path = path_buf_to_string(path);
escaped_browser_path = self.get_escaped_path(browser_path.to_string());
commands = vec![format_one_arg(WMIC_COMMAND, &escaped_browser_path)];
}
None => {
commands = vec![
(format_one_arg(
REG_QUERY,
r#"HKEY_LOCAL_MACHINE\Software\Microsoft\Internet Explorer"#,
)),
];
}
}
} else {
escaped_browser_path = self.get_escaped_path(browser_path.to_string());
commands = vec![format_one_arg(WMIC_COMMAND, &escaped_browser_path)];
}
self.detect_browser_version(commands)
self.discover_general_browser_version(
r#"HKEY_LOCAL_MACHINE\Software\Microsoft\Internet Explorer"#,
REG_VERSION_ARG,
"",
)
}

fn get_driver_name(&self) -> &str {
Expand Down
Loading

0 comments on commit 72f083c

Please sign in to comment.