diff options
author | Jonathan Weth <git@jonathanweth.de> | 2021-06-23 12:33:28 +0200 |
---|---|---|
committer | Jonathan Weth <git@jonathanweth.de> | 2021-06-23 12:33:28 +0200 |
commit | ed1d15aa02b3c7c1350a5204861d1f8678550fbb (patch) | |
tree | 51d4aa7cdee4f90b5f2c3a4188cb80519dd2342d /rwa/support/sessionservice/vnc.py | |
parent | 74e02d1953c1ee03a4e7dfc73e80318a24ba56a7 (diff) | |
download | RWA.Support.SessionService-ed1d15aa02b3c7c1350a5204861d1f8678550fbb.tar.gz RWA.Support.SessionService-ed1d15aa02b3c7c1350a5204861d1f8678550fbb.tar.bz2 RWA.Support.SessionService-ed1d15aa02b3c7c1350a5204861d1f8678550fbb.zip |
Restructure project directory and provide script for session service
Diffstat (limited to 'rwa/support/sessionservice/vnc.py')
-rw-r--r-- | rwa/support/sessionservice/vnc.py | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/rwa/support/sessionservice/vnc.py b/rwa/support/sessionservice/vnc.py new file mode 100644 index 0000000..1725532 --- /dev/null +++ b/rwa/support/sessionservice/vnc.py @@ -0,0 +1,57 @@ +# 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 Mike Gabriel <mike.gabriel@das-netzwerkteam.de> +# SPDX-License-Identifier: GPL-2.0-or-later +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the +# Free Software Foundation, Inc., +# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <https://www.gnu.org/licenses/>. + +import os +import subprocess +from typing import Dict +from uuid import uuid4 + +import port_for + + +def save_password(pw: str) -> str: + """Save password in x11vnc format in temporary directory.""" + filename = f"/tmp/rwa/{uuid4()}.pw" + os.makedirs("/tmp/rwa/", exist_ok=True) + p = subprocess.Popen(["x11vnc", "-storepasswd", f"{pw}", filename]) + p.communicate() + return filename + + +def run_vnc(pw_filename: str) -> Dict[str, Dict[str, int]]: + """Run x11vnc and websockify with random, unique ports in background.""" + port = port_for.select_random() + port_vnc = port_for.select_random() + + # Start VNC process + p = subprocess.Popen(["x11vnc", "-rfbauth", pw_filename, "-rfbport", f"{port_vnc}"]) + + # Start websockify + p2 = subprocess.Popen(f"websockify {port} 127.0.0.1:{port_vnc}", shell=True,) + + return { + "ws": {"pid": p2.pid, "port": port}, + "vnc": {"port": port_vnc, "pid": p.pid}, + } |