mirror of
https://github.com/dkmstr/openuds.git
synced 2025-03-30 18:50:20 +03:00
Updating client logic to new gen tunnel server
This commit is contained in:
parent
f364b283e6
commit
4adc058e1a
@ -31,4 +31,5 @@
|
||||
@author: Adolfo Gómez, dkmaster at dkmon dot com
|
||||
"""
|
||||
|
||||
# DISABLED: NOT FOR USE, JUST TESTS!!!
|
||||
# from .html5vnc import HTML5VNCTransport
|
||||
|
@ -1,7 +1,6 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
#
|
||||
# Copyright (c) 2012-2019 Virtual Cable S.L.
|
||||
# Copyright (c) 2012-2021 Virtual Cable S.L.U.
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without modification,
|
||||
@ -63,6 +62,7 @@ class TSNXTransport(BaseNXTransport):
|
||||
Provides access via NX to service.
|
||||
This transport can use an domain. If username processed by authenticator contains '@', it will split it and left-@-part will be username, and right password
|
||||
"""
|
||||
|
||||
typeName = _('NX v3.5 (DEPRECATED)')
|
||||
typeType = 'TSNXTransport'
|
||||
typeDescription = _('NX protocol v3.5. Tunneled connection.')
|
||||
@ -70,12 +70,73 @@ class TSNXTransport(BaseNXTransport):
|
||||
protocol = transports.protocols.NX
|
||||
group = transports.TUNNELED_GROUP
|
||||
|
||||
tunnelServer = gui.TextField(label=_('Tunnel server'), order=1, tooltip=_('IP or Hostname of tunnel server sent to client device ("public" ip) and port. (use HOST:PORT format)'), tab=gui.TUNNEL_TAB)
|
||||
tunnelServer = gui.TextField(
|
||||
label=_('Tunnel server'),
|
||||
order=1,
|
||||
tooltip=_(
|
||||
'IP or Hostname of tunnel server sent to client device ("public" ip) and port. (use HOST:PORT format)'
|
||||
),
|
||||
tab=gui.TUNNEL_TAB,
|
||||
)
|
||||
|
||||
useEmptyCreds = gui.CheckBoxField(label=_('Empty creds'), order=3, tooltip=_('If checked, the credentials used to connect will be emtpy'), tab=gui.CREDENTIALS_TAB)
|
||||
fixedName = gui.TextField(label=_('Username'), order=4, tooltip=_('If not empty, this username will be always used as credential'), tab=gui.CREDENTIALS_TAB)
|
||||
fixedPassword = gui.PasswordField(label=_('Password'), order=5, tooltip=_('If not empty, this password will be always used as credential'), tab=gui.CREDENTIALS_TAB)
|
||||
listenPort = gui.NumericField(label=_('Listening port'), length=5, order=6, tooltip=_('Listening port of NX (ssh) at client machine'), defvalue='22')
|
||||
tunnelWait = gui.NumericField(
|
||||
length=3,
|
||||
label=_('Tunnel wait time'),
|
||||
defvalue='30',
|
||||
minValue=5,
|
||||
maxValue=65536,
|
||||
order=2,
|
||||
tooltip=_('Maximum time to wait before closing the tunnel listener'),
|
||||
required=True,
|
||||
tab=gui.TUNNEL_TAB,
|
||||
)
|
||||
|
||||
ticketValidity = gui.NumericField(
|
||||
length=3,
|
||||
label=_('Tunnel ticket validity time (seconds)'),
|
||||
defvalue='7200',
|
||||
minValue=60, # One minute as min
|
||||
maxValue=7*60*60*24, # one week as max
|
||||
order=3,
|
||||
tooltip=_('Maximum validity time for user ticket to allow reconnection'),
|
||||
required=True,
|
||||
tab=gui.TUNNEL_TAB,
|
||||
)
|
||||
|
||||
verifyCertificate = gui.CheckBoxField(
|
||||
label=_('Force SSL certificate verification'),
|
||||
order=23,
|
||||
tooltip=_('If enabled, the certificate of tunnel server will be verified (recommended).'),
|
||||
defvalue=gui.TRUE,
|
||||
tab=gui.TUNNEL_TAB
|
||||
)
|
||||
|
||||
|
||||
useEmptyCreds = gui.CheckBoxField(
|
||||
label=_('Empty creds'),
|
||||
order=3,
|
||||
tooltip=_('If checked, the credentials used to connect will be emtpy'),
|
||||
tab=gui.CREDENTIALS_TAB,
|
||||
)
|
||||
fixedName = gui.TextField(
|
||||
label=_('Username'),
|
||||
order=4,
|
||||
tooltip=_('If not empty, this username will be always used as credential'),
|
||||
tab=gui.CREDENTIALS_TAB,
|
||||
)
|
||||
fixedPassword = gui.PasswordField(
|
||||
label=_('Password'),
|
||||
order=5,
|
||||
tooltip=_('If not empty, this password will be always used as credential'),
|
||||
tab=gui.CREDENTIALS_TAB,
|
||||
)
|
||||
listenPort = gui.NumericField(
|
||||
label=_('Listening port'),
|
||||
length=5,
|
||||
order=6,
|
||||
tooltip=_('Listening port of NX (ssh) at client machine'),
|
||||
defvalue='22',
|
||||
)
|
||||
connection = gui.ChoiceField(
|
||||
label=_('Connection'),
|
||||
order=7,
|
||||
@ -87,19 +148,23 @@ class TSNXTransport(BaseNXTransport):
|
||||
{'id': 'wan', 'text': 'wan'},
|
||||
{'id': 'lan', 'text': 'lan'},
|
||||
],
|
||||
tab=gui.PARAMETERS_TAB
|
||||
tab=gui.PARAMETERS_TAB,
|
||||
)
|
||||
session = gui.ChoiceField(
|
||||
label=_('Session'), order=8, tooltip=_('Desktop session'),
|
||||
label=_('Session'),
|
||||
order=8,
|
||||
tooltip=_('Desktop session'),
|
||||
values=[
|
||||
{'id': 'gnome', 'text': 'gnome'},
|
||||
{'id': 'kde', 'text': 'kde'},
|
||||
{'id': 'cde', 'text': 'cde'},
|
||||
],
|
||||
tab=gui.PARAMETERS_TAB
|
||||
tab=gui.PARAMETERS_TAB,
|
||||
)
|
||||
cacheDisk = gui.ChoiceField(
|
||||
label=_('Disk Cache'), order=9, tooltip=_('Cache size en Mb stored at disk'),
|
||||
label=_('Disk Cache'),
|
||||
order=9,
|
||||
tooltip=_('Cache size en Mb stored at disk'),
|
||||
values=[
|
||||
{'id': '0', 'text': '0 Mb'},
|
||||
{'id': '32', 'text': '32 Mb'},
|
||||
@ -108,7 +173,7 @@ class TSNXTransport(BaseNXTransport):
|
||||
{'id': '256', 'text': '256 Mb'},
|
||||
{'id': '512', 'text': '512 Mb'},
|
||||
],
|
||||
tab=gui.PARAMETERS_TAB
|
||||
tab=gui.PARAMETERS_TAB,
|
||||
)
|
||||
cacheMem = gui.ChoiceField(
|
||||
label=_('Memory Cache'),
|
||||
@ -122,7 +187,7 @@ class TSNXTransport(BaseNXTransport):
|
||||
{'id': '64', 'text': '64 Mb'},
|
||||
{'id': '128', 'text': '128 Mb'},
|
||||
],
|
||||
tab=gui.PARAMETERS_TAB
|
||||
tab=gui.PARAMETERS_TAB,
|
||||
)
|
||||
screenSize = gui.ChoiceField(
|
||||
label=_('Screen size'),
|
||||
@ -135,9 +200,9 @@ class TSNXTransport(BaseNXTransport):
|
||||
{'id': CommonPrefs.SZ_1024x768, 'text': '1024x768'},
|
||||
{'id': CommonPrefs.SZ_1366x768, 'text': '1366x768'},
|
||||
{'id': CommonPrefs.SZ_1920x1080, 'text': '1920x1080'},
|
||||
{'id': CommonPrefs.SZ_FULLSCREEN, 'text': ugettext_lazy('Full Screen')}
|
||||
{'id': CommonPrefs.SZ_FULLSCREEN, 'text': ugettext_lazy('Full Screen')},
|
||||
],
|
||||
tab=gui.PARAMETERS_TAB
|
||||
tab=gui.PARAMETERS_TAB,
|
||||
)
|
||||
|
||||
_tunnelServer: str = ''
|
||||
@ -151,13 +216,20 @@ class TSNXTransport(BaseNXTransport):
|
||||
_cacheDisk: str = ''
|
||||
_cacheMem: str = ''
|
||||
_screenSize: str = ''
|
||||
|
||||
_tunnelWait: int = 30
|
||||
_ticketValidity: int = 60
|
||||
_verifyCertificate: bool = False
|
||||
|
||||
def initialize(self, values: 'Module.ValuesType'):
|
||||
if values:
|
||||
if values['tunnelServer'].find(':') == -1:
|
||||
raise transports.Transport.ValidationException(_('Must use HOST:PORT in Tunnel Server Field'))
|
||||
raise transports.Transport.ValidationException(
|
||||
_('Must use HOST:PORT in Tunnel Server Field')
|
||||
)
|
||||
self._tunnelServer = values['tunnelServer']
|
||||
self._tunnelWait = int(values['tunnelWait'])
|
||||
self._ticketValidity = int(values['ticketValidity'])
|
||||
self._verifyCertificate = gui.strToBool(values['verifyCertificate'])
|
||||
self._tunnelCheckServer = ''
|
||||
self._useEmptyCreds = gui.strToBool(values['useEmptyCreds'])
|
||||
self._fixedName = values['fixedName']
|
||||
@ -168,25 +240,59 @@ class TSNXTransport(BaseNXTransport):
|
||||
self._cacheDisk = values['cacheDisk']
|
||||
self._cacheMem = values['cacheMem']
|
||||
self._screenSize = values['screenSize']
|
||||
|
||||
|
||||
def marshal(self) -> bytes:
|
||||
"""
|
||||
Serializes the transport data so we can store it in database
|
||||
"""
|
||||
return str.join('\t', [
|
||||
'v2', gui.boolToStr(self._useEmptyCreds), self._fixedName, self._fixedPassword, self._listenPort,
|
||||
self._connection, self._session, self._cacheDisk, self._cacheMem, self._tunnelServer, self._tunnelCheckServer,
|
||||
self._screenSize
|
||||
]).encode('utf8')
|
||||
val = str.join(
|
||||
'\t',
|
||||
[
|
||||
'v3',
|
||||
gui.boolToStr(self._useEmptyCreds),
|
||||
self._fixedName,
|
||||
self._fixedPassword,
|
||||
self._listenPort,
|
||||
self._connection,
|
||||
self._session,
|
||||
self._cacheDisk,
|
||||
self._cacheMem,
|
||||
self._tunnelServer,
|
||||
self._tunnelCheckServer,
|
||||
self._screenSize,
|
||||
str(self._tunnelWait),
|
||||
str(self._ticketValidity),
|
||||
gui.boolToStr(self._verifyCertificate),
|
||||
],
|
||||
)
|
||||
logger.debug('Values: %s', val)
|
||||
return val.encode('utf8')
|
||||
|
||||
def unmarshal(self, data: bytes) -> None:
|
||||
values = data.decode('utf8').split('\t')
|
||||
if values[0] in ('v1', 'v2'):
|
||||
if values[0] in ('v1', 'v2', 'v3'):
|
||||
self._useEmptyCreds = gui.strToBool(values[1])
|
||||
(self._fixedName, self._fixedPassword, self._listenPort, self._connection,
|
||||
self._session, self._cacheDisk, self._cacheMem, self._tunnelServer,
|
||||
self._tunnelCheckServer) = values[2:11]
|
||||
self._screenSize = values[11] if values[0] == 'v2' else CommonPrefs.SZ_FULLSCREEN
|
||||
(
|
||||
self._fixedName,
|
||||
self._fixedPassword,
|
||||
self._listenPort,
|
||||
self._connection,
|
||||
self._session,
|
||||
self._cacheDisk,
|
||||
self._cacheMem,
|
||||
self._tunnelServer,
|
||||
self._tunnelCheckServer,
|
||||
) = values[2:11]
|
||||
self._screenSize = (
|
||||
values[11] if values[0] == 'v2' else CommonPrefs.SZ_FULLSCREEN
|
||||
)
|
||||
if values[0] == 'v3':
|
||||
self._tunnelWait, self._ticketValidity, self._verifyCertificate = (
|
||||
int(values[12]),
|
||||
int(values[13]),
|
||||
gui.strToBool(values[14])
|
||||
)
|
||||
|
||||
def valuesDict(self) -> gui.ValuesDictType:
|
||||
return {
|
||||
@ -198,19 +304,22 @@ class TSNXTransport(BaseNXTransport):
|
||||
'session': self._session,
|
||||
'cacheDisk': self._cacheDisk,
|
||||
'cacheMem': self._cacheMem,
|
||||
'tunnelServer': self._tunnelServer
|
||||
'tunnelServer': self._tunnelServer,
|
||||
'tunnelWait': str(self._tunnelWait),
|
||||
'ticketValidity': str(self._ticketValidity),
|
||||
'verifyCertificate': gui.boolToStr(self._verifyCertificate),
|
||||
}
|
||||
|
||||
def getUDSTransportScript( # pylint: disable=too-many-locals
|
||||
self,
|
||||
userService: 'models.UserService',
|
||||
transport: 'models.Transport',
|
||||
ip: str,
|
||||
os: typing.Dict[str, str],
|
||||
user: 'models.User',
|
||||
password: str,
|
||||
request: 'HttpRequest'
|
||||
) -> typing.Tuple[str, str, typing.Dict[str, typing.Any]]:
|
||||
self,
|
||||
userService: 'models.UserService',
|
||||
transport: 'models.Transport',
|
||||
ip: str,
|
||||
os: typing.Dict[str, str],
|
||||
user: 'models.User',
|
||||
password: str,
|
||||
request: 'HttpRequest',
|
||||
) -> typing.Tuple[str, str, typing.Dict[str, typing.Any]]:
|
||||
prefs = self.screenSize.value
|
||||
|
||||
username = user.getUsernameForAuth()
|
||||
@ -223,22 +332,18 @@ class TSNXTransport(BaseNXTransport):
|
||||
if self._useEmptyCreds is True:
|
||||
usernamsizerd = '', ''
|
||||
|
||||
tunpass = ''.join(random.SystemRandom().choice(string.ascii_letters + string.digits) for _i in range(12))
|
||||
tunuser = TicketStore.create(tunpass)
|
||||
ticket = TicketStore.create_for_tunnel(
|
||||
userService=userService,
|
||||
port=3389,
|
||||
validity=self.ticketValidity.num()
|
||||
)
|
||||
|
||||
sshServer = self._tunnelServer
|
||||
if ':' not in sshServer:
|
||||
sshServer += ':443'
|
||||
|
||||
sshHost, sshPort = sshServer.split(':')
|
||||
|
||||
logger.debug('Username generated: %s, password: %s', tunuser, tunpass)
|
||||
tunHost, tunPort = self.tunnelServer.value.split(':')
|
||||
|
||||
width, height = CommonPrefs.getWidthHeight(prefs)
|
||||
# Fix username/password acording to os manager
|
||||
username, password = userService.processUserPassword(username, password)
|
||||
|
||||
|
||||
r = NXFile(username=username, password=password, width=width, height=height)
|
||||
r.host = '{address}'
|
||||
r.port = '{port}'
|
||||
@ -250,21 +355,23 @@ class TSNXTransport(BaseNXTransport):
|
||||
osName = {
|
||||
OsDetector.Windows: 'windows',
|
||||
OsDetector.Linux: 'linux',
|
||||
OsDetector.Macintosh: 'macosx'
|
||||
|
||||
OsDetector.Macintosh: 'macosx',
|
||||
}.get(os['OS'])
|
||||
|
||||
if osName is None:
|
||||
return super().getUDSTransportScript(userService, transport, ip, os, user, password, request)
|
||||
return super().getUDSTransportScript(
|
||||
userService, transport, ip, os, user, password, request
|
||||
)
|
||||
|
||||
sp = {
|
||||
'ip': ip,
|
||||
'tunUser': tunuser,
|
||||
'tunPass': tunpass,
|
||||
'tunHost': sshHost,
|
||||
'tunPort': sshPort,
|
||||
'tunHost': tunHost,
|
||||
'tunPort': tunPort,
|
||||
'tunWait': self.tunnelWait.num(),
|
||||
'tunChk': self.verifyCertificate.isTrue(),
|
||||
'ticket': ticket,
|
||||
'port': self._listenPort,
|
||||
'as_file_for_format': r.as_file_for_format
|
||||
'as_file_for_format': r.as_file_for_format,
|
||||
}
|
||||
|
||||
return self.getScript('scripts/{}/tunnel.py', osName, sp)
|
||||
|
@ -4,9 +4,9 @@ from __future__ import unicode_literals
|
||||
|
||||
# pylint: disable=import-error, no-name-in-module, undefined-variable
|
||||
import subprocess
|
||||
from uds.forward import forward # @UnresolvedImport
|
||||
from uds.tunnel import forward # type: ignore
|
||||
|
||||
from uds import tools # @UnresolvedImport
|
||||
from uds import tools # type: ignore
|
||||
|
||||
try:
|
||||
cmd = tools.findApp('nxclient', ['/usr/NX/bin/'])
|
||||
@ -18,14 +18,15 @@ except Exception:
|
||||
''')
|
||||
|
||||
# Open tunnel
|
||||
forwardThread, port = forward(sp['tunHost'], sp['tunPort'], sp['tunUser'], sp['tunPass'], sp['ip'], sp['port'])
|
||||
if forwardThread.status == 2:
|
||||
raise Exception('Unable to open tunnel')
|
||||
fs = forward(remote=(sp['tunHost'], int(sp['tunPort'])), ticket=sp['ticket'], timeout=sp['tunWait'], check_certificate=sp['tunChk'])
|
||||
|
||||
# Check that tunnel works..
|
||||
if fs.check() is False:
|
||||
raise Exception('<p>Could not connect to tunnel server.</p><p>Please, check your network settings.</p>')
|
||||
|
||||
theFile = sp['as_file_for_format'].format(
|
||||
address='127.0.0.1',
|
||||
port=port
|
||||
port=fs.server_address[1]
|
||||
)
|
||||
|
||||
filename = tools.saveTempFile(theFile)
|
||||
|
@ -1 +1 @@
|
||||
FpagwxQqGXXsamFS2x9OqU5QBEsp1Saod5W8OoElAo9yaiFG05hECjJ0PVALL7NcyL4kQVmMOC3rWpXjFKRF1h8q42EolHUhXAHeG9Na1kT3+SCDUJ83Qb9LK2lt+Xnc6VZleqqwsrXiriCeY0JL62W6+RSiNlj8qt5//7J8fNukvzWTqoLXNfmlhs2IP1hlsMYni0qQXhpeUSqKjlifbuZs5Z0MYvuxdFLUpxn/boRJ/gxSpVgNGzJgFvaWUGxpGqJLc3pm/iZBMH/Bt9+V1Ph/PJLx13izbD0fE3peupgEh4u+mHk5BS//B89bHYvPQjCsI/fzH/Ef21yCupSkwFe3yYHuSgTFRZhOC2+8mdQSbN9mjzojeiGU/vYQWH2c9jHiT6RATNwKYRH5WKMogC20kz30dOxGbaOWwuOBgrvH9wthczPx3l8+HlPnEC4ok0VLBsg3RGy1PLE2nTKyWXzywUXP9tVL/aN0Gn7ducGF2xNn00U/Kyig6Z9CTgjPEmgMZkgQGQABThswM1q/bEh2A25080NDduSXF+Nb7cpuyfESM7CrP7vj214Si05Vil7TjC5d9PWaod39BsB1/lcxSL8I2Sk2SH7ihPgaQloqDLAu1KhhnDvp9WK572fuCmgRRAX2+lrQf8IZskr6XDlzRwbojCaEZMlYwSR35J4=
|
||||
Jb61ZM6xlsxMLnk4a2X2INN3IyGp+ztSgjXV+AsbH2hKDtKANM9nqHXgI/4LfxAogM3Y17k2tHOnbf049mWNaDRNCqOY9tG/xL3am2HkOTb3L9YOpK60gk/0hF9y1qLN9Y/CM+TP6B3DvVW+fsSnVfmDoK/NyqR5nb+6iRs37nmr+ILcum8IYgT4BeoKUqcMjHBQFF1MGfD5arKJW1t9pFQZw9+BZUzyw1c++2mnajIe294gjUEqgRxKPX6ejYX9J/AfAvM8K+NruT23VcxbBkp6diRUHFzM0buqHxUVzCqyfnU+umS7FKLOLw8M1B0goYfK8B0p8lu8ICRA24yOPpnnbBBWBUjZm3OZUGt7fqanaPbsVvehibxOsPB2z/vktp6mVBx8tkjU8Uyli1RxMSdT8xjsCT3mkK521AasqfE5Vn/Plwe9ciBo5AfqVxkl9OFVgUCCDTug9oNx50u+eSj/XUCxlTu39OBWUV6HAUhWDIgRWoYpLCC5Xtb+ILkgYPtTU8CiQSS2EFk8uUqxCSCbJKwfQRHhcYItSZk6fP0TH1nfirR8DB/AW5ltbO8QPe4PIllAyQl827fy6vQTytSw1wWBkEf7OCBEfv1w3AwFOC35fKQoRk+ygbD5fLhFbQsDpaMVtabNL/zjlw51CtrQfQ1ru69bvKeHLbp265M=
|
@ -4,10 +4,10 @@ from __future__ import unicode_literals
|
||||
|
||||
# pylint: disable=import-error, no-name-in-module, too-many-format-args, undefined-variable, invalid-sequence-index
|
||||
import subprocess
|
||||
from uds.forward import forward # @UnresolvedImport
|
||||
from uds.tunnel import forward # type: ignore
|
||||
import os
|
||||
|
||||
from uds import tools # @UnresolvedImport
|
||||
from uds import tools # type: ignore
|
||||
|
||||
|
||||
cmd = '/Applications/OpenNX/OpenNX.app/Contents/MacOS/OpenNXapp'
|
||||
@ -16,14 +16,16 @@ if os.path.isfile(cmd) is False:
|
||||
<p>Please, install appropriate package for your system from <a href="http://www.opennx.net/">here</a>.</p>
|
||||
''')
|
||||
|
||||
forwardThread, port = forward(sp['tunHost'], sp['tunPort'], sp['tunUser'], sp['tunPass'], sp['ip'], sp['port']) # @UndefinedVariable
|
||||
if forwardThread.status == 2:
|
||||
raise Exception('Unable to open tunnel')
|
||||
# Open tunnel
|
||||
fs = forward(remote=(sp['tunHost'], int(sp['tunPort'])), ticket=sp['ticket'], timeout=sp['tunWait'], check_certificate=sp['tunChk'])
|
||||
|
||||
# Check that tunnel works..
|
||||
if fs.check() is False:
|
||||
raise Exception('<p>Could not connect to tunnel server.</p><p>Please, check your network settings.</p>')
|
||||
|
||||
theFile = sp['as_file_for_format'].format( # @UndefinedVariable
|
||||
theFile = sp['as_file_for_format'].format(
|
||||
address='127.0.0.1',
|
||||
port=port
|
||||
port=fs.server_address[1]
|
||||
)
|
||||
|
||||
filename = tools.saveTempFile(theFile)
|
||||
|
@ -1 +1 @@
|
||||
QLmFfLpda/cgXTMjqc2esLR9ML5hdDLScxZLdz5Uq09wiJjlLcVBQd95m4PL4yy5YrugEDvM2QP4i5z58aY5oP4IokF4t5VcSOhgM+lFvxZTyT2rRuVcpaaz7RUavAETmEQ5d9EqyzLsQvqkUTryeJJU8EcjRcZjTtnGkZ+VQvtVPljkF2HeM4nsph1mnQAjySXtK5xqfOeGqvL4zsd46+N8AKpVuyV+bM7HeOnHcFGJWk3I6nTMPvOGAaVaBKtnWMo8NhHnhNs6YOEgYaStKZpje+rrDN7vDelwozSV37GjZCgJB8azy3HP2Q6lMdf3r8H8Y/Py0NwNkJFt9SrwWajx9NUZWB3eDLhG+ITAutkckt8xJih3IGdl3lDwLXBhieRD9b+r0YYQRHntwVURkHBte6ptQvnyeZOySu4EAk9Hkea2PUK2f3q/8berC257X/0JNyDTnSSYCOOzHHEjBaSRnU4KtXlvNR0+lqpJk1abq8LgaULb1c2Nnh47H51WpiyWRx88DfmXjI6ctGBoY/3eq6L5CuC9T/xcvcbK0s8ln7saqOqNj7LBHl3dc5ou1o9YMYw+54wk8Nb+C4fodT9LD6ezom6nwlX3arQuSk9fvUzyrmBCMgu/lxxkoXXxrDAEGw4bd5HmVg6sYL/gOlLKq2glxeDiNrRdk/PQwsE=
|
||||
sNIIRiS5PiCdCSHQ0Uv5iS4gdYBcFEfI8KPfvD1V8ZTry/Hw8NqB0qzHW0D3YgKGPZMBBnHM+mYiZNXwPuSObRn12Iw/dSh1kmSgh/1S/UvummsdD1vq8T8WdupvI8z1AyQemNPzjA0vUPhDhGakMy5/dAuy7hlND+K9swSTBI3kz5Dcx+PfsnNLxcCtCtmBT/3RDEESJlEVQAbH0sjt9sAQpHap8lDDV2vO/8kahKM4Gpre+uloFbjiYR53qEiQkECJipq3WWQbMq/5IIyBqcruXrHen0jybpuHoWjI++deS6d1NI6A+u9+oUp0AacQOnRzMdKUiykyA14Zjb+Hws0s/fVjPpWDqQMD52Ii1O6goCtsRszJVIdU7UGCTHYctBd+iQ3Qxk5cLXs/vBZ22WIwF6/YN62Gt9aIxonTojUevL2cvCQ6YrMR+X6fAIuvD1Jso86X4Fr2jGPPbzSnfLSn4dLtf8T6XPOn4mPaivosn9eUtMptJiUl3++vYGcdnOhF8Amk7hGUI58ck+gg+vo/MfUFCHTW3XxJtsD4Hr8uelgQNPvFs6whZuUSGVCjyvo107ikqafkiCu4QgWqMfmWzs8DVYAZ3KgPKaqp62R5gIIDdjwH0XZ4DET2+h8gFs+K+T1xcbbHvo8q8i2PRCSbdX9JsupOLuqE78NXAfA=
|
@ -3,29 +3,35 @@
|
||||
from __future__ import unicode_literals
|
||||
|
||||
# pylint: disable=import-error, no-name-in-module, undefined-variable
|
||||
import _winreg
|
||||
import subprocess
|
||||
from uds.forward import forward # @UnresolvedImport
|
||||
try:
|
||||
import winreg as wreg
|
||||
except ImportError: # Python 2.7 fallback
|
||||
import _winreg as wreg # type: ignore
|
||||
|
||||
from uds import tools # @UnresolvedImport
|
||||
import subprocess
|
||||
from uds.tunnel import forward # type: ignore
|
||||
|
||||
from uds import tools # type: ignore
|
||||
|
||||
|
||||
try:
|
||||
k = _winreg.OpenKey(_winreg.HKEY_CURRENT_USER, 'Software\\Classes\\NXClient.session\\shell\\open\\command') # @UndefinedVariable
|
||||
cmd = _winreg.QueryValue(k, '') # @UndefinedVariable
|
||||
k = wreg.OpenKey(wreg.HKEY_CURRENT_USER, 'Software\\Classes\\NXClient.session\\shell\\open\\command') # @UndefinedVariable
|
||||
cmd = wreg.QueryValue(k, '')
|
||||
except Exception:
|
||||
raise Exception('''<p>You need to have installed NX Client version 3.5 in order to connect to this UDS service.</p>
|
||||
<p>Please, install appropriate package for your system.</p>
|
||||
''')
|
||||
|
||||
forwardThread, port = forward(sp['tunHost'], sp['tunPort'], sp['tunUser'], sp['tunPass'], sp['ip'], sp['port']) # @UndefinedVariable
|
||||
if forwardThread.status == 2:
|
||||
raise Exception('Unable to open tunnel')
|
||||
# Open tunnel
|
||||
fs = forward(remote=(sp['tunHost'], int(sp['tunPort'])), ticket=sp['ticket'], timeout=sp['tunWait'], check_certificate=sp['tunChk'])
|
||||
|
||||
# Check that tunnel works..
|
||||
if fs.check() is False:
|
||||
raise Exception('<p>Could not connect to tunnel server.</p><p>Please, check your network settings.</p>')
|
||||
|
||||
theFile = sp['as_file_for_format'].format( # @UndefinedVariable
|
||||
theFile = sp['as_file_for_format'].format(
|
||||
address='127.0.0.1',
|
||||
port=port
|
||||
port=fs.server_address[1]
|
||||
)
|
||||
|
||||
filename = tools.saveTempFile(theFile)
|
||||
|
@ -1 +1 @@
|
||||
am/DJVyUurBaxWYAKYoBssd9kCmlYHFE6WyRaHMZAq2z1uWYnDVpAQKVEaKlQw54ufRB/Srh+Nxcazf0GPX/5HYJfa/uxW2MywDmj5LrqULhL6Xk9+iUlBsyNcwYhciGbiA5doRhQVZh5RuuhrUtnsekwdX2x2EM4UNjImuHYCuSrWK99zHAlpkKKhdvtqTXmY4joxu6t46iy7onS8FyFa14zm48eZ/VupUgfzWxZKOAcLfCXX8vkoPdQQtTNJWNZNIcrGUpXG/vHnYiTQl2xb0QM/dBUMTR5TLG7kIlMwwqgpCPVa/rI1E/kB41W0rthQsaX5MjcrEmelg/stYu7Pfsj6gfBVtP/HrR4MWErMeX0nSsehUV1znmVIbVt8YKP2ep2GUV/QfRcGuVocI2Xw6cpKE/rlZeHqqz7yp8b0KtzjmTJRLzjCXwBthZEF9TJMZLGwIGZmiYciVx90+b/p0HuZMrKm5GY8HzG+YuI9gR1ZH8yBikHk7p+Q1Sp/k6ryMkHo46JdzNgEJgljLM0AWb7D+hilqm73Occ/0DezT+SirtBQF89qHcjMqFDO4lSgn7OgPbLGo7MqGRn67i6ZH1gnbeU3ADefWltvEVPv3ezU4Qc/nPo3yogqJAhUdstIsKtTD8VrYlbtBxfIWdWMEt9YEnfwwkvesWhNV2gHM=
|
||||
jR6BkXPX1vmZqU6AMnLXJNwHhdw+v6pt4DdqpF0bWorB7tFbxAJ7U47A2NjDPSHMVpe2qtUIpL2eBAgpQCcfEbQNyzqpJmtS2w2y2lCHfT0sb/TMjsMJLfLpwJiH4dkRfF/bP7rAw55DHj4Q0Mc/lzwxGZuTOd+sjp89WxBximdD9y2/BQF9IRlsVGQOU2pjB1Ko1Wg719gXfqBM/ezg1gC2M8vAqxRZq6jyaPIRs+Hl1GALR2gi0MiwYckopJMWGQHmgGIUt8S9bAR8M5wkmNK3Fbc7qoa+tGuthfkoVYYqhSC2Wdd9tmhcVyGSwDv77OnN4QK9MAFSJxQV2GejaOn1Dp96prtmkNn1350d8y5kjTNFV0h4Y5sGW0XtDROrg/fdbuxHf7cZhn+hThotZjNfWp7PXbc5mlwwc+gYTGIwNd7qV20WzdBodvc6X79pJP4Oy2fZbMGYPdHYjiC8yPV+SliqrhUBCYLZI0z667rGupnyu4qh0ciRrz33AKHuQZZGJfux4WFOfhB9mMUyL621ospkORGKaWwr/v7dePotGUSkUbDHBrliN/qOlgHXls9C6NDGvXr1z2nlo2VCgjQMAxkqh8Lc/DDOOBSbcZ4S8RczxBwevYdKVA+ZZ1FP+PuhA/x50JtctbjiltaBFeK8buuv25PMsFVsNuNp05k=
|
@ -47,4 +47,4 @@ else:
|
||||
if fs.check() is False:
|
||||
raise Exception('<p>Could not connect to tunnel server.</p><p>Please, check your network settings.</p>')
|
||||
|
||||
fnc(app, fs.server_address[1])
|
||||
fnc(app, fs.server_address[1])
|
||||
|
@ -1 +1 @@
|
||||
reSq28zy09GuLeWFzfhCRDX8AvYc8SQRBpIE7T7fjiHt1Cb4/KlA2sPaSuSDLI3SCI5vFSfXmm1QHesq/y0sDrs2xnZnz6BiVSXFjBBg4J6BM05QIs41u5deAe1lk/2RziColBt0Nnc75iSuLnHTt4SWYAFpjN7CKR3JcESD2gUZRpPJIfXXfgyfmlnOa1h6TGJBwANOlayV3qGzJv47mi0yw7VATFYcQtxtIqDCQeJI94IcC4PMvAeF/PBmBNfJAy0UArNhPYmnOrE38MkaMQQZkwVOWU1b1NuBjIPigYigcagjX8S75Vk83OniHnBRsW4MyhLJJuBy0+RG0WrBa0jT25Ggm76ORZuMWHTXK3x2ccxA060QMzplVFA4VwU+E9WcZWP0P2M6U9JuhWCogP5J1ufozHgiUUx1B6oC4qoThojNzVQgvgAhg/r/iEpOm13LP3+Yy2Cegiuf2KegPBJnAM8vB/I34YhGL8kDwgu7gWdeJUle1WkDVpndnl+eLRdqV301FBXaCaUZuh2NxA9gmFZjAYiOK0NlO9pLn7ATsqg+e8T+fli6aeIZahtfRCzGTIfYkL+ugxzZg3KnxjSnXPx6BxdeugKHsSGldwkx0iwWe2btlDBu2KO7Tws7FZMwd4nfHc4N4GHR1nWxam88X4R4VCEcUbkTIQJZsew=
|
||||
F12wItI+7Bo+mnANcC0IX3hdcr7d/V+XbnX7sH6zKpw7q/gEJBZW3xHaKpYDWBYYsR5pkCiJ+zawt7lHcc7+GmPJYIpFeXZeGlJWjrNN5FqqI02C+sRnuImX9DNggHGNW0hn3mGdE6U/wB1T6clXtoMK6um8cpLVQtfcVUKn1/gki4dMg+0NSJhQHfBpeQ1yffO/VLaTBWB2qnnQUjYNkqGo0x+nxJ4G67jqJU/sh0vM0OyT3JQwgIH+AidCqL694amngAprWzlOiABL3NoF/yJjn9bBfLHhHtsVp4v1YsYjTWXMegVRK8HWGvAaiGzRbOAdfjZl8GejaROSpLQTo5djBwuHN7ULtnNpk0ZCYJP00AKvQU6yW3omm5c2vZwVc1yUj5fzxnY4QY6VcpoSK15p8wR0FEWaY6kdE4bf2PWwaBGcNVGIe7itmwKv0n7AhZsJG68zmZOR45PNx1ljgFCco/Sg+rGnAxk09c0DtZNIs3BR7lhcUUHo16EFTHeUI8RwxyMKRBW75bTqrNMDUtwk7yxA58ec/mAkZmdlJ5MLYOAc1iL3U+qd8ZKxMOiwo9ZWZNsgLALXfKcg8/DGponnsrPXkmEY4CigW25t9fdooJ8WwrDTssYQJdmmOgXAkj5YyjcEryF73gXaGYL2j9tu6VKEfs9cY5WtGvfJUmA=
|
@ -7,9 +7,9 @@ import subprocess
|
||||
import shutil
|
||||
import os
|
||||
|
||||
from uds.forward import forward # @UnresolvedImport
|
||||
from uds.tunnel import forward # type: ignore
|
||||
|
||||
from uds import tools # @UnresolvedImport
|
||||
from uds import tools # type: ignore
|
||||
|
||||
# Inject local passed sp into globals for functions
|
||||
globals()['sp'] = sp # type: ignore # pylint: disable=undefined-variable
|
||||
@ -66,31 +66,31 @@ if executable is None:
|
||||
</ul>
|
||||
''')
|
||||
|
||||
forwardThread, port = forward(sp['tunHost'], sp['tunPort'], sp['tunUser'], sp['tunPass'], sp['ip'], 3389, waitTime=sp['tunWait']) # @UndefinedVariable
|
||||
address = '127.0.0.1:{}'.format(port)
|
||||
# Open tunnel
|
||||
fs = forward(remote=(sp['tunHost'], int(sp['tunPort'])), ticket=sp['ticket'], timeout=sp['tunWait'], check_certificate=sp['tunChk'])
|
||||
|
||||
if forwardThread.status == 2:
|
||||
raise Exception('Unable to open tunnel')
|
||||
# Check that tunnel works..
|
||||
if fs.check() is False:
|
||||
raise Exception('<p>Could not connect to tunnel server.</p><p>Please, check your network settings.</p>')
|
||||
|
||||
else:
|
||||
if executable == msrdc:
|
||||
theFile = theFile = sp['as_file'].format(
|
||||
address='127.0.0.1:{}'.format(port)
|
||||
)
|
||||
if executable == msrdc:
|
||||
theFile = theFile = sp['as_file'].format(
|
||||
address='127.0.0.1:{}'.format(fs.server_address[1])
|
||||
)
|
||||
|
||||
filename = tools.saveTempFile(theFile)
|
||||
# Rename as .rdp, so open recognizes it
|
||||
shutil.move(filename, filename + '.rdp')
|
||||
filename = tools.saveTempFile(theFile)
|
||||
# Rename as .rdp, so open recognizes it
|
||||
shutil.move(filename, filename + '.rdp')
|
||||
|
||||
tools.addTaskToWait(subprocess.Popen(['open', filename + '.rdp']))
|
||||
tools.addFileToUnlink(filename + '.rdp')
|
||||
elif executable == xfreerdp:
|
||||
# Fix resolution...
|
||||
try:
|
||||
xfparms = fixResolution()
|
||||
except Exception as e:
|
||||
xfparms = list(map(lambda x: x.replace('#WIDTH#', '1400').replace('#HEIGHT#', '800'), sp['as_new_xfreerdp_params']))
|
||||
tools.addTaskToWait(subprocess.Popen(['open', filename + '.rdp']))
|
||||
tools.addFileToUnlink(filename + '.rdp')
|
||||
elif executable == xfreerdp:
|
||||
# Fix resolution...
|
||||
try:
|
||||
xfparms = fixResolution()
|
||||
except Exception as e:
|
||||
xfparms = list(map(lambda x: x.replace('#WIDTH#', '1400').replace('#HEIGHT#', '800'), sp['as_new_xfreerdp_params']))
|
||||
|
||||
params = [executable] + xfparms + ['/v:{}'.format(address)]
|
||||
subprocess.Popen(params)
|
||||
params = [executable] + xfparms + ['/v:{}'.format(address)]
|
||||
subprocess.Popen(params)
|
||||
|
||||
|
@ -1 +1 @@
|
||||
r7JaSG5mEMyyzdy2QWeHZdAHSvZJ/jl2sHFmo7rdmHMeb53oh11+k1N4SEnJtXZfpyFjSxJHWW4gCWXKsWgCC/yw7qiG4iBl2LvHNcfrqg0nOrh3iVUabgzYbe7euma/fmL/9hm+biob5TnWMiysYJDaWG4vuJNK5L3KwMk2npxnXgudgBS52B0unAqdM5zpTwhlLwYOlIxR3jNiQ99FJseGy1R0lH38A3gcoN2+TLgtoxn6KYuiSHS4rvghreR0ZPVbItbGIyvjAIMJSE7d+u26moqdzG1JQw7RXHN2IWmNlbmn0J53nHZsV3L+Lir6GMZ9ATIu/lKZU9JDCq6sfjYqnac0b2JXv3ZGk/XxKmfhmXZNw/ktBCGY6TtgJOmWgxdPwYLY5oiE4ss+lKXj4wYxJ4L0Q9SH8lnaCrogNhAWtJmyMEeLFeCACLEXqHn1UFY4A/EVvSlEyhf0X4uDN0Q3kiIf+vuJ4R9YyOSItrc99FbaMan5H4XvRFGkqM0pAPXwZXyUDtMbU8/dhjhGvCnLUddJzvuDsYfhm1mD9XDWWNZ8abWpwwBvMaCuVhg7D9SmL5fsNg8MIo3Lb5n4XUr5Re3+SYkGSVoaiTcXu4GbPIJV0YAoZAUnQIYCmJYGVKC7L05Mmve+qaeeeRxNxvAkbwo8orIz9wPd8KRQnYw=
|
||||
akjWk2TMZx4h/STESjRKWvyxDs4IKdIdX2e2bX2Os6wDhFm40THwJENyXzOjjvDwIv77WgdQJLbBAbKusVA+GA70slmA6W+cdG5pMFFtjgna3OxNo8ClSHHRKer6cwz4FJ70k2nihpTfsQOIlUBr60Gt4/3Il5c7AAUED4/IpekS3MwJfWvsxEpUujP+nsQSEeIvhpFD9oqfA3WnCGD+OOZlXfMe05fNaWKA2/UmtxQlo0rvRsPV4puGjWWHZxmdYVYIvSIcNkqGc6nIxmMmO5NwHXRY7JgoCBEAeLExVcn4ZUW+qPWQji+6tvsiycIfydT2A5ZOUcpbvIY8l1zLR4HaBs6+RiAa+fVEwIlnMl4qvZl2eP7ljo2RKZeaD/t4H+9wLa1kYVEE7/suVEny/Pap6I1BkDHXh6qEUn90pE8QPCFbutzWmbVXpiE+5UhPAp7L4DMc65Oh/qW8QZVzjpB4Np6LRnxMe5Qwb4+uFYNJH2H04Bmbgor+StvEnO/4rOAb1rCOjKDD1V8tzYvUAfizXBLP1ImiHHxJ6tg5s7ztUb+vyH1rD1U5OktpkzfIaBB7/sHG87DnF+e+PDb/mKY3IKyRGL4ndf7yE2TEbOgXqH6dJUuFh1V9JALWFcaB3fPN5FC0R/EB+3iBp/RsEv5ABrqGnOImMWLgNU1OXEo=
|
@ -12,19 +12,19 @@ try:
|
||||
import winreg as wreg
|
||||
except ImportError: # Python 2.7 fallback
|
||||
import _winreg as wreg # type: ignore
|
||||
from uds.forward import forward # type: ignore
|
||||
from uds.tunnel import forward # type: ignore
|
||||
from uds.log import logger # type: ignore
|
||||
|
||||
from uds import tools # @UnresolvedImport
|
||||
from uds import tools # type: ignore
|
||||
|
||||
import six
|
||||
|
||||
forwardThread, port = forward(sp['tunHost'], sp['tunPort'], sp['tunUser'], sp['tunPass'], sp['ip'], 3389, waitTime=sp['tunWait']) # @UndefinedVariable
|
||||
# Open tunnel
|
||||
fs = forward(remote=(sp['tunHost'], int(sp['tunPort'])), ticket=sp['ticket'], timeout=sp['tunWait'], check_certificate=sp['tunChk'])
|
||||
|
||||
if forwardThread.status == 2:
|
||||
raise Exception('Unable to open tunnel')
|
||||
|
||||
tools.addTaskToWait(forwardThread)
|
||||
# Check that tunnel works..
|
||||
if fs.check() is False:
|
||||
raise Exception('<p>Could not connect to tunnel server.</p><p>Please, check your network settings.</p>')
|
||||
|
||||
try:
|
||||
thePass = six.binary_type(sp['password'].encode('UTF-16LE')) # @UndefinedVariable
|
||||
@ -36,7 +36,7 @@ except Exception:
|
||||
# The password must be encoded, to be included in a .rdp file, as 'UTF-16LE' before protecting (CtrpyProtectData) it in order to work with mstsc
|
||||
theFile = sp['as_file'].format(# @UndefinedVariable
|
||||
password=password,
|
||||
address='127.0.0.1:{}'.format(port)
|
||||
address='127.0.0.1:{}'.format(fs.server_address[1])
|
||||
)
|
||||
|
||||
filename = tools.saveTempFile(theFile)
|
||||
|
@ -1 +1 @@
|
||||
S6G+0/pOqrBIqjyFdMiCerLZWO/VaTmzW6ahRUY5iRXoukyngRs3GIFI765aQW6t0pFhhlKD+3IFx6m1CKgZhV5yq7YmYbl3Zq5ZlfkFXdgARGsSwD5rtgVWbD6H1eh+/fcV9qETlFRcw5yTs7rN4z0TEs2L40F0/AhLO1baakbYm9gj/h7BF7KlvECvV5ySddqvFU5B42EkkrkxzJYdWEHeTdfLANdW9bkFbXUBRjEebIPhugy12/stwft75/4LXRq4De+m46hrNgwF9/TwZcmqkWXuDBhosaHwCyI0eOAyjCBVLlE/u7N2Gk2k9J7k1/zDORb3iSfxb0f3xDJ4viDHY5jxe/L0cLoqKPh/m3wEJXYbUHA5vZZbIw1fPhU0QeBHk892zDpqt4Q/tHr5Q907sQJHB/jMq9Bk/lkXPVkOfcnZjQ8WGB20IGjmg/mY7Dqb8hNPCaIYgYXXHVhAx6W8ElFrb1UW4j4T2eJtnYnR8YR7CWIaHXOFOu3/ow6xvhPX78EW86n3SvEMWuWvJuFZ5/dvrdAHZ3S/NEGLcGIdsQtnjz3Cae4WSaudSk73XsyrzDcVqgpMPmWnHcFmkdJRgSiBEawAYuFYjF2RXBjIeyKN7I7k1gnpP6s4eiCOJoDWyhms/oIuJOPtS5lRblrf28WzprWH7XOU+hy6U+E=
|
||||
Jnc7MGVnKf5HG89jPUC/bdAebjCX9g6Afl9MX9d9vgpFvopcRmAw5pQrvGi+J9W8jLjg//kNoatGtZ7OCV6Umt7/UQjJyVUQ2bqGm3qBMagtr00v82vz5uUgald/kxvhHPdNYLP8ZKzSs5jESF+WeyKfF2mIhm4CpZLjmwwfQviG7V/Yr7NgENRz+gCaaGlTuz2JIxF7shZjw/zZqRzJQ6CtYozRXjJRTgO+BNNsN+k/dFKRZnRHsVIPQHooPCQ/5duDzWnqG3wEwOx4aibrOb1OSmhOtA0PQjt0pKUUveddRnKMbhqRGFA2+KbYE2pcDAaYCWTI27JEP+gPSoqjFX+8b4LnnM9qrnam5LMQ4EdURdb5/LZdAUyAm8MLglzNBhUbSzBC45PGG9Hs5lf6Hx8RCvZ5yzw17sJfAjJL8CbQoWE2/jy06hidvNDmUJbl/5NSuwAvXzB162qdGRSEpz0q1K6uYl+kmvrSgQEyu6V4P4ITbeHJmVmaaPXK5tPvf2SQhScUhz80Qclh0dE9ZZFJ46KjLohqBgRac0//MIVpuNVjvDuom/p84K3HiY0MUV8V/3KoBcDofR3T/jAwd/0ZgEkwoRNFBsBpseRXkacDq7j9zkpe0S8a5W4gQnay8tJmLmKjKd16OWhqpKLkJKVs1e87Gy1osswwU+f87AA=
|
Loading…
x
Reference in New Issue
Block a user