13#include <llhttp/llhttp.h>
14#include <nlohmann/json.hpp>
31 static std::optional<PathTemplateSpec>
parse(
const std::string_view& uri);
66 const std::string& param_name,
70 const auto it = params.find(param_name);
71 if (it == params.end())
73 error = fmt::format(
"No parameter named '{}' in path", param_name);
77 const auto param_s = it->second;
79 std::from_chars(param_s.data(), param_s.data() + param_s.size(), value);
80 if (ec != std::errc())
83 "Unable to parse path parameter '{}' as a {}", param_s, param_name);
93 const std::string& param_name,
97 const auto it = params.find(param_name);
98 if (it == params.end())
100 error = fmt::format(
"No parameter named '{}' in path", param_name);
134 template <
typename T>
137 const std::string& param_name,
141 return ccf::endpoints::get_path_param<T>(
142 params, param_name, value,
error);
148 const std::string& param_name,
157 std::map<std::string, std::map<RESTVerb, EndpointPtr>>
161 std::map<RESTVerb, std::shared_ptr<PathTemplatedEndpoint>>>
188 const std::string& method,
196 const std::string& method,
207 const std::string& method,
256 const std::string& path,
257 const std::vector<EndpointDefinitionPtr>& matches);
259 virtual void tick([[maybe_unused]] std::chrono::milliseconds duration);
Definition rest_verb.h:45
Describes the currently executing RPC.
Definition rpc_context.h:58
Definition endpoint_registry.h:117
virtual void execute_endpoint_locally_committed(EndpointDefinitionPtr e, CommandEndpointContext &ctx, const TxID &tx_id)
Definition endpoint_registry.cpp:489
virtual void handle_event_request_completed(const ccf::endpoints::RequestCompletedEvent &event)
Definition endpoint_registry.h:266
std::map< std::string, std::map< RESTVerb, EndpointPtr > > fully_qualified_endpoints
Definition endpoint_registry.h:158
const std::string method_prefix
Definition endpoint_registry.h:125
~EndpointRegistry() override=default
virtual void tick(std::chrono::milliseconds duration)
Definition endpoint_registry.cpp:563
bool get_path_param(const ccf::PathParams ¶ms, const std::string ¶m_name, std::string &value, std::string &error)
Definition endpoint_registry.h:146
virtual void report_ambiguous_templated_path(const std::string &path, const std::vector< EndpointDefinitionPtr > &matches)
Definition endpoint_registry.cpp:542
virtual void init_handlers()
Definition endpoint_registry.cpp:393
virtual Endpoint make_endpoint(const std::string &method, RESTVerb verb, const EndpointFunction &f, const AuthnPolicies &ap)
Definition endpoint_registry.cpp:204
struct ccf::endpoints::EndpointRegistry::OpenApiInfo openapi_info
std::map< std::string, std::map< RESTVerb, std::shared_ptr< PathTemplatedEndpoint > > > templated_endpoints
Definition endpoint_registry.h:162
void set_consensus(ccf::kv::Consensus *c)
Definition endpoint_registry.cpp:565
virtual void execute_endpoint(EndpointDefinitionPtr e, EndpointContext &ctx)
Definition endpoint_registry.cpp:475
void set_default(EndpointFunction f, const AuthnPolicies &ap)
Definition endpoint_registry.cpp:295
virtual EndpointDefinitionPtr find_endpoint(ccf::kv::Tx &tx, ccf::RpcContext &rpc_ctx)
Definition endpoint_registry.cpp:395
virtual bool request_needs_root(const ccf::RpcContext &rpc_ctx)
Definition endpoint_registry.cpp:536
virtual void handle_event_dispatch_failed(const ccf::endpoints::DispatchFailedEvent &event)
Definition endpoint_registry.h:270
EndpointPtr default_endpoint
Definition endpoint_registry.h:156
bool get_path_param(const ccf::PathParams ¶ms, const std::string ¶m_name, T &value, std::string &error)
Definition endpoint_registry.h:135
virtual Endpoint make_command_endpoint(const std::string &method, RESTVerb verb, const CommandEndpointFunction &f, const AuthnPolicies &ap)
Definition endpoint_registry.cpp:254
virtual Endpoint make_read_only_endpoint(const std::string &method, RESTVerb verb, const ReadOnlyEndpointFunction &f, const AuthnPolicies &ap)
Definition endpoint_registry.cpp:235
ccf::kv::TxHistory * history
Definition endpoint_registry.h:165
virtual void build_api(nlohmann::json &document, ccf::kv::ReadOnlyTx &tx)
Definition endpoint_registry.cpp:305
ReadWrite
Definition endpoint_registry.h:120
void set_history(ccf::kv::TxHistory *h)
Definition endpoint_registry.cpp:570
virtual bool apply_uncommitted_tx_backpressure() const
Definition endpoint_registry.h:274
virtual std::set< RESTVerb > get_allowed_verbs(ccf::kv::Tx &tx, const ccf::RpcContext &rpc_ctx)
Definition endpoint_registry.cpp:504
void install(Endpoint &endpoint) override
Definition endpoint_registry.cpp:266
EndpointRegistry(std::string method_prefix_)
Definition endpoint_registry.h:168
Definition kv_types.h:364
Definition kv_types.h:329
void default_locally_committed_func(CommandEndpointContext &ctx, const TxID &tx_id)
Definition endpoint_registry.cpp:198
std::function< void(CommandEndpointContext &args)> CommandEndpointFunction
Definition endpoint_context.h:52
std::function< void(ReadOnlyEndpointContext &args)> ReadOnlyEndpointFunction
Definition endpoint_context.h:80
std::shared_ptr< const Endpoint > EndpointPtr
Definition endpoint.h:494
bool get_path_param(const ccf::PathParams ¶ms, const std::string ¶m_name, T &value, std::string &error)
Definition endpoint_registry.h:64
std::shared_ptr< const EndpointDefinition > EndpointDefinitionPtr
Definition endpoint.h:240
std::function< void(EndpointContext &args)> EndpointFunction
Definition endpoint_context.h:63
Definition app_interface.h:19
std::map< std::string, std::string, std::less<> > PathParams
Definition rpc_context.h:54
std::vector< std::shared_ptr< AuthnPolicy > > AuthnPolicies
Definition authentication_types.h:47
@ error
Definition tls_session.h:23
Definition consensus_types.h:23
Definition endpoint_context.h:24
Definition endpoint_registry.h:55
int status
Definition endpoint_registry.h:57
std::string method
Definition endpoint_registry.h:56
Definition endpoint_context.h:55
Definition endpoint_registry.h:128
std::string document_version
Definition endpoint_registry.h:131
std::string title
Definition endpoint_registry.h:129
std::string description
Definition endpoint_registry.h:130
Definition endpoint.h:266
Definition endpoint.h:259
Definition endpoint_registry.h:27
std::regex template_regex
Definition endpoint_registry.h:28
std::vector< std::string > template_component_names
Definition endpoint_registry.h:29
static std::optional< PathTemplateSpec > parse(const std::string_view &uri)
Definition endpoint_registry.cpp:132
Definition endpoint_registry.h:35
PathTemplatedEndpoint(const Endpoint &e)
Definition endpoint_registry.h:36
PathTemplateSpec spec
Definition endpoint_registry.h:38
Definition endpoint_registry.h:42
std::string dispatch_path
Definition endpoint_registry.h:48
int status
Definition endpoint_registry.h:49
std::string method
Definition endpoint_registry.h:43
std::chrono::milliseconds exec_time
Definition endpoint_registry.h:50
size_t attempts
Definition endpoint_registry.h:51