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 #include <vector>
30c893f43dSJason Ling 
31c893f43dSJason Ling namespace ipmi_flash
32c893f43dSJason Ling {
33c893f43dSJason Ling 
34c893f43dSJason Ling std::unique_ptr<TriggerableActionInterface>
35c893f43dSJason Ling     buildFileSystemd(const nlohmann::json& data)
36c893f43dSJason Ling {
37c893f43dSJason Ling     /* This type of action requires a path and unit, and optionally a mode. */
38c893f43dSJason Ling     const auto& path = data.at("path");
39c893f43dSJason Ling     const auto& unit = data.at("unit");
40c893f43dSJason Ling 
41c893f43dSJason Ling     /* the mode parameter is optional. */
42c893f43dSJason Ling     std::string systemdMode = "replace";
43c893f43dSJason Ling     const auto& mode = data.find("mode");
44c893f43dSJason Ling     if (mode != data.end())
45c893f43dSJason Ling     {
46c893f43dSJason Ling         systemdMode = data.at("mode").get<std::string>();
47c893f43dSJason Ling     }
48c893f43dSJason Ling 
49c893f43dSJason Ling     return SystemdWithStatusFile::CreateSystemdWithStatusFile(
50c893f43dSJason Ling         sdbusplus::bus::new_default(), path, unit, systemdMode);
51c893f43dSJason Ling }
52c893f43dSJason Ling 
53c893f43dSJason Ling std::unique_ptr<TriggerableActionInterface>
54c893f43dSJason Ling     buildSystemd(const nlohmann::json& data)
55c893f43dSJason Ling {
56c893f43dSJason Ling     /* This type of action requires a unit, and optionally a mode. */
57c893f43dSJason Ling     const auto& unit = data.at("unit");
58c893f43dSJason Ling 
59c893f43dSJason Ling     /* the mode parameter is optional. */
60c893f43dSJason Ling     std::string systemdMode = "replace";
61c893f43dSJason Ling     const auto& mode = data.find("mode");
62c893f43dSJason Ling     if (mode != data.end())
63c893f43dSJason Ling     {
64c893f43dSJason Ling         systemdMode = data.at("mode").get<std::string>();
65c893f43dSJason Ling     }
66c893f43dSJason Ling 
67c893f43dSJason Ling     return SystemdNoFile::CreateSystemdNoFile(sdbusplus::bus::new_default(),
68c893f43dSJason Ling                                               unit, systemdMode);
69c893f43dSJason Ling }
70c893f43dSJason Ling 
71c893f43dSJason Ling } // namespace ipmi_flash
72