|
|
@ -10,14 +10,88 @@ import time # sleep functions
|
|
|
|
import datetime # datetime functions
|
|
|
|
import datetime # datetime functions
|
|
|
|
import threading # Multi-threading
|
|
|
|
import threading # Multi-threading
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Generate CP
|
|
|
|
|
|
|
|
# Return {"Key":{"",""}}
|
|
|
|
|
|
|
|
def HiddenCPDictGenerate(inRequest, inGSettings):
|
|
|
|
|
|
|
|
lL = inGSettings["Logger"] # Alias for logger
|
|
|
|
|
|
|
|
# Create result JSON
|
|
|
|
|
|
|
|
lCPDict = {}
|
|
|
|
|
|
|
|
lRenderFunctionsRobotList = inGSettings["ControlPanelDict"]["RobotList"]
|
|
|
|
|
|
|
|
for lItem in lRenderFunctionsRobotList:
|
|
|
|
|
|
|
|
lUACBool = True # Check if render function is applicable User Access Rights (UAC)
|
|
|
|
|
|
|
|
if inGSettings["Server"]["AccessUsers"]["FlagCredentialsAsk"] is True:
|
|
|
|
|
|
|
|
lUserRights = inGSettings["Server"]["AccessUsers"]["RuleDomainUserDict"][(inRequest.OpenRPA["Domain"].upper(), inRequest.OpenRPA["User"].upper())]
|
|
|
|
|
|
|
|
if len(lUserRights["ControlPanelKeyAllowedList"]) > 0 and lItem["KeyStr"] not in lUserRights["ControlPanelKeyAllowedList"]:
|
|
|
|
|
|
|
|
lUACBool = False # UAC Check is not passed - False for user
|
|
|
|
|
|
|
|
if lUACBool: # Run function if UAC is TRUE
|
|
|
|
|
|
|
|
# Выполнить вызов и записать результат
|
|
|
|
|
|
|
|
# Call def (inRequest, inGSettings) or def (inGSettings)
|
|
|
|
|
|
|
|
lItemResultDict = None
|
|
|
|
|
|
|
|
lDEFSignature = signature(lItem["RenderFunction"]) # Get signature of the def
|
|
|
|
|
|
|
|
lDEFARGLen = len(lDEFSignature.parameters.keys()) # get count of the def args
|
|
|
|
|
|
|
|
try:
|
|
|
|
|
|
|
|
if lDEFARGLen == 1: # def (inGSettings)
|
|
|
|
|
|
|
|
lItemResultDict = lItem["RenderFunction"](inGSettings)
|
|
|
|
|
|
|
|
elif lDEFARGLen == 2: # def (inRequest, inGSettings)
|
|
|
|
|
|
|
|
lItemResultDict = lItem["RenderFunction"](inRequest, inGSettings)
|
|
|
|
|
|
|
|
elif lDEFARGLen == 0: # def ()
|
|
|
|
|
|
|
|
lItemResultDict = lItem["RenderFunction"]()
|
|
|
|
|
|
|
|
# RunFunction
|
|
|
|
|
|
|
|
# lResultJSON["RenderRobotList"].append(lItemResultDict)
|
|
|
|
|
|
|
|
lCPDict[lItem["KeyStr"]] = lItemResultDict
|
|
|
|
|
|
|
|
except Exception as e:
|
|
|
|
|
|
|
|
if lL: lL.exception(f"Error in control panel. CP item {lItem}. Exception is below")
|
|
|
|
|
|
|
|
return lCPDict
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Return {"Key":{"",""}}
|
|
|
|
|
|
|
|
def HiddenRDPDictGenerate(inRequest, inGSettings):
|
|
|
|
|
|
|
|
lRDPDict = {}
|
|
|
|
|
|
|
|
# Iterate throught the RDP list
|
|
|
|
|
|
|
|
for lRDPSessionKeyStrItem in inGSettings["RobotRDPActive"]["RDPList"]:
|
|
|
|
|
|
|
|
lRDPConfiguration = inGSettings["RobotRDPActive"]["RDPList"][
|
|
|
|
|
|
|
|
lRDPSessionKeyStrItem] # Get the configuration dict
|
|
|
|
|
|
|
|
lDataItemDict = {"SessionKeyStr": "", "SessionHexStr": "", "IsFullScreenBool": False,
|
|
|
|
|
|
|
|
"IsIgnoredBool": False} # Template
|
|
|
|
|
|
|
|
lDataItemDict["SessionKeyStr"] = lRDPSessionKeyStrItem # Session key str
|
|
|
|
|
|
|
|
lDataItemDict["SessionHexStr"] = lRDPConfiguration["SessionHex"] # Session Hex
|
|
|
|
|
|
|
|
lDataItemDict["IsFullScreenBool"] = True if lRDPSessionKeyStrItem == inGSettings["RobotRDPActive"][
|
|
|
|
|
|
|
|
"FullScreenRDPSessionKeyStr"] else False # Check the full screen for rdp window
|
|
|
|
|
|
|
|
lDataItemDict["IsIgnoredBool"] = lRDPConfiguration["SessionIsIgnoredBool"] # Is ignored
|
|
|
|
|
|
|
|
lRDPDict[lDataItemDict["SessionKeyStr"]].append(lDataItemDict)
|
|
|
|
|
|
|
|
return lRDPDict
|
|
|
|
|
|
|
|
|
|
|
|
#v1.2.0 Send data container to the client from the server
|
|
|
|
#v1.2.0 Send data container to the client from the server
|
|
|
|
# /pyOpenRPA/ServerData return {"HashStr" , "ServerDataDict"}
|
|
|
|
# /pyOpenRPA/ServerData return {"HashStr" , "ServerDataDict"}
|
|
|
|
# Client: mGlobal.pyOpenRPA.ServerDataHashStr
|
|
|
|
# Client: mGlobal.pyOpenRPA.ServerDataHashStr
|
|
|
|
# Client: mGlobal.pyOpenRPA.ServerDataDict
|
|
|
|
# Client: mGlobal.pyOpenRPA.ServerDataDict
|
|
|
|
def pyOpenRPA_ServerData(inRequest,inGSettings):
|
|
|
|
def pyOpenRPA_ServerData(inRequest,inGSettings):
|
|
|
|
lResult = {"HashStr": "", "ServerDataDict": {}}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Extract the hash value from request
|
|
|
|
|
|
|
|
lValueStr = None
|
|
|
|
|
|
|
|
if inRequest.headers.get('Content-Length') is not None:
|
|
|
|
|
|
|
|
lInputByteArrayLength = int(inRequest.headers.get('Content-Length'))
|
|
|
|
|
|
|
|
lInputByteArray = inRequest.rfile.read(lInputByteArrayLength)
|
|
|
|
|
|
|
|
# Превращение массива байт в объект
|
|
|
|
|
|
|
|
lValueStr = (lInputByteArray.decode('utf8'))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Generate ServerDataDict
|
|
|
|
|
|
|
|
lFlagDoGenerateBool = True
|
|
|
|
|
|
|
|
while lFlagDoGenerateBool:
|
|
|
|
|
|
|
|
lServerDataDict = {
|
|
|
|
|
|
|
|
"CPDict": HiddenCPDictGenerate(inRequest=inRequest, inGSettings=inGSettings),
|
|
|
|
|
|
|
|
"RDPDict": HiddenRDPDictGenerate(inRequest=inRequest, inGSettings=inGSettings),
|
|
|
|
|
|
|
|
"UserDict": {}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
# Create JSON
|
|
|
|
|
|
|
|
lServerDataDictJSONStr = json.dumps(lServerDataDict)
|
|
|
|
|
|
|
|
# Generate hash
|
|
|
|
|
|
|
|
lServerDataHashStr = str(hash(lServerDataDictJSONStr))
|
|
|
|
|
|
|
|
if lValueStr!=lServerDataHashStr: # Case if Hash is not equal
|
|
|
|
|
|
|
|
lFlagDoGenerateBool = False
|
|
|
|
|
|
|
|
else: # Case Hashes are equal
|
|
|
|
|
|
|
|
time.sleep(inGSettings["Client"]["Session"]["ControlPanelRefreshIntervalSecFloat"])
|
|
|
|
|
|
|
|
# Return the result if Hash is changed
|
|
|
|
|
|
|
|
lResult = {"HashStr": lServerDataHashStr, "ServerDataDict": lServerDataDict}
|
|
|
|
return lResult
|
|
|
|
return lResult
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|