43 "Input type should be auto-generated FlatBuffers table type"
47 "Return type should be auto-generated FlatBuffers table type"
51 HttpHandlerFlatbufBase(
52 const components::ComponentConfig& config,
53 const components::ComponentContext& component_context
58 virtual typename ReturnType::NativeTableType HandleRequestFlatbufThrow(
59 const http::HttpRequest& request,
60 const typename InputType::NativeTableType& input,
61 request::RequestContext& context
72 static yaml_config::Schema GetStaticConfigSchema();
77 const http::HttpRequest& request,
78 request::RequestContext& context,
79 const std::string& request_body
84 const http::HttpRequest& request,
85 request::RequestContext& context,
86 const std::string& response_data
89 void ParseRequestData(
const http::HttpRequest& request, request::RequestContext& context)
const final;
103 ReturnType>::
HandleRequestThrow(
const http::HttpRequest& request, request::RequestContext& context)
const {
104 const auto& input = context.GetData<
const typename InputType::NativeTableType&>(impl::kFlatbufRequestDataName);
108 .SetData(std::string{impl::kFlatbufResponseDataName}, HandleRequestFlatbufThrow(request, input, context));
110 flatbuffers::FlatBufferBuilder fbb;
111 auto ret_fbb = ReturnType::Pack(fbb, &ret);
113 return {
reinterpret_cast<
const char*>(fbb.GetBufferPointer()), fbb.GetSize()};
132 const http::HttpRequest&,
133 request::RequestContext&,
134 const std::string& request_body
136 const size_t limit = GetConfig().request_body_size_log_limit;
137 return utils::log::ToLimitedHex(request_body, limit);
142 const http::HttpRequest&,
143 request::RequestContext&,
144 const std::string& response_data
146 const size_t limit = GetConfig().response_data_size_log_limit;
147 return utils::log::ToLimitedHex(response_data, limit);
153 ReturnType>::
ParseRequestData(
const http::HttpRequest& request, request::RequestContext& context)
const {
154 const auto& body = request.RequestBody();
155 const auto* input_fbb = flatbuffers::GetRoot<InputType>(body.data());
156 flatbuffers::Verifier verifier(
reinterpret_cast<
const uint8_t*>(body.data()), body.size());
157 if (!input_fbb->Verify(verifier)) {
158 throw ClientError(InternalMessage{
"Invalid FlatBuffers format in request body"});
161 typename InputType::NativeTableType input;
162 input_fbb->UnPackTo(&input);
164 context.SetData(std::string{impl::kFlatbufRequestDataName}, std::move(input));