mirror of
https://github.com/yuezk/GlobalProtect-openconnect.git
synced 2025-05-20 07:26:58 -04:00
feat: gpauth support macos
This commit is contained in:
@@ -2,10 +2,10 @@ use std::{env::temp_dir, fs::File};
|
||||
|
||||
use clap::{Parser, Subcommand};
|
||||
use gpapi::{
|
||||
clap::{handle_error, Args},
|
||||
clap::{handle_error, Args, InfoLevelVerbosity},
|
||||
utils::openssl,
|
||||
};
|
||||
use log::{info, LevelFilter};
|
||||
use log::info;
|
||||
use tempfile::NamedTempFile;
|
||||
|
||||
use crate::{
|
||||
@@ -16,9 +16,10 @@ use crate::{
|
||||
|
||||
const VERSION: &str = concat!(env!("CARGO_PKG_VERSION"), " (", compile_time::date_str!(), ")");
|
||||
|
||||
pub(crate) struct SharedArgs {
|
||||
pub(crate) struct SharedArgs<'a> {
|
||||
pub(crate) fix_openssl: bool,
|
||||
pub(crate) ignore_tls_errors: bool,
|
||||
pub(crate) verbose: &'a InfoLevelVerbosity,
|
||||
}
|
||||
|
||||
#[derive(Subcommand)]
|
||||
@@ -60,6 +61,9 @@ struct Cli {
|
||||
fix_openssl: bool,
|
||||
#[arg(long, help = "Ignore the TLS errors")]
|
||||
ignore_tls_errors: bool,
|
||||
|
||||
#[command(flatten)]
|
||||
verbose: InfoLevelVerbosity,
|
||||
}
|
||||
|
||||
impl Args for Cli {
|
||||
@@ -89,6 +93,7 @@ impl Cli {
|
||||
let shared_args = SharedArgs {
|
||||
fix_openssl: self.fix_openssl,
|
||||
ignore_tls_errors: self.ignore_tls_errors,
|
||||
verbose: &self.verbose,
|
||||
};
|
||||
|
||||
if self.ignore_tls_errors {
|
||||
@@ -103,12 +108,12 @@ impl Cli {
|
||||
}
|
||||
}
|
||||
|
||||
fn init_logger(command: &CliCommand) {
|
||||
fn init_logger(cli: &Cli) {
|
||||
let mut builder = env_logger::builder();
|
||||
builder.filter_level(LevelFilter::Info);
|
||||
builder.filter_level(cli.verbose.log_level_filter());
|
||||
|
||||
// Output the log messages to a file if the command is the auth callback
|
||||
if let CliCommand::LaunchGui(args) = command {
|
||||
if let CliCommand::LaunchGui(args) = &cli.command {
|
||||
let auth_data = args.auth_data.as_deref().unwrap_or_default();
|
||||
if !auth_data.is_empty() {
|
||||
if let Ok(log_file) = File::create(temp_dir().join("gpcallback.log")) {
|
||||
@@ -124,7 +129,7 @@ fn init_logger(command: &CliCommand) {
|
||||
pub(crate) async fn run() {
|
||||
let cli = Cli::parse();
|
||||
|
||||
init_logger(&cli.command);
|
||||
init_logger(&cli);
|
||||
|
||||
info!("gpclient started: {}", VERSION);
|
||||
|
||||
|
@@ -5,7 +5,7 @@ use clap::Args;
|
||||
use common::vpn_utils::find_csd_wrapper;
|
||||
use gpapi::{
|
||||
auth::SamlAuthResult,
|
||||
clap::args::Os,
|
||||
clap::{args::Os, ToVerboseArg},
|
||||
credential::{Credential, PasswordCredential},
|
||||
error::PortalError,
|
||||
gateway::{gateway_login, GatewayLogin},
|
||||
@@ -19,7 +19,7 @@ use gpapi::{
|
||||
GP_USER_AGENT,
|
||||
};
|
||||
use inquire::{Password, PasswordDisplayMode, Select, Text};
|
||||
use log::info;
|
||||
use log::{info, warn};
|
||||
use openconnect::Vpn;
|
||||
|
||||
use crate::{cli::SharedArgs, GP_CLIENT_LOCK_FILE};
|
||||
@@ -128,7 +128,7 @@ impl ConnectArgs {
|
||||
|
||||
pub(crate) struct ConnectHandler<'a> {
|
||||
args: &'a ConnectArgs,
|
||||
shared_args: &'a SharedArgs,
|
||||
shared_args: &'a SharedArgs<'a>,
|
||||
latest_key_password: RefCell<Option<String>>,
|
||||
}
|
||||
|
||||
@@ -203,7 +203,7 @@ impl<'a> ConnectHandler<'a> {
|
||||
return Ok(());
|
||||
};
|
||||
|
||||
info!("Failed to connect portal with prelogin: {}", err);
|
||||
warn!("Failed to connect portal with prelogin: {}", err);
|
||||
if err.root_cause().downcast_ref::<PortalError>().is_some() {
|
||||
info!("Trying the gateway authentication workflow...");
|
||||
self.connect_gateway_with_prelogin(server).await?;
|
||||
@@ -356,6 +356,7 @@ impl<'a> ConnectHandler<'a> {
|
||||
};
|
||||
|
||||
let os_version = self.args.os_version();
|
||||
let verbose = self.shared_args.verbose.to_verbose_arg();
|
||||
let auth_launcher = SamlAuthLauncher::new(&self.args.server)
|
||||
.gateway(is_gateway)
|
||||
.saml_request(prelogin.saml_request())
|
||||
@@ -364,7 +365,8 @@ impl<'a> ConnectHandler<'a> {
|
||||
.os_version(Some(&os_version))
|
||||
.fix_openssl(self.shared_args.fix_openssl)
|
||||
.ignore_tls_errors(self.shared_args.ignore_tls_errors)
|
||||
.browser(browser);
|
||||
.browser(browser)
|
||||
.verbose(verbose);
|
||||
|
||||
#[cfg(feature = "webview-auth")]
|
||||
let use_default_browser = prelogin.support_default_browser() && self.args.default_browser;
|
||||
|
Reference in New Issue
Block a user