Pulp 1.88.0
Cross-platform audio plugin framework
Loading...
Searching...
No Matches
control_broker.hpp
Go to the documentation of this file.
1#pragma once
2
5
6#include <memory>
7#include <mutex>
8#include <span>
9#include <string_view>
10
11namespace pulp::inspect {
12
17 std::optional<ControlOperationStoreConfig> operation_store;
18 std::optional<ControlArtifactStoreConfig> artifact_store;
22 ControlOperationStore::WallClock wall_clock = [] { return std::chrono::system_clock::now(); };
28
30 std::function<void(const ControlClientId&, const ControlRegistrationId&,
31 const ControlGrantId&, std::string_view)> authority_ended;
32};
33
35 bool identity_removed = false;
36 std::size_t grants_revoked = 0;
37};
38
46 public:
48
52 explicit ControlBroker(
53 ControlBrokerConfig config = {}, std::shared_ptr<ControlSecurityAuditLog> audit_log = {},
54 Clock clock = [] { return std::chrono::steady_clock::now(); });
56 ControlBroker(const ControlBroker&) = delete;
58
59 const ControlBrokerId& broker_id() const;
60 bool is_listening() const {
61 return false;
62 }
63
65 ControlClientResult redeem_bootstrap(std::string_view ticket_id,
66 std::span<const std::uint8_t> secret,
67 const VerifiedControlPeerIdentity& client_peer,
68 std::string_view durable_principal = {},
69 ControlDurableClientLifetime durable_lifetime =
71 bool refresh_client(const ControlClientId& client_id,
72 const VerifiedControlPeerIdentity& client_peer);
74 const VerifiedControlPeerIdentity& client_peer,
75 std::string_view decision_id);
76
79 bool publish = true);
80 bool publish_instance(const ControlRegistrationId& registration_id,
81 const VerifiedControlPeerIdentity& host_peer);
82 bool heartbeat(const ControlRegistrationId& registration_id,
83 const VerifiedControlPeerIdentity& host_peer);
85 const VerifiedControlPeerIdentity& host_peer,
86 std::string_view decision_id);
87
90 ControlGrantStatus revoke_grant(const ControlGrantId& grant_id, std::string_view decision_id);
91 bool is_granted(const ControlGrantId& grant_id, const ControlClientId& client_id,
92 const ControlRegistrationId& registration_id, InspectorCapability capability);
93
98 const ControlRequestEnvelope& request);
102 const ControlRequestEnvelope& request);
104 const ControlAdmissionPlan& plan);
108 const ControlAdmissionPlan& plan);
110 const ControlAdmissionPlan& plan,
111 ControlReceiptState terminal_state,
112 ControlOperationResult result = {});
114 const ControlClientId& client_id,
115 std::string_view request_id,
116 std::string_view reason);
118 const ControlAdmissionPlan& plan) const;
120 const ControlAdmissionPlan& plan);
121 std::optional<ControlOperationReceipt>
122 operation_receipt(const ControlReceiptId& receipt_id) const;
123
129 const ControlAdmissionPlan& plan, std::span<const std::uint8_t> bytes,
130 ControlArtifactProperties properties);
134 const ControlAdmissionPlan& plan, std::span<const std::uint8_t> bytes,
135 std::string content_type, ControlArtifactSensitivity sensitivity,
136 ControlArtifactRedactionState redaction_state,
137 std::chrono::milliseconds lifetime);
138 std::size_t artifact_maximum_blob_bytes() const noexcept;
139
145 const ControlClientId& requesting_client_id,
146 std::string_view artifact_id, std::uint64_t offset,
147 std::size_t maximum_bytes);
148
149 std::optional<ControlClientIdentity> client(const ControlClientId& client_id) const;
150 std::optional<ControlRegistration>
151 registration(const ControlRegistrationId& registration_id) const;
153 std::optional<ControlGrant> grant(const ControlGrantId& grant_id);
154
156
157 private:
158 bool authorize_artifact_read_locked(const VerifiedControlPeerIdentity& client_peer,
159 const ControlClientId& requesting_client_id,
160 const ControlArtifactMetadata& metadata);
161 ControlAdmissionResult admit_verified_operation(const VerifiedControlPeerIdentity& client_peer,
162 const ControlAdmissionRequest& request,
163 bool allow_new = true);
164 bool revalidate_operation_locked(const VerifiedControlPeerIdentity& client_peer,
165 const ControlAdmissionPlan& plan);
166 void audit_denial(std::string_view action, const VerifiedControlPeerIdentity& observed_peer,
167 std::string_view reason, const ControlClientId& client_id = {},
168 const ControlRegistrationId& registration_id = {});
169 bool owns_client_peer(const ControlClientId& client_id,
170 const VerifiedControlPeerIdentity& client_peer) const;
171 bool owns_registration_peer(const ControlRegistrationId& registration_id,
172 const VerifiedControlPeerIdentity& host_peer) const;
173 void request_active_cancellation(const ControlClientId& client_id,
174 const ControlRegistrationId& registration_id,
175 const ControlGrantId& grant_id, std::string_view reason);
176
177 std::shared_ptr<ControlSecurityAuditLog> audit_log_;
178 std::function<ControlProcessLiveness(const ControlPeerEvidence&)> process_liveness_;
179 std::function<void(const ControlClientId&, const ControlRegistrationId&,
180 const ControlGrantId&, std::string_view)> authority_ended_;
181 mutable std::mutex coordination_mutex_;
182 ControlIdentityRegistry identities_;
183 ControlGrantStore grants_;
184 ControlAdmissionPolicy admission_policy_;
186 std::unique_ptr<ControlOperationStore> operation_store_;
187 std::unique_ptr<ControlArtifactStore> artifact_store_;
188};
189
190} // namespace pulp::inspect
bool publish_instance(const ControlRegistrationId &registration_id, const VerifiedControlPeerIdentity &host_peer)
std::size_t artifact_maximum_blob_bytes() const noexcept
ControlGrantResult issue_grant(const VerifiedControlPeerIdentity &client_peer, ControlGrantRequest request, ControlConsentDecision consent)
std::optional< ControlGrant > grant(const ControlGrantId &grant_id)
ControlOperationStoreResult cancel_operation(const VerifiedControlPeerIdentity &client_peer, const ControlClientId &client_id, std::string_view request_id, std::string_view reason)
bool is_granted(const ControlGrantId &grant_id, const ControlClientId &client_id, const ControlRegistrationId &registration_id, InspectorCapability capability)
std::optional< ControlRegistration > registration(const ControlRegistrationId &registration_id) const
ControlOperationStoreResult finish_operation(const VerifiedControlPeerIdentity &client_peer, const ControlAdmissionPlan &plan, ControlReceiptState terminal_state, ControlOperationResult result={})
ControlGrantStatus revoke_grant(const ControlGrantId &grant_id, std::string_view decision_id)
std::optional< ControlOperationReceipt > operation_receipt(const ControlReceiptId &receipt_id) const
ControlOperationStoreResult begin_operation(const VerifiedControlPeerIdentity &client_peer, const ControlAdmissionPlan &plan)
bool revalidate_operation(const VerifiedControlPeerIdentity &client_peer, const ControlAdmissionPlan &plan)
ControlIdentityRegistry::Clock Clock
Definition control_broker.hpp:47
ControlBrokerLifecycleResult unregister_instance(const ControlRegistrationId &registration_id, const VerifiedControlPeerIdentity &host_peer, std::string_view decision_id)
ControlBroker(const ControlBroker &)=delete
const ControlBrokerId & broker_id() const
bool is_listening() const
Definition control_broker.hpp:60
ControlRegistrationResult register_instance(const VerifiedControlPeerIdentity &host_peer, ControlRegistrationRequest request, bool publish=true)
ControlBroker(ControlBrokerConfig config={}, std::shared_ptr< ControlSecurityAuditLog > audit_log={}, Clock clock=[] { return std::chrono::steady_clock::now();})
The steady clock has the same trusted callback contract as ControlBrokerConfig::wall_clock.
ControlBroker & operator=(const ControlBroker &)=delete
bool operation_store_ready() const
std::vector< ControlRegistration > registrations() const
ControlAdmissionResult admit_operation(const VerifiedControlPeerIdentity &client_peer, const ControlRequestEnvelope &request)
Atomically resolves every permission term from broker-owned state.
ControlBrokerLifecycleResult disconnect_client(const ControlClientId &client_id, const VerifiedControlPeerIdentity &client_peer, std::string_view decision_id)
ControlExecutionCheckpoint execution_checkpoint(const VerifiedControlPeerIdentity &client_peer, const ControlAdmissionPlan &plan)
bool refresh_client(const ControlClientId &client_id, const VerifiedControlPeerIdentity &client_peer)
ControlAdmissionResult replay_operation(const VerifiedControlPeerIdentity &client_peer, const ControlRequestEnvelope &request)
Reauthorizes and resolves an existing idempotent receipt without creating a fresh admission.
ControlClientResult redeem_bootstrap(std::string_view ticket_id, std::span< const std::uint8_t > secret, const VerifiedControlPeerIdentity &client_peer, std::string_view durable_principal={}, ControlDurableClientLifetime durable_lifetime=ControlDurableClientLifetime::Broker)
ControlArtifactStoreResult store_operation_artifact(const VerifiedControlPeerIdentity &client_peer, const ControlAdmissionPlan &plan, std::span< const std::uint8_t > bytes, std::string content_type, ControlArtifactSensitivity sensitivity, ControlArtifactRedactionState redaction_state, std::chrono::milliseconds lifetime)
Broker-timestamped publication used by trusted operation adapters.
ControlArtifactStoreResult store_operation_artifact(const VerifiedControlPeerIdentity &client_peer, const ControlAdmissionPlan &plan, std::span< const std::uint8_t > bytes, ControlArtifactProperties properties)
Publishes blob and immutable lineage metadata while the producer receipt is Running.
std::optional< ControlClientIdentity > client(const ControlClientId &client_id) const
ControlBootstrapResult issue_bootstrap(const VerifiedControlPeerIdentity &client_peer)
bool heartbeat(const ControlRegistrationId &registration_id, const VerifiedControlPeerIdentity &host_peer)
bool operation_cancellation_requested(const VerifiedControlPeerIdentity &client_peer, const ControlAdmissionPlan &plan) const
ControlArtifactReadResult read_artifact(const VerifiedControlPeerIdentity &client_peer, const ControlClientId &requesting_client_id, std::string_view artifact_id, std::uint64_t offset, std::size_t maximum_bytes)
Retrieves an artifact by opaque ID after broker-side reauthorization of its original producer grant,...
std::function< std::chrono::steady_clock::time_point()> Clock
Definition control_identity.hpp:230
std::function< std::chrono::system_clock::time_point()> WallClock
Definition control_operations.hpp:149
Copyable proof minted only by the broker's trusted OS peer verifier.
Definition control_identity.hpp:63
Definition agent_context.hpp:7
ControlArtifactRedactionState
Definition control_artifacts.hpp:48
InspectorCapability
Definition capabilities.hpp:10
ControlGrantStatus
Definition control_grants.hpp:46
ControlExecutionCheckpoint
Definition control_admission.hpp:31
ControlDurableClientLifetime
Definition control_identity.hpp:170
@ Broker
Definition control_identity.hpp:171
ControlProcessLiveness
Definition control_identity.hpp:175
@ Unknown
Definition control_identity.hpp:176
ControlReceiptState
Definition control_protocol.hpp:365
ControlArtifactSensitivity
Definition control_artifacts.hpp:36
@ action
Definition design_ir.hpp:490
STL namespace.
Immutable authority snapshot minted by ControlBroker after all seven permission terms pass.
Definition control_admission.hpp:58
Trusted, bounded, non-blocking broker-side evaluators for the three dynamic permission terms not owne...
Definition control_admission.hpp:78
Definition control_admission.hpp:40
Definition control_admission.hpp:66
Definition control_artifacts.hpp:73
Definition control_artifacts.hpp:65
Definition control_artifacts.hpp:146
Definition control_artifacts.hpp:141
Definition control_identity.hpp:150
Definition control_broker.hpp:13
ControlOperationStore::WallClock wall_clock
Trusted wall-clock source.
Definition control_broker.hpp:22
ControlAdmissionPolicy admission
Definition control_broker.hpp:16
ControlGrantStoreConfig grants
Definition control_broker.hpp:15
std::function< ControlProcessLiveness(const ControlPeerEvidence &)> process_liveness
Broker-owned process liveness.
Definition control_broker.hpp:26
std::optional< ControlOperationStoreConfig > operation_store
Definition control_broker.hpp:17
std::optional< ControlArtifactStoreConfig > artifact_store
Definition control_broker.hpp:18
ControlIdentityRegistryConfig identities
Definition control_broker.hpp:14
std::function< void(const ControlClientId &, const ControlRegistrationId &, const ControlGrantId &, std::string_view)> authority_ended
Broker-to-carrier lifecycle projection.
Definition control_broker.hpp:31
Definition control_identity.hpp:20
Definition control_broker.hpp:34
bool identity_removed
Definition control_broker.hpp:35
std::size_t grants_revoked
Definition control_broker.hpp:36
Definition control_identity.hpp:28
Definition control_identity.hpp:155
Definition control_identity.hpp:165
Definition control_grants.hpp:34
Definition control_grants.hpp:18
Definition control_grants.hpp:63
Definition control_grants.hpp:101
Definition control_grants.hpp:118
Definition control_grants.hpp:87
Definition control_identity.hpp:217
Definition control_operations.hpp:71
Definition control_operations.hpp:114
Evidence observed by the local IPC carrier.
Definition control_identity.hpp:53
Definition control_operations.hpp:24
Definition control_identity.hpp:36
Definition control_identity.hpp:181
Definition control_identity.hpp:212
Definition control_identity.hpp:190
Definition control_protocol.hpp:84