mirror of https://github.com/jumpserver/jumpserver
perf: 添加lion终端类型; 修改加入会话校验逻辑(vnc/rdp)
parent
5e9006d0c2
commit
189bc9d74a
|
@ -16,7 +16,7 @@ PROJECT_DIR = const.PROJECT_DIR
|
||||||
# SECURITY WARNING: keep the secret key used in production secret!
|
# SECURITY WARNING: keep the secret key used in production secret!
|
||||||
SECRET_KEY = CONFIG.SECRET_KEY
|
SECRET_KEY = CONFIG.SECRET_KEY
|
||||||
|
|
||||||
# SECURITY WARNING: keep the token secret, remove it if all coco, guacamole ok
|
# SECURITY WARNING: keep the token secret, remove it if all koko, lion ok
|
||||||
BOOTSTRAP_TOKEN = CONFIG.BOOTSTRAP_TOKEN
|
BOOTSTRAP_TOKEN = CONFIG.BOOTSTRAP_TOKEN
|
||||||
|
|
||||||
# SECURITY WARNING: don't run with debug turned on in production!
|
# SECURITY WARNING: don't run with debug turned on in production!
|
||||||
|
|
|
@ -90,7 +90,7 @@ class SessionViewSet(OrgBulkModelViewSet):
|
||||||
|
|
||||||
def filter_queryset(self, queryset):
|
def filter_queryset(self, queryset):
|
||||||
queryset = super().filter_queryset(queryset)
|
queryset = super().filter_queryset(queryset)
|
||||||
# 解决guacamole更新session时并发导致幽灵会话的问题
|
# 解决guacamole更新session时并发导致幽灵会话的问题,暂不处理
|
||||||
if self.request.method in ('PATCH',):
|
if self.request.method in ('PATCH',):
|
||||||
queryset = queryset.select_for_update()
|
queryset = queryset.select_for_update()
|
||||||
return queryset
|
return queryset
|
||||||
|
@ -98,11 +98,6 @@ class SessionViewSet(OrgBulkModelViewSet):
|
||||||
def perform_create(self, serializer):
|
def perform_create(self, serializer):
|
||||||
if hasattr(self.request.user, 'terminal'):
|
if hasattr(self.request.user, 'terminal'):
|
||||||
serializer.validated_data["terminal"] = self.request.user.terminal
|
serializer.validated_data["terminal"] = self.request.user.terminal
|
||||||
sid = serializer.validated_data["system_user"]
|
|
||||||
# guacamole提交的是id
|
|
||||||
if is_uuid(sid):
|
|
||||||
_system_user = get_object_or_404(SystemUser, id=sid)
|
|
||||||
serializer.validated_data["system_user"] = _system_user.name
|
|
||||||
return super().perform_create(serializer)
|
return super().perform_create(serializer)
|
||||||
|
|
||||||
def get_permissions(self):
|
def get_permissions(self):
|
||||||
|
@ -140,6 +135,7 @@ class SessionReplayViewSet(AsyncApiMixin, viewsets.ViewSet):
|
||||||
def get_replay_data(session, url):
|
def get_replay_data(session, url):
|
||||||
tp = 'json'
|
tp = 'json'
|
||||||
if session.protocol in ('rdp', 'vnc'):
|
if session.protocol in ('rdp', 'vnc'):
|
||||||
|
# 需要考虑录像播放和离线播放器的约定,暂时不处理
|
||||||
tp = 'guacamole'
|
tp = 'guacamole'
|
||||||
|
|
||||||
download_url = reverse('api-terminal:session-replay-download', kwargs={'pk': session.id})
|
download_url = reverse('api-terminal:session-replay-download', kwargs={'pk': session.id})
|
||||||
|
|
|
@ -39,11 +39,6 @@ class StatusViewSet(viewsets.ModelViewSet):
|
||||||
|
|
||||||
def handle_sessions(self):
|
def handle_sessions(self):
|
||||||
session_ids = self.request.data.get('sessions', [])
|
session_ids = self.request.data.get('sessions', [])
|
||||||
# guacamole 上报的 session 是字符串
|
|
||||||
# "[53cd3e47-210f-41d8-b3c6-a184f3, 53cd3e47-210f-41d8-b3c6-a184f4]"
|
|
||||||
if isinstance(session_ids, str):
|
|
||||||
session_ids = session_ids[1:-1].split(',')
|
|
||||||
session_ids = [sid.strip() for sid in session_ids if sid.strip()]
|
|
||||||
Session.set_sessions_active(session_ids)
|
Session.set_sessions_active(session_ids)
|
||||||
|
|
||||||
def get_queryset(self):
|
def get_queryset(self):
|
||||||
|
|
|
@ -43,6 +43,7 @@ class TerminalTypeChoices(TextChoices):
|
||||||
guacamole = 'guacamole', 'Guacamole'
|
guacamole = 'guacamole', 'Guacamole'
|
||||||
omnidb = 'omnidb', 'OmniDB'
|
omnidb = 'omnidb', 'OmniDB'
|
||||||
xrdp = 'xrdp', 'Xrdp'
|
xrdp = 'xrdp', 'Xrdp'
|
||||||
|
lion = 'lion', 'Lion'
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def types(cls):
|
def types(cls):
|
||||||
|
|
|
@ -109,7 +109,9 @@ class Session(OrgModelMixin):
|
||||||
_PROTOCOL = self.PROTOCOL
|
_PROTOCOL = self.PROTOCOL
|
||||||
if self.is_finished:
|
if self.is_finished:
|
||||||
return False
|
return False
|
||||||
if self.protocol in [_PROTOCOL.SSH, _PROTOCOL.TELNET, _PROTOCOL.K8S]:
|
if self.protocol in [
|
||||||
|
_PROTOCOL.SSH, _PROTOCOL.VNC, _PROTOCOL.RDP, _PROTOCOL.TELNET, _PROTOCOL.K8S
|
||||||
|
]:
|
||||||
return True
|
return True
|
||||||
else:
|
else:
|
||||||
return False
|
return False
|
||||||
|
|
Loading…
Reference in New Issue