mirror of https://github.com/jumpserver/jumpserver
				
				
				
			
		
			
				
	
	
		
			177 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			Python
		
	
	
			
		
		
	
	
			177 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			Python
		
	
	
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,
 | 
						|
}
 |