00001 #ifndef _ots_Utilities_RemoteWebUsers_h
00002 #define _ots_Utilities_RemoteWebUsers_h
00003
00004 #include "xgi/Method.h"
00005 #include "otsdaq-core/SOAPUtilities/SOAPMessenger.h"
00006 #include "otsdaq-core/ConfigurationDataFormats/ConfigurationGroupKey.h"
00007
00008 #include <string>
00009 #include <iostream>
00010
00011
00012
00013 namespace ots
00014 {
00015
00016 class SupervisorDescriptorInfo;
00017 class HttpXmlDocument;
00018
00019 class RemoteWebUsers : public SOAPMessenger
00020 {
00021 public:
00022 RemoteWebUsers(xdaq::Application *application);
00023
00024 enum
00025 {
00026 COOKIE_CODE_LENGTH = 512,
00027 };
00028
00029 static const std::string REQ_NO_LOGIN_RESPONSE;
00030 static const std::string REQ_NO_PERMISSION_RESPONSE;
00031 static const std::string REQ_USER_LOCKOUT_RESPONSE;
00032 static const std::string REQ_LOCK_REQUIRED_RESPONSE;
00033
00034
00035
00036
00037 bool xmlLoginGateway(
00038 cgicc::Cgicc &cgi,
00039 std::ostringstream *out,
00040 HttpXmlDocument *xmldoc,
00041 const SupervisorDescriptorInfo &theSupervisorsDescriptorInfo,
00042 uint8_t *userPermissions = 0,
00043 const bool refresh = true,
00044 const uint8_t permissionsThreshold = 1,
00045 const bool checkLock = false,
00046 const bool lockRequired = false,
00047 std::string *userWithLock = 0,
00048 std::string *username = 0,
00049 std::string *displayName = 0,
00050 uint64_t *activeSessionIndex = 0);
00051
00052
00053 std::string getActiveUserList (const xdaq::ApplicationDescriptor* supervisorDescriptor);
00054 void sendSystemMessage (const xdaq::ApplicationDescriptor* supervisorDescriptor, const std::string &toUser, const std::string& msg);
00055 void makeSystemLogbookEntry (const xdaq::ApplicationDescriptor* supervisorDescriptor, const std::string &entryText);
00056 std::pair<std::string , ConfigurationGroupKey> getLastConfigGroup (const xdaq::ApplicationDescriptor* supervisorDescriptor, const std::string &actionOfLastGroup, std::string &actionTimeString);
00057
00058 bool isWizardMode (const SupervisorDescriptorInfo& theSupervisorsDescriptorInfo);
00059
00060 private:
00061 bool cookieCodeIsActiveForRequest(
00062 const xdaq::ApplicationDescriptor* supervisorDescriptor,
00063 std::string& cookieCode,
00064 uint8_t* userPermissions = 0,
00065 std::string ip = "0",
00066 bool refresh = true,
00067 std::string* userWithLock = 0);
00068
00069 bool getUserInfoForCookie(
00070 const xdaq::ApplicationDescriptor* supervisorDescriptor,
00071 std::string& cookieCode,
00072 std::string* userName,
00073 std::string* displayName = 0,
00074 uint64_t* activeSessionIndex = 0);
00075
00076
00077
00078 std::string ActiveUserList_;
00079 time_t ActiveUserLastUpdateTime_;
00080 enum
00081 {
00082 ACTIVE_USERS_UPDATE_THRESHOLD = 10,
00083 };
00084
00085 std::string tmpUserWithLock_;
00086 uint8_t tmpUserPermissions_;
00087 };
00088
00089 const std::string RemoteWebUsers::REQ_NO_LOGIN_RESPONSE = "NoLogin";
00090 const std::string RemoteWebUsers::REQ_NO_PERMISSION_RESPONSE = "NoPermission";
00091 const std::string RemoteWebUsers::REQ_USER_LOCKOUT_RESPONSE = "UserLockout";
00092 const std::string RemoteWebUsers::REQ_LOCK_REQUIRED_RESPONSE = "LockRequired";
00093
00094 }
00095
00096 #endif