Response::new(401)
.with_headers(vec![("WWW-Authenticate".to_string(), "Bearer realm=\"oauth2\"".to_string())])
.with_body(r#"{ "error": "token was not present"}"#)
Stopping Request and Response Execution
Flex Gateway Policy Development Kit (PDK) enables you to send early responses during the request and response execution to terminate the execution flow.
To intercept and stop a request or response, return a Response object from your on_request or on_response wrapped functions:
To return the `Response`object, see:
Stop Request Execution
Block or allow requests to reach the upstream service using a Flow. A Flow in an enum value with two possible values:
-
Continue: Defines an object that is forwarded to the response. -
Break: Aborts the request and returns the provided response.
Create a Flow as follows:
async fn request_filter(request_state: RequestState) -> Flow<()> {
let header_state = request_state.into_headers_state().await;
let handler = header_state.handler();
if handler.header("authorization").is_some() {
Flow::Continue(())
} else {
Flow::Break(Response::new(401)
.with_headers(vec![("WWW-Authenticate".to_string(), "Bearer realm=\"oauth2\"".to_string())])
.with_body(r#"{ "error": "token was not present"}"#))
}
}
|
Due to the streaming nature of To avoid early responses reaching the client, see Sharing Data Between Requests and Responses. |
Stop Response Execution
To send an early response during the on_response phase, return a Response object using the send_response method of the ResponseHeadersState. You can’t send an early response from the body state:
pub fn send_response(self, response: Response) {
The send_response method enables you to add a body to responses that don’t already have one. Sending an early response using the send_response method terminates the execution flow. You can’t perform any other operation after sending an early response:
async fn response_filter(state: ResponseState) {
let state = state.into_headers_state().await;
state.send_response(
Response::new(200)
.with_headers(vec![("some".to_string(), "200".to_string())])
.with_body("Some"),
);
}



