Skip to content

Commit

Permalink
feat(core): Add correctness check for read with if_xxx headers
Browse files Browse the repository at this point in the history
Signed-off-by: Xuanwo <[email protected]>
  • Loading branch information
Xuanwo committed Jan 13, 2025
1 parent 85c3803 commit d4e1dce
Showing 1 changed file with 57 additions and 1 deletion.
58 changes: 57 additions & 1 deletion core/src/layers/correctness_check.rs
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ pub(crate) fn new_unsupported_error(info: &AccessorInfo, op: Operation, args: &s

Error::new(
ErrorKind::Unsupported,
format!("service {scheme} doesn't support operation {op} with args {args}"),
format!("The service {scheme} does not support the operation {op} with the arguments {args}. Please verify if the relevant flags have been enabled, or submit an issue if you believe this is incorrect."),
)
.with_operation(op)
}
Expand Down Expand Up @@ -102,6 +102,34 @@ impl<A: Access> LayeredAccess for CorrectnessAccessor<A> {
"version",
));
}
if !capability.read_with_if_match && args.if_match().is_some() {
return Err(new_unsupported_error(
self.info.as_ref(),
Operation::Read,
"if_match",
));
}
if !capability.read_with_if_none_match && args.if_none_match().is_some() {
return Err(new_unsupported_error(
self.info.as_ref(),
Operation::Read,
"if_none_match",
));
}
if !capability.read_with_if_modified_since && args.if_modified_since().is_some() {
return Err(new_unsupported_error(
self.info.as_ref(),
Operation::Read,
"if_modified_since",
));
}
if !capability.read_with_if_unmodified_since && args.if_unmodified_since().is_some() {
return Err(new_unsupported_error(
self.info.as_ref(),
Operation::Read,
"if_unmodified_since",
));
}

self.inner.read(path, args).await
}
Expand Down Expand Up @@ -146,6 +174,34 @@ impl<A: Access> LayeredAccess for CorrectnessAccessor<A> {
"version",
));
}
if !capability.stat_with_if_match && args.if_match().is_some() {
return Err(new_unsupported_error(
self.info.as_ref(),
Operation::Stat,
"if_match",
));
}
if !capability.stat_with_if_none_match && args.if_none_match().is_some() {
return Err(new_unsupported_error(
self.info.as_ref(),
Operation::Stat,
"if_none_match",
));
}
if !capability.stat_with_if_modified_since && args.if_modified_since().is_some() {
return Err(new_unsupported_error(
self.info.as_ref(),
Operation::Stat,
"if_modified_since",
));
}
if !capability.stat_with_if_unmodified_since && args.if_unmodified_since().is_some() {
return Err(new_unsupported_error(
self.info.as_ref(),
Operation::Stat,
"if_unmodified_since",
));
}

self.inner.stat(path, args).await
}
Expand Down

0 comments on commit d4e1dce

Please sign in to comment.