From fec135e16f4dd5dddd71599c80a8ea8ea1514b38 Mon Sep 17 00:00:00 2001 From: Ivan Maslov Date: Mon, 5 Sep 2022 22:04:49 +0300 Subject: [PATCH] orc add ssl --- Orchestrator/ControlPanel/CP_VersionCheck.py | 4 ++-- Sources/pyOpenRPA/Orchestrator/Server.py | 20 ++++++++++--------- .../Orchestrator/__Orchestrator__.py | 11 ++++++---- .../pyOpenRPA/Resources/Web/orpa/footer.xhtml | 2 ++ Sources/pyOpenRPA/Resources/Web/orpa/orc.js | 6 ++++++ .../pyOpenRPA/Resources/Web/orpa/orc.xhtml | 19 +++++++++--------- 6 files changed, 38 insertions(+), 24 deletions(-) diff --git a/Orchestrator/ControlPanel/CP_VersionCheck.py b/Orchestrator/ControlPanel/CP_VersionCheck.py index 549d82a5..5b07ac05 100755 --- a/Orchestrator/ControlPanel/CP_VersionCheck.py +++ b/Orchestrator/ControlPanel/CP_VersionCheck.py @@ -36,8 +36,8 @@ def SettingsUpdate(inGSettings): #Add RobotRDPActive in control panel Orchestrator.WebCPUpdate(inCPKeyStr="VersionCheck", inHTMLRenderDef=ControlPanelRenderDict) - lCP = Orchestrator.Managers.ControlPanel(inControlPanelNameStr="TestTTT",inRefreshHTMLJinja2TemplatePathStr="ControlPanel\\test.html", inJinja2TemplateRefreshBool = True) - lCP.InitJSJinja2TemplatePathSet(inJinja2TemplatePathStr="ControlPanel\\test.js") + #lCP = Orchestrator.Managers.ControlPanel(inControlPanelNameStr="TestTTT",inRefreshHTMLJinja2TemplatePathStr="ControlPanel\\test.html", inJinja2TemplateRefreshBool = True) + #lCP.InitJSJinja2TemplatePathSet(inJinja2TemplatePathStr="ControlPanel\\test.js") #lProcess = Orchestrator.Managers.ProcessInitSafe(inAgentHostNameStr="IVANMASLOV-DESKTOP",inAgentUserNameStr="ND", # inProcessNameWOExeStr="notepad",inStartCMDStr="notepad",inStopSafeTimeoutSecFloat=3) # Some test diff --git a/Sources/pyOpenRPA/Orchestrator/Server.py b/Sources/pyOpenRPA/Orchestrator/Server.py index f74c902b..7aecdd9c 100755 --- a/Sources/pyOpenRPA/Orchestrator/Server.py +++ b/Sources/pyOpenRPA/Orchestrator/Server.py @@ -143,17 +143,13 @@ def BackwardCompatibityBeginWrapperNoAuth(inBeginTokenStr, inRequest:Request, in return BackwardCompatibility(inRequest = inRequest, inResponse = inResponse, inBodyStr = inBodyStr, inAuthDict=None) - - from . import ServerSettings from . import __Orchestrator__ import mimetypes mimetypes.add_type("font/woff2",".woff2") mimetypes.add_type("text/javascript",".js") - from typing import Union - def InitFastAPI(): global app lL = __Orchestrator__.OrchestratorLoggerGet() @@ -203,9 +199,15 @@ def InitFastAPI(): tags=["BackwardCompatibility"] ) - uvicorn.run('pyOpenRPA.Orchestrator.Server:app', host='0.0.0.0', port=1024) - #if lL: lL.info(f"Сервер инициализирован успешно (с поддержкой SSL):: Наименование: {self.name}, Слушает URL: {lAddressStr}, Слушает порт: {lPortInt}, Путь к файлу сертификата (.pem): {lCertFilePathStr}") - #if lL: lL.info(f"Сервер инициализирован успешно (без поддержки SSL):: Наименование: {self.name}, Слушает URL: {lAddressStr}, Слушает порт: {lPortInt}") - - +def InitUvicorn(inHostStr=None, inPortInt=None, inSSLCertPathStr=None, inSSLKeyPathStr=None, inSSLPasswordStr=None): + if inHostStr is None: inHostStr="0.0.0.0" + if inPortInt is None: inPortInt=1024 + if inSSLCertPathStr != None: inSSLCertPathStr=CrossOS.PathStr(inSSLCertPathStr) + if inSSLKeyPathStr != None: inSSLKeyPathStr=CrossOS.PathStr(inSSLKeyPathStr) + global app + lL = __Orchestrator__.OrchestratorLoggerGet() + #uvicorn.run('pyOpenRPA.Orchestrator.Server:app', host='0.0.0.0', port=1024) + uvicorn.run(app, host=inHostStr, port=inPortInt,ssl_keyfile=inSSLKeyPathStr,ssl_certfile=inSSLCertPathStr,ssl_keyfile_password=inSSLPasswordStr) + if lL and inSSLKeyPathStr != None: lL.info(f"Сервер инициализирован успешно (с поддержкой SSL):: Слушает URL: {inHostStr}, Слушает порт: {inPortInt}, Путь к файлу сертификата (.pem, base64): {inSSLCertPathStr}") + if lL and inSSLKeyPathStr == None: lL.info(f"Сервер инициализирован успешно (без поддержки SSL):: Слушает URL: {inHostStr}, Слушает порт: {inPortInt}") diff --git a/Sources/pyOpenRPA/Orchestrator/__Orchestrator__.py b/Sources/pyOpenRPA/Orchestrator/__Orchestrator__.py index 77eb2b5e..a3b5cb71 100755 --- a/Sources/pyOpenRPA/Orchestrator/__Orchestrator__.py +++ b/Sources/pyOpenRPA/Orchestrator/__Orchestrator__.py @@ -986,11 +986,11 @@ def WebURLConnectFile(inMethodStr, inURLStr, inMatchTypeStr, inFilePathStr, inCo } inGSettings["ServerDict"]["URLList"].append(lURLItemDict) -def WebListenCreate(inServerKeyStr="Default", inAddressStr="", inPortInt=80, inCertFilePEMPathStr=None, inKeyFilePathStr=None, inGSettings = None): +def WebListenCreate(inServerKeyStr="Default", inAddressStr="0.0.0.0", inPortInt=1024, inCertFilePEMPathStr=None, inKeyFilePathStr=None, inGSettings = None): """L+,W+: Настроить веб-сервер Оркестратора. - :param inAddressStr: IP адрес для прослушивания. Если "", то прослушивать запросы со всех сетевых карт. Если "127.0.0.1", то слушать запросы только с той ОС, на которой работает Оркестратор - :param inPortInt: Номер порта для прослушивания. Если HTTP - 80; Если HTTPS - 443. По умолчанию 80. Допускается установка других портов + :param inAddressStr: IP адрес для прослушивания. Если "0.0.0.0", то прослушивать запросы со всех сетевых карт. Если "127.0.0.1", то слушать запросы только с той ОС, на которой работает Оркестратор + :param inPortInt: Номер порта для прослушивания. Если HTTP - 80; Если HTTPS - 443. По умолчанию 1024 (Связано с тем, что в линукс можно устанавливать порты выше 1000). Допускается установка других портов :param inCertFilePEMPathStr: Путь файлу сертификата, сгенерированного в .pem (base64) формате. Обязателен при использовании защищенного HTTPS/SSL соединения. :param inKeyFilePathStr: Путь к файлу закрытого ключа в base64 формате :param inGSettings: Глобальный словарь настроек Оркестратора (синглтон) @@ -2834,10 +2834,13 @@ def Orchestrator(inGSettings=None, inDumpRestoreBool = True, inRunAsAdministrato Debugger.LiveDebugCheckThread(inGSettings=GSettingsGet()) #Инициализация сервера (инициализация всех интерфейсов) + Server.InitFastAPI() lListenDict = gSettingsDict.get("ServerDict",{}).get("ListenDict",{}) for lItemKeyStr in lListenDict: lItemDict = lListenDict[lItemKeyStr] - Server.InitFastAPI() + lItemDict["ServerInstance"]=Server.app + Server.InitUvicorn(inHostStr=lItemDict["AddressStr"], inPortInt=lItemDict["PortInt"], inSSLCertPathStr=lItemDict["CertFilePEMPathStr"], inSSLKeyPathStr=lItemDict["KeyFilePathStr"], inSSLPasswordStr=None) + def __schedule_loop__(): while True: diff --git a/Sources/pyOpenRPA/Resources/Web/orpa/footer.xhtml b/Sources/pyOpenRPA/Resources/Web/orpa/footer.xhtml index 816bdffc..6acb2114 100755 --- a/Sources/pyOpenRPA/Resources/Web/orpa/footer.xhtml +++ b/Sources/pyOpenRPA/Resources/Web/orpa/footer.xhtml @@ -30,6 +30,8 @@