diff options
author | Lewanczyk, Dawid <dawid.lewanczyk@intel.com> | 2018-01-25 13:30:19 +0300 |
---|---|---|
committer | Ed Tanous <ed.tanous@intel.com> | 2018-03-07 01:34:47 +0300 |
commit | 4e49bd4bd5a4e0626e437165f1eafb7c8a8fa3a6 (patch) | |
tree | 6cd46fa9f0341979f52feefaae78bf970346b951 | |
parent | 3f2e8185c6b0c2b2e9a4d30f9e6988bd2fb4c7c9 (diff) | |
download | bmcweb-4e49bd4bd5a4e0626e437165f1eafb7c8a8fa3a6.tar.xz |
Roles
Move roles and roles collection to new class based implementation
Change-Id: I70f39bf8289fb45483a1e7f2c4eb3dbc1c7a7090
Signed-off-by: Lewanczyk, Dawid <dawid.lewanczyk@intel.com>
Signed-off-by: Ed Tanous <ed.tanous@intel.com>
-rw-r--r-- | include/redfish_v1.hpp | 36 | ||||
-rw-r--r-- | redfish-core/include/redfish.hpp | 14 | ||||
-rw-r--r-- | redfish-core/lib/roles.hpp | 79 |
3 files changed, 88 insertions, 41 deletions
diff --git a/include/redfish_v1.hpp b/include/redfish_v1.hpp index 3aecae09fe..e32be23261 100644 --- a/include/redfish_v1.hpp +++ b/include/redfish_v1.hpp @@ -102,42 +102,6 @@ void request_routes(Crow<Middlewares...>& app) { res.end(); }); - CROW_ROUTE(app, "/redfish/v1/AccountService/Roles/") - .methods("GET"_method)( - [&](const crow::request& req, crow::response& res) { - res.json_value = { - {"@odata.context", - "/redfish/v1/$metadata#RoleCollection.RoleCollection"}, - {"@odata.id", "/redfish/v1/AccountService/Roles"}, - {"@odata.type", "#RoleCollection.RoleCollection"}, - {"Name", "Account Service"}, - {"Description", "BMC User Roles"}, - {"Members@odata.count", 1}, - {"Members", - {{"@odata.id", - "/redfish/v1/AccountService/Roles/Administrator"}}}}; - get_redfish_sub_routes(app, "/redfish/v1/AccountService", - res.json_value); - res.end(); - }); - - CROW_ROUTE(app, "/redfish/v1/AccountService/Roles/Administrator/") - .methods("GET"_method)( - [&](const crow::request& req, crow::response& res) { - res.json_value = { - {"@odata.context", "/redfish/v1/$metadata#Role.Role"}, - {"@odata.id", "/redfish/v1/AccountService/Roles/Administrator"}, - {"@odata.type", "#Role.v1_0_2.Role"}, - {"Id", "Administrator"}, - {"Name", "User Role"}, - {"Description", "Administrator User Role"}, - {"IsPredefined", true}, - {"AssignedPrivileges", - {"Login", "ConfigureManager", "ConfigureUsers", - "ConfigureSelf", "ConfigureComponents"}}}; - res.end(); - }); - CROW_ROUTE(app, "/redfish/v1/AccountService/Accounts/") .methods( "GET"_method)([&](const crow::request& req, crow::response& res) { diff --git a/redfish-core/include/redfish.hpp b/redfish-core/include/redfish.hpp index c26d90beec..05986369d5 100644 --- a/redfish-core/include/redfish.hpp +++ b/redfish-core/include/redfish.hpp @@ -16,6 +16,7 @@ #pragma once #include "../lib/redfish_sessions.hpp" +#include "../lib/roles.hpp" #include "../lib/service_root.hpp" namespace redfish { @@ -34,14 +35,17 @@ class RedfishService { template <typename CrowApp> RedfishService(CrowApp& app) { auto privilegeProvider = PrivilegeProvider(); - serviceRootPtr = std::make_unique<ServiceRoot>(app, privilegeProvider); - sessionsCollectionPtr = - std::make_unique<SessionCollection>(app, privilegeProvider); + + nodes.emplace_back( + std::make_unique<SessionCollection>(app, privilegeProvider)); + nodes.emplace_back(std::make_unique<Roles>(app, privilegeProvider)); + nodes.emplace_back( + std::make_unique<RoleCollection>(app, privilegeProvider)); + nodes.emplace_back(std::make_unique<ServiceRoot>(app, privilegeProvider)); } private: - std::unique_ptr<ServiceRoot> serviceRootPtr; - std::unique_ptr<SessionCollection> sessionsCollectionPtr; + std::vector<std::unique_ptr<Node>> nodes; }; } // namespace redfish diff --git a/redfish-core/lib/roles.hpp b/redfish-core/lib/roles.hpp new file mode 100644 index 0000000000..bce4ccefe7 --- /dev/null +++ b/redfish-core/lib/roles.hpp @@ -0,0 +1,79 @@ +/* +// 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 <vector> +#include "node.hpp" + +namespace redfish { + +class Roles : public Node { + public: + template <typename CrowApp, typename PrivilegeProvider> + Roles(CrowApp& app, PrivilegeProvider& provider) + : Node(app, provider, "#Role.v1_0_2.Role", + "/redfish/v1/AccountService/Roles/Administrator/") { + nodeJson["@odata.id"] = "/redfish/v1/AccountService/Roles/Administrator"; + nodeJson["@odata.type"] = "#Role.v1_0_2.Role"; + nodeJson["@odata.context"] = "/redfish/v1/$metadata#Role.Role"; + nodeJson["Id"] = "Administrator"; + nodeJson["Name"] = "User Role"; + nodeJson["Description"] = "Administrator User Role"; + nodeJson["IsPredefined"] = true; + nodeJson["AssignedPrivileges"] = {"Login", "ConfigureManager", + "ConfigureUsers", "ConfigureSelf", + "ConfigureComponents"}; + nodeJson["OemPrivileges"] = nlohmann::json::array(); + } + + private: + void doGet(crow::response& res, const crow::request& req, + const std::vector<std::string>& params) override { + res.json_value = nodeJson; + res.end(); + } + + nlohmann::json nodeJson; +}; + +class RoleCollection : public Node { + public: + template <typename CrowApp, typename PrivilegeProvider> + RoleCollection(CrowApp& app, PrivilegeProvider& provider) + : Node(app, provider, "#RoleCollection.RoleCollection", + "/redfish/v1/AccountService/Roles/") { + nodeJson["@odata.id"] = "/redfish/v1/AccountService/Roles"; + nodeJson["@odata.type"] = "#RoleCollection.RoleCollection"; + nodeJson["@odata.context"] = + "/redfish/v1/$metadata#RoleCollection.RoleCollection"; + nodeJson["Name"] = "Roles Collection"; + nodeJson["Description"] = "BMC User Roles"; + nodeJson["Members@odata.count"] = 1; + nodeJson["Members"] = { + {"@odata.id", "/redfish/v1/AccountService/Roles/Administrator"}}; + } + + private: + void doGet(crow::response& res, const crow::request& req, + const std::vector<std::string>& params) override { + res.json_value = nodeJson; + res.end(); + } + + nlohmann::json nodeJson; +}; + +} // namespace redfish |