mirror of
https://github.com/dkmstr/openuds.git
synced 2025-01-10 01:17:59 +03:00
Refactoring some transports, better code
This commit is contained in:
parent
6165d2db15
commit
22116aba27
@ -100,7 +100,7 @@ class Login(Handler):
|
||||
Linux = 'Linux'
|
||||
WindowsPhone = 'Windows Phone'
|
||||
Windows = 'Windows'
|
||||
Macintosh = 'Mac'
|
||||
Macintosh = 'MacOsX'
|
||||
Android = 'Android'
|
||||
iPad = 'iPad'
|
||||
iPhone = 'iPhone'
|
||||
|
@ -49,18 +49,20 @@ class KnownOS(enum.Enum):
|
||||
ChromeOS = ('CrOS',)
|
||||
WindowsPhone = ('Windows Phone',)
|
||||
Windows = ('Windows',)
|
||||
Macintosh = ('Mac',)
|
||||
MacOS = ('MacOsX',)
|
||||
Android = ('Android',)
|
||||
iPad = ('iPad',) #
|
||||
iPhone = ('iPhone',) # In fact, these are IOS both, but we can diferentiate them
|
||||
WYSE = ('WYSE',)
|
||||
Unknown = ('Unknown',)
|
||||
|
||||
def os_name(self):
|
||||
return self.value[0].lower()
|
||||
|
||||
knownOss = tuple(os for os in KnownOS if os != KnownOS.Unknown)
|
||||
|
||||
allOss = knownOss + (KnownOS.Unknown,)
|
||||
desktopOss = (KnownOS.Linux, KnownOS.Windows, KnownOS.Macintosh)
|
||||
desktopOss = (KnownOS.Linux, KnownOS.Windows, KnownOS.MacOS)
|
||||
mobilesODD = list(set(allOss) - set(desktopOss))
|
||||
|
||||
|
||||
|
@ -34,7 +34,7 @@ import logging
|
||||
import typing
|
||||
|
||||
from django.utils.translation import gettext_noop as _
|
||||
from uds.core.util import os_detector as OsDetector
|
||||
from uds.core.util import os_detector
|
||||
from .rdp_base import BaseRDPTransport
|
||||
from .rdp_file import RDPFile
|
||||
|
||||
@ -43,7 +43,6 @@ if typing.TYPE_CHECKING:
|
||||
from uds import models
|
||||
from uds.core import transports
|
||||
from uds.core.util.request import ExtendedHttpRequestWithUser
|
||||
from uds.core.util.os_detector import DetectedOsInfo
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@ -101,7 +100,7 @@ class RDPTransport(BaseRDPTransport):
|
||||
userService: 'models.UserService',
|
||||
transport: 'models.Transport',
|
||||
ip: str,
|
||||
os: 'DetectedOsInfo',
|
||||
os: 'os_detector.DetectedOsInfo',
|
||||
user: 'models.User',
|
||||
password: str,
|
||||
request: 'ExtendedHttpRequestWithUser',
|
||||
@ -147,21 +146,6 @@ class RDPTransport(BaseRDPTransport):
|
||||
r.enforcedShares = self.enforceDrives.value
|
||||
r.redirectUSB = self.usbRedirection.value
|
||||
|
||||
osName = {
|
||||
OsDetector.KnownOS.Windows: 'windows',
|
||||
OsDetector.KnownOS.Linux: 'linux',
|
||||
OsDetector.KnownOS.Macintosh: 'macosx',
|
||||
}.get(os.os)
|
||||
|
||||
if osName is None:
|
||||
logger.error(
|
||||
'Os not detected for RDP Transport: %s',
|
||||
request.META.get('HTTP_USER_AGENT', 'Unknown'),
|
||||
)
|
||||
return super().getUDSTransportScript(
|
||||
userService, transport, ip, os, user, password, request
|
||||
)
|
||||
|
||||
sp: typing.MutableMapping[str, typing.Any] = {
|
||||
'password': password,
|
||||
'this_server': request.build_absolute_uri('/'),
|
||||
@ -170,7 +154,7 @@ class RDPTransport(BaseRDPTransport):
|
||||
'address': r.address,
|
||||
}
|
||||
|
||||
if osName == 'windows':
|
||||
if os == os_detector.KnownOS.Windows:
|
||||
r.customParameters = self.customParametersWindows.value
|
||||
if password:
|
||||
r.password = '{password}' # nosec: password is not hardcoded
|
||||
@ -179,7 +163,7 @@ class RDPTransport(BaseRDPTransport):
|
||||
'as_file': r.as_file,
|
||||
}
|
||||
)
|
||||
elif osName == 'linux':
|
||||
elif os == os_detector.KnownOS.Linux:
|
||||
r.customParameters = self.customParameters.value
|
||||
sp.update(
|
||||
{
|
||||
@ -187,7 +171,7 @@ class RDPTransport(BaseRDPTransport):
|
||||
'address': r.address,
|
||||
}
|
||||
)
|
||||
else: # Mac
|
||||
elif os == os_detector.KnownOS.MacOS:
|
||||
r.customParameters = self.customParametersMAC.value
|
||||
sp.update(
|
||||
{
|
||||
@ -197,5 +181,13 @@ class RDPTransport(BaseRDPTransport):
|
||||
'address': r.address,
|
||||
}
|
||||
)
|
||||
else:
|
||||
logger.error(
|
||||
'Os not valid for RDP Transport: %s',
|
||||
request.META.get('HTTP_USER_AGENT', 'Unknown'),
|
||||
)
|
||||
return super().getUDSTransportScript(
|
||||
userService, transport, ip, os, user, password, request
|
||||
)
|
||||
|
||||
return self.getScript(osName, 'direct', sp)
|
||||
return self.getScript(os.os.os_name(), 'direct', sp)
|
||||
|
@ -90,7 +90,7 @@ class RDPFile:
|
||||
if self.target in (
|
||||
OsDetector.KnownOS.Windows,
|
||||
OsDetector.KnownOS.Linux,
|
||||
OsDetector.KnownOS.Macintosh,
|
||||
OsDetector.KnownOS.MacOS,
|
||||
):
|
||||
return self.getGeneric()
|
||||
# Unknown target
|
||||
@ -120,7 +120,7 @@ class RDPFile:
|
||||
params.append('/smartcard')
|
||||
|
||||
if self.redirectAudio:
|
||||
if self.alsa and self.target != OsDetector.KnownOS.Macintosh:
|
||||
if self.alsa and self.target != OsDetector.KnownOS.MacOS:
|
||||
params.append('/sound:sys:alsa,format:1,quality:high')
|
||||
params.append('/microphone:sys:alsa')
|
||||
else:
|
||||
@ -132,7 +132,7 @@ class RDPFile:
|
||||
params.append('/video')
|
||||
|
||||
if self.redirectDrives != 'false':
|
||||
if self.target in (OsDetector.KnownOS.Linux, OsDetector.KnownOS.Macintosh):
|
||||
if self.target in (OsDetector.KnownOS.Linux, OsDetector.KnownOS.MacOS):
|
||||
params.append('/drive:home,$HOME')
|
||||
else:
|
||||
params.append('/drive:Users,/Users')
|
||||
@ -158,7 +158,7 @@ class RDPFile:
|
||||
params.append('/multimon')
|
||||
|
||||
if self.fullScreen:
|
||||
if self.target != OsDetector.KnownOS.Macintosh:
|
||||
if self.target != OsDetector.KnownOS.MacOS:
|
||||
params.append('/f')
|
||||
else: # On mac, will fix this later...
|
||||
params.append('/w:#WIDTH#')
|
||||
|
@ -36,7 +36,7 @@ from django.utils.translation import gettext_noop as _
|
||||
from uds.core.ui import gui
|
||||
from uds.core import transports
|
||||
from uds.models import TicketStore
|
||||
from uds.core.util import os_detector as OsDetector
|
||||
from uds.core.util import os_detector
|
||||
from uds.core.util import validators
|
||||
|
||||
from .rdp_base import BaseRDPTransport
|
||||
@ -48,7 +48,6 @@ if typing.TYPE_CHECKING:
|
||||
from uds import models
|
||||
from uds.core import Module
|
||||
from uds.core.util.request import ExtendedHttpRequestWithUser
|
||||
from uds.core.util.os_detector import DetectedOsInfo
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@ -143,7 +142,7 @@ class TRDPTransport(BaseRDPTransport):
|
||||
userService: 'models.UserService',
|
||||
transport: 'models.Transport',
|
||||
ip: str,
|
||||
os: 'DetectedOsInfo',
|
||||
os: 'os_detector.DetectedOsInfo',
|
||||
user: 'models.User',
|
||||
password: str,
|
||||
request: 'ExtendedHttpRequestWithUser',
|
||||
@ -198,17 +197,6 @@ class TRDPTransport(BaseRDPTransport):
|
||||
r.enforcedShares = self.enforceDrives.value
|
||||
r.redirectUSB = self.usbRedirection.value
|
||||
|
||||
osName = {
|
||||
OsDetector.KnownOS.Windows: 'windows',
|
||||
OsDetector.KnownOS.Linux: 'linux',
|
||||
OsDetector.KnownOS.Macintosh: 'macosx',
|
||||
}.get(os.os)
|
||||
|
||||
if osName is None:
|
||||
return super().getUDSTransportScript(
|
||||
userService, transport, ip, os, user, password, request
|
||||
)
|
||||
|
||||
sp: typing.MutableMapping[str, typing.Any] = {
|
||||
'tunHost': tunHost,
|
||||
'tunPort': tunPort,
|
||||
@ -219,7 +207,7 @@ class TRDPTransport(BaseRDPTransport):
|
||||
'this_server': request.build_absolute_uri('/'),
|
||||
}
|
||||
|
||||
if osName == 'windows':
|
||||
if os.os == os_detector.KnownOS.Windows:
|
||||
r.customParameters = self.customParametersWindows.value
|
||||
if password:
|
||||
r.password = '{password}' # nosec: password is not hardcoded
|
||||
@ -228,14 +216,14 @@ class TRDPTransport(BaseRDPTransport):
|
||||
'as_file': r.as_file,
|
||||
}
|
||||
)
|
||||
elif osName == 'linux':
|
||||
elif os.os == os_detector.KnownOS.Linux:
|
||||
r.customParameters = self.customParameters.value
|
||||
sp.update(
|
||||
{
|
||||
'as_new_xfreerdp_params': r.as_new_xfreerdp_params,
|
||||
}
|
||||
)
|
||||
else: # Mac
|
||||
elif os.os == os_detector.KnownOS.MacOS:
|
||||
r.customParameters = self.customParametersMAC.value
|
||||
sp.update(
|
||||
{
|
||||
@ -244,5 +232,15 @@ class TRDPTransport(BaseRDPTransport):
|
||||
'as_rdp_url': r.as_rdp_url if self.allowMacMSRDC.isTrue() else '',
|
||||
}
|
||||
)
|
||||
else:
|
||||
logger.error(
|
||||
'Os not valid for RDP Transport: %s',
|
||||
request.META.get('HTTP_USER_AGENT', 'Unknown'),
|
||||
)
|
||||
return super().getUDSTransportScript(
|
||||
userService, transport, ip, os, user, password, request
|
||||
)
|
||||
|
||||
return self.getScript(osName, 'tunnel', sp)
|
||||
|
||||
return self.getScript(os.os.os_name(), 'tunnel', sp)
|
||||
|
||||
|
@ -113,17 +113,6 @@ class SPICETransport(BaseSpiceTransport):
|
||||
r.smartcard = self.smartCardRedirect.isTrue()
|
||||
r.ssl_connection = self.sslConnection.isTrue()
|
||||
|
||||
osName = {
|
||||
OsDetector.KnownOS.Windows: 'windows',
|
||||
OsDetector.KnownOS.Linux: 'linux',
|
||||
OsDetector.KnownOS.Macintosh: 'macosx',
|
||||
}.get(os.os)
|
||||
|
||||
if osName is None:
|
||||
return super().getUDSTransportScript(
|
||||
userService, transport, ip, os, user, password, request
|
||||
)
|
||||
|
||||
# if sso: # If SSO requested, and when supported by platform
|
||||
# userServiceInstance.desktopLogin(user, password, '')
|
||||
|
||||
@ -131,4 +120,10 @@ class SPICETransport(BaseSpiceTransport):
|
||||
'as_file': r.as_file,
|
||||
}
|
||||
|
||||
return self.getScript(osName, 'direct', sp)
|
||||
try:
|
||||
return self.getScript(os.os.os_name(), 'direct', sp)
|
||||
except Exception:
|
||||
return super().getUDSTransportScript(
|
||||
userService, transport, ip, os, user, password, request
|
||||
)
|
||||
|
||||
|
@ -188,17 +188,6 @@ class TSPICETransport(BaseSpiceTransport):
|
||||
r.smartcard = self.smartCardRedirect.isTrue()
|
||||
r.ssl_connection = self.sslConnection.isTrue()
|
||||
|
||||
osName = {
|
||||
OsDetector.KnownOS.Windows: 'windows',
|
||||
OsDetector.KnownOS.Linux: 'linux',
|
||||
OsDetector.KnownOS.Macintosh: 'macosx',
|
||||
}.get(os.os)
|
||||
|
||||
if osName is None:
|
||||
return super().getUDSTransportScript(
|
||||
userService, transport, ip, os, user, password, request
|
||||
)
|
||||
|
||||
# if sso: # If SSO requested, and when supported by platform
|
||||
# userServiceInstance.desktopLogin(user, password, '')
|
||||
|
||||
@ -213,4 +202,9 @@ class TSPICETransport(BaseSpiceTransport):
|
||||
'ticket_secure': ticket_secure,
|
||||
}
|
||||
|
||||
return self.getScript(osName, 'tunnel', sp)
|
||||
try:
|
||||
return self.getScript(os.os.os_name(), 'tunnel', sp)
|
||||
except Exception:
|
||||
return super().getUDSTransportScript(
|
||||
userService, transport, ip, os, user, password, request
|
||||
)
|
||||
|
@ -53,6 +53,7 @@ class X2GOTransport(BaseX2GOTransport):
|
||||
Provides access via X2GO 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
|
||||
"""
|
||||
|
||||
isBase = False
|
||||
|
||||
typeName = _('X2Go')
|
||||
@ -108,17 +109,11 @@ class X2GOTransport(BaseX2GOTransport):
|
||||
user=username,
|
||||
)
|
||||
|
||||
osName = {
|
||||
OsDetector.KnownOS.Windows: 'windows',
|
||||
OsDetector.KnownOS.Linux: 'linux',
|
||||
# OsDetector.Macintosh: 'macosx'
|
||||
}.get(os.os)
|
||||
sp = {'ip': ip, 'port': '22', 'key': priv, 'xf': xf}
|
||||
|
||||
if osName is None:
|
||||
try:
|
||||
return self.getScript(os.os.os_name(), 'tunnel', sp)
|
||||
except Exception:
|
||||
return super().getUDSTransportScript(
|
||||
userService, transport, ip, os, user, password, request
|
||||
)
|
||||
|
||||
sp = {'ip': ip, 'port': '22', 'key': priv, 'xf': xf}
|
||||
|
||||
return self.getScript(osName, 'direct', sp)
|
||||
|
@ -159,17 +159,6 @@ class TX2GOTransport(BaseX2GOTransport):
|
||||
|
||||
tunHost, tunPort = self.tunnelServer.value.split(':')
|
||||
|
||||
osName = {
|
||||
OsDetector.KnownOS.Windows: 'windows',
|
||||
OsDetector.KnownOS.Linux: 'linux',
|
||||
# OsDetector.Macintosh: 'macosx'
|
||||
}.get(os.os)
|
||||
|
||||
if osName is None:
|
||||
return super().getUDSTransportScript(
|
||||
userService, transport, ip, os, user, password, request
|
||||
)
|
||||
|
||||
sp = {
|
||||
'tunHost': tunHost,
|
||||
'tunPort': tunPort,
|
||||
@ -180,4 +169,9 @@ class TX2GOTransport(BaseX2GOTransport):
|
||||
'xf': xf,
|
||||
}
|
||||
|
||||
return self.getScript(osName, 'tunnel', sp)
|
||||
try:
|
||||
return self.getScript(os.os.os_name(), 'tunnel', sp)
|
||||
except Exception:
|
||||
return super().getUDSTransportScript(
|
||||
userService, transport, ip, os, user, password, request
|
||||
)
|
||||
|
Loading…
Reference in New Issue
Block a user