void endpoint::AclBind<true>::post(const server::Request& request, server::Response& response) { const auto acl_port_pair = get_acl_and_port_uuid(request); if (NetworkManager::get_instance()->get_acl_port_manager().entry_exists(acl_port_pair.first, acl_port_pair.second)) { THROW(agent_framework::exceptions::InvalidParameters, "rest", "Port " + std::to_string(NetworkManager::get_instance()->get_port_manager().uuid_to_rest_id(acl_port_pair.second)) + " is already bound to ACL " + request.params[PathParam::ACL_ID]); } const requests::AddAclPort add_acl_port_request{ acl_port_pair.first, attribute::Array<std::string>(std::vector<std::string>{acl_port_pair.second}), attribute::Oem() }; const auto agent_id = model::Find<agent_framework::model::Switch> (request.params[PathParam::ETHERNET_SWITCH_ID]).get().get_agent_id(); const auto add_acl_port_response = AgentManager::get_instance() ->call_method<responses::AddAclPort>(agent_id, add_acl_port_request); NetworkManager::get_instance()->get_acl_port_manager().add_entry(acl_port_pair.first, acl_port_pair.second, agent_id); response.set_status(server::status_2XX::NO_CONTENT); }
void endpoint::AclBind<true>::post(const server::Request& request, server::Response& response) { static const constexpr char TRANSACTION_NAME[] = "PostAclBind"; const auto json = JsonValidator::validate_request_body<schema::AclPostSchema>(request); const auto acl_port_pair = get_acl_and_port_uuid(request, json); if (NetworkComponents::get_instance()->get_acl_port_manager().entry_exists(acl_port_pair.first, acl_port_pair.second)) { THROW(agent_framework::exceptions::InvalidValue, "rest", "Port " + std::to_string( NetworkComponents::get_instance()->get_port_manager().uuid_to_rest_id(acl_port_pair.second)) + " is already bound to ACL " + request.params[PathParam::ACL_ID]); } const requests::AddAclPort add_acl_port_request{ acl_port_pair.first, attribute::Array<std::string>(std::vector<std::string>{acl_port_pair.second}), attribute::Oem() }; const auto parent_switch = model::find<agent_framework::model::EthernetSwitch>(request.params).get(); const auto agent_id = parent_switch.get_agent_id(); const auto& gami_agent = psme::core::agent::AgentManager::get_instance()->get_agent(agent_id); auto add_acl_port = [&, gami_agent] { const auto add_acl_port_response = gami_agent->execute<responses::AddAclPort>(add_acl_port_request); model::handler::HandlerManager::get_instance()-> get_handler(enums::Component::Acl)-> load(gami_agent, parent_switch.get_uuid(), enums::Component::EthernetSwitch, acl_port_pair.first, true); NetworkComponents::get_instance()->get_acl_port_manager().add_entry(acl_port_pair.first, acl_port_pair.second, agent_id); response.set_status(server::status_2XX::NO_CONTENT); }; gami_agent->execute_in_transaction(TRANSACTION_NAME, add_acl_port); }