httpd: improve error message for methods that requires "more"#28
Open
mvo5 wants to merge 1 commit intosystemd:mainfrom
Open
httpd: improve error message for methods that requires "more"#28mvo5 wants to merge 1 commit intosystemd:mainfrom
mvo5 wants to merge 1 commit intosystemd:mainfrom
Conversation
984c68d to
b59e3c6
Compare
Member
|
This .to_string() proliferation is ugly… Maybe like this: diff --git src/bin/varlink-httpd/main.rs src/bin/varlink-httpd/main.rs
index e9c7af8cb6..a482b65d03 100644
--- src/bin/varlink-httpd/main.rs
+++ src/bin/varlink-httpd/main.rs
@@ -73,6 +73,7 @@ impl IntoResponse for AppError {
impl From<zlink::Error> for AppError {
fn from(e: zlink::Error) -> Self {
use zlink::varlink_service;
+ let mut message = None;
let status = match &e {
zlink::Error::SocketRead
| zlink::Error::SocketWrite
@@ -80,7 +81,14 @@ impl From<zlink::Error> for AppError {
| zlink::Error::Io(..) => StatusCode::BAD_GATEWAY,
zlink::Error::VarlinkService(owned) => match owned.inner() {
varlink_service::Error::InvalidParameter { .. }
- | varlink_service::Error::ExpectedMore => StatusCode::BAD_REQUEST,
+ | varlink_service::Error::ExpectedMore => {
+ message = Some(
+ "This method requires the varlink 'more' flag. \
+ Use Accept: application/json-seq to enable streaming."
+ .to_string(),
+ );
+ StatusCode::BAD_REQUEST
+ }
varlink_service::Error::MethodNotFound { .. }
| varlink_service::Error::InterfaceNotFound { .. } => StatusCode::NOT_FOUND,
varlink_service::Error::MethodNotImplemented { .. } => StatusCode::NOT_IMPLEMENTED,
@@ -90,7 +98,7 @@ impl From<zlink::Error> for AppError {
};
Self {
status,
- message: e.to_string(),
+ message: message.unwrap_or(e.to_string()),
}
}
}? |
When a method is called that requires the "more" flag in varlink
we currently only error with BAD_REQUEST - however we can do
better and tell the caller more deails what whent wrong. So this
commit tweaks the error to return a helpful error string:
```console
$ curl -v -X POST \
http://localhost:1031/call/io.systemd.MachineImage.CleanPool \
-H 'Content-Type: application/json' -d '{}'
> POST /call/io.systemd.MachineImage.CleanPool HTTP/1.1
> Content-Type: application/json
>
< HTTP/1.1 400 Bad Request
< content-type: application/json
<
{"error":"This method requires the varlink 'more' flag. Use Accept:
application/json-seq to enable streaming."}
```
b59e3c6 to
d9b0f93
Compare
Contributor
Author
|
Thanks @keszybz ! I love the suggestion - applied. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
When a method is called that requires the "more" flag in varlink we currently only error with BAD_REQUEST - however we can do better and tell the caller more deails what whent wrong. So this commit tweaks the error to return a helpful error string: