diff --git a/include/plugin/broadcast.h b/include/plugin/broadcast.h index 6df7012..b168d67 100644 --- a/include/plugin/broadcast.h +++ b/include/plugin/broadcast.h @@ -10,6 +10,7 @@ #include #include +#include #include #include #include diff --git a/include/plugin/handshake.h b/include/plugin/handshake.h index b010f29..615adcb 100644 --- a/include/plugin/handshake.h +++ b/include/plugin/handshake.h @@ -4,11 +4,13 @@ #include "cura/plugins/slots/handshake/v0/handshake.grpc.pb.h" #include "cura/plugins/v0/slot_id.pb.h" #include "plugin/metadata.h" +#include "plugin/settings.h" #include #include #include +#include #include namespace plugin @@ -36,9 +38,18 @@ struct Handshake request, writer, boost::asio::use_awaitable); + spdlog::info("Received handshake request"); spdlog::info("Slot ID: {}, slot version range: {}, plugin name: {}, plugin version: {}", static_cast(request.slot_id()), request.version_range(), request.plugin_name(), request.plugin_version()); + const bool exists = Settings::validatePlugin(request, metadata); + if (!exists) + { + grpc::Status status = grpc::Status(grpc::StatusCode::INTERNAL, "Plugin could not be validated, handshake failed!"); + co_await agrpc::finish_with_error(writer, status, boost::asio::use_awaitable); + continue; + } + cura::plugins::slots::handshake::v0::CallResponse response; response.set_plugin_name(static_cast(metadata->plugin_name)); response.set_slot_version(static_cast(metadata->slot_version)); diff --git a/include/plugin/settings.h b/include/plugin/settings.h index 27c90ca..2ebfead 100644 --- a/include/plugin/settings.h +++ b/include/plugin/settings.h @@ -60,7 +60,15 @@ struct Settings return std::nullopt; } + static bool validatePlugin(const cura::plugins::slots::handshake::v0::CallRequest& request, const std::shared_ptr& metadata) + { + if (request.plugin_name() == metadata->plugin_name && request.plugin_version() == metadata->plugin_version) + { + return true; + } + return false; + } static std::string settingKey(std::string_view short_key, std::string_view name, std::string_view version) { std::string lower_name{ name }; @@ -73,7 +81,9 @@ struct Settings { return std::tolower(c); }); - return fmt::format("_plugin__{}__{}_{}_{}__{}", lower_name, semantic_version.major, semantic_version.minor, semantic_version.patch, short_key); + auto generated_key = fmt::format("_plugin__{}__{}_{}_{}__{}", lower_name, semantic_version.major, semantic_version.minor, semantic_version.patch, short_key); + spdlog::info("generated key is {}", generated_key); + return generated_key; } };