diff --git a/debian/postinst b/debian/postinst index c0d835e..a61d0cc 100755 --- a/debian/postinst +++ b/debian/postinst @@ -6,6 +6,17 @@ PATH=/bin:/sbin:/usr/bin:/usr/sbin case "$1" in configure) + cat <<-END + + ========== Important RevPiPyLoad post-installation note ========== + + The XML-RPC service is bind to localhost, only. To access the + daemon via RevPiCommander from your network, please change the + bindip in /etc/revpipyload/revpipyload.conf or execute: + + sudo revpipyload_secure_installation + + END ;; esac diff --git a/revpipyload/revpipyload.py b/revpipyload/revpipyload.py index 646f00a..8662ea3 100755 --- a/revpipyload/revpipyload.py +++ b/revpipyload/revpipyload.py @@ -484,6 +484,10 @@ class RevPiPyLoad: 3, self.xml_plcslavestart, "plcslavestart") self.xsrv.register_function( 3, self.xml_plcslavestop, "plcslavestop") + self.xsrv.register_function( + 3, self.xml_plcdelete_file, "plcdeletefile") + self.xsrv.register_function( + 3, self.xml_plcdownload_file, "plcdownload_file") # XML Modus 4 Einstellungen ändern self.xsrv.register_function( @@ -872,7 +876,7 @@ class RevPiPyLoad: self.th_plcslave.start() if self.xmlrpc and self.xsrv is not None: - # Wort xml calls in same thread or wait till timeout + # Work xml calls in same thread or wait till timeout self.xsrv.handle_request() else: self.evt_loadconfig.wait(1) @@ -1062,6 +1066,24 @@ class RevPiPyLoad: else: return False + def xml_plcdelete_file(self, file_name: str): + """ + Delete a single file in work directory. + + :param file_name: File with full path relative to work directory + :return: True on success + """ + file_name = os.path.join(self.plcworkdir, file_name) + if os.path.exists(file_name): + os.remove(file_name) + try: + # Try to remove directory if empty + os.rmdir(os.path.dirname(file_name)) + except Exception: + pass + return True + return False + def xml_plcdownload(self, mode="tar", pictory=False): """Uebertraegt ein Archiv vom plcworkdir. @@ -1082,6 +1104,20 @@ class RevPiPyLoad: return xmldata return Binary() + def xml_plcdownload_file(self, file_name:str): + """ + Download a single file from work directory. + + :param file_name: File with full path relative to work directory + :return: Binary object in gzip format + """ + file_name = os.path.join(self.plcworkdir, file_name) + if os.path.exists(file_name): + with open(file_name, "rb") as fh: + xmldata = Binary(gzip.compress(fh.read())) + return xmldata + return Binary() + def xml_plcexitcode(self): """Gibt den aktuellen exitcode vom PLC Programm zurueck.