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/TablePluginDataFormats/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
37 virtual void setSupervisorPropertyDefaults(
39 virtual void forceSupervisorPropertyValues(
void)
48 static void extractPermissionsMapFromString(
49 const std::string& permissionsString,
50 std::map<std::string, WebUsers::permissionLevel_t>& permissionsMap);
51 static bool doPermissionsGrantAccess(
52 std::map<std::string, WebUsers::permissionLevel_t>& permissionLevelsMap,
53 std::map<std::string, WebUsers::permissionLevel_t>& permissionThresholdsMap);
57 return theConfigurationManager_->getNode(
62 return getContextTreeNode().getNode(supervisorConfigurationPath_);
65 const std::string& getContextUID(
void)
const {
return supervisorContextUID_; }
66 const std::string& getSupervisorUID(
void)
const {
return supervisorApplicationUID_; }
67 const std::string& getSupervisorConfigurationPath(
void)
const
69 return supervisorConfigurationPath_;
75 const std::string supervisorClass_;
76 const std::string supervisorClassNoNamespace_;
81 std::string supervisorContextUID_;
82 std::string supervisorApplicationUID_;
83 std::string supervisorConfigurationPath_;
92 : allSetNames_({&CheckUserLockRequestTypes,
93 &RequireUserLockRequestTypes,
94 &AutomatedRequestTypes,
95 &AllowNoLoginRequestTypes,
96 &NoXmlWhiteSpaceRequestTypes,
101 const std::string UserPermissionsThreshold =
"UserPermissionsThreshold";
102 const std::string UserGroupsAllowed =
"UserGroupsAllowed";
103 const std::string UserGroupsDisallowed =
"UserGroupsDisallowed";
105 const std::string CheckUserLockRequestTypes =
"CheckUserLockRequestTypes";
106 const std::string RequireUserLockRequestTypes =
"RequireUserLockRequestTypes";
107 const std::string AutomatedRequestTypes =
"AutomatedRequestTypes";
108 const std::string AllowNoLoginRequestTypes =
"AllowNoLoginRequestTypes";
110 const std::string NoXmlWhiteSpaceRequestTypes =
"NoXmlWhiteSpaceRequestTypes";
111 const std::string NonXMLRequestTypes =
"NonXMLRequestTypes";
113 const std::set<const std::string*> allSetNames_;
114 } SUPERVISOR_PROPERTIES;
118 void checkSupervisorPropertySetup(
void);
119 volatile bool propertiesAreSetup_;
124 std::map<std::string, std::string> propertyMap_;
125 struct CoreSupervisorPropertyStruct
127 CoreSupervisorPropertyStruct()
128 : allSets_({&CheckUserLockRequestTypes,
129 &RequireUserLockRequestTypes,
130 &AutomatedRequestTypes,
131 &AllowNoLoginRequestTypes,
132 &NoXmlWhiteSpaceRequestTypes,
133 &NonXMLRequestTypes})
137 std::map<std::string, WebUsers::permissionLevel_t> UserPermissionsThreshold;
138 std::map<std::string, std::string> UserGroupsAllowed;
139 std::map<std::string, std::string> UserGroupsDisallowed;
141 std::set<std::string> CheckUserLockRequestTypes;
142 std::set<std::string> RequireUserLockRequestTypes;
143 std::set<std::string> AutomatedRequestTypes;
144 std::set<std::string> AllowNoLoginRequestTypes;
146 std::set<std::string> NoXmlWhiteSpaceRequestTypes;
147 std::set<std::string> NonXMLRequestTypes;
149 std::set<std::set<std::string>*> allSets_;
153 void resetPropertiesAreSetup(
void)
155 propertiesAreSetup_ =
false;
157 ConfigurationTree getSupervisorTreeNode(
void);
159 void loadUserSupervisorProperties(
void);
161 void setSupervisorProperty(
const std::string& propertyName,
const T& propertyValue)
163 std::stringstream ss;
165 setSupervisorProperty(propertyName, ss.str());
167 void setSupervisorProperty(
const std::string& propertyName,
168 const std::string& propertyValue);
170 void addSupervisorProperty(
const std::string& propertyName,
const T& propertyValue)
173 std::stringstream ss;
174 ss << propertyValue <<
" | " << getSupervisorProperty(propertyName);
175 setSupervisorProperty(propertyName, ss.str());
177 void addSupervisorProperty(
const std::string& propertyName,
178 const std::string& propertyValue);
180 T getSupervisorProperty(
const std::string& propertyName)
183 checkSupervisorPropertySetup();
185 auto it = propertyMap_.find(propertyName);
186 if(it == propertyMap_.end())
188 __SS__ <<
"Could not find property named " << propertyName << __E__;
191 return StringMacros::validateValueForDefaultStringDataType<T>(it->second);
193 std::string getSupervisorProperty(
const std::string& propertyName);
194 WebUsers::permissionLevel_t getSupervisorPropertyUserPermissionsThreshold(
195 const std::string& requestType);