#[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, 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"); } }