1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
use crate::protocol::cac::authc::server_pdu::AuthConfigComplete;
use super::*;
impl<IO, Ctx> Authenticator<IO, Ctx>
where
IO: HttpIo,
Ctx: BorrowMutAuthenticatorContext,
{
pub async fn run(&mut self) -> Result<AuthConfigComplete, AuthenticatorError> {
let (mut headers, mut resp) = self.run_init().await?;
while let Some(req) = resp.as_request() {
let () = self
.context
.borrow_mut()
.received_request(&headers, req)
.map_err(ContextInvocationError)
.await?;
let (hs, r) = self.run_reply().await?;
headers = hs;
resp = r;
}
if let Some(complete) = resp.as_complete() {
let () = self
.context
.borrow_mut()
.received_complete(&headers, complete)
.map_err(ContextInvocationError)
.await?;
Ok(complete.to_owned())
} else {
let unsupported = resp.as_unsupported().unwrap();
log::error!("Unexpected: {}", String::from(unsupported));
Err(AuthenticatorError::CACProtocol(::eyre::eyre!(
"Unexpected response from server: {:#?}",
resp
)))
}
}
}