Fix clippy warnings
Signed-off-by: constantoine <cleo.rebert-ext@treezor.com>
This commit is contained in:
parent
fd1ee7f517
commit
4d9e41ee68
20
src/lib.rs
20
src/lib.rs
|
@ -54,7 +54,6 @@ mod url_error;
|
||||||
pub use secret::{Secret, SecretParseError};
|
pub use secret::{Secret, SecretParseError};
|
||||||
pub use url_error::TotpUrlError;
|
pub use url_error::TotpUrlError;
|
||||||
pub use rfc::{Rfc6238, Rfc6238Error};
|
pub use rfc::{Rfc6238, Rfc6238Error};
|
||||||
use base32;
|
|
||||||
|
|
||||||
use constant_time_eq::constant_time_eq;
|
use constant_time_eq::constant_time_eq;
|
||||||
|
|
||||||
|
@ -64,12 +63,10 @@ use serde::{Deserialize, Serialize};
|
||||||
use core::fmt;
|
use core::fmt;
|
||||||
|
|
||||||
#[cfg(feature = "qr")]
|
#[cfg(feature = "qr")]
|
||||||
use {base64, image::Luma, qrcodegen};
|
use image::Luma;
|
||||||
|
|
||||||
#[cfg(feature = "otpauth")]
|
#[cfg(feature = "otpauth")]
|
||||||
use url::{Host, Url};
|
use url::{Host, Url};
|
||||||
#[cfg(feature = "otpauth")]
|
|
||||||
use urlencoding;
|
|
||||||
|
|
||||||
use hmac::Mac;
|
use hmac::Mac;
|
||||||
use std::time::{SystemTime, SystemTimeError, UNIX_EPOCH};
|
use std::time::{SystemTime, SystemTimeError, UNIX_EPOCH};
|
||||||
|
@ -185,7 +182,7 @@ impl Default for TOTP {
|
||||||
#[cfg(all(feature = "gen_secret", feature = "otpauth"))]
|
#[cfg(all(feature = "gen_secret", feature = "otpauth"))]
|
||||||
impl Default for TOTP {
|
impl Default for TOTP {
|
||||||
fn default() -> Self {
|
fn default() -> Self {
|
||||||
return TOTP::new(Algorithm::SHA1, 6, 1, 30, Secret::generate_secret().to_bytes().unwrap(), None, "".to_string()).unwrap()
|
TOTP::new(Algorithm::SHA1, 6, 1, 30, Secret::generate_secret().to_bytes().unwrap(), None, "".to_string()).unwrap()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -345,7 +342,7 @@ impl<T: AsRef<[u8]>> TOTP<T> {
|
||||||
/// Generate a TOTP from the standard otpauth URL
|
/// Generate a TOTP from the standard otpauth URL
|
||||||
#[cfg(feature = "otpauth")]
|
#[cfg(feature = "otpauth")]
|
||||||
pub fn from_url<S: AsRef<str>>(url: S) -> Result<TOTP<Vec<u8>>, TotpUrlError> {
|
pub fn from_url<S: AsRef<str>>(url: S) -> Result<TOTP<Vec<u8>>, TotpUrlError> {
|
||||||
let url = Url::parse(url.as_ref()).map_err(|err| TotpUrlError::Url(err))?;
|
let url = Url::parse(url.as_ref()).map_err(TotpUrlError::Url)?;
|
||||||
if url.scheme() != "otpauth" {
|
if url.scheme() != "otpauth" {
|
||||||
return Err(TotpUrlError::Scheme(url.scheme().to_string()));
|
return Err(TotpUrlError::Scheme(url.scheme().to_string()));
|
||||||
}
|
}
|
||||||
|
@ -363,7 +360,7 @@ impl<T: AsRef<[u8]>> TOTP<T> {
|
||||||
let path = url.path().trim_start_matches('/');
|
let path = url.path().trim_start_matches('/');
|
||||||
if path.contains(':') {
|
if path.contains(':') {
|
||||||
let parts = path.split_once(':').unwrap();
|
let parts = path.split_once(':').unwrap();
|
||||||
issuer = Some(urlencoding::decode(parts.0.to_owned().as_str()).map_err(|_| TotpUrlError::IssuerDecoding(parts.0.to_owned().to_string()))?.to_string());
|
issuer = Some(urlencoding::decode(parts.0.to_owned().as_str()).map_err(|_| TotpUrlError::IssuerDecoding(parts.0.to_owned()))?.to_string());
|
||||||
account_name = parts.1.trim_start_matches(':').to_owned();
|
account_name = parts.1.trim_start_matches(':').to_owned();
|
||||||
} else {
|
} else {
|
||||||
account_name = path.to_owned();
|
account_name = path.to_owned();
|
||||||
|
@ -390,7 +387,7 @@ impl<T: AsRef<[u8]>> TOTP<T> {
|
||||||
"secret" => {
|
"secret" => {
|
||||||
secret =
|
secret =
|
||||||
base32::decode(base32::Alphabet::RFC4648 { padding: false }, value.as_ref())
|
base32::decode(base32::Alphabet::RFC4648 { padding: false }, value.as_ref())
|
||||||
.ok_or(TotpUrlError::Secret(value.to_string()))?;
|
.ok_or_else(|| TotpUrlError::Secret(value.to_string()))?;
|
||||||
}
|
}
|
||||||
"issuer" => {
|
"issuer" => {
|
||||||
let param_issuer = value.parse::<String>().map_err(|_| TotpUrlError::Issuer(value.to_string()))?;
|
let param_issuer = value.parse::<String>().map_err(|_| TotpUrlError::Issuer(value.to_string()))?;
|
||||||
|
@ -416,20 +413,19 @@ impl<T: AsRef<[u8]>> TOTP<T> {
|
||||||
/// Secret will be base 32'd without padding, as per RFC.
|
/// Secret will be base 32'd without padding, as per RFC.
|
||||||
#[cfg(feature = "otpauth")]
|
#[cfg(feature = "otpauth")]
|
||||||
pub fn get_url(&self) -> String {
|
pub fn get_url(&self) -> String {
|
||||||
let label: String;
|
|
||||||
let account_name: String = urlencoding::encode(self.account_name.as_str()).to_string();
|
let account_name: String = urlencoding::encode(self.account_name.as_str()).to_string();
|
||||||
|
let mut label: String = format!("{}?", account_name);
|
||||||
if self.issuer.is_some() {
|
if self.issuer.is_some() {
|
||||||
let issuer: String = urlencoding::encode(self.issuer.as_ref().unwrap().as_str()).to_string();
|
let issuer: String = urlencoding::encode(self.issuer.as_ref().unwrap().as_str()).to_string();
|
||||||
label = format!("{0}:{1}?issuer={0}&", issuer, account_name);
|
label = format!("{0}:{1}?issuer={0}&", issuer, account_name);
|
||||||
} else {
|
|
||||||
label = format!("{}?", account_name);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
format!(
|
format!(
|
||||||
"otpauth://totp/{}secret={}&digits={}&algorithm={}",
|
"otpauth://totp/{}secret={}&digits={}&algorithm={}",
|
||||||
label,
|
label,
|
||||||
self.get_secret_base32(),
|
self.get_secret_base32(),
|
||||||
self.digits.to_string(),
|
self.digits,
|
||||||
self.algorithm,
|
self.algorithm,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
@ -324,7 +324,7 @@ mod tests {
|
||||||
)
|
)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
let totp = TOTP::try_from(rfc);
|
let totp = TOTP::try_from(rfc);
|
||||||
assert!(!totp.is_err());
|
assert!(totp.is_ok());
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
|
|
@ -107,7 +107,7 @@ impl PartialEq for Secret {
|
||||||
#[cfg(feature = "gen_secret")]
|
#[cfg(feature = "gen_secret")]
|
||||||
impl Default for Secret {
|
impl Default for Secret {
|
||||||
fn default() -> Self {
|
fn default() -> Self {
|
||||||
return Secret::generate_secret()
|
Secret::generate_secret()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue