Nix (Dev) 3.5.10
dev - 3.5.10 - 1af9301
Loading...
Searching...
No Matches
Settings.hpp
Go to the documentation of this file.
1#ifndef IV_SRC_DIAMAR_SETTINGS_HPP_
2#define IV_SRC_DIAMAR_SETTINGS_HPP_
3
4#include "diamar/Station.hpp"
6#include "model/enums.hpp"
7#include "model/structs.hpp"
8#include "third_party/magic_enum/magic_enum.hpp"
9
10#include <map>
11#include <string>
12
13namespace iv::diamar
14{
15
17{
18 Settings();
19 static bool validatePassword(const std::string_view &password, std::string *errorMsg);
20 std::vector<std::shared_ptr<iv::diamar::UserProfile>> getUsersWithPermissions();
21
22 std::map<iv::diamar::eUserProfileType, std::shared_ptr<iv::diamar::UserProfile>> profiles;
30
31 std::string printerDevice;
32
38 uint64_t maxLogs;
40
45
46 bool load(const iv::file::xml::node &nodeConfigDiamar)
47 {
48 bool result {true};
49 iv::file::xml::node nodeGeneral = nodeConfigDiamar.getChild(Sections::general);
50 if (nodeGeneral.emptyNode())
51 {
52 return false;
53 }
63
68 result &= loginLockout.load(nodeConfigDiamar.getChild(Sections::loginLockout));
69 result &= cloudSettings.load(nodeConfigDiamar.getChild(Sections::cloudSettings));
73
74 for (const iv::file::xml::node nodeProfile: nodeConfigDiamar.getChild(Sections::profiles))
75 {
76 std::shared_ptr<iv::diamar::UserProfile> userProfile = std::make_shared<iv::diamar::UserProfile>();
77 result &= userProfile->load(nodeProfile);
78 profiles.insert_or_assign(userProfile->getType(), userProfile);
79 }
80
81 for (const auto &profileType: magic_enum::enum_values<iv::diamar::eUserProfileType>())
82 {
83 if (not profiles.contains(profileType))
84 {
85 return false;
86 }
87 }
88
89 return result;
90 }
91
92 bool save(iv::file::xml::node &nodeConfigDiamar) const
93 {
94 bool result {true};
95 iv::file::xml::node nodeGeneral = nodeConfigDiamar.appendChild(Sections::general);
102 nodeGeneral.addAttribute(Keys::maxLogs, maxLogs);
104
106 iv::file::xml::node nodePasswordRequirements = nodeConfigDiamar.appendChild(Sections::passwordRequirements);
107 result &= passwordRequirements.save(nodePasswordRequirements);
108
109 iv::file::xml::node nodePasswordLifecycle = nodeConfigDiamar.appendChild(Sections::passwordLifecycle);
110 result &= passwordLifecycle.save(nodePasswordLifecycle);
111
112 iv::file::xml::node nodeLoginLockout = nodeConfigDiamar.appendChild(Sections::loginLockout);
113 result &= loginLockout.save(nodeLoginLockout);
114
115 iv::file::xml::node nodeCloudSettings = nodeConfigDiamar.appendChild(Sections::cloudSettings);
116 result &= cloudSettings.save(nodeCloudSettings);
117
118 iv::file::xml::node nodeTimeSyncSettings = nodeConfigDiamar.appendChild(Sections::timeSyncSettings);
119 result &= timeSyncSettings.save(nodeTimeSyncSettings);
120
121 iv::file::xml::node nodeDeadManSettings = nodeConfigDiamar.appendChild(Sections::deadManSettings);
122 result &= deadManSettings.save(nodeDeadManSettings);
123 iv::file::xml::node nodeProfiles = nodeConfigDiamar.appendChild(Sections::profiles);
124 for (const auto &[profileType, userProfile]: profiles)
125 {
126 iv::file::xml::node nodeProfile = nodeProfiles.appendChild(Sections::profile);
127 result &= userProfile->save(nodeProfile);
128 }
129
130 return result;
131 }
132
133 void update(const Settings &other)
134 {
139 isDemoMode = other.isDemoMode;
140 maxLogs = other.maxLogs;
145
146 profiles = other.profiles;
147 for (const auto &[profileType, userProfile]: other.profiles)
148 {
149 if (not profiles.contains(profileType))
150 {
151 profiles.insert_or_assign(profileType, userProfile);
152 }
153 else
154 {
155 profiles.at(profileType)->update(*userProfile);
156 }
157 }
158
159 std::erase_if(profiles, [&other](const auto &profile) { return not other.profiles.contains(profile.first); });
160 }
161
163 {
164 profiles.clear();
165
166 auto engMgt = std::make_shared<iv::diamar::UserProfile>(iv::diamar::eUserProfileType::EngineManagement, true);
167 auto advEngMgt =
168 std::make_shared<iv::diamar::UserProfile>(iv::diamar::eUserProfileType::EngineAdvancedManagement, true);
169 auto root = std::make_shared<iv::diamar::UserProfile>(iv::diamar::eUserProfileType::Root, true);
170 auto deckMgt = std::make_shared<iv::diamar::UserProfile>(iv::diamar::eUserProfileType::DeckManagement, false);
171 auto advDeckMgt =
172 std::make_shared<iv::diamar::UserProfile>(iv::diamar::eUserProfileType::DeckAdvancedManagement, false);
173 auto monitor = std::make_shared<iv::diamar::UserProfile>(iv::diamar::eUserProfileType::Monitor, false);
174
175 profiles.insert_or_assign(engMgt->getType(), engMgt);
176 profiles.insert_or_assign(advEngMgt->getType(), advEngMgt);
177 profiles.insert_or_assign(root->getType(), root);
178 profiles.insert_or_assign(deckMgt->getType(), deckMgt);
179 profiles.insert_or_assign(advDeckMgt->getType(), advDeckMgt);
180 profiles.insert_or_assign(monitor->getType(), monitor);
181 }
182
183private:
184 struct Sections
185 {
186 static constexpr std::string_view general {"General"};
187 static constexpr std::string_view profiles {"Profiles"};
188 static constexpr std::string_view profile {"Profile"};
189 static constexpr std::string_view passwordRequirements {"PasswordRequirements"};
190 static constexpr std::string_view passwordLifecycle {"PasswordLifecycle"};
191 static constexpr std::string_view loginLockout {"LoginLockout"};
192 static constexpr std::string_view cloudSettings {"Cloud"};
193 static constexpr std::string_view timeSyncSettings {"TimeSync"};
194 static constexpr std::string_view deadManSettings {"DeadMan"};
195 };
196 struct Keys
197 {
198 static constexpr std::string_view enablePasswordConstraints {"EnablePasswordConstraints"};
199 static constexpr std::string_view printerDevice {"PrinterDevice"};
200 static constexpr std::string_view allowRemoteConnection {"AllowRemoteConnection"};
201 static constexpr std::string_view enableTrendCurves {"EnableTrendCurves"};
202 static constexpr std::string_view enableChannelLogs {"EnableChannelLogs"};
203 static constexpr std::string_view isDemoMode {"IsDemoMode"};
204 static constexpr std::string_view showShipyardTag {"ShowShipyardTag"};
205 static constexpr std::string_view maxLogs {"MaxNumberLogs"};
206 static constexpr std::string_view includeDiamar1Functionalities {"IncludeDiamar1Functionalities"};
207 };
209 {
210 static constexpr bool enablePasswordConstraints {false};
211 static constexpr std::string defaultPrinter {};
212 static constexpr bool allowRemoteConnection {true};
213 static constexpr bool enableTrendCurves {true};
214 static constexpr bool enableChannelLogs {false};
215 static constexpr bool isDemoMode {false};
216 static constexpr bool showShipyardTag {false};
217 static constexpr uint64_t maxLogs {10};
218 static constexpr bool includeDiamar1Functionalities {false};
219 };
220};
221
222}// namespace iv::diamar
223
224#endif//IV_SRC_DIAMAR_SETTINGS_HPP_
Definition xmlFile.hpp:15
T getAttribute(const std::string_view key, T defaultValue) const
Definition xmlFile.hpp:33
iv::file::xml::node getChild(std::string_view name) const
Definition xmlFile.cpp:43
bool addAttribute(const std::string_view key, T value)
Definition xmlFile.hpp:77
bool emptyNode() const
Definition xmlFile.cpp:18
iv::file::xml::node appendChild(std::string_view name)
Definition xmlFile.cpp:53
Definition DataLoggerManager.cpp:10
Definition Settings.hpp:209
static constexpr bool enableTrendCurves
Definition Settings.hpp:213
static constexpr bool showShipyardTag
Definition Settings.hpp:216
static constexpr bool enableChannelLogs
Definition Settings.hpp:214
static constexpr uint64_t maxLogs
Definition Settings.hpp:217
static constexpr bool includeDiamar1Functionalities
Definition Settings.hpp:218
static constexpr bool enablePasswordConstraints
Definition Settings.hpp:210
static constexpr bool isDemoMode
Definition Settings.hpp:215
static constexpr std::string defaultPrinter
Definition Settings.hpp:211
static constexpr bool allowRemoteConnection
Definition Settings.hpp:212
Definition Settings.hpp:197
static constexpr std::string_view showShipyardTag
Definition Settings.hpp:204
static constexpr std::string_view printerDevice
Definition Settings.hpp:199
static constexpr std::string_view includeDiamar1Functionalities
Definition Settings.hpp:206
static constexpr std::string_view enableChannelLogs
Definition Settings.hpp:202
static constexpr std::string_view allowRemoteConnection
Definition Settings.hpp:200
static constexpr std::string_view enablePasswordConstraints
Definition Settings.hpp:198
static constexpr std::string_view maxLogs
Definition Settings.hpp:205
static constexpr std::string_view isDemoMode
Definition Settings.hpp:203
static constexpr std::string_view enableTrendCurves
Definition Settings.hpp:201
Definition Settings.hpp:185
static constexpr std::string_view general
Definition Settings.hpp:186
static constexpr std::string_view loginLockout
Definition Settings.hpp:191
static constexpr std::string_view passwordRequirements
Definition Settings.hpp:189
static constexpr std::string_view passwordLifecycle
Definition Settings.hpp:190
static constexpr std::string_view profile
Definition Settings.hpp:188
static constexpr std::string_view timeSyncSettings
Definition Settings.hpp:193
static constexpr std::string_view cloudSettings
Definition Settings.hpp:192
static constexpr std::string_view deadManSettings
Definition Settings.hpp:194
static constexpr std::string_view profiles
Definition Settings.hpp:187
Definition Settings.hpp:17
bool enableTrendCurves
Definition Settings.hpp:34
iv::model::DeadManSettings deadManSettings
Definition Settings.hpp:29
void innitDefaultProfiles()
Definition Settings.hpp:162
std::map< iv::diamar::eUserProfileType, std::shared_ptr< iv::diamar::UserProfile > > profiles
Definition Settings.hpp:22
bool save(iv::file::xml::node &nodeConfigDiamar) const
Definition Settings.hpp:92
std::vector< std::shared_ptr< iv::diamar::UserProfile > > getUsersWithPermissions()
Definition Settings.cpp:103
bool includeDiamar1Functionalities
Definition Settings.hpp:39
bool isDemoMode
Definition Settings.hpp:36
bool enablePasswordConstraints
Definition Settings.hpp:23
iv::model::LoginLockout loginLockout
Definition Settings.hpp:26
bool allowRemoteConnection
Definition Settings.hpp:33
iv::model::TimeSyncSettings timeSyncSettings
Definition Settings.hpp:28
bool showShipyardTag
Definition Settings.hpp:37
uint64_t maxLogs
Definition Settings.hpp:38
static bool validatePassword(const std::string_view &password, std::string *errorMsg)
Definition Settings.cpp:22
static void actionUnsuccessfulLoginSettingsChanged()
Definition Settings.cpp:162
iv::model::PasswordRequirements passwordRequirements
Definition Settings.hpp:24
static void actionUserPasswordChanged()
bool enableChannelLogs
Definition Settings.hpp:35
static void actionPasswordLifecycleChanged()
Definition Settings.cpp:143
bool load(const iv::file::xml::node &nodeConfigDiamar)
Definition Settings.hpp:46
iv::model::PasswordLifecycle passwordLifecycle
Definition Settings.hpp:25
Settings()
Definition Settings.cpp:10
static void actionPasswordRequirementsChanged()
Definition Settings.cpp:124
void update(const Settings &other)
Definition Settings.hpp:133
std::string printerDevice
Definition Settings.hpp:31
iv::model::CloudSettings cloudSettings
Definition Settings.hpp:27
Definition structs.hpp:168
bool save(iv::file::xml::node &nodeCloudSettings) const
Definition structs.cpp:395
bool load(const iv::file::xml::node &nodeCloudSettings)
Definition structs.cpp:381
Definition structs.hpp:358
bool save(iv::file::xml::node &nodeDeadManSettings) const
Definition structs.cpp:824
bool load(const iv::file::xml::node &nodeDeadManSettings)
Definition structs.cpp:798
Definition structs.hpp:134
bool load(const iv::file::xml::node &nodeLoginLockout)
Definition structs.cpp:315
bool save(iv::file::xml::node &nodeLoginLockout) const
Definition structs.cpp:324
Definition structs.hpp:99
bool save(iv::file::xml::node &nodePasswordLifecycle) const
Definition structs.cpp:261
bool load(const iv::file::xml::node &nodePasswordLifecycle)
Definition structs.cpp:250
Definition structs.hpp:62
bool save(iv::file::xml::node &nodePasswordRequirements) const
Definition structs.cpp:188
bool load(const iv::file::xml::node &nodePasswordRequirements)
Definition structs.cpp:175
Definition structs.hpp:305
bool save(iv::file::xml::node &nodeTimeSyncSettings) const
Definition structs.cpp:444
bool load(const iv::file::xml::node &nodeTimeSyncSettings)
Definition structs.cpp:417