#include "meta_filter.hpp"
namespace samples::grpc::auth::server {
namespace {
::grpc::string_ref ToRef(const std::string& header) { return ::grpc::string_ref{header.data(), header.size()}; }
}
MetaFilter::MetaFilter(MiddlewareConfig&& config) : headers_(std::move(config.headers)) {}
for (const auto& header : headers_) {
const auto it = metadata.find(ToRef(header));
if (it == metadata.cend()) {
return context.
SetError(::grpc::Status{::grpc::StatusCode::FAILED_PRECONDITION,
"Missed some headers"});
}
}
}
MiddlewareConfig config;
config.headers = value[
"headers"].
As<std::vector<std::string>>();
return config;
}
MetaFilterComponent::MetaFilterComponent(
)
config,
context,
.InGroup<middlewares::groups::User>()
.After<ugrpc::server::middlewares::headers_propagator::Component>()
) {}
std::shared_ptr<const ugrpc::server::MiddlewareBase> MetaFilterComponent::CreateMiddleware(
) const {
return std::make_shared<MetaFilter>(middleware_config.
As<MiddlewareConfig>());
}
yaml_config::Schema MetaFilterComponent::GetMiddlewareConfigSchema()
const {
return GetStaticConfigSchema(); }
type: object
description: gRPC service logger component
additionalProperties: false
properties:
headers:
type: array
description: headers names to filter
items:
type: string
description: header name
)");
}
}