summaryrefslogtreecommitdiffstats
path: root/server/src/http_server.cppm
diff options
context:
space:
mode:
authorRutger Broekhoff2026-08-29 14:36:36 +0200
committerRutger Broekhoff2026-08-29 14:36:36 +0200
commit999d77a9bcfa90f002b0107ea5fc7e6abc51dd9c (patch)
tree15f2154ba28139ab87602bcb53f1451e5b8bfd6b /server/src/http_server.cppm
parent783ec01cbe2007c2ccf723635166c08f6d26abee (diff)
downloadroutemon-999d77a9bcfa90f002b0107ea5fc7e6abc51dd9c.tar.gz
routemon-999d77a9bcfa90f002b0107ea5fc7e6abc51dd9c.zip
Deployment preparations
Diffstat (limited to 'server/src/http_server.cppm')
-rw-r--r--server/src/http_server.cppm43
1 files changed, 27 insertions, 16 deletions
diff --git a/server/src/http_server.cppm b/server/src/http_server.cppm
index dc8c183..b16f3a8 100644
--- a/server/src/http_server.cppm
+++ b/server/src/http_server.cppm
@@ -15,7 +15,7 @@ export module routemon:http.server;
15import std; 15import std;
16import :config; 16import :config;
17import :trace; 17import :trace;
18export import :http.common; 18import :http.common;
19import :problem; 19import :problem;
20 20
21namespace net = boost::asio; 21namespace net = boost::asio;
@@ -157,14 +157,33 @@ using middleware_t =
157 ->net::awaitable<presponse>>; 157 ->net::awaitable<presponse>>;
158 158
159template <class Ctx> 159template <class Ctx>
160auto lax_cors_middleware( 160auto id_middleware(
161 Ctx ctx, bhttp::request_header<bhttp::fields>& req_hdr, 161 Ctx ctx, bhttp::request_header<bhttp::fields>&, next_handler_t<Ctx> next)
162 next_handler_t<Ctx> next) -> net::awaitable<presponse> 162 -> net::awaitable<presponse>
163{ 163{
164 std::ignore = req_hdr; 164 co_return co_await next(std::move(ctx));
165 auto prersp = co_await next(ctx); 165}
166 prersp.header().set(bhttp::field::access_control_allow_origin, "*"); 166
167 co_return std::move(prersp); 167template <class Ctx>
168auto cors_middleware(std::vector<std::string> const& allow_origins)
169 -> middleware_t<Ctx, Ctx>
170{
171 if (allow_origins.empty())
172 return id_middleware<Ctx>;
173
174 auto header_str = allow_origins
175 | std::views::join_with(std::string_view{", "})
176 | std::ranges::to<std::string>();
177
178 return [header_str = std::move(header_str)](
179 Ctx ctx, bhttp::request_header<bhttp::fields>& req_hdr,
180 next_handler_t<Ctx> next) -> net::awaitable<presponse>
181 {
182 std::ignore = req_hdr;
183 auto prersp = co_await next(ctx);
184 prersp.header().set(bhttp::field::access_control_allow_origin, header_str);
185 co_return std::move(prersp);
186 };
168} 187}
169 188
170template <class InnerCtx> 189template <class InnerCtx>
@@ -310,14 +329,6 @@ auto default_options_handler(
310auto global_options_handler(base_ctx const& ctx, readable_request r) 329auto global_options_handler(base_ctx const& ctx, readable_request r)
311 -> net::awaitable<presponse>; 330 -> net::awaitable<presponse>;
312 331
313template <class Ctx>
314auto id_middleware(
315 Ctx ctx, bhttp::request_header<bhttp::fields>&, next_handler_t<Ctx> next)
316 -> net::awaitable<presponse>
317{
318 co_return co_await next(std::move(ctx));
319}
320
321template <class A, class B, class C> 332template <class A, class B, class C>
322auto middleware_compose(middleware_t<A, B> ab, middleware_t<B, C> bc) 333auto middleware_compose(middleware_t<A, B> ab, middleware_t<B, C> bc)
323 -> middleware_t<A, C> 334 -> middleware_t<A, C>