1
#pragma once
2

            
3
#include <memory>
4

            
5
#include "envoy/extensions/early_data/v3/default_early_data_policy.pb.h"
6
#include "envoy/registry/registry.h"
7
#include "envoy/router/router.h"
8

            
9
namespace Envoy {
10
namespace Router {
11

            
12
// The default behavior is either disallowing any early data request or allowing safe request over
13
// early data based on allow_safe_request.
14
class DefaultEarlyDataPolicy : public EarlyDataPolicy {
15
public:
16
  explicit DefaultEarlyDataPolicy(bool allow_safe_request)
17
16402
      : allow_safe_request_(allow_safe_request) {}
18

            
19
  bool allowsEarlyDataForRequest(const Http::RequestHeaderMap& request_headers) const override;
20

            
21
private:
22
  bool allow_safe_request_;
23
};
24

            
25
class DefaultEarlyDataPolicyFactory : public EarlyDataPolicyFactory {
26
public:
27
11986
  std::string name() const override { return "envoy.route.early_data_policy.default"; }
28

            
29
5
  EarlyDataPolicyPtr createEarlyDataPolicy(const Protobuf::Message& /*config*/) override {
30
5
    return std::make_unique<DefaultEarlyDataPolicy>(
31
5
        /*allow_safe_request=*/false);
32
5
  }
33

            
34
472
  ProtobufTypes::MessagePtr createEmptyConfigProto() override {
35
472
    return std::make_unique<envoy::extensions::early_data::v3::DefaultEarlyDataPolicy>();
36
472
  }
37
};
38

            
39
DECLARE_FACTORY(DefaultEarlyDataPolicyFactory);
40

            
41
} // namespace Router
42
} // namespace Envoy