Skip to content

Commit da98fa2

Browse files
committed
add rs
1 parent 67b0a85 commit da98fa2

File tree

3 files changed

+18
-3
lines changed

3 files changed

+18
-3
lines changed

Cargo.lock

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ windows-sys = "0.61.2"
4444

4545
[target.'cfg(windows)'.dependencies]
4646
eventlog = "0.4.0"
47+
windows-registry = "0.6.0"
4748

4849
[target.'cfg(unix)'.dependencies]
4950
syslog = "7.0.0"

src/ffi.rs

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ use crate::generated::ping::ping_client::PingClient;
88
use crate::generated::sys_auth::TokenAuthRequest;
99
use crate::generated::sys_auth::system_auth_interactive_client::SystemAuthInteractiveClient;
1010
use crate::generated::sys_auth::system_auth_token_client::SystemAuthTokenClient;
11+
use crate::generated::sys_ctrl::system_ctrl_client::SystemCtrlClient;
12+
use crate::generated::sys_ctrl::capabilities_response::Capability;
1113
use crate::grpc::grpc_request;
1214

1315
const TOKEN_QUERY_PARAM: &str = "ak-auth-ia-token";
@@ -95,12 +97,23 @@ fn ak_sys_auth_start_async(res: &mut ffi::AuthStartAsync) -> Result<bool, Box<dy
9597
Ok(true)
9698
}
9799

100+
#[cfg(windows)]
98101
fn ak_sys_auth_interactive_available() -> Result<bool, Box<dyn Error>> {
102+
use windows_registry::{LOCAL_MACHINE};
103+
104+
let key = LOCAL_MACHINE.create("SOFTWARE\\authentik Security Inc.\\Platform\\Capabilities")?;
105+
let ia = key.get_u32("auth_interactive")?;
106+
if ia > 0 {
107+
return Ok(true)
108+
}
99109
let response = grpc_request(async |ch| {
100-
return Ok(SystemAuthInteractiveClient::new(ch)
101-
.interactive_supported(())
110+
return Ok(SystemCtrlClient::new(ch)
111+
.capabilities(())
102112
.await?);
103113
})?
104114
.into_inner();
105-
Ok(response.supported)
115+
let authia = Capability::AuthInteractive as i32;
116+
let supported = response.capabilities.contains(&authia);
117+
key.set_u32("auth_interactive", supported as u32)?;
118+
Ok(supported)
106119
}

0 commit comments

Comments
 (0)