| #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_ |