Pulp 1.88.0
Cross-platform audio plugin framework
Loading...
Searching...
No Matches
control_grants.hpp
Go to the documentation of this file.
1#pragma once
2
5
6#include <chrono>
7#include <cstdint>
8#include <functional>
9#include <memory>
10#include <optional>
11#include <span>
12#include <string>
13#include <string_view>
14#include <vector>
15
16namespace pulp::inspect {
17
19 std::string value;
20 explicit operator bool() const { return !value.empty(); }
21 friend bool operator==(const ControlGrantId&, const ControlGrantId&) = default;
22};
23
33
38 bool approved = false;
40 std::string decision_id;
43 std::optional<std::chrono::steady_clock::time_point> expires_at;
44};
45
60
62
66 std::vector<InspectorCapability> capabilities;
67 std::chrono::milliseconds ttl = std::chrono::minutes(15);
68};
69
70enum class ControlGrantSelectorKind : std::uint8_t {
73};
74
86
92 std::string session_id;
93 std::string instance_id;
94 std::string publication_id;
95 std::vector<InspectorCapability> capabilities;
97 std::chrono::steady_clock::time_point expires_at;
98 bool revoked = false;
99};
100
105
111
117
119 std::size_t max_grants = 256;
121 std::chrono::milliseconds maximum_ttl = std::chrono::hours(24);
125 std::size_t max_retired_grant_ids = 1024;
126};
127
132public:
133 using Clock = std::function<std::chrono::steady_clock::time_point()>;
134
136 std::shared_ptr<ControlSecurityAuditLog> audit_log,
137 ControlGrantStoreConfig config = {},
138 Clock clock = [] {
139 return std::chrono::steady_clock::now();
140 });
144
148 ControlConsentDecision consent);
150 std::string_view decision_id);
151 std::size_t revoke_client(const ControlClientId& client_id,
152 std::string_view decision_id);
154 const ControlRegistrationId& registration_id,
155 std::string_view decision_id);
156
157 bool is_granted(const ControlGrantId& grant_id,
158 const ControlClientId& client_id,
159 const ControlRegistrationId& registration_id,
160 InspectorCapability capability);
167 std::optional<ControlOperationAuthorization> authorize_operation(
168 const ControlGrantId& grant_id,
169 const ControlClientId& client_id,
170 const ControlRegistrationId& registration_id,
171 InspectorCapability capability,
172 std::string_view operation_identity);
176 std::string_view operation_identity,
177 std::uint64_t reservation_token);
182 std::string_view operation_identity,
183 std::uint64_t reservation_token);
184 std::optional<ControlGrant> grant(const ControlGrantId& grant_id);
185 std::vector<ControlGrant> sweep_expired();
186
187private:
188 class Impl;
189 std::unique_ptr<Impl> impl_;
190};
191
192} // namespace pulp::inspect
std::optional< ControlOperationAuthorization > authorize_operation(const ControlGrantId &grant_id, const ControlClientId &client_id, const ControlRegistrationId &registration_id, InspectorCapability capability, std::string_view operation_identity)
Atomically reserves the GPU-health capability of an interactive-consent grant for its first durable i...
ControlGrantStore(ControlIdentityRegistry &identities, std::shared_ptr< ControlSecurityAuditLog > audit_log, ControlGrantStoreConfig config={}, Clock clock=[] { return std::chrono::steady_clock::now();})
bool commit_operation_authorization(const ControlGrantId &grant_id, std::string_view operation_identity, std::uint64_t reservation_token)
Commits a provisional one-shot reservation after the durable operation receipt exists.
ControlGrantResult issue(ControlGrantRequest request, ControlConsentDecision consent)
Internal broker call.
ControlGrantStore & operator=(const ControlGrantStore &)=delete
std::optional< ControlGrant > grant(const ControlGrantId &grant_id)
ControlGrantStatus revoke(const ControlGrantId &grant_id, std::string_view decision_id)
std::vector< ControlGrant > sweep_expired()
std::size_t revoke_registration(const ControlRegistrationId &registration_id, std::string_view decision_id)
ControlGrantStore(const ControlGrantStore &)=delete
bool release_operation_authorization(const ControlGrantId &grant_id, std::string_view operation_identity, std::uint64_t reservation_token)
Releases only the caller's still-provisional reservation.
bool is_granted(const ControlGrantId &grant_id, const ControlClientId &client_id, const ControlRegistrationId &registration_id, InspectorCapability capability)
std::size_t revoke_client(const ControlClientId &client_id, std::string_view decision_id)
std::function< std::chrono::steady_clock::time_point()> Clock
Definition control_grants.hpp:133
Broker-owned identity state.
Definition control_identity.hpp:228
@ NotFound
Nothing matched and synthesis was disabled.
Definition font_resolver.hpp:174
@ None
Definition font_options.hpp:73
Definition agent_context.hpp:7
ControlOperationAuthorizationKind
Definition control_grants.hpp:106
@ Reusable
Definition control_grants.hpp:107
@ ProvisionalOneShot
Definition control_grants.hpp:108
@ CommittedOneShot
Definition control_grants.hpp:109
InspectorCapability
Definition capabilities.hpp:10
ControlGrantStatus
Definition control_grants.hpp:46
@ CapabilityUnavailable
Definition control_grants.hpp:54
@ ConsentReplay
Definition control_grants.hpp:53
@ BrokerMismatch
Definition control_grants.hpp:49
@ ConsentRequired
Definition control_grants.hpp:52
@ Granted
Definition control_grants.hpp:47
@ InvalidRequest
Definition control_grants.hpp:48
@ ClientUnavailable
Definition control_grants.hpp:50
@ RegistrationUnavailable
Definition control_grants.hpp:51
@ Expired
Definition audit.hpp:68
@ Revoked
Definition audit.hpp:67
std::string_view control_grant_status_id(ControlGrantStatus status)
ControlConsentAuthority
Definition control_grants.hpp:24
@ TrustedHostUi
Definition control_grants.hpp:27
@ BrokerUserPrompt
Definition control_grants.hpp:28
@ PluginUi
Definition control_grants.hpp:30
@ None
Definition control_grants.hpp:25
@ AgentClient
Definition control_grants.hpp:31
@ ExistingUserPolicy
Definition control_grants.hpp:29
@ TrustedPulpCli
Definition control_grants.hpp:26
ControlGrantSelectorKind
Definition control_grants.hpp:70
@ Operation
Definition control_grants.hpp:72
@ Profile
Definition control_grants.hpp:71
@ ResourceExhausted
Definition control_admission.hpp:26
@ InvalidRequest
Definition control_admission.hpp:17
Definition control_identity.hpp:20
Definition control_identity.hpp:28
Definition control_grants.hpp:34
ControlConsentAuthority authority
Definition control_grants.hpp:39
bool approved
Broker-derived decision metadata.
Definition control_grants.hpp:38
std::optional< std::chrono::steady_clock::time_point > expires_at
Required for BrokerUserPrompt decisions and revalidated by the grant store at issuance,...
Definition control_grants.hpp:43
std::string decision_id
Definition control_grants.hpp:40
Consent input assembled only after the broker has authenticated the client and resolved an exact live...
Definition control_grants.hpp:78
std::string selector_id
Definition control_grants.hpp:84
ControlPeerEvidence client_peer
Definition control_grants.hpp:79
std::string client_peer_fingerprint
Definition control_grants.hpp:80
ControlGrantSelectorKind selector_kind
Definition control_grants.hpp:83
ControlGrantRequest grant
Definition control_grants.hpp:81
ControlRegistration registration
Definition control_grants.hpp:82
Definition control_grants.hpp:18
std::string value
Definition control_grants.hpp:19
friend bool operator==(const ControlGrantId &, const ControlGrantId &)=default
Definition control_grants.hpp:63
ControlClientId client_id
Definition control_grants.hpp:64
ControlRegistrationId registration_id
Definition control_grants.hpp:65
std::vector< InspectorCapability > capabilities
Definition control_grants.hpp:66
std::chrono::milliseconds ttl
Definition control_grants.hpp:67
Definition control_grants.hpp:101
ControlGrantStatus status
Definition control_grants.hpp:102
std::optional< ControlGrant > grant
Definition control_grants.hpp:103
Definition control_grants.hpp:118
std::size_t max_consumed_consent_decisions
Definition control_grants.hpp:120
std::size_t max_retired_grant_ids
Bounds IDs retained after explicit revocation so repeated revoke calls remain idempotent without reti...
Definition control_grants.hpp:125
std::chrono::milliseconds maximum_ttl
Definition control_grants.hpp:121
std::size_t max_grants
Definition control_grants.hpp:119
Definition control_grants.hpp:87
ControlGrantId grant_id
Definition control_grants.hpp:88
std::string instance_id
Definition control_grants.hpp:93
std::string publication_id
Definition control_grants.hpp:94
std::vector< InspectorCapability > capabilities
Definition control_grants.hpp:95
std::chrono::steady_clock::time_point expires_at
Definition control_grants.hpp:97
std::string session_id
Definition control_grants.hpp:92
bool revoked
Definition control_grants.hpp:98
ControlRegistrationId registration_id
Definition control_grants.hpp:91
ControlClientId client_id
Definition control_grants.hpp:90
std::string consent_decision_id
Definition control_grants.hpp:96
ControlBrokerId broker_id
Definition control_grants.hpp:89
Definition control_grants.hpp:112
ControlOperationAuthorizationKind kind
Definition control_grants.hpp:113
std::uint64_t reservation_token
Definition control_grants.hpp:115
Evidence observed by the local IPC carrier.
Definition control_identity.hpp:53
Definition control_identity.hpp:36
Definition control_identity.hpp:190