1616#include " cgimap/output_formatter.hpp"
1717#include " cgimap/output_writer.hpp"
1818#include " cgimap/workspaces/tdei_auth.hpp"
19+ #include " cgimap/workspaces/tenant.hpp"
1920
2021#include < chrono>
2122#include < memory>
@@ -233,6 +234,10 @@ std::tuple<std::string, size_t>
233234process_get_request (request& req, const handler& handler,
234235 data_selection& selection,
235236 const std::string &ip, const std::string &generator) {
237+ if (const auto workspace_id = workspaces::try_id_from_request (req)) {
238+ selection.set_tdei_workspace (*workspace_id);
239+ }
240+
236241 // request start logging
237242 const std::string request_name = handler.log_name ();
238243 logger::message (fmt::format (" Started request for {} from {}" , request_name, ip));
@@ -250,7 +255,7 @@ process_get_request(request& req, const handler& handler,
250255 * process a POST/PUT request.
251256 */
252257std::tuple<std::string, size_t >
253- process_post_put_request (RequestContext& req_ctx,
258+ process_post_put_request (RequestContext& req_ctx,
254259 const handler& handler,
255260 const data_selection::factory& factory,
256261 data_update::factory& update_factory,
@@ -265,6 +270,7 @@ process_post_put_request(RequestContext& req_ctx,
265270
266271 try {
267272 const auto & pe_handler = dynamic_cast < const payload_enabled_handler& >(handler);
273+ const auto workspace_id = workspaces::try_id_from_request (req_ctx.req );
268274
269275 // Process request, perform database update
270276 {
@@ -273,6 +279,10 @@ process_post_put_request(RequestContext& req_ctx,
273279 auto data_update = update_factory.make_data_update (*rw_transaction);
274280 check_db_readonly_mode (*data_update);
275281
282+ if (workspace_id) {
283+ data_update->set_tdei_workspace (*workspace_id);
284+ }
285+
276286 // Executing the responder constructor parses the payload, performs db CRUD operations
277287 // and eventually calls db commit(), in case there are no issues with the data.
278288 auto responder = pe_handler.responder (*data_update, payload, req_ctx);
@@ -298,6 +308,11 @@ process_post_put_request(RequestContext& req_ctx,
298308
299309 // create a data selection for the request
300310 auto data_selection = factory.make_selection (*read_only_transaction);
311+
312+ if (workspace_id) {
313+ data_selection->set_tdei_workspace (*workspace_id);
314+ }
315+
301316 auto sel_responder = pe_handler.responder (*data_selection);
302317 bytes_written = generate_response (req_ctx.req , *sel_responder, generator);
303318
0 commit comments