|  | #ifndef THIRD_PARTY_MILOTIC_INTERNAL_CC_AUTHZ_CONFIG_GENERATOR_H_ | 
|  | #define THIRD_PARTY_MILOTIC_INTERNAL_CC_AUTHZ_CONFIG_GENERATOR_H_ | 
|  |  | 
|  | #include <optional> | 
|  | #include <string> | 
|  | #include <string_view> | 
|  |  | 
|  | #include "gmi/machine_identity.pb.h" | 
|  | #include "one/offline_node_entities.pb.h" | 
|  | #include "absl/strings/string_view.h" | 
|  | #include "nlohmann/json.hpp" | 
|  |  | 
|  | namespace milotic::authz { | 
|  |  | 
|  | struct GeneratorOptions { | 
|  | std::string gmi_path; | 
|  | std::string server_cert_path; | 
|  | std::string authz_configuration_path; | 
|  | std::string offline_node_entities_path; | 
|  | }; | 
|  |  | 
|  | // This class reads the GMI file and the authorization configuration template | 
|  | // defined in [1], and generates various authorization related configuration | 
|  | // (OAuth Configuration, Redfish Registry, etc) | 
|  | // [1] | 
|  | // https://source.corp.google.com/piper///depot/google3/third_party/milotic/internal/auth_config/schema | 
|  |  | 
|  | class ConfigGenerator { | 
|  | public: | 
|  | // Returns a non-empty JSON object on success otherwise an error happens. | 
|  | static nlohmann::json GenerateConfiguration(const GeneratorOptions& options); | 
|  |  | 
|  | // Returns a configuration that rejects every client. | 
|  | static nlohmann::json EmptyConfiguration(); | 
|  |  | 
|  | protected: | 
|  | // Returns a non-empty struct on success otherwise an error happens. | 
|  | static std::optional<::security_prodid::GoogleMachineIdentityProto> | 
|  | GetGmiDataFromGmi(const std::string& gmi_path); | 
|  |  | 
|  | // Reads the base configuration file as a JSON object. Adds configurations | 
|  | // that needs runtime substitutions. Returns a non-empty JSON object on | 
|  | // success otherwise an error happens. | 
|  | static nlohmann::json ReadConfigAndAddRuntimeSubstitutions( | 
|  | const std::string& base_config_path, bool in_hwops_state, | 
|  | const production_msv::node_entities_proto::OfflineNodeEntityInformation& | 
|  | one); | 
|  |  | 
|  | // Find the json pointer to insert or replace the machine manager resource | 
|  | // owner. | 
|  | static nlohmann::json::json_pointer FindLocalNodeInOwners( | 
|  | const nlohmann::json& root, std::string_view hostname); | 
|  |  | 
|  | // Find the json pointer to insert or replace the machine manager exchange | 
|  | // mapping. | 
|  | static nlohmann::json::json_pointer FindLocalNodeInExchangeMappings( | 
|  | const nlohmann::json& root, std::string_view hostname); | 
|  |  | 
|  | static nlohmann::json::json_pointer FindLocalNodeInExchangeMappings( | 
|  | const nlohmann::json& root, std::string_view hostname, | 
|  | std::string_view node_redfish_role); | 
|  |  | 
|  | // Utility function to add/update compute node mapping in the config. | 
|  | // If the compute node mapping does not exist, it adds the mapping to the | 
|  | // policy file. If the compute node mapping already exists, do nothing as we | 
|  | // now use entity based mappings and don't want a duplicate peer based | 
|  | // mapping. | 
|  | static void UpdateComputeNodeMappingsInRoot( | 
|  | nlohmann::json& root, bool in_hwops_state, | 
|  | const production_msv::node_entities_proto::OfflineNodeEntityInformation& | 
|  | one); | 
|  |  | 
|  | // Utility function to add/update machine manager mapping in the config. | 
|  | // If the machine manager mapping does not exist, it adds the mapping to the | 
|  | // policy file. If the machine manager mapping already exists, do nothing as | 
|  | // we now use entity based mappings and don't want a duplicate peer based | 
|  | // mapping. | 
|  | static void UpdateMachineManagerMappingsInRoot( | 
|  | nlohmann::json& root, bool in_hwops_state, | 
|  | const production_msv::node_entities_proto::OfflineNodeEntityInformation& | 
|  | one); | 
|  | }; | 
|  |  | 
|  | }  // namespace milotic::authz | 
|  |  | 
|  | #endif  // THIRD_PARTY_MILOTIC_INTERNAL_CC_AUTHZ_CONFIG_GENERATOR_H_ |