otsdaq  v2_00_00
RemoteWebUsers.h
1 #ifndef _ots_Utilities_RemoteWebUsers_h
2 #define _ots_Utilities_RemoteWebUsers_h
3 
4 #include "xgi/Method.h" //for cgicc::Cgicc
5 #include "otsdaq-core/SOAPUtilities/SOAPMessenger.h" //for xdaq::ApplicationDescriptor
6 #include "otsdaq-core/ConfigurationDataFormats/ConfigurationGroupKey.h" //for ConfigurationGroupKey
7 
8 #include <string>
9 #include <iostream>
10 
11 //TODO -- include IP address handling!?
12 
13 namespace ots
14 {
15 
16 class AllSupervisorInfo;
17 class HttpXmlDocument;
18 
20 {
21 public:
22  RemoteWebUsers(xdaq::Application *application);
23 
24  enum
25  {
26  COOKIE_CODE_LENGTH = 512,
27  };
28 
29  static const std::string REQ_NO_LOGIN_RESPONSE;
30  static const std::string REQ_NO_PERMISSION_RESPONSE;
31  static const std::string REQ_USER_LOCKOUT_RESPONSE;
32  static const std::string REQ_LOCK_REQUIRED_RESPONSE;
33  static const std::string REQ_ALLOW_NO_USER;
34 
35 
36  //for external supervisors to check with Supervisor for login
37  //if false, user code should just return.. out is handled on false; on true, out is untouched
38  bool xmlLoginGateway(
39  cgicc::Cgicc& cgi,
40  std::ostringstream* out,
41  HttpXmlDocument* xmldoc,
42  const AllSupervisorInfo& allSupervisorInfo,
43  uint8_t* userPermissions = 0,
44  const bool refresh = true,
45  const uint8_t permissionsThreshold = 1,
46  const bool checkLock = false,
47  const bool lockRequired = false,
48  std::string* userWithLock = 0,
49  std::string* username = 0,
50  std::string* displayName = 0,
51  uint64_t* activeSessionIndex = 0,
52  const bool allowNoUser = false);
53 
54 
55  std::string getActiveUserList (XDAQ_CONST_CALL xdaq::ApplicationDescriptor* supervisorDescriptor);
56  void sendSystemMessage (XDAQ_CONST_CALL xdaq::ApplicationDescriptor* supervisorDescriptor, const std::string &toUser, const std::string& msg);
57  void makeSystemLogbookEntry (XDAQ_CONST_CALL xdaq::ApplicationDescriptor* supervisorDescriptor, const std::string &entryText);
58  std::pair<std::string /*group name*/, ConfigurationGroupKey> getLastConfigGroup (XDAQ_CONST_CALL xdaq::ApplicationDescriptor* supervisorDescriptor, const std::string &actionOfLastGroup, std::string &actionTimeString); //actionOfLastGroup = "Configured" or "Started", for example
59 
60 private:
61  bool cookieCodeIsActiveForRequest(
62  XDAQ_CONST_CALL xdaq::ApplicationDescriptor* supervisorDescriptor,
63  std::string& cookieCode,
64  uint8_t* userPermissions = 0,
65  std::string ip = "0",
66  bool refresh = true,
67  std::string* userWithLock = 0);
68 
69  bool getUserInfoForCookie(
70  XDAQ_CONST_CALL xdaq::ApplicationDescriptor* supervisorDescriptor,
71  std::string& cookieCode,
72  std::string* userName,
73  std::string* displayName = 0,
74  uint64_t* activeSessionIndex = 0);
75 
76 
77  //"Active User List" associations ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
78  std::string ActiveUserList_;
79  time_t ActiveUserLastUpdateTime_;
80  enum
81  {
82  ACTIVE_USERS_UPDATE_THRESHOLD = 10, //10 seconds, min amount of time between Supervisor requests
83  };
84 
85  std::string tmpUserWithLock_;
86  uint8_t tmpUserPermissions_;
87 };
88 
89 
90 }
91 
92 #endif