otsdaq  v1_01_03
 All Classes Namespaces Functions
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 SupervisorDescriptorInfo;
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 
34 
35  //for external supervisors to check with Supervisor for login
36  //if false, user code should just return.. out is handled on false; on true, out is untouched
37  bool xmlLoginGateway(
38  cgicc::Cgicc &cgi,
39  std::ostringstream *out,
40  HttpXmlDocument *xmldoc,
41  const SupervisorDescriptorInfo &theSupervisorsDescriptorInfo,
42  uint8_t *userPermissions = 0,
43  const bool refresh = true,
44  const uint8_t permissionsThreshold = 1,
45  const bool checkLock = false,
46  const bool lockRequired = false,
47  std::string *userWithLock = 0,
48  std::string *username = 0,
49  std::string *displayName = 0,
50  uint64_t *activeSessionIndex = 0);
51 
52 
53  std::string getActiveUserList (const xdaq::ApplicationDescriptor* supervisorDescriptor);
54  void sendSystemMessage (const xdaq::ApplicationDescriptor* supervisorDescriptor, const std::string &toUser, const std::string& msg);
55  void makeSystemLogbookEntry (const xdaq::ApplicationDescriptor* supervisorDescriptor, const std::string &entryText);
56  std::pair<std::string /*group name*/, ConfigurationGroupKey> getLastConfigGroup (const xdaq::ApplicationDescriptor* supervisorDescriptor, const std::string &actionOfLastGroup, std::string &actionTimeString); //actionOfLastGroup = "Configured" or "Started", for example
57 
58  bool isWizardMode (const SupervisorDescriptorInfo& theSupervisorsDescriptorInfo);
59 
60 private:
61  bool cookieCodeIsActiveForRequest(
62  const 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  const 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 
86 const std::string RemoteWebUsers::REQ_NO_LOGIN_RESPONSE = "NoLogin";
87 const std::string RemoteWebUsers::REQ_NO_PERMISSION_RESPONSE = "NoPermission";
88 const std::string RemoteWebUsers::REQ_USER_LOCKOUT_RESPONSE = "UserLockout";
89 const std::string RemoteWebUsers::REQ_LOCK_REQUIRED_RESPONSE = "LockRequired";
90 
91 }
92 
93 #endif