Only add digits and algorithm parameters to URL for non default values

This commit is contained in:
timvisee 2023-01-13 20:24:36 +01:00
parent d2c6ae62d6
commit 5f676dd3dc
No known key found for this signature in database
GPG Key ID: B8DB720BC383E172
1 changed files with 19 additions and 14 deletions

View File

@ -622,15 +622,17 @@ impl TOTP {
host = "steam"; host = "steam";
} }
let account_name = urlencoding::encode(self.account_name.as_str()).to_string(); let account_name = urlencoding::encode(self.account_name.as_str()).to_string();
let mut params = vec![ let mut params = vec![format!("secret={}", self.get_secret_base32())];
format!("secret={}", self.get_secret_base32()), if self.digits != 6 {
format!("digits={}", self.digits), params.push(format!("digits={}", self.digits));
format!("algorithm={}", self.algorithm), }
]; if self.algorithm != Algorithm::SHA1 {
let label = if self.issuer.is_some() { params.push(format!("algorithm={}", self.algorithm));
let issuer = urlencoding::encode(self.issuer.as_ref().unwrap().as_str()).to_string(); }
let label = if let Some(issuer) = &self.issuer {
let issuer = urlencoding::encode(issuer);
params.push(format!("issuer={}", issuer)); params.push(format!("issuer={}", issuer));
format!("{0}:{1}", issuer, account_name) format!("{}:{}", issuer, account_name)
} else { } else {
account_name account_name
}; };
@ -880,7 +882,10 @@ mod tests {
) )
.unwrap(); .unwrap();
let url = totp.get_url(); let url = totp.get_url();
assert_eq!(url.as_str(), "otpauth://totp/constantoine%40github.com?secret=KRSXG5CTMVRXEZLUKN2XAZLSKNSWG4TFOQ&digits=6&algorithm=SHA1"); assert_eq!(
url.as_str(),
"otpauth://totp/constantoine%40github.com?secret=KRSXG5CTMVRXEZLUKN2XAZLSKNSWG4TFOQ"
);
} }
#[test] #[test]
@ -897,7 +902,7 @@ mod tests {
) )
.unwrap(); .unwrap();
let url = totp.get_url(); let url = totp.get_url();
assert_eq!(url.as_str(), "otpauth://totp/Github:constantoine%40github.com?secret=KRSXG5CTMVRXEZLUKN2XAZLSKNSWG4TFOQ&digits=6&algorithm=SHA1&issuer=Github"); assert_eq!(url.as_str(), "otpauth://totp/Github:constantoine%40github.com?secret=KRSXG5CTMVRXEZLUKN2XAZLSKNSWG4TFOQ&issuer=Github");
} }
#[test] #[test]
@ -914,7 +919,7 @@ mod tests {
) )
.unwrap(); .unwrap();
let url = totp.get_url(); let url = totp.get_url();
assert_eq!(url.as_str(), "otpauth://totp/Github:constantoine%40github.com?secret=KRSXG5CTMVRXEZLUKN2XAZLSKNSWG4TFOQ&digits=6&algorithm=SHA256&issuer=Github"); assert_eq!(url.as_str(), "otpauth://totp/Github:constantoine%40github.com?secret=KRSXG5CTMVRXEZLUKN2XAZLSKNSWG4TFOQ&algorithm=SHA256&issuer=Github");
} }
#[test] #[test]
@ -931,7 +936,7 @@ mod tests {
) )
.unwrap(); .unwrap();
let url = totp.get_url(); let url = totp.get_url();
assert_eq!(url.as_str(), "otpauth://totp/Github:constantoine%40github.com?secret=KRSXG5CTMVRXEZLUKN2XAZLSKNSWG4TFOQ&digits=6&algorithm=SHA512&issuer=Github"); assert_eq!(url.as_str(), "otpauth://totp/Github:constantoine%40github.com?secret=KRSXG5CTMVRXEZLUKN2XAZLSKNSWG4TFOQ&algorithm=SHA512&issuer=Github");
} }
#[test] #[test]
@ -1263,7 +1268,7 @@ mod tests {
Algorithm::SHA1, Algorithm::SHA1,
6, 6,
1, 1,
1, 30,
"TestSecretSuperSecret".as_bytes().to_vec(), "TestSecretSuperSecret".as_bytes().to_vec(),
Some("Github".to_string()), Some("Github".to_string()),
"constantoine@github.com".to_string(), "constantoine@github.com".to_string(),
@ -1278,7 +1283,7 @@ mod tests {
let hash_digest = Sha512::digest(data); let hash_digest = Sha512::digest(data);
assert_eq!( assert_eq!(
format!("{:x}", hash_digest).as_str(), format!("{:x}", hash_digest).as_str(),
"2b6e6205bf1cea547b20af23c504eab8062af96c642c0d76afb3df6695fa231b210b7ae435e34bea1ef8b91216fd3a0f7065e7992f1703e0737600b464a1083e" "fbb0804f1e4f4c689d22292c52b95f0783b01b4319973c0c50dd28af23dbbbe663dce4eb05a7959086d9092341cb9f103ec5a9af4a973867944e34c063145328"
); );
} }