You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
jumpserver/apps/terminal/session_lifecycle.py

177 lines
5.2 KiB

from django.utils.translation import gettext_noop
from audits.const import ActivityChoices
from audits.models import ActivityLog
from common.utils import i18n_fmt
from terminal.models import Session
class SessionLifecycleEventBase(object):
def __init__(self, session: Session, reason, *args, **kwargs):
self.session = session
self.reason = reason
def detail(self):
raise NotImplementedError
def create_activity_log(self):
log_obj = ActivityLog.objects.create(
resource_id=self.session.id,
type=ActivityChoices.session_log,
detail=self.detail(),
org_id=self.session.org_id
)
return log_obj
class AssetConnectSuccess(SessionLifecycleEventBase):
name = "asset_connect_success"
i18n_text = gettext_noop("Connect to asset %s success")
def detail(self):
return i18n_fmt(self.i18n_text, self.session.asset)
class AssetConnectFinished(SessionLifecycleEventBase):
name = "asset_connect_finished"
i18n_text = gettext_noop("Connect to asset %s finished: %s")
def detail(self):
asset = self.session.asset
reason = self.reason
return i18n_fmt(self.i18n_text, asset, reason)
class UserCreateShareLink(SessionLifecycleEventBase):
name = "create_share_link"
i18n_text = gettext_noop("User %s create share link")
def detail(self):
user = self.session.user
return i18n_fmt(self.i18n_text, user)
class UserJoinSession(SessionLifecycleEventBase):
name = "user_join_session"
i18n_text = gettext_noop("User %s join session")
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.user = kwargs.get("user")
def detail(self):
return i18n_fmt(self.i18n_text, self.user)
class UserLeaveSession(SessionLifecycleEventBase):
name = "user_leave_session"
i18n_text = gettext_noop("User %s leave session")
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.user = kwargs.get("user")
def detail(self):
return i18n_fmt(self.i18n_text, self.user)
class AdminJoinMonitor(SessionLifecycleEventBase):
name = "admin_join_monitor"
i18n_text = gettext_noop("User %s join to monitor session")
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.user = kwargs.get("user")
def detail(self):
return i18n_fmt(self.i18n_text, self.user)
class AdminExitMonitor(SessionLifecycleEventBase):
name = "admin_exit_monitor"
i18n_text = gettext_noop("User %s exit to monitor session")
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.user = kwargs.get("user")
def detail(self):
return i18n_fmt(self.i18n_text, self.user)
class ReplayConvertStart(SessionLifecycleEventBase):
name = "replay_convert_start"
i18n_text = gettext_noop("Replay start to convert")
def detail(self):
return self.i18n_text
class ReplayConvertSuccess(SessionLifecycleEventBase):
name = "replay_convert_success"
i18n_text = gettext_noop("Replay successfully converted to MP4 format")
def detail(self):
return self.i18n_text
class ReplayConvertFailure(SessionLifecycleEventBase):
name = "replay_convert_failure"
i18n_text = gettext_noop("Replay failed to convert to MP4 format: %s")
def detail(self):
return i18n_fmt(self.i18n_text, self.reason)
class ReplayUploadStart(SessionLifecycleEventBase):
name = "replay_upload_start"
i18n_text = gettext_noop("Replay start to upload")
def detail(self):
return self.i18n_text
class ReplayUploadSuccess(SessionLifecycleEventBase):
name = "replay_upload_success"
i18n_text = gettext_noop("Replay successfully uploaded")
def detail(self):
return self.i18n_text
class ReplayUploadFailure(SessionLifecycleEventBase):
name = "replay_upload_failure"
i18n_text = gettext_noop("Replay failed to upload: %s")
def detail(self):
return i18n_fmt(self.i18n_text, self.reason)
reasons_map = {
'connect_failed': gettext_noop('connect failed'),
'connect_disconnect': gettext_noop('connection disconnect'),
'user_close': gettext_noop('user closed'),
'idle_disconnect': gettext_noop('idle disconnect'),
'admin_terminate': gettext_noop('admin terminated'),
'max_session_timeout': gettext_noop('maximum session time has been reached'),
'permission_expired': gettext_noop('permission has expired'),
'null_storage': gettext_noop('storage is null'),
}
lifecycle_events_map = {
AssetConnectSuccess.name: AssetConnectSuccess,
AssetConnectFinished.name: AssetConnectFinished,
UserCreateShareLink.name: UserCreateShareLink,
UserJoinSession.name: UserJoinSession,
UserLeaveSession.name: UserLeaveSession,
AdminJoinMonitor.name: AdminJoinMonitor,
AdminExitMonitor.name: AdminExitMonitor,
ReplayConvertStart.name: ReplayConvertStart,
ReplayConvertSuccess.name: ReplayConvertSuccess,
ReplayConvertFailure.name: ReplayConvertFailure,
ReplayUploadStart.name: ReplayUploadStart,
ReplayUploadSuccess.name: ReplayUploadSuccess,
ReplayUploadFailure.name: ReplayUploadFailure,
}