From 11c20700870f9af3ffa874ffba5e4d92e60ce77f Mon Sep 17 00:00:00 2001 From: sgallou Date: Thu, 5 Sep 2024 19:05:18 +0200 Subject: [PATCH] Accept configuration or configuration with schema when create/update plugin instance --- sources/server/web/rest/service/PluginV2.cpp | 42 +++++++++++++------- 1 file changed, 27 insertions(+), 15 deletions(-) diff --git a/sources/server/web/rest/service/PluginV2.cpp b/sources/server/web/rest/service/PluginV2.cpp index 9e51cae5e..08c71aa61 100644 --- a/sources/server/web/rest/service/PluginV2.cpp +++ b/sources/server/web/rest/service/PluginV2.cpp @@ -212,9 +212,7 @@ namespace web if (props->empty() || props->find("type") != props->end()) instanceEntry->set("type", instance->Type()); if (props->empty() || props->find("configuration") != props->end()) - instanceEntry->set("configuration", instance->Configuration()); - if (props->empty() || props->find("configurationWithSchema") != props->end()) - instanceEntry->set("configurationWithSchema", + instanceEntry->set("configuration", CPluginConfigurationMerger::mergeConfigurationAndSchema( *getPluginConfigurationSchema(findPlugin(instance->Type), labels), *instance->Configuration())); @@ -270,14 +268,21 @@ namespace web m_dataProvider, [this](const auto& req) -> boost::shared_ptr { - // Extract only configuration if configurationWithSchema provided shared::CDataContainer pluginToCreate(req->body()); - if (pluginToCreate.exists("configurationWithSchema")) + if (pluginToCreate.exists("configuration")) { - pluginToCreate.set("Configuration", - CPluginConfigurationMerger::extractConfiguration( - pluginToCreate.get("configurationWithSchema"))); - pluginToCreate.remove("configurationWithSchema"); + try + { + const auto extractedConfiguration = CPluginConfigurationMerger::extractConfiguration( + pluginToCreate.get("configuration")); + pluginToCreate.remove("configuration"); + pluginToCreate.set("configuration", + extractedConfiguration); + } + catch (const std::exception&) + { + // Fail to extract configuration ==> Consider that configuration is provided without schema and record as is + } } database::entities::CPlugin plugin; @@ -304,14 +309,21 @@ namespace web "plugin-instance id was not provided"); const auto instanceId = static_cast(std::stol(id)); - // Extract only configuration if configurationWithSchema provided shared::CDataContainer pluginToUpdate(request->body()); - if (pluginToUpdate.exists("configurationWithSchema")) + if (pluginToUpdate.exists("configuration")) { - pluginToUpdate.set("Configuration", - CPluginConfigurationMerger::extractConfiguration( - pluginToUpdate.get("configurationWithSchema"))); - pluginToUpdate.remove("configurationWithSchema"); + try + { + const auto extractedConfiguration = CPluginConfigurationMerger::extractConfiguration( + pluginToUpdate.get("configuration")); + pluginToUpdate.remove("configuration"); + pluginToUpdate.set("configuration", + extractedConfiguration); + } + catch (const std::exception&) + { + // Fail to extract configuration ==> Consider that configuration is provided without schema and record as is + } } database::entities::CPlugin instanceToUpdate;