1c893f43dSJason Ling /*
2c893f43dSJason Ling  * Copyright 2019 Google Inc.
3c893f43dSJason Ling  *
4c893f43dSJason Ling  * Licensed under the Apache License, Version 2.0 (the "License");
5c893f43dSJason Ling  * you may not use this file except in compliance with the License.
6c893f43dSJason Ling  * You may obtain a copy of the License at
7c893f43dSJason Ling  *
8c893f43dSJason Ling  *     http://www.apache.org/licenses/LICENSE-2.0
9c893f43dSJason Ling  *
10c893f43dSJason Ling  * Unless required by applicable law or agreed to in writing, software
11c893f43dSJason Ling  * distributed under the License is distributed on an "AS IS" BASIS,
12c893f43dSJason Ling  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13c893f43dSJason Ling  * See the License for the specific language governing permissions and
14c893f43dSJason Ling  * limitations under the License.
15c893f43dSJason Ling  */
16c893f43dSJason Ling #include "buildjson.hpp"
17c893f43dSJason Ling 
18c893f43dSJason Ling #include "file_handler.hpp"
19*bec23189SWilliam A. Kennington III #include "general_systemd.hpp"
20c893f43dSJason Ling 
21c893f43dSJason Ling #include <nlohmann/json.hpp>
22c893f43dSJason Ling #include <sdbusplus/bus.hpp>
23c893f43dSJason Ling 
24c893f43dSJason Ling #include <algorithm>
25c893f43dSJason Ling #include <cstdio>
26c893f43dSJason Ling #include <exception>
27c893f43dSJason Ling #include <fstream>
28c893f43dSJason Ling #include <string>
29c893f43dSJason Ling 
30c893f43dSJason Ling namespace ipmi_flash
31c893f43dSJason Ling {
32c893f43dSJason Ling 
33c893f43dSJason Ling std::unique_ptr<TriggerableActionInterface>
buildFileSystemd(const nlohmann::json & data)34c893f43dSJason Ling     buildFileSystemd(const nlohmann::json& data)
35c893f43dSJason Ling {
36c893f43dSJason Ling     /* This type of action requires a path and unit, and optionally a mode. */
37c893f43dSJason Ling     const auto& path = data.at("path");
38c893f43dSJason Ling     const auto& unit = data.at("unit");
39c893f43dSJason Ling 
40c893f43dSJason Ling     /* the mode parameter is optional. */
41c893f43dSJason Ling     std::string systemdMode = "replace";
42c893f43dSJason Ling     const auto& mode = data.find("mode");
43c893f43dSJason Ling     if (mode != data.end())
44c893f43dSJason Ling     {
45c893f43dSJason Ling         systemdMode = data.at("mode").get<std::string>();
46c893f43dSJason Ling     }
47c893f43dSJason Ling 
48c893f43dSJason Ling     return SystemdWithStatusFile::CreateSystemdWithStatusFile(
49c893f43dSJason Ling         sdbusplus::bus::new_default(), path, unit, systemdMode);
50c893f43dSJason Ling }
51c893f43dSJason Ling 
52c893f43dSJason Ling std::unique_ptr<TriggerableActionInterface>
buildSystemd(const nlohmann::json & data)53c893f43dSJason Ling     buildSystemd(const nlohmann::json& data)
54c893f43dSJason Ling {
55c893f43dSJason Ling     /* This type of action requires a unit, and optionally a mode. */
56c893f43dSJason Ling     const auto& unit = data.at("unit");
57c893f43dSJason Ling 
58c893f43dSJason Ling     /* the mode parameter is optional. */
59c893f43dSJason Ling     std::string systemdMode = "replace";
60c893f43dSJason Ling     const auto& mode = data.find("mode");
61c893f43dSJason Ling     if (mode != data.end())
62c893f43dSJason Ling     {
63c893f43dSJason Ling         systemdMode = data.at("mode").get<std::string>();
64c893f43dSJason Ling     }
65c893f43dSJason Ling 
66c893f43dSJason Ling     return SystemdNoFile::CreateSystemdNoFile(sdbusplus::bus::new_default(),
67c893f43dSJason Ling                                               unit, systemdMode);
68c893f43dSJason Ling }
69c893f43dSJason Ling 
70c893f43dSJason Ling } // namespace ipmi_flash
71