1 #include "otsdaq-core/WebUsersUtilities/RemoteWebUsers.h"
3 #include "otsdaq-core/CgiDataUtilities/CgiDataUtilities.h"
4 #include "otsdaq-core/SOAPUtilities/SOAPCommand.h"
5 #include "otsdaq-core/SOAPUtilities/SOAPParameters.h"
6 #include "otsdaq-core/SOAPUtilities/SOAPUtilities.h"
7 #include "otsdaq-core/XmlUtilities/HttpXmlDocument.h"
13 #include "otsdaq-core/SupervisorInfo/AllSupervisorInfo.h"
18 #define __MF_SUBJECT__ "RemoteWebUsers"
94 RemoteWebUsers::RemoteWebUsers(xdaq::Application* application)
97 ActiveUserLastUpdateTime_ = 0;
106 std::ostringstream* out,
113 WebUsers::initializeRequestUserInfo(cgi, userInfo);
120 XDAQ_CONST_CALL xdaq::ApplicationDescriptor* gatewaySupervisor;
123 xoap::MessageReference retMsg;
137 if(allSupervisorInfo.isWizardMode())
140 std::string sequence =
141 CgiDataUtilities::getOrPostData(cgi,
"sequence");
143 if(!sequence.length())
145 __COUT_ERR__ <<
"Invalid access attempt (@" << userInfo.ip_ <<
")."
147 *out << WebUsers::REQ_NO_LOGIN_RESPONSE;
149 goto HANDLE_ACCESS_FAILURE;
154 gatewaySupervisor = allSupervisorInfo.getWizardInfo().getDescriptor();
155 if(!gatewaySupervisor)
157 __COUT_ERR__ <<
"Missing wizard supervisor." << std::endl;
158 *out << WebUsers::REQ_NO_LOGIN_RESPONSE;
160 goto HANDLE_ACCESS_FAILURE;
163 parameters.addParameter(
"sequence", sequence);
164 parameters.addParameter(
"IPAddress", userInfo.ip_);
165 retMsg = SOAPMessenger::sendWithSOAPReply(
166 gatewaySupervisor,
"SupervisorSequenceCheck", parameters);
168 parameters.addParameter(
"Permissions");
169 SOAPUtilities::receive(retMsg, parameters);
171 userInfo.setGroupPermissionLevels(parameters.getValue(
"Permissions"));
173 if(WebUsers::checkRequestAccess(
174 cgi, out, xmldoc, userInfo,
true ))
177 goto HANDLE_ACCESS_FAILURE;
200 gatewaySupervisor = allSupervisorInfo.getGatewayInfo().getDescriptor();
202 if(!gatewaySupervisor)
204 __COUT_ERR__ <<
"Missing gateway supervisor." << std::endl;
205 *out << WebUsers::REQ_NO_LOGIN_RESPONSE;
206 goto HANDLE_ACCESS_FAILURE;
212 parameters.addParameter(
"CookieCode", userInfo.cookieCode_);
213 parameters.addParameter(
"RefreshOption", userInfo.automatedCommand_ ?
"0" :
"1");
214 parameters.addParameter(
"IPAddress", userInfo.ip_);
216 retMsg = SOAPMessenger::sendWithSOAPReply(
217 gatewaySupervisor,
"SupervisorCookieCheck", parameters);
220 parameters.addParameter(
"CookieCode");
221 parameters.addParameter(
"Permissions");
222 parameters.addParameter(
"UserGroups");
223 parameters.addParameter(
"UserWithLock");
224 parameters.addParameter(
"Username");
225 parameters.addParameter(
"DisplayName");
226 parameters.addParameter(
"ActiveSessionIndex");
227 SOAPUtilities::receive(retMsg, parameters);
233 userInfo.setGroupPermissionLevels(parameters.getValue(
"Permissions"));
234 userInfo.cookieCode_ = parameters.getValue(
"CookieCode");
235 userInfo.username_ = parameters.getValue(
"Username");
236 userInfo.displayName_ = parameters.getValue(
"DisplayName");
237 userInfo.usernameWithLock_ = parameters.getValue(
"UserWithLock");
238 userInfo.activeUserSessionIndex_ =
239 strtoul(parameters.getValue(
"ActiveSessionIndex").c_str(), 0, 0);
241 if(!WebUsers::checkRequestAccess(cgi, out, xmldoc, userInfo))
242 goto HANDLE_ACCESS_FAILURE;
273 HANDLE_ACCESS_FAILURE:
276 if(!userInfo.automatedCommand_)
277 __COUT_ERR__ <<
"Failed request (requestType = " << userInfo.requestType_
278 <<
"): " << out->str() << __E__;
433 std::string RemoteWebUsers::getActiveUserList(
434 XDAQ_CONST_CALL xdaq::ApplicationDescriptor* supervisorDescriptor)
436 if(1 || time(0) - ActiveUserLastUpdateTime_ >
437 ACTIVE_USERS_UPDATE_THRESHOLD)
439 __COUT__ <<
"Need to update " << std::endl;
441 xoap::MessageReference retMsg = ots::SOAPMessenger::sendWithSOAPReply(
442 supervisorDescriptor,
"SupervisorGetActiveUsers");
445 SOAPUtilities::receive(retMsg, retParameters);
447 ActiveUserLastUpdateTime_ = time(0);
448 return (ActiveUserList_ = retParameters.getValue(
"UserList"));
451 return ActiveUserList_;
460 std::pair<std::string ,
TableGroupKey> RemoteWebUsers::getLastConfigGroup(
461 XDAQ_CONST_CALL xdaq::ApplicationDescriptor* supervisorDescriptor,
462 const std::string& actionOfLastGroup,
463 std::string& actionTimeString)
465 actionTimeString =
"";
466 xoap::MessageReference retMsg = ots::SOAPMessenger::sendWithSOAPReply(
467 supervisorDescriptor,
468 "SupervisorLastConfigGroupRequest",
472 retParameters.addParameter(
"GroupName");
473 retParameters.addParameter(
"GroupKey");
474 retParameters.addParameter(
"GroupAction");
475 retParameters.addParameter(
"GroupActionTime");
476 SOAPUtilities::receive(retMsg, retParameters);
479 if(retParameters.getValue(
"GroupAction") !=
482 __COUT_WARN__ <<
"Returned group action '"
483 << retParameters.getValue(
"GroupAction")
484 <<
"' does not match requested group action '" << actionOfLastGroup
485 <<
".'" << std::endl;
490 theGroup.first = retParameters.getValue(
"GroupName");
491 theGroup.second = strtol(retParameters.getValue(
"GroupKey").c_str(), 0, 0);
492 actionTimeString = retParameters.getValue(
"GroupActionTime");
501 bool RemoteWebUsers::getUserInfoForCookie(
502 XDAQ_CONST_CALL xdaq::ApplicationDescriptor* supervisorDescriptor,
503 std::string& cookieCode,
504 std::string* userName,
505 std::string* displayName,
506 uint64_t* activeSessionIndex)
508 __COUT__ << std::endl;
509 if(cookieCode.length() != WebUsers::COOKIE_CODE_LENGTH)
514 xoap::MessageReference retMsg =
515 SOAPMessenger::sendWithSOAPReply(supervisorDescriptor,
516 "SupervisorGetUserInfo",
520 retParameters.addParameter(
"Username");
521 retParameters.addParameter(
"DisplayName");
522 retParameters.addParameter(
"ActiveSessionIndex");
523 SOAPUtilities::receive(retMsg, retParameters);
525 *userName = retParameters.getValue(
"Username");
527 *displayName = retParameters.getValue(
"DisplayName");
528 if(activeSessionIndex)
529 *activeSessionIndex =
530 strtoul(retParameters.getValue(
"ActiveSessionIndex").c_str(), 0, 0);
532 __COUT__ <<
"userName " << *userName << std::endl;
540 bool RemoteWebUsers::cookieCodeIsActiveForRequest(
541 XDAQ_CONST_CALL xdaq::ApplicationDescriptor* supervisorDescriptor,
542 std::string& cookieCode,
543 uint8_t* userPermissions,
546 std::string* userWithLock)
549 if(cookieCode.length() != WebUsers::COOKIE_CODE_LENGTH)
555 parameters.addParameter(
"CookieCode", cookieCode);
556 parameters.addParameter(
"RefreshOption", refreshCookie ?
"1" :
"0");
559 xoap::MessageReference retMsg = SOAPMessenger::sendWithSOAPReply(
560 supervisorDescriptor,
"SupervisorCookieCheck", parameters);
563 retParameters.addParameter(
"CookieCode");
564 retParameters.addParameter(
"Permissions");
565 retParameters.addParameter(
"UserWithLock");
566 SOAPUtilities::receive(retMsg, retParameters);
569 *userWithLock = retParameters.getValue(
"UserWithLock");
571 sscanf(retParameters.getValue(
"Permissions").c_str(),
575 cookieCode = retParameters.getValue(
"CookieCode");
577 return cookieCode.length() ==
578 WebUsers::COOKIE_CODE_LENGTH;
585 void RemoteWebUsers::sendSystemMessage(
586 XDAQ_CONST_CALL xdaq::ApplicationDescriptor* supervisorDescriptor,
587 const std::string& toUser,
588 const std::string& msg)
591 parameters.addParameter(
"ToUser", toUser);
592 parameters.addParameter(
"Message", msg);
594 xoap::MessageReference retMsg = SOAPMessenger::sendWithSOAPReply(
595 supervisorDescriptor,
"SupervisorSystemMessage", parameters);
601 void RemoteWebUsers::makeSystemLogbookEntry(
602 XDAQ_CONST_CALL xdaq::ApplicationDescriptor* supervisorDescriptor,
603 const std::string& entryText)
606 parameters.addParameter(
"EntryText", entryText);
608 xoap::MessageReference retMsg = SOAPMessenger::sendWithSOAPReply(
609 supervisorDescriptor,
"SupervisorSystemLogbookEntry", parameters);
bool xmlRequestToGateway(cgicc::Cgicc &cgi, std::ostringstream *out, HttpXmlDocument *xmldoc, const AllSupervisorInfo &allSupervisorInfo, WebUsers::RequestUserInfo &userInfo)