44 lines
1.4 KiB
Rust
44 lines
1.4 KiB
Rust
#[cfg(feature = "steam")]
|
|
use crate::{Algorithm, TOTP, LabeledTOTP};
|
|
|
|
#[cfg(feature = "steam")]
|
|
impl LabeledTOTP {
|
|
/// Will create a new instance of TOTP using the Steam algorithm with given parameters. See [the doc](struct.TOTP.html#fields) for reference as to how to choose those values
|
|
///
|
|
/// # Description
|
|
/// * `secret`: expect a non-encoded value, to pass in base32 string use `Secret::Encoded(String)`
|
|
///
|
|
/// ```rust
|
|
/// use totp_rs::{Secret, LabeledTOTP};
|
|
/// let secret = Secret::Encoded("ABCDEFGHIJKLMNOPQRSTUVWXYZ234567".into());
|
|
/// let totp = LabeledTOTP::new_steam(secret.to_bytes().unwrap(), "username".into());
|
|
/// ```
|
|
pub fn new_steam(secret: Vec<u8>, account_name: String) -> Self {
|
|
Self::new_unchecked(
|
|
TOTP::new_unchecked(
|
|
Algorithm::Steam,
|
|
5,
|
|
1,
|
|
30,
|
|
secret,
|
|
),
|
|
"Steam".to_owned(),
|
|
account_name,
|
|
)
|
|
}
|
|
}
|
|
|
|
#[cfg(all(test, feature = "steam"))]
|
|
mod test {
|
|
#[cfg(feature = "otpauth")]
|
|
use super::*;
|
|
|
|
#[test]
|
|
#[cfg(feature = "otpauth")]
|
|
fn get_url_steam() {
|
|
let totp = LabeledTOTP::new_steam("TestSecretSuperSecret".into(), "constantoine".into());
|
|
let url = totp.get_url();
|
|
assert_eq!(url.as_str(), "otpauth://steam/Steam:constantoine?secret=KRSXG5CTMVRXEZLUKN2XAZLSKNSWG4TFOQ&digits=5&algorithm=SHA1&issuer=Steam");
|
|
}
|
|
}
|