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 AllSupervisorInfo;
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 static const std::string REQ_ALLOW_NO_USER;
00034
00035
00036
00037
00038 bool xmlLoginGateway(
00039 cgicc::Cgicc& cgi,
00040 std::ostringstream* out,
00041 HttpXmlDocument* xmldoc,
00042 const AllSupervisorInfo& allSupervisorInfo,
00043 uint8_t* userPermissions = 0,
00044 const bool refresh = true,
00045 const uint8_t permissionsThreshold = 1,
00046 const bool checkLock = false,
00047 const bool lockRequired = false,
00048 std::string* userWithLock = 0,
00049 std::string* username = 0,
00050 std::string* displayName = 0,
00051 uint64_t* activeSessionIndex = 0,
00052 const bool allowNoUser = false);
00053
00054
00055 std::string getActiveUserList (XDAQ_CONST_CALL xdaq::ApplicationDescriptor* supervisorDescriptor);
00056 void sendSystemMessage (XDAQ_CONST_CALL xdaq::ApplicationDescriptor* supervisorDescriptor, const std::string &toUser, const std::string& msg);
00057 void makeSystemLogbookEntry (XDAQ_CONST_CALL xdaq::ApplicationDescriptor* supervisorDescriptor, const std::string &entryText);
00058 std::pair<std::string , ConfigurationGroupKey> getLastConfigGroup (XDAQ_CONST_CALL xdaq::ApplicationDescriptor* supervisorDescriptor, const std::string &actionOfLastGroup, std::string &actionTimeString);
00059
00060 private:
00061 bool cookieCodeIsActiveForRequest(
00062 XDAQ_CONST_CALL 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 XDAQ_CONST_CALL 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
00090 }
00091
00092 #endif