Implement ReleaseAll Locks functionality

- This commit implements the release all locks functionality
  as a part of ReleaseLock API.

- The existing ReleaseLock API is modified in such a way that
based on it can do the following things:

1. Release the locks which are corresponding to a set of
   transactionID's(provided as input & `Type:Transaction`)
2. Release all the locks which are corrsponding to a particular
   session(where `Type:Session`)

Signed-off-by: Manojkiran Eda <manojkiran.eda@gmail.com>
Change-Id: I89f847bcb85912d4d9f85587ffbf782da885393a
diff --git a/include/ibm/locks.hpp b/include/ibm/locks.hpp
index 7b00708..66eb926 100644
--- a/include/ibm/locks.hpp
+++ b/include/ibm/locks.hpp
@@ -42,7 +42,7 @@
     boost::container::flat_map<uint32_t, LockRequests> lockTable;
 
     /*
-     * This function implements the logic for validating an incomming
+     * This function implements the logic for validating an incoming
      * lock request/requests.
      *
      * Returns : True (if Valid)
@@ -52,7 +52,7 @@
     bool isValidLockRequest(const LockRequest);
 
     /*
-     * This function implements the logic of checking if the incomming
+     * This function implements the logic of checking if the incoming
      * multi-lock request is not having conflicting requirements.
      *
      * Returns : True (if conflicting)
@@ -74,7 +74,7 @@
 
     /*
      * This function implements the logic of checking the conflicting
-     * locks from a incomming single/multi lock requests with the already
+     * locks from a incoming single/multi lock requests with the already
      * existing lock request in the lock table.
      *
      */
@@ -135,7 +135,7 @@
   public:
     /*
      * This function implements the logic for acquiring a lock on a
-     * resource if the incomming request is legitimate without any
+     * resource if the incoming request is legitimate without any
      * conflicting requirements & without any conflicting requirement
      * with the exsiting locks in the lock table.
      *
diff --git a/include/ibm/management_console_rest.hpp b/include/ibm/management_console_rest.hpp
index 87beb04..9f8f8d2 100644
--- a/include/ibm/management_console_rest.hpp
+++ b/include/ibm/management_console_rest.hpp
@@ -5,6 +5,7 @@
 #include <async_resp.hpp>
 #include <boost/algorithm/string.hpp>
 #include <boost/container/flat_set.hpp>
+#include <error_messages.hpp>
 #include <filesystem>
 #include <fstream>
 #include <ibm/locks.hpp>
@@ -406,6 +407,13 @@
         }
     }
 }
+void handleRelaseAllAPI(const crow::Request &req, crow::Response &res)
+{
+    crow::ibm_mc_lock::Lock::getInstance().releaseLock(req.session->uniqueId);
+    res.result(boost::beast::http::status::ok);
+    res.end();
+    return;
+}
 
 void handleReleaseLockAPI(const crow::Request &req, crow::Response &res,
                           const std::vector<uint32_t> &listTransactionIds)
@@ -581,19 +589,34 @@
             });
     BMCWEB_ROUTE(app, "/ibm/v1/HMC/LockService/Actions/LockService.ReleaseLock")
         .requires({"ConfigureComponents", "ConfigureManager"})
-        .methods("POST"_method)(
-            [](const crow::Request &req, crow::Response &res) {
-                std::vector<uint32_t> listTransactionIds;
+        .methods(
+            "POST"_method)([](const crow::Request &req, crow::Response &res) {
+            std::string type;
+            std::vector<uint32_t> listTransactionIds;
 
-                if (!redfish::json_util::readJson(req, res, "TransactionIDs",
-                                                  listTransactionIds))
-                {
-                    res.result(boost::beast::http::status::bad_request);
-                    res.end();
-                    return;
-                }
+            if (!redfish::json_util::readJson(req, res, "Type", type,
+                                              "TransactionIDs",
+                                              listTransactionIds))
+            {
+                res.result(boost::beast::http::status::bad_request);
+                res.end();
+                return;
+            }
+            if (type == "Transaction")
+            {
                 handleReleaseLockAPI(req, res, listTransactionIds);
-            });
+            }
+            else if (type == "Session")
+            {
+                handleRelaseAllAPI(req, res);
+            }
+            else
+            {
+                BMCWEB_LOG_DEBUG << " Value of Type : " << type
+                                 << "is Not a Valid key";
+                redfish::messages::propertyValueNotInList(res, type, "Type");
+            }
+        });
     BMCWEB_ROUTE(app, "/ibm/v1/HMC/LockService/Actions/LockService.GetLockList")
         .requires({"ConfigureComponents", "ConfigureManager"})
         .methods("POST"_method)(