diff options
-rwxr-xr-x | rwa/support/sessionservice/service.py | 90 |
1 files changed, 72 insertions, 18 deletions
diff --git a/rwa/support/sessionservice/service.py b/rwa/support/sessionservice/service.py index 52bf627..eb588ae 100755 --- a/rwa/support/sessionservice/service.py +++ b/rwa/support/sessionservice/service.py @@ -3,7 +3,7 @@ # This file is part of Remote Support Desktop # https://gitlab.das-netzwerkteam.de/RemoteWebApp/rwa.support.sessionservice # Copyright 2020, 2021 Jonathan Weth <dev@jonathanweth.de> -# Copyright 2020 Daniel Teichmann <daniel.teichmann@das-netzwerkteam.de> +# Copyright 2020, 2021 Daniel Teichmann <daniel.teichmann@das-netzwerkteam.de> # Copyright 2020 Mike Gabriel <mike.gabriel@das-netzwerkteam.de> # SPDX-License-Identifier: GPL-2.0-or-later # @@ -26,7 +26,6 @@ # along with this program. If not, see <https://www.gnu.org/licenses/>. import json -import logging import signal import time from threading import Thread @@ -42,6 +41,7 @@ from .config import user_settings from .lock import is_locked, lock, unlock from .session import Session from .trigger import TriggerServerThread +from .log import logging ALLOW_ONLY_ONE_SESSION = True @@ -97,6 +97,9 @@ class RWASupportSessionService(dbus.service.Object): ["https://example.org", "http://127.0.0.1:8000"] """ + logging.info('D-Bus method call: %s()', 'get_web_app_hosts') + + logging.debug('Return to D-Bus caller: "%s"', self._get_web_app_hosts()) return self._get_web_app_hosts() @dbus.service.method( @@ -114,14 +117,24 @@ class RWASupportSessionService(dbus.service.Object): ["https://example.org", "http://127.0.0.1:8000"] """ - user_settings.web_app_hosts.append(host) - user_settings.save_settings() + + host = str(host) + + logging.info('D-Bus method call: %s("%s")', 'add_web_app_host', host) + + if self._is_url(host): + user_settings.save_settings() + user_settings.web_app_hosts.append(host) + logging.debug('Added "%s" to "web_app_hosts" in user_settings', host) + else: + logging.warning('Given URL is not valid!') + logging.debug('Didn\'t add "%s" to "web_app_hosts" in user_settings', host) return self._get_web_app_hosts() @dbus.service.method( "org.ArcticaProject.RWASupportSessionService", in_signature="i", out_signature="s" ) - def remove_web_app_host(self, idx: int) -> str: + def remove_web_app_host(self, host_idx: int) -> str: """Remove a RWA.Support.WebApp host. :param idx: Index of web app host (D-Bus integer) @@ -133,8 +146,20 @@ class RWASupportSessionService(dbus.service.Object): ["https://example.org", "http://127.0.0.1:8000"] """ - del user_settings.web_app_hosts[idx] - user_settings.save_settings() + + logging.info('D-Bus method call: %s(%d)',"remove_web_app_host", host_idx) + + hosts = json.loads(self._get_web_app_hosts()) + if host_idx >= 0 and host_idx < len(hosts): + del user_settings.web_app_hosts[host_idx] + user_settings.save_settings() + logging.debug('Removed web_app_hosts[%d]="%s" in user_settings', + host_idx, hosts[host_idx]) + else: + logging.warning('Given host index is not valid!') + logging.debug("Didn't remove web_app_hosts[%d] (not existant!) in " + "user_settings", host_idx) + return self._get_web_app_hosts() @dbus.service.method( @@ -158,21 +183,32 @@ class RWASupportSessionService(dbus.service.Object): {"status": "error", "type": "<type>"} - **Possible choices for error types:** ``multiple``, ``connection`` + **Possible choices for error types:** ``multiple``, + ``connection``, + ``host_not_found`` """ + + logging.info('D-Bus method call: %s(%d)', "start", host_idx) + if ALLOW_ONLY_ONE_SESSION and len(self.sessions.values()) > 0: logging.warning( "There is already one session running and the service " "is configured to allow only one " "session, so this session won't be started." ) - return json.dumps({"status": "error", "type": "multiple"}) - print(host_idx, user_settings.web_app_hosts) + response = json.dumps({"status": "error", "type": "multiple"}) + logging.debug("The response to the D-Bus caller: '%s'", response) + return response try: host = user_settings.web_app_hosts[host_idx] + logging.debug('web_app_hosts[%d] is the following host: "%s"', + host_idx, host) except IndexError: - return json.dumps({"status": "error", "type": "host_not_found"}) + logging.error("web_app_hosts[%d] does not exist!", host_idx) + logging.debug("The response to the D-Bus caller: '%s'", response) + response = json.dumps({"status": "error", "type": "host_not_found"}) + return response # Start session try: @@ -189,11 +225,16 @@ class RWASupportSessionService(dbus.service.Object): logging.info(f"New session #{session.pid} was started with meta {return_json}.") - return json.dumps(return_json) + response = json.dumps(return_json) + logging.debug("The response to the D-Bus caller: '%s'", response) + return response except ConnectionError: - logging.error("There was a connection error while trying to reach the server.") + logging.error("There was a connection error while trying to reach " + "the RWA.Support.WebApp server.") - return json.dumps({"status": "error", "type": "connection"}) + response = json.dumps({"status": "error", "type": "connection"}) + logging.debug("The response to the D-Bus caller: '%s'", response) + return response @dbus.service.method( "org.ArcticaProject.RWASupportSessionService", in_signature="i", out_signature="s" @@ -223,15 +264,22 @@ class RWASupportSessionService(dbus.service.Object): ``dead`` There was a problem, so that the session is dead. ============ ====================== """ - return self._get_status(pid) + logging.info('D-Bus method call: %s(%d)', "status", pid) + response = self._get_status(pid) + logging.debug("The response to the D-Bus caller: '%s'", response) + return response @dbus.service.method( "org.ArcticaProject.RWASupportSessionService", in_signature="i", out_signature="s" ) def refresh_status(self, pid: int) -> str: """Update status from WebApp before returning it here like :meth:`status`.""" + logging.info('D-Bus method call: %s(%d)', "refresh_status", pid) + self._update_session(pid) - return self._get_status(pid) + response = self._get_status(pid) + logging.debug("The response to the D-Bus caller: '%s'", response) + return response @dbus.service.method( "org.ArcticaProject.RWASupportSessionService", in_signature="i", out_signature="s" @@ -248,12 +296,18 @@ class RWASupportSessionService(dbus.service.Object): {"id": <pid>, "status": "stopped"} """ + logging.info('D-Bus method call: %s(%d)', "stop", pid) + try: session = self.sessions[pid] except KeyError: - return json.dumps({"pid": pid, "status": "stopped"}, sort_keys=True) + response = json.dumps({"pid": pid, "status": "stopped"}, sort_keys=True) + logging.debug("The response to the D-Bus caller: '%s'", response) + return response session.stop() - return json.dumps({"id": pid, "status": "stopped"}, sort_keys=True) + response = json.dumps({"id": pid, "status": "stopped"}, sort_keys=True) + logging.debug("The response to the D-Bus caller: '%s'", response) + return response def _get_status(self, pid: int) -> str: try: |