Remove the Node class

Fixes #181

Lots of specific details around why the node class have been removed are
in the previous patchsets.  This commit actually does the deed and makes
it go away entirely.

Now that this is finally done, we can compare binary size.  Surprisingly
enough, this series saves a full 72KB of compressed binary size, which
amounts to about 6.4% of the total code size.

Before: 1197632 bytes
After: 1124688 bytes

This IMO makes it worth it, considering we've significantly reduced the
amount of code at the same time.

Signed-off-by: Ed Tanous <edtanous@google.com>
Change-Id: I3c8688715f933b381cad0be75a079ccfd72c3130
diff --git a/redfish-core/include/event_service_manager.hpp b/redfish-core/include/event_service_manager.hpp
index a1761bb..11190ef 100644
--- a/redfish-core/include/event_service_manager.hpp
+++ b/redfish-core/include/event_service_manager.hpp
@@ -14,7 +14,6 @@
 // limitations under the License.
 */
 #pragma once
-#include "node.hpp"
 #include "registries.hpp"
 #include "registries/base_message_registry.hpp"
 #include "registries/openbmc_message_registry.hpp"
diff --git a/redfish-core/include/node.hpp b/redfish-core/include/node.hpp
deleted file mode 100644
index a1b7d72..0000000
--- a/redfish-core/include/node.hpp
+++ /dev/null
@@ -1,223 +0,0 @@
-/*
-// Copyright (c) 2018 Intel Corporation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//      http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-*/
-#pragma once
-
-#include "async_resp.hpp"
-#include "http_request.hpp"
-#include "http_response.hpp"
-#include "privileges.hpp"
-#include "redfish_v1.hpp"
-
-#include <error_messages.hpp>
-#include <rf_async_resp.hpp>
-
-#include <vector>
-
-namespace redfish
-{
-
-/**
- * @brief  Abstract class used for implementing Redfish nodes.
- *
- */
-class Node
-{
-  private:
-    bool redfishPreChecks(const crow::Request& req,
-                          const std::shared_ptr<bmcweb::AsyncResp>& asyncResp)
-    {
-        std::string_view odataHeader = req.getHeaderValue("OData-Version");
-        if (odataHeader.empty())
-        {
-            // Clients aren't required to provide odata version
-            return true;
-        }
-        if (odataHeader != "4.0")
-        {
-            redfish::messages::preconditionFailed(asyncResp->res);
-            return false;
-        }
-
-        asyncResp->res.addHeader("OData-Version", "4.0");
-        return true;
-    }
-
-  public:
-    template <typename... Params>
-    Node(App& app, std::string&& entityUrl,
-         [[maybe_unused]] Params... paramsIn) :
-        app(app)
-    {
-        crow::DynamicRule& get = app.routeDynamic(entityUrl.c_str());
-        getRule = &get;
-        get.methods(boost::beast::http::verb::get)(
-            [this](const crow::Request& req,
-                   const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
-                   Params... params) {
-                if (!redfishPreChecks(req, asyncResp))
-                {
-                    return;
-                }
-                std::vector<std::string> paramVec = {params...};
-                doGet(asyncResp, req, paramVec);
-            });
-
-        crow::DynamicRule& patch = app.routeDynamic(entityUrl.c_str());
-        patchRule = &patch;
-        patch.methods(boost::beast::http::verb::patch)(
-            [this](const crow::Request& req,
-                   const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
-                   Params... params) {
-                if (!redfishPreChecks(req, asyncResp))
-                {
-                    return;
-                }
-                std::vector<std::string> paramVec = {params...};
-                doPatch(asyncResp, req, paramVec);
-            });
-
-        crow::DynamicRule& post = app.routeDynamic(entityUrl.c_str());
-        postRule = &post;
-        post.methods(boost::beast::http::verb::post)(
-            [this](const crow::Request& req,
-                   const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
-                   Params... params) {
-                if (!redfishPreChecks(req, asyncResp))
-                {
-                    return;
-                }
-                std::vector<std::string> paramVec = {params...};
-                doPost(asyncResp, req, paramVec);
-            });
-
-        crow::DynamicRule& put = app.routeDynamic(entityUrl.c_str());
-        putRule = &put;
-        put.methods(boost::beast::http::verb::put)(
-            [this](const crow::Request& req,
-                   const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
-                   Params... params) {
-                if (!redfishPreChecks(req, asyncResp))
-                {
-                    return;
-                }
-                std::vector<std::string> paramVec = {params...};
-                doPut(asyncResp, req, paramVec);
-            });
-
-        crow::DynamicRule& deleteR = app.routeDynamic(entityUrl.c_str());
-        deleteRule = &deleteR;
-        deleteR.methods(boost::beast::http::verb::delete_)(
-            [this](const crow::Request& req,
-                   const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
-                   Params... params) {
-                if (!redfishPreChecks(req, asyncResp))
-                {
-                    return;
-                }
-                std::vector<std::string> paramVec = {params...};
-                doDelete(asyncResp, req, paramVec);
-            });
-    }
-
-    void initPrivileges()
-    {
-        auto it = entityPrivileges.find(boost::beast::http::verb::get);
-        if (it != entityPrivileges.end())
-        {
-            if (getRule != nullptr)
-            {
-                getRule->privileges(it->second);
-            }
-        }
-        it = entityPrivileges.find(boost::beast::http::verb::post);
-        if (it != entityPrivileges.end())
-        {
-            if (postRule != nullptr)
-            {
-                postRule->privileges(it->second);
-            }
-        }
-        it = entityPrivileges.find(boost::beast::http::verb::patch);
-        if (it != entityPrivileges.end())
-        {
-            if (patchRule != nullptr)
-            {
-                patchRule->privileges(it->second);
-            }
-        }
-        it = entityPrivileges.find(boost::beast::http::verb::put);
-        if (it != entityPrivileges.end())
-        {
-            if (putRule != nullptr)
-            {
-                putRule->privileges(it->second);
-            }
-        }
-        it = entityPrivileges.find(boost::beast::http::verb::delete_);
-        if (it != entityPrivileges.end())
-        {
-            if (deleteRule != nullptr)
-            {
-                deleteRule->privileges(it->second);
-            }
-        }
-    }
-
-    virtual ~Node() = default;
-
-    OperationMap entityPrivileges;
-
-    crow::DynamicRule* getRule = nullptr;
-    crow::DynamicRule* postRule = nullptr;
-    crow::DynamicRule* patchRule = nullptr;
-    crow::DynamicRule* putRule = nullptr;
-    crow::DynamicRule* deleteRule = nullptr;
-
-  protected:
-    App& app;
-    // Node is designed to be an abstract class, so doGet is pure virtual
-    virtual void doGet(const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
-                       const crow::Request&, const std::vector<std::string>&)
-    {
-        asyncResp->res.result(boost::beast::http::status::method_not_allowed);
-    }
-
-    virtual void doPatch(const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
-                         const crow::Request&, const std::vector<std::string>&)
-    {
-        asyncResp->res.result(boost::beast::http::status::method_not_allowed);
-    }
-
-    virtual void doPost(const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
-                        const crow::Request&, const std::vector<std::string>&)
-    {
-        asyncResp->res.result(boost::beast::http::status::method_not_allowed);
-    }
-
-    virtual void doPut(const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
-                       const crow::Request&, const std::vector<std::string>&)
-    {
-        asyncResp->res.result(boost::beast::http::status::method_not_allowed);
-    }
-
-    virtual void doDelete(const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
-                          const crow::Request&, const std::vector<std::string>&)
-    {
-        asyncResp->res.result(boost::beast::http::status::method_not_allowed);
-    }
-};
-
-} // namespace redfish
diff --git a/redfish-core/include/redfish.hpp b/redfish-core/include/redfish.hpp
index 0f43a36..47d4848 100644
--- a/redfish-core/include/redfish.hpp
+++ b/redfish-core/include/redfish.hpp
@@ -201,15 +201,7 @@
         requestRoutesMetricReportDefinition(app);
         requestRoutesMetricReportCollection(app);
         requestRoutesMetricReport(app);
-
-        for (const auto& node : nodes)
-        {
-            node->initPrivileges();
-        }
     }
-
-  private:
-    std::vector<std::unique_ptr<Node>> nodes;
 };
 
 } // namespace redfish
diff --git a/redfish-core/include/server_sent_events.hpp b/redfish-core/include/server_sent_events.hpp
index 578fa19..7613d7b 100644
--- a/redfish-core/include/server_sent_events.hpp
+++ b/redfish-core/include/server_sent_events.hpp
@@ -15,7 +15,6 @@
 // limitations under the License.
 */
 #pragma once
-#include "node.hpp"
 
 #include <boost/asio/strand.hpp>
 #include <boost/beast/core/span.hpp>
diff --git a/redfish-core/lib/account_service.hpp b/redfish-core/lib/account_service.hpp
index 582f781..835fae3 100644
--- a/redfish-core/lib/account_service.hpp
+++ b/redfish-core/lib/account_service.hpp
@@ -14,7 +14,6 @@
 // limitations under the License.
 */
 #pragma once
-#include "node.hpp"
 
 #include <app.hpp>
 #include <dbus_utility.hpp>
diff --git a/redfish-core/lib/ethernet.hpp b/redfish-core/lib/ethernet.hpp
index d78cb58..5040f9e 100644
--- a/redfish-core/lib/ethernet.hpp
+++ b/redfish-core/lib/ethernet.hpp
@@ -20,7 +20,6 @@
 #include <boost/container/flat_set.hpp>
 #include <dbus_singleton.hpp>
 #include <error_messages.hpp>
-#include <node.hpp>
 #include <utils/json_utils.hpp>
 
 #include <optional>
diff --git a/redfish-core/lib/hypervisor_system.hpp b/redfish-core/lib/hypervisor_system.hpp
index 0e0629d..e785038 100644
--- a/redfish-core/lib/hypervisor_system.hpp
+++ b/redfish-core/lib/hypervisor_system.hpp
@@ -5,7 +5,6 @@
 #include <boost/container/flat_set.hpp>
 #include <dbus_singleton.hpp>
 #include <error_messages.hpp>
-#include <node.hpp>
 #include <utils/json_utils.hpp>
 
 #include <optional>
diff --git a/redfish-core/lib/redfish_sessions.hpp b/redfish-core/lib/redfish_sessions.hpp
index 7590268..53ec7d0 100644
--- a/redfish-core/lib/redfish_sessions.hpp
+++ b/redfish-core/lib/redfish_sessions.hpp
@@ -16,7 +16,6 @@
 #pragma once
 
 #include "error_messages.hpp"
-#include "node.hpp"
 #include "persistent_data.hpp"
 
 #include <app.hpp>
diff --git a/redfish-core/lib/virtual_media.hpp b/redfish-core/lib/virtual_media.hpp
index ce40f67..cdb6a51 100644
--- a/redfish-core/lib/virtual_media.hpp
+++ b/redfish-core/lib/virtual_media.hpp
@@ -19,7 +19,6 @@
 #include <boost/container/flat_map.hpp>
 #include <boost/process/async_pipe.hpp>
 #include <boost/type_traits/has_dereference.hpp>
-#include <node.hpp>
 #include <utils/json_utils.hpp>
 // for GetObjectType and ManagedObjectType
 #include <account_service.hpp>