| #ifndef THIRD_PARTY_MILOTIC_EXTERNAL_CC_AUTHZ_REDFISH_AUTHORIZER_INTERFACE_H_ | |
| #define THIRD_PARTY_MILOTIC_EXTERNAL_CC_AUTHZ_REDFISH_AUTHORIZER_INTERFACE_H_ | |
| #include <cstdint> | |
| #include <string> | |
| #include <string_view> | |
| #include "authorizer_enums.h" | |
| #include "peer_identity.h" | |
| #include "redfish_privileges.h" | |
| namespace milotic::authz { | |
| // The Redfish authorization decision API. It answers authorization questions | |
| // ("is this peer authorized to perform this operation on this resource?") and | |
| // exposes the per-role attributes consumers need to gate access to streaming | |
| // telemetry (the peer's role and its sample rate limit). | |
| // | |
| // This interface is intentionally free of any dependency on nlohmann/json so | |
| // that consumers that only need to make authorization decisions (e.g. the mc2 | |
| // project or the HFT service core) do not have to pull in the JSON library or | |
| // the configuration-loading machinery of the concrete authorizer. | |
| class RedfishAuthorizerInterface { | |
| public: | |
| virtual ~RedfishAuthorizerInterface() = default; | |
| // Decides authorization from the resource entity. Does not support any | |
| // override. | |
| virtual bool IsPeerAuthorized( | |
| ecclesia::ResourceEntity resource_entity, ecclesia::Operation operation, | |
| const RedfishPrivileges& peer_privileges) const = 0; | |
| // Decides authorization from the resource URI. Supports Resource and | |
| // Subordinate Overrides but not Property Overrides. | |
| virtual bool IsPeerAuthorized( | |
| std::string_view uri, ecclesia::Operation operation, | |
| const RedfishPrivileges& peer_privileges) const = 0; | |
| // Returns the peer's redfish role. Returns an empty string if the peer is not | |
| // authorized. | |
| virtual std::string GetPeerRedfishRole( | |
| const PeerSpiffeIdentity& peer) const = 0; | |
| // Returns the sample rate limit for the peer role. | |
| virtual uint64_t GetSampleRateLimit(const std::string& peer_role) const = 0; | |
| }; | |
| } // namespace milotic::authz | |
| #endif // THIRD_PARTY_MILOTIC_EXTERNAL_CC_AUTHZ_REDFISH_AUTHORIZER_INTERFACE_H_ |