1 #ifndef _ots_CorePropertySupervisorBase_h_
2 #define _ots_CorePropertySupervisorBase_h_
4 #include "otsdaq-core/ConfigurationInterface/ConfigurationManager.h"
5 #include "otsdaq-core/ConfigurationInterface/ConfigurationTree.h"
6 #include "otsdaq-core/Macros/CoutMacros.h"
7 #include "otsdaq-core/MessageFacility/MessageFacility.h"
8 #include "otsdaq-core/SupervisorInfo/AllSupervisorInfo.h"
9 #include "otsdaq-core/TableCore/TableGroupKey.h"
10 #include "otsdaq-core/TablePlugins/XDAQContextTable.h"
12 #include "otsdaq-core/WebUsersUtilities/WebUsers.h"
14 #pragma GCC diagnostic push
15 #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
16 #include <xdaq/Application.h>
17 #pragma GCC diagnostic pop
35 virtual void setSupervisorPropertyDefaults(
37 virtual void forceSupervisorPropertyValues(
void)
46 static void extractPermissionsMapFromString(
47 const std::string& permissionsString,
48 std::map<std::string, WebUsers::permissionLevel_t>& permissionsMap);
49 static bool doPermissionsGrantAccess(
50 std::map<std::string, WebUsers::permissionLevel_t>& permissionLevelsMap,
51 std::map<std::string, WebUsers::permissionLevel_t>& permissionThresholdsMap);
55 return theConfigurationManager_->getNode(
60 return getContextTreeNode().getNode(supervisorConfigurationPath_);
63 const std::string& getContextUID(
void)
const {
return supervisorContextUID_; }
64 const std::string& getSupervisorUID(
void)
const {
return supervisorApplicationUID_; }
65 const std::string& getSupervisorConfigurationPath(
void)
const
67 return supervisorConfigurationPath_;
71 const std::string supervisorClass_;
72 const std::string supervisorClassNoNamespace_;
77 std::string supervisorContextUID_;
78 std::string supervisorApplicationUID_;
79 std::string supervisorConfigurationPath_;
88 : allSetNames_({&CheckUserLockRequestTypes,
89 &RequireUserLockRequestTypes,
90 &AutomatedRequestTypes,
91 &AllowNoLoginRequestTypes,
92 &NoXmlWhiteSpaceRequestTypes,
97 const std::string UserPermissionsThreshold =
"UserPermissionsThreshold";
98 const std::string UserGroupsAllowed =
"UserGroupsAllowed";
99 const std::string UserGroupsDisallowed =
"UserGroupsDisallowed";
101 const std::string CheckUserLockRequestTypes =
"CheckUserLockRequestTypes";
102 const std::string RequireUserLockRequestTypes =
"RequireUserLockRequestTypes";
103 const std::string AutomatedRequestTypes =
"AutomatedRequestTypes";
104 const std::string AllowNoLoginRequestTypes =
"AllowNoLoginRequestTypes";
106 const std::string NoXmlWhiteSpaceRequestTypes =
"NoXmlWhiteSpaceRequestTypes";
107 const std::string NonXMLRequestTypes =
"NonXMLRequestTypes";
109 const std::set<const std::string*> allSetNames_;
110 } SUPERVISOR_PROPERTIES;
114 void checkSupervisorPropertySetup(
void);
115 volatile bool propertiesAreSetup_;
120 std::map<std::string, std::string> propertyMap_;
121 struct CoreSupervisorPropertyStruct
123 CoreSupervisorPropertyStruct()
124 : allSets_({&CheckUserLockRequestTypes,
125 &RequireUserLockRequestTypes,
126 &AutomatedRequestTypes,
127 &AllowNoLoginRequestTypes,
128 &NoXmlWhiteSpaceRequestTypes,
129 &NonXMLRequestTypes})
133 std::map<std::string, WebUsers::permissionLevel_t> UserPermissionsThreshold;
134 std::map<std::string, std::string> UserGroupsAllowed;
135 std::map<std::string, std::string> UserGroupsDisallowed;
137 std::set<std::string> CheckUserLockRequestTypes;
138 std::set<std::string> RequireUserLockRequestTypes;
139 std::set<std::string> AutomatedRequestTypes;
140 std::set<std::string> AllowNoLoginRequestTypes;
142 std::set<std::string> NoXmlWhiteSpaceRequestTypes;
143 std::set<std::string> NonXMLRequestTypes;
145 std::set<std::set<std::string>*> allSets_;
149 void resetPropertiesAreSetup(
void)
151 propertiesAreSetup_ =
false;
153 ConfigurationTree getSupervisorTreeNode(
void);
155 void loadUserSupervisorProperties(
void);
157 void setSupervisorProperty(
const std::string& propertyName,
const T& propertyValue)
159 std::stringstream ss;
161 setSupervisorProperty(propertyName, ss.str());
163 void setSupervisorProperty(
const std::string& propertyName,
164 const std::string& propertyValue);
166 void addSupervisorProperty(
const std::string& propertyName,
const T& propertyValue)
169 std::stringstream ss;
170 ss << propertyValue <<
" | " << getSupervisorProperty(propertyName);
171 setSupervisorProperty(propertyName, ss.str());
173 void addSupervisorProperty(
const std::string& propertyName,
174 const std::string& propertyValue);
176 T getSupervisorProperty(
const std::string& propertyName)
179 checkSupervisorPropertySetup();
181 auto it = propertyMap_.find(propertyName);
182 if(it == propertyMap_.end())
184 __SS__ <<
"Could not find property named " << propertyName << __E__;
187 return StringMacros::validateValueForDefaultStringDataType<T>(it->second);
189 std::string getSupervisorProperty(
const std::string& propertyName);
190 WebUsers::permissionLevel_t getSupervisorPropertyUserPermissionsThreshold(
191 const std::string& requestType);