mirror of
https://github.com/yuezk/GlobalProtect-openconnect.git
synced 2025-05-20 07:26:58 -04:00
35 lines
833 B
Rust
35 lines
833 B
Rust
use std::{env::temp_dir, io::Write};
|
|
|
|
pub struct BrowserAuthenticator<'a> {
|
|
auth_request: &'a str,
|
|
}
|
|
|
|
impl BrowserAuthenticator<'_> {
|
|
pub fn new(auth_request: &str) -> BrowserAuthenticator {
|
|
BrowserAuthenticator { auth_request }
|
|
}
|
|
|
|
pub fn authenticate(&self) -> anyhow::Result<()> {
|
|
if self.auth_request.starts_with("http") {
|
|
open::that_detached(self.auth_request)?;
|
|
} else {
|
|
let html_file = temp_dir().join("gpauth.html");
|
|
let mut file = std::fs::File::create(&html_file)?;
|
|
|
|
file.write_all(self.auth_request.as_bytes())?;
|
|
|
|
open::that_detached(html_file)?;
|
|
}
|
|
|
|
Ok(())
|
|
}
|
|
}
|
|
|
|
impl Drop for BrowserAuthenticator<'_> {
|
|
fn drop(&mut self) {
|
|
// Cleanup the temporary file
|
|
let html_file = temp_dir().join("gpauth.html");
|
|
let _ = std::fs::remove_file(html_file);
|
|
}
|
|
}
|