41#ifdef PACS_WITH_MONITORING
57 std::shared_ptr<rest_server_context> ctx);
59 std::shared_ptr<rest_server_context> ctx);
61 std::shared_ptr<rest_server_context> ctx);
63 std::shared_ptr<rest_server_context> ctx);
65 std::shared_ptr<rest_server_context> ctx);
67 std::shared_ptr<rest_server_context> ctx);
69 std::shared_ptr<rest_server_context> ctx);
71 std::shared_ptr<rest_server_context> ctx);
73 std::shared_ptr<rest_server_context> ctx);
75 std::shared_ptr<rest_server_context> ctx);
77 std::shared_ptr<rest_server_context> ctx);
79 std::shared_ptr<rest_server_context> ctx);
81 std::shared_ptr<rest_server_context> ctx);
83 std::shared_ptr<rest_server_context> ctx);
85 std::shared_ptr<rest_server_context> ctx);
87 std::shared_ptr<rest_server_context> ctx);
89 std::shared_ptr<rest_server_context> ctx);
91 std::shared_ptr<rest_server_context> ctx);
93 crow::SimpleApp &app, std::shared_ptr<rest_server_context> ctx);
94#ifdef PACS_WITH_DATABASE_SYSTEM
95void register_metrics_endpoints_impl(crow::SimpleApp &app,
96 std::shared_ptr<rest_server_context> ctx);
106 std::unique_ptr<crow::SimpleApp>
app;
123 : impl_(std::make_unique<
impl>(config)) {}
135 std::lock_guard<std::mutex> lock(
impl_->
mutex);
141 std::shared_ptr<monitoring::health_checker> checker) {
142 std::lock_guard<std::mutex> lock(
impl_->
mutex);
147 std::shared_ptr<monitoring::pacs_metrics> metrics) {
148 std::lock_guard<std::mutex> lock(
impl_->
mutex);
153 std::shared_ptr<security::access_control_manager> manager) {
154 std::lock_guard<std::mutex> lock(
impl_->
mutex);
159 std::shared_ptr<storage::index_database> database) {
160 std::lock_guard<std::mutex> lock(
impl_->
mutex);
165 std::shared_ptr<storage::file_storage> storage) {
166 std::lock_guard<std::mutex> lock(
impl_->
mutex);
171 std::shared_ptr<client::remote_node_manager> manager) {
172 std::lock_guard<std::mutex> lock(
impl_->
mutex);
177 std::shared_ptr<client::job_manager> manager) {
178 std::lock_guard<std::mutex> lock(
impl_->
mutex);
183 std::shared_ptr<client::routing_manager> manager) {
184 std::lock_guard<std::mutex> lock(
impl_->
mutex);
189 std::shared_ptr<network::dicom_server> server) {
190 std::lock_guard<std::mutex> lock(
impl_->
mutex);
195 std::shared_ptr<auth::oauth2_middleware> middleware) {
196 std::lock_guard<std::mutex> lock(
impl_->
mutex);
205 impl_->
app = std::make_unique<crow::SimpleApp>();
213 CROW_ROUTE(app,
"/api/<path>")
214 .methods(crow::HTTPMethod::OPTIONS)(
215 [
this](
const crow::request & ,
216 const std::string & ) {
217 crow::response res(204);
218 res.add_header(
"Access-Control-Allow-Origin",
220 res.add_header(
"Access-Control-Allow-Methods",
221 "GET, POST, PUT, DELETE, OPTIONS");
222 res.add_header(
"Access-Control-Allow-Headers",
223 "Content-Type, Authorization");
224 res.add_header(
"Access-Control-Max-Age",
"86400");
244 impl_->
app = std::make_unique<crow::SimpleApp>();
269#ifdef PACS_WITH_DATABASE_SYSTEM
270 endpoints::register_metrics_endpoints_impl(app,
impl_->
context);
275 CROW_ROUTE(app,
"/api/<path>")
276 .methods(crow::HTTPMethod::OPTIONS)(
277 [
this](
const crow::request & ,
278 const std::string & ) {
279 crow::response res(204);
280 res.add_header(
"Access-Control-Allow-Origin",
282 res.add_header(
"Access-Control-Allow-Methods",
283 "GET, POST, PUT, DELETE, OPTIONS");
284 res.add_header(
"Access-Control-Allow-Headers",
285 "Content-Type, Authorization");
286 res.add_header(
"Access-Control-Max-Age",
"86400");
Annotation API endpoints for REST server.
DICOM Association API endpoints for REST server.
Audit log API endpoints for REST server.
REST API server for PACS administration and monitoring.
void start_async()
Start the server (non-blocking)
void set_routing_manager(std::shared_ptr< client::routing_manager > manager)
Set routing manager for auto-forwarding rules.
void set_oauth2_middleware(std::shared_ptr< auth::oauth2_middleware > middleware)
Set OAuth 2.0 middleware for DICOMweb endpoint authorization.
void set_node_manager(std::shared_ptr< client::remote_node_manager > manager)
Set remote node manager for remote PACS node management.
rest_server()
Construct REST server with default configuration.
void set_health_checker(std::shared_ptr< monitoring::health_checker > checker)
Set health checker for /api/v1/system/status endpoint.
bool is_running() const noexcept
Check if server is currently running.
void set_access_control_manager(std::shared_ptr< security::access_control_manager > manager)
Set access control manager for security.
void set_dicom_server(std::shared_ptr< network::dicom_server > server)
Set DICOM server for live association management.
void set_job_manager(std::shared_ptr< client::job_manager > manager)
Set job manager for async DICOM operations.
const rest_server_config & config() const noexcept
Get current configuration.
void wait()
Wait for server to stop.
rest_server & operator=(const rest_server &)=delete
void stop()
Stop the server.
void set_config(const rest_server_config &config)
Update configuration (requires restart to apply)
void start()
Start the server (blocking)
void set_file_storage(std::shared_ptr< storage::file_storage > storage)
Set file storage for DICOM instance persistence (STOW-RS)
void set_database(std::shared_ptr< storage::index_database > database)
Set index database for patient/study/series endpoints.
~rest_server()
Destructor - stops server if running.
void set_metrics_provider(std::shared_ptr< monitoring::pacs_metrics > metrics)
Set metrics provider for /api/v1/system/metrics endpoint.
std::uint16_t port() const noexcept
Get the actual port the server is listening on.
std::unique_ptr< impl > impl_
DICOMweb (WADO-RS) API endpoints for REST server.
Health check service for PACS system components.
JSON serialization for health check data structures.
Job management REST API and WebSocket endpoints.
Key image API endpoints for REST server.
Measurement API endpoints for REST server.
void register_storage_commitment_endpoints_impl(crow::SimpleApp &app, std::shared_ptr< rest_server_context > ctx)
void register_measurement_endpoints_impl(crow::SimpleApp &app, std::shared_ptr< rest_server_context > ctx)
void register_security_endpoints_impl(crow::SimpleApp &app, std::shared_ptr< rest_server_context > ctx)
Register security endpoints with the Crow app.
void register_metadata_endpoints_impl(crow::SimpleApp &app, std::shared_ptr< rest_server_context > ctx)
void register_key_image_endpoints_impl(crow::SimpleApp &app, std::shared_ptr< rest_server_context > ctx)
void register_audit_endpoints_impl(crow::SimpleApp &app, std::shared_ptr< rest_server_context > ctx)
void register_worklist_endpoints_impl(crow::SimpleApp &app, std::shared_ptr< rest_server_context > ctx)
void register_series_endpoints_impl(crow::SimpleApp &app, std::shared_ptr< rest_server_context > ctx)
void register_remote_nodes_endpoints_impl(crow::SimpleApp &app, std::shared_ptr< rest_server_context > ctx)
void register_viewer_state_endpoints_impl(crow::SimpleApp &app, std::shared_ptr< rest_server_context > ctx)
void register_wado_uri_endpoints_impl(crow::SimpleApp &app, std::shared_ptr< rest_server_context > ctx)
void register_system_endpoints_impl(crow::SimpleApp &app, std::shared_ptr< rest_server_context > ctx)
void register_routing_endpoints_impl(crow::SimpleApp &app, std::shared_ptr< rest_server_context > ctx)
void register_patient_endpoints_impl(crow::SimpleApp &app, std::shared_ptr< rest_server_context > ctx)
void register_dicomweb_endpoints_impl(crow::SimpleApp &app, std::shared_ptr< rest_server_context > ctx)
void register_association_endpoints_impl(crow::SimpleApp &app, std::shared_ptr< rest_server_context > ctx)
void register_study_endpoints_impl(crow::SimpleApp &app, std::shared_ptr< rest_server_context > ctx)
void register_jobs_endpoints_impl(crow::SimpleApp &app, std::shared_ptr< rest_server_context > ctx)
void register_annotation_endpoints_impl(crow::SimpleApp &app, std::shared_ptr< rest_server_context > ctx)
void register_thumbnail_endpoints_impl(crow::SimpleApp &app, std::shared_ptr< rest_server_context > ctx)
OAuth 2.0 middleware for DICOMweb endpoint authorization.
Operation metrics collection for PACS DICOM services.
Patient API endpoints for REST server.
Remote PACS node management REST API endpoints.
Configuration for REST API server.
REST API server for PACS administration.
Common types and utilities for REST API.
Routing rule management REST API endpoints.
Security API endpoints for REST server.
Series API endpoints for REST server.
Implementation details for rest_server.
std::atomic< bool > running
rest_server_config config
std::thread server_thread
std::unique_ptr< crow::SimpleApp > app
std::atomic< std::uint16_t > actual_port
std::shared_ptr< rest_server_context > context
impl(const rest_server_config &cfg)
Configuration options for the REST server.
std::string cors_allowed_origins
CORS allowed origins (empty = allow all)
std::string bind_address
Address to bind the server to.
bool enable_cors
Enable CORS (Cross-Origin Resource Sharing) headers.
std::uint16_t port
Port to listen on.
std::size_t concurrency
Number of worker threads for handling requests.
Shared context for REST endpoints.
Study API endpoints for REST server.
System API endpoints for REST server.
Thumbnail REST API endpoints.
Viewer state API endpoints for REST server.
WADO-URI (Web Access to DICOM Objects — URI-based) API endpoints.
Worklist API endpoints for REST server.