librust-perlmod-0.8+exporter-dev (>= 0.8.1-~~),
librust-proxmox-apt-0.8+default-dev,
librust-proxmox-openid-0.9+default-dev,
- librust-proxmox-tfa-1+api-dev (>= 1.3-~~),
- librust-proxmox-tfa-1+default-dev (>= 1.3-~~),
+ librust-proxmox-tfa-2+api-dev,
+ librust-proxmox-tfa-2+default-dev,
librust-serde-1+default-dev,
librust-serde-bytes-0.11+default-dev,
librust-serde-json-1+default-dev,
use anyhow::{bail, format_err, Error};
use serde_bytes::ByteBuf;
+ use url::Url;
use perlmod::Value;
use proxmox_tfa::api::methods;
#[raw] raw_this: Value,
//#[try_from_ref] this: &Tfa,
userid: &str,
+ origin: Option<Url>,
) -> Result<Option<String>, Error> {
let this: &Tfa = (&raw_this).try_into()?;
let mut inner = this.inner.lock().unwrap();
- match inner.authentication_challenge(UserAccess::new(&raw_this)?, userid)? {
+ match inner.authentication_challenge(
+ UserAccess::new(&raw_this)?,
+ userid,
+ origin.as_ref(),
+ )? {
Some(challenge) => Ok(Some(serde_json::to_string(&challenge)?)),
None => Ok(None),
}
userid: &str,
challenge: &str, //super::TfaChallenge,
response: &str,
+ origin: Option<Url>,
) -> Result<bool, Error> {
let this: &Tfa = (&raw_this).try_into()?;
let challenge: super::TfaChallenge = serde_json::from_str(challenge)?;
let response: super::TfaResponse = response.parse()?;
let mut inner = this.inner.lock().unwrap();
inner
- .verify(UserAccess::new(&raw_this)?, userid, &challenge, response)
+ .verify(
+ UserAccess::new(&raw_this)?,
+ userid,
+ &challenge,
+ response,
+ origin.as_ref(),
+ )
.map(|save| save.needs_saving())
}
value: Option<String>,
challenge: Option<String>,
ty: methods::TfaType,
+ origin: Option<Url>,
) -> Result<methods::TfaUpdateInfo, Error> {
let this: &Tfa = (&raw_this).try_into()?;
methods::add_tfa_entry(
value,
challenge,
ty,
+ origin.as_ref(),
)
}
Err(err) => {
eprintln!(
"failed to parse challenge data for user {}: {}",
- userid,
- err
+ userid, err
);
Default::default()
- },
+ }
}
};