PACS System 0.1.0
PACS DICOM system library
Loading...
Searching...
No Matches
atna_service_auditor.h
Go to the documentation of this file.
1
15#ifndef PACS_SECURITY_ATNA_SERVICE_AUDITOR_HPP
16#define PACS_SECURITY_ATNA_SERVICE_AUDITOR_HPP
17
18#include "atna_audit_logger.h"
20
21#include <atomic>
22#include <cstdint>
23#include <memory>
24#include <string>
25#include <vector>
26
27namespace kcenon::pacs::security {
28
55public:
56 // =========================================================================
57 // Construction
58 // =========================================================================
59
67 std::string audit_source_id);
68
69 virtual ~atna_service_auditor() = default;
70
71 // Non-copyable, movable
75 atna_service_auditor& operator=(atna_service_auditor&&) noexcept;
76
77 // =========================================================================
78 // DICOM Service Audit Methods
79 // =========================================================================
80
90 void audit_instance_stored(const std::string& source_ae,
91 const std::string& dest_ae,
92 const std::string& study_uid,
93 const std::string& patient_id,
94 bool success);
95
104 void audit_query(const std::string& calling_ae,
105 const std::string& called_ae,
106 const std::string& query_level,
107 bool success);
108
116 void audit_authentication(const std::string& user_id,
117 bool is_login,
118 bool success);
119
126 void audit_security_alert(const std::string& user_id,
127 const std::string& alert_description);
128
129 // =========================================================================
130 // IHE XDS-I.b Transaction Audit Methods
131 // =========================================================================
132
140 enum class xds_source_transaction : uint8_t {
141 iti_41,
142 rad_68
143 };
144
152 enum class xds_consumer_transaction : uint8_t {
153 iti_43,
154 rad_69
155 };
156
173 xds_source_transaction transaction,
174 const std::string& source_ae,
175 const std::string& dest_ae,
176 const std::string& study_uid,
177 const std::string& patient_id,
178 const std::vector<std::string>& sop_instance_uids,
179 bool success);
180
196 virtual void audit_xds_retrieve(
197 xds_consumer_transaction transaction,
198 const std::string& source_ae,
199 const std::string& dest_ae,
200 const std::string& study_uid,
201 const std::string& patient_id,
202 const std::vector<std::string>& sop_instance_uids,
203 bool success);
204
205 // =========================================================================
206 // Enable / Disable
207 // =========================================================================
208
217 void set_enabled(bool enabled) noexcept;
218
223 [[nodiscard]] bool is_enabled() const noexcept;
224
225 // =========================================================================
226 // Statistics
227 // =========================================================================
228
232 [[nodiscard]] size_t events_sent() const noexcept;
233
237 [[nodiscard]] size_t events_failed() const noexcept;
238
242 void reset_statistics() noexcept;
243
244 // =========================================================================
245 // Configuration Access
246 // =========================================================================
247
251 [[nodiscard]] const std::string& audit_source_id() const noexcept;
252
256 [[nodiscard]] const atna_syslog_transport& transport() const noexcept;
257
258 // =========================================================================
259 // Pre-built Message Emission
260 // =========================================================================
261
279 void submit_audit_message(const atna_audit_message& message);
280
281private:
282 // =========================================================================
283 // Private Helpers
284 // =========================================================================
285
293 void send_audit(const atna_audit_message& message);
294
295 // =========================================================================
296 // Private Members
297 // =========================================================================
298
300 std::string audit_source_id_;
301
304
306 std::atomic<bool> enabled_{true};
307
309 std::atomic<size_t> events_sent_{0};
310 std::atomic<size_t> events_failed_{0};
311};
312
313} // namespace kcenon::pacs::security
314
315#endif // PACS_SECURITY_ATNA_SERVICE_AUDITOR_HPP
IHE ATNA-compliant audit message generator (RFC 3881 XML format)
Syslog transport for ATNA audit messages (RFC 5424/5425/5426)
High-level facade for emitting ATNA audit events from DICOM services.
xds_consumer_transaction
XDS-I.b consumer-side transaction identifier.
size_t events_failed() const noexcept
Get the number of audit event send failures.
void audit_authentication(const std::string &user_id, bool is_login, bool success)
Audit a User Authentication event.
void set_enabled(bool enabled) noexcept
Enable or disable audit event emission.
virtual void audit_xds_retrieve(xds_consumer_transaction transaction, const std::string &source_ae, const std::string &dest_ae, const std::string &study_uid, const std::string &patient_id, const std::vector< std::string > &sop_instance_uids, bool success)
Audit an XDS-I.b Retrieve Document Set transaction.
size_t events_sent() const noexcept
Get the number of audit events successfully sent.
xds_source_transaction
XDS-I.b source-side transaction identifier.
@ rad_68
RAD-68 Provide and Register Imaging Document Set.
@ iti_41
ITI-41 Provide and Register Document Set-b.
std::atomic< bool > enabled_
Whether audit is enabled.
bool is_enabled() const noexcept
Check if audit event emission is enabled.
std::string audit_source_id_
Audit source identifier (e.g., "PACS_SYSTEM_01")
void audit_query(const std::string &calling_ae, const std::string &called_ae, const std::string &query_level, bool success)
Audit a C-FIND (Query) event.
void send_audit(const atna_audit_message &message)
Send an audit message via syslog transport.
const atna_syslog_transport & transport() const noexcept
Get the underlying transport (for advanced use)
atna_service_auditor(const syslog_transport_config &config, std::string audit_source_id)
Construct an auditor with syslog transport configuration.
virtual void audit_xds_provide_and_register(xds_source_transaction transaction, const std::string &source_ae, const std::string &dest_ae, const std::string &study_uid, const std::string &patient_id, const std::vector< std::string > &sop_instance_uids, bool success)
Audit an XDS-I.b Provide and Register Document Set transaction.
void submit_audit_message(const atna_audit_message &message)
Emit a pre-built RFC 3881 audit message.
void audit_security_alert(const std::string &user_id, const std::string &alert_description)
Audit a Security Alert event (e.g., access denied)
const std::string & audit_source_id() const noexcept
Get the audit source identifier.
std::atomic< size_t > events_sent_
Statistics.
atna_service_auditor(const atna_service_auditor &)=delete
atna_service_auditor & operator=(const atna_service_auditor &)=delete
void reset_statistics() noexcept
Reset statistics counters.
atna_syslog_transport transport_
Syslog transport for sending audit messages.
void audit_instance_stored(const std::string &source_ae, const std::string &dest_ae, const std::string &study_uid, const std::string &patient_id, bool success)
Audit a C-STORE (DICOM Instances Transferred) event.
Sends ATNA audit messages via Syslog protocol.
Configuration for the Syslog transport.