Support (created) and (expires) pseudoheaders in HTTP signatures
This commit is contained in:
parent
43eda37322
commit
458ca3fc3d
|
@ -82,26 +82,32 @@ fn parse_http_signature(
|
||||||
.ok_or(VerificationError::ParseError("signature is missing"))?
|
.ok_or(VerificationError::ParseError("signature is missing"))?
|
||||||
.to_owned();
|
.to_owned();
|
||||||
|
|
||||||
let mut message = format!(
|
let mut message_parts = vec![];
|
||||||
"(request-target): {} {}",
|
|
||||||
request_method.as_str().to_lowercase(),
|
|
||||||
request_uri,
|
|
||||||
);
|
|
||||||
for header in headers_parameter.split(' ') {
|
for header in headers_parameter.split(' ') {
|
||||||
if header == "(request-target)" {
|
let message_part = if header == "(request-target)" {
|
||||||
continue;
|
format!(
|
||||||
}
|
"(request-target): {} {}",
|
||||||
let header_value = request_headers.get(header)
|
request_method.as_str().to_lowercase(),
|
||||||
.ok_or(VerificationError::HeaderError("missing header"))?
|
request_uri,
|
||||||
.to_str()
|
)
|
||||||
.map_err(|_| VerificationError::HeaderError("invalid header value"))?;
|
} else if header == "(created)" {
|
||||||
let message_part = format!(
|
let created = signature_parameters.get("created")
|
||||||
"\n{}: {}",
|
.ok_or(VerificationError::ParseError("created parameter is missing"))?;
|
||||||
header,
|
format!("(created): {}", created)
|
||||||
header_value,
|
} else if header == "(expires)" {
|
||||||
);
|
let expires = signature_parameters.get("expires")
|
||||||
message.push_str(&message_part);
|
.ok_or(VerificationError::ParseError("expires parameter is missing"))?;
|
||||||
}
|
format!("(expires): {}", expires)
|
||||||
|
} else {
|
||||||
|
let header_value = request_headers.get(header)
|
||||||
|
.ok_or(VerificationError::HeaderError("missing header"))?
|
||||||
|
.to_str()
|
||||||
|
.map_err(|_| VerificationError::HeaderError("invalid header value"))?;
|
||||||
|
format!("{}: {}", header, header_value)
|
||||||
|
};
|
||||||
|
message_parts.push(message_part);
|
||||||
|
};
|
||||||
|
let message = message_parts.join("\n");
|
||||||
|
|
||||||
let signature_data = SignatureData {
|
let signature_data = SignatureData {
|
||||||
key_id,
|
key_id,
|
||||||
|
|
Loading…
Reference in a new issue