1 #include "otsdaq-core/WebUsersUtilities/RemoteWebUsers.h"
3 #include "otsdaq-core/SOAPUtilities/SOAPParameters.h"
4 #include "otsdaq-core/SOAPUtilities/SOAPUtilities.h"
5 #include "otsdaq-core/SOAPUtilities/SOAPCommand.h"
6 #include "otsdaq-core/XmlUtilities/HttpXmlDocument.h"
7 #include "otsdaq-core/CgiDataUtilities/CgiDataUtilities.h"
13 #include "otsdaq-core/SupervisorInfo/AllSupervisorInfo.h"
19 #define __MF_SUBJECT__ "RemoteWebUsers"
88 RemoteWebUsers::RemoteWebUsers(xdaq::Application* application)
91 ActiveUserLastUpdateTime_ = 0;
98 bool RemoteWebUsers::xmlRequestToGateway(
100 std::ostringstream* out,
107 WebUsers::initializeRequestUserInfo(cgi,userInfo);
114 XDAQ_CONST_CALL xdaq::ApplicationDescriptor* gatewaySupervisor;
117 xoap::MessageReference retMsg;
130 if(allSupervisorInfo.isWizardMode())
133 std::string sequence = CgiDataUtilities::getOrPostData(cgi,
"sequence");
135 if(!sequence.length())
137 __COUT__ <<
"Invalid attempt (@" << userInfo.ip_ <<
")." << std::endl;
138 *out << WebUsers::REQ_NO_LOGIN_RESPONSE;
140 goto HANDLE_ACCESS_FAILURE;
145 gatewaySupervisor = allSupervisorInfo.getWizardInfo().getDescriptor();
146 if(!gatewaySupervisor)
148 __COUT_ERR__ <<
"Missing wizard supervisor." << std::endl;
149 *out << WebUsers::REQ_NO_LOGIN_RESPONSE;
151 goto HANDLE_ACCESS_FAILURE;
154 parameters.addParameter(
"sequence",sequence);
155 parameters.addParameter(
"IPAddress",userInfo.ip_);
156 retMsg = SOAPMessenger::sendWithSOAPReply(gatewaySupervisor,
157 "SupervisorSequenceCheck", parameters);
159 parameters.addParameter(
"Permissions");
160 receive(retMsg, parameters);
162 userInfo.setGroupPermissionLevels(parameters.getValue(
"Permissions"));
164 if(WebUsers::checkRequestAccess(cgi,out,xmldoc,userInfo,
true ))
167 goto HANDLE_ACCESS_FAILURE;
188 gatewaySupervisor = allSupervisorInfo.getGatewayInfo().getDescriptor();
190 if(!gatewaySupervisor)
192 __COUT_ERR__ <<
"Missing gateway supervisor." << std::endl;
193 *out << WebUsers::REQ_NO_LOGIN_RESPONSE;
194 goto HANDLE_ACCESS_FAILURE;
200 parameters.addParameter(
"CookieCode",userInfo.cookieCode_);
201 parameters.addParameter(
"RefreshOption",userInfo.automatedCommand_?
"0":
"1");
202 parameters.addParameter(
"IPAddress",userInfo.ip_);
204 retMsg = SOAPMessenger::sendWithSOAPReply(gatewaySupervisor,
205 "SupervisorCookieCheck", parameters);
208 parameters.addParameter(
"CookieCode");
209 parameters.addParameter(
"Permissions");
210 parameters.addParameter(
"UserGroups");
211 parameters.addParameter(
"UserWithLock");
212 parameters.addParameter(
"Username");
213 parameters.addParameter(
"DisplayName");
214 parameters.addParameter(
"ActiveSessionIndex");
215 receive(retMsg, parameters);
219 userInfo.setGroupPermissionLevels(parameters.getValue(
"Permissions"));
220 userInfo.cookieCode_ = parameters.getValue(
"CookieCode");
221 userInfo.username_ = parameters.getValue(
"Username");
222 userInfo.displayName_ = parameters.getValue(
"DisplayName");
223 userInfo.usernameWithLock_ = parameters.getValue(
"UserWithLock");
224 userInfo.activeUserSessionIndex_ = strtoul(parameters.getValue(
"ActiveSessionIndex").c_str(),0,0);
226 if(!WebUsers::checkRequestAccess(cgi,out,xmldoc,userInfo))
227 goto HANDLE_ACCESS_FAILURE;
257 HANDLE_ACCESS_FAILURE:
260 if(!userInfo.automatedCommand_)
261 __COUT_ERR__ <<
"Failed request (requestType = " << userInfo.requestType_ <<
262 "): " << out->str() << __E__;
417 std::string RemoteWebUsers::getActiveUserList(XDAQ_CONST_CALL xdaq::ApplicationDescriptor* supervisorDescriptor)
420 if(1 || time(0) - ActiveUserLastUpdateTime_ > ACTIVE_USERS_UPDATE_THRESHOLD)
423 __COUT__ <<
"Need to update " << std::endl;
425 xoap::MessageReference retMsg = ots::SOAPMessenger::sendWithSOAPReply(supervisorDescriptor,
"SupervisorGetActiveUsers");
429 receive(retMsg, retParameters);
431 ActiveUserLastUpdateTime_ = time(0);
432 return (ActiveUserList_ = retParameters.getValue(
"UserList"));
435 return ActiveUserList_;
444 XDAQ_CONST_CALL xdaq::ApplicationDescriptor* supervisorDescriptor,
445 const std::string &actionOfLastGroup,
446 std::string &actionTimeString)
448 actionTimeString =
"";
449 xoap::MessageReference retMsg = ots::SOAPMessenger::sendWithSOAPReply(
450 supervisorDescriptor,
"SupervisorLastConfigGroupRequest",
455 retParameters.addParameter(
"GroupName");
456 retParameters.addParameter(
"GroupKey");
457 retParameters.addParameter(
"GroupAction");
458 retParameters.addParameter(
"GroupActionTime");
459 receive(retMsg, retParameters);
462 if(retParameters.getValue(
"GroupAction") != actionOfLastGroup)
464 __COUT_WARN__ <<
"Returned group action '" << retParameters.getValue(
"GroupAction") <<
465 "' does not match requested group action '" << actionOfLastGroup <<
".'" << std::endl;
470 theGroup.first = retParameters.getValue(
"GroupName");
471 theGroup.second = strtol(retParameters.getValue(
"GroupKey").c_str(),0,0);
472 actionTimeString = retParameters.getValue(
"GroupActionTime");
481 bool RemoteWebUsers::getUserInfoForCookie(XDAQ_CONST_CALL xdaq::ApplicationDescriptor* supervisorDescriptor,
482 std::string &cookieCode, std::string *userName, std::string *displayName, uint64_t *activeSessionIndex)
484 __COUT__ << std::endl;
485 if(cookieCode.length() != WebUsers::COOKIE_CODE_LENGTH)
return false;
489 xoap::MessageReference retMsg = SOAPMessenger::sendWithSOAPReply(supervisorDescriptor,
"SupervisorGetUserInfo",
SOAPParameters(
"CookieCode",cookieCode));
492 retParameters.addParameter(
"Username");
493 retParameters.addParameter(
"DisplayName");
494 retParameters.addParameter(
"ActiveSessionIndex");
495 receive(retMsg, retParameters);
496 if(userName) *userName = retParameters.getValue(
"Username");
497 if(displayName) *displayName = retParameters.getValue(
"DisplayName");
498 if(activeSessionIndex) *activeSessionIndex = strtoul(retParameters.getValue(
"ActiveSessionIndex").c_str(),0,0);
500 __COUT__ <<
"userName " << *userName << std::endl;
508 bool RemoteWebUsers::cookieCodeIsActiveForRequest(XDAQ_CONST_CALL xdaq::ApplicationDescriptor* supervisorDescriptor,
509 std::string &cookieCode, uint8_t *userPermissions, std::string ip,
bool refreshCookie, std::string *userWithLock)
512 if(cookieCode.length() != WebUsers::COOKIE_CODE_LENGTH)
return false;
517 parameters.addParameter(
"CookieCode",cookieCode);
518 parameters.addParameter(
"RefreshOption",refreshCookie?
"1":
"0");
521 xoap::MessageReference retMsg = SOAPMessenger::sendWithSOAPReply(supervisorDescriptor,
"SupervisorCookieCheck", parameters);
525 retParameters.addParameter(
"CookieCode");
526 retParameters.addParameter(
"Permissions");
527 retParameters.addParameter(
"UserWithLock");
528 receive(retMsg, retParameters);
532 if(userWithLock) *userWithLock = retParameters.getValue(
"UserWithLock");
533 if(userPermissions) sscanf(retParameters.getValue(
"Permissions").c_str(),
"%hhu",userPermissions);
535 cookieCode = retParameters.getValue(
"CookieCode");
537 return cookieCode.length() == WebUsers::COOKIE_CODE_LENGTH;
543 void RemoteWebUsers::sendSystemMessage(XDAQ_CONST_CALL xdaq::ApplicationDescriptor* supervisorDescriptor,
const std::string& toUser,
const std::string& msg)
546 parameters.addParameter(
"ToUser" , toUser);
547 parameters.addParameter(
"Message", msg);
549 xoap::MessageReference retMsg = SOAPMessenger::sendWithSOAPReply(supervisorDescriptor,
"SupervisorSystemMessage",parameters);
556 void RemoteWebUsers::makeSystemLogbookEntry(XDAQ_CONST_CALL xdaq::ApplicationDescriptor* supervisorDescriptor,
const std::string& entryText)
559 parameters.addParameter(
"EntryText", entryText);
561 xoap::MessageReference retMsg = SOAPMessenger::sendWithSOAPReply(supervisorDescriptor,
"SupervisorSystemLogbookEntry",parameters);