Fix message domain check

This commit is contained in:
Simon Bihel 2022-02-08 12:27:06 +00:00
parent bf48c61007
commit 79ffb360fe
No known key found for this signature in database
GPG Key ID: B7013150BEAA28FD

View File

@ -425,22 +425,11 @@ struct Web3ModalMessage {
pub expiration_time: Option<String>, pub expiration_time: Option<String>,
pub not_before: Option<String>, pub not_before: Option<String>,
pub request_id: Option<String>, pub request_id: Option<String>,
pub resources: Option<Vec<String>>, pub resources: Vec<UriString>,
} }
impl Web3ModalMessage { impl Web3ModalMessage {
fn to_eip4361_message(&self) -> Result<Message> { fn to_eip4361_message(&self) -> Result<Message> {
let mut next_resources: Vec<UriString> = Vec::new();
match &self.resources {
Some(resources) => {
for resource in resources {
let x = UriString::from_str(resource)?;
next_resources.push(x)
}
}
None => {}
}
Ok(Message { Ok(Message {
domain: self.domain.clone().try_into()?, domain: self.domain.clone().try_into()?,
address: self.address.0, address: self.address.0,
@ -459,7 +448,7 @@ impl Web3ModalMessage {
None => None, None => None,
}, },
request_id: self.request_id.clone(), request_id: self.request_id.clone(),
resources: next_resources, resources: self.resources.clone(),
}) })
} }
} }
@ -511,8 +500,8 @@ pub async fn sign_in(
.verify(signature) .verify(signature)
.map_err(|e| anyhow!("Failed signature validation: {}", e))?; .map_err(|e| anyhow!("Failed signature validation: {}", e))?;
let domain = params.redirect_uri.url().host().unwrap(); let domain = params.redirect_uri.url();
if domain.to_string() != siwe_cookie.message.domain { if domain.to_string() != *siwe_cookie.message.resources.get(0).unwrap().to_string() {
return Err(anyhow!("Conflicting domains in message and redirect").into()); return Err(anyhow!("Conflicting domains in message and redirect").into());
} }
if expected_nonce.is_some() && expected_nonce.unwrap() != siwe_cookie.message.nonce { if expected_nonce.is_some() && expected_nonce.unwrap() != siwe_cookie.message.nonce {