otsdaq  v2_01_00
RemoteWebUsers.h
1 #ifndef _ots_Utilities_RemoteWebUsers_h
2 #define _ots_Utilities_RemoteWebUsers_h
3 
4 
5 #include "otsdaq-core/WebUsersUtilities/WebUsers.h"
6 #include "otsdaq-core/SOAPUtilities/SOAPMessenger.h" //for xdaq::ApplicationDescriptor
7 #include "otsdaq-core/ConfigurationDataFormats/ConfigurationGroupKey.h" //for ConfigurationGroupKey
8 
9 #include <string>
10 #include <iostream>
11 
12 namespace ots
13 {
14 
15 class AllSupervisorInfo;
16 class HttpXmlDocument;
17 
18 //RemoteWebUsers
19 // This class provides the functionality for client supervisors to check with the Gateway Supervisor
20 // to verify user access. It also provides the functionality for client supervisors to retreive user info.
22 {
23 public:
24  RemoteWebUsers(xdaq::Application *application);
25 
26  //for external supervisors to check with Supervisor for login
27  //if false, user request handling code should just return.. out is handled on false; on true, out is untouched
28  bool xmlRequestToGateway(
29  cgicc::Cgicc& cgi,
30  std::ostringstream* out,
31  HttpXmlDocument* xmldoc,
32  const AllSupervisorInfo& allSupervisorInfo,
33  WebUsers::RequestUserInfo& userInfo);
34 
35 
36 // uint8_t* userPermissions = 0,
37 // const uint8_t permissionsThreshold = 1,
38 // const bool allowNoUser = false,
39 // const std::set<std::string>& groupsAllowed = {},
40 // const std::set<std::string>& groupsDisallowed = {},
41 // const bool refreshCookie = true,
42 // const bool checkLock = false,
43 // const bool lockRequired = false,
44 // std::string* userWithLock = 0,
45 // std::string* username = 0,
46 // std::string* displayName = 0,
47 // std::string* userGroups = 0,
48 // uint64_t* activeSessionIndex = 0);
49 
50 
51  std::string getActiveUserList (XDAQ_CONST_CALL xdaq::ApplicationDescriptor* supervisorDescriptor);
52  void sendSystemMessage (XDAQ_CONST_CALL xdaq::ApplicationDescriptor* supervisorDescriptor, const std::string &toUser, const std::string& msg);
53  void makeSystemLogbookEntry (XDAQ_CONST_CALL xdaq::ApplicationDescriptor* supervisorDescriptor, const std::string &entryText);
54  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
55 
56 
57 private:
58  bool cookieCodeIsActiveForRequest(
59  XDAQ_CONST_CALL xdaq::ApplicationDescriptor* supervisorDescriptor,
60  std::string& cookieCode,
61  uint8_t* userPermissions = 0,
62  std::string ip = "0",
63  bool refreshCookie = true,
64  std::string* userWithLock = 0);
65 
66  bool getUserInfoForCookie(
67  XDAQ_CONST_CALL xdaq::ApplicationDescriptor* supervisorDescriptor,
68  std::string& cookieCode,
69  std::string* userName,
70  std::string* displayName = 0,
71  uint64_t* activeSessionIndex = 0);
72 
73 
74  //"Active User List" associations ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
75  std::string ActiveUserList_;
76  time_t ActiveUserLastUpdateTime_;
77  enum
78  {
79  ACTIVE_USERS_UPDATE_THRESHOLD = 10, //10 seconds, min amount of time between Supervisor requests
80  };
81 
82  std::string tmpUserWithLock_, tmpUserGroups_, tmpUsername_;
83  //uint8_t tmpUserPermissions_;
84 };
85 
86 
87 }
88 
89 #endif