blob: fd74c0daf7ce72b16d95b103122e3e91d947fad5 [file]
#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_