Skip to content

Commit

Permalink
Implement an enterprise hook for the server (#24)
Browse files Browse the repository at this point in the history
Signed-off-by: Juan Cruz Viotti <[email protected]>
  • Loading branch information
jviotti authored Nov 13, 2024
1 parent 8aa3207 commit 964a598
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 10 deletions.
17 changes: 17 additions & 0 deletions src/enterprise/enterprise_server.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
#ifndef SOURCEMETA_REGISTRY_ENTERPRISE_SERVER_H_
#define SOURCEMETA_REGISTRY_ENTERPRISE_SERVER_H_

#include <sourcemeta/hydra/httpserver.h>

namespace sourcemeta::registry::enterprise {

auto attach(sourcemeta::hydra::http::Server &server) -> void {
server.route(sourcemeta::hydra::http::Method::GET, "/*", ::on_request);
server.route(sourcemeta::hydra::http::Method::HEAD, "/*", ::on_request);
server.otherwise(::on_otherwise);
server.error(sourcemeta::registry::on_error);
}

} // namespace sourcemeta::registry::enterprise

#endif
3 changes: 3 additions & 0 deletions src/enterprise/server.cmake
Original file line number Diff line number Diff line change
@@ -1 +1,4 @@
target_compile_definitions(schema_registry_server PRIVATE SOURCEMETA_REGISTRY_ENTERPRISE)
cmake_path(GET CMAKE_CURRENT_LIST_FILE PARENT_PATH ENTERPRISE_SOURCE_DIR)
target_sources(schema_registry_server PRIVATE "${ENTERPRISE_SOURCE_DIR}/enterprise_server.h")
target_include_directories(schema_registry_server PRIVATE "${ENTERPRISE_SOURCE_DIR}")
28 changes: 18 additions & 10 deletions src/server/server.cc
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,17 @@ static auto resolver(std::string_view identifier)
SERVER_BASE_URL, *(__global_data) / "schemas", identifier);
}

static auto on_request(const sourcemeta::hydra::http::ServerLogger &logger,
const sourcemeta::hydra::http::ServerRequest &request,
sourcemeta::hydra::http::ServerResponse &response)
-> void {
static const auto SERVER_BASE_URL{configuration().at("url").to_string()};
return sourcemeta::registry::on_request(
sourcemeta::registry::request_path_to_schema_uri(SERVER_BASE_URL,
request.path()),
resolver, logger, request, response);
}

static auto on_otherwise(const sourcemeta::hydra::http::ServerLogger &logger,
const sourcemeta::hydra::http::ServerRequest &request,
sourcemeta::hydra::http::ServerResponse &response)
Expand All @@ -43,16 +54,9 @@ static auto on_otherwise(const sourcemeta::hydra::http::ServerLogger &logger,
response);
}

static auto on_request(const sourcemeta::hydra::http::ServerLogger &logger,
const sourcemeta::hydra::http::ServerRequest &request,
sourcemeta::hydra::http::ServerResponse &response)
-> void {
static const auto SERVER_BASE_URL{configuration().at("url").to_string()};
return sourcemeta::registry::on_request(
sourcemeta::registry::request_path_to_schema_uri(SERVER_BASE_URL,
request.path()),
resolver, logger, request, response);
}
#ifdef SOURCEMETA_REGISTRY_ENTERPRISE
#include "enterprise_server.h"
#endif

// We try to keep this function as straight to point as possible
// with minimal input validation (outside debug builds). The intention
Expand All @@ -77,10 +81,14 @@ auto main(int argc, char *argv[]) noexcept -> int {
__global_data = std::make_unique<std::filesystem::path>(argv[1]);

sourcemeta::hydra::http::Server server;
#ifdef SOURCEMETA_REGISTRY_ENTERPRISE
sourcemeta::registry::enterprise::attach(server);
#else
server.route(sourcemeta::hydra::http::Method::GET, "/*", on_request);
server.route(sourcemeta::hydra::http::Method::HEAD, "/*", on_request);
server.otherwise(on_otherwise);
server.error(sourcemeta::registry::on_error);
#endif

assert(configuration().defines("port"));
assert(configuration().at("port").is_integer());
Expand Down

0 comments on commit 964a598

Please sign in to comment.