1
#pragma once
2

            
3
#include "envoy/extensions/http/custom_response/local_response_policy/v3/local_response_policy.pb.h"
4
#include "envoy/extensions/http/custom_response/local_response_policy/v3/local_response_policy.pb.validate.h"
5

            
6
#include "source/common/router/header_parser.h"
7
#include "source/extensions/filters/http/custom_response/policy.h"
8

            
9
namespace Envoy {
10
namespace Extensions {
11
namespace HttpFilters {
12
namespace CustomResponse {
13
class CustomResponseFilter;
14
} // namespace CustomResponse
15
} // namespace HttpFilters
16

            
17
namespace Http {
18
namespace CustomResponse {
19

            
20
class LocalResponsePolicy : public Extensions::HttpFilters::CustomResponse::Policy,
21
                            public Logger::Loggable<Logger::Id::filter> {
22

            
23
public:
24
  LocalResponsePolicy(const envoy::extensions::http::custom_response::local_response_policy::v3::
25
                          LocalResponsePolicy& config,
26
                      Server::Configuration::ServerFactoryContext& context);
27

            
28
  Envoy::Http::FilterHeadersStatus
29
  encodeHeaders(Envoy::Http::ResponseHeaderMap&, bool,
30
                Extensions::HttpFilters::CustomResponse::CustomResponseFilter&) const override;
31

            
32
  Envoy::Http::Code
33
  getStatusCodeForLocalReply(const Envoy::Http::ResponseHeaderMap& response_headers) const;
34

            
35
private:
36
  // Rewrite the response body for locally specified bodies.
37
  void formatBody(const Envoy::Http::RequestHeaderMap& request_headers,
38
                  const Envoy::Http::ResponseHeaderMap& response_headers,
39
                  const StreamInfo::StreamInfo& stream_info, std::string& body) const;
40

            
41
  // Body read from local data source.
42
  const absl::optional<std::string> local_body_;
43

            
44
  // body format
45
  Formatter::FormatterPtr formatter_;
46

            
47
  const absl::optional<Envoy::Http::Code> status_code_;
48
  const std::unique_ptr<Envoy::Router::HeaderParser> header_parser_;
49
};
50
} // namespace CustomResponse
51
} // namespace Http
52
} // namespace Extensions
53
} // namespace Envoy