mirror of https://github.com/jumpserver/jumpserver
feat: syslog 记录的数据来源于序列类
parent
8085db7acc
commit
67a49dc5e9
|
@ -22,13 +22,15 @@ from users.models import User
|
||||||
from users.signals import post_user_change_password
|
from users.signals import post_user_change_password
|
||||||
from terminal.models import Session, Command
|
from terminal.models import Session, Command
|
||||||
from .utils import write_login_log
|
from .utils import write_login_log
|
||||||
from . import models
|
from . import models, serializers
|
||||||
from .models import OperateLog
|
from .models import OperateLog
|
||||||
from orgs.utils import current_org
|
from orgs.utils import current_org
|
||||||
from perms.models import AssetPermission, ApplicationPermission
|
from perms.models import AssetPermission, ApplicationPermission
|
||||||
|
from terminal.backends.command.serializers import SessionCommandSerializer
|
||||||
|
from terminal.serializers import SessionSerializer
|
||||||
from common.const.signals import POST_ADD, POST_REMOVE, POST_CLEAR
|
from common.const.signals import POST_ADD, POST_REMOVE, POST_CLEAR
|
||||||
from common.utils import get_request_ip, get_logger, get_syslogger
|
from common.utils import get_request_ip, get_logger, get_syslogger
|
||||||
from common.utils.encode import model_to_json
|
from common.utils.encode import data_to_json
|
||||||
|
|
||||||
logger = get_logger(__name__)
|
logger = get_logger(__name__)
|
||||||
sys_logger = get_syslogger(__name__)
|
sys_logger = get_syslogger(__name__)
|
||||||
|
@ -255,20 +257,27 @@ def on_user_change_password(sender, user=None, **kwargs):
|
||||||
def on_audits_log_create(sender, instance=None, **kwargs):
|
def on_audits_log_create(sender, instance=None, **kwargs):
|
||||||
if sender == models.UserLoginLog:
|
if sender == models.UserLoginLog:
|
||||||
category = "login_log"
|
category = "login_log"
|
||||||
|
serializer_cls = serializers.UserLoginLogSerializer
|
||||||
elif sender == models.FTPLog:
|
elif sender == models.FTPLog:
|
||||||
category = "ftp_log"
|
category = "ftp_log"
|
||||||
|
serializer_cls = serializers.FTPLogSerializer
|
||||||
elif sender == models.OperateLog:
|
elif sender == models.OperateLog:
|
||||||
category = "operation_log"
|
category = "operation_log"
|
||||||
|
serializer_cls = serializers.OperateLogSerializer
|
||||||
elif sender == models.PasswordChangeLog:
|
elif sender == models.PasswordChangeLog:
|
||||||
category = "password_change_log"
|
category = "password_change_log"
|
||||||
|
serializer_cls = serializers.PasswordChangeLogSerializer
|
||||||
elif sender == Session:
|
elif sender == Session:
|
||||||
category = "host_session_log"
|
category = "host_session_log"
|
||||||
|
serializer_cls = SessionSerializer
|
||||||
elif sender == Command:
|
elif sender == Command:
|
||||||
category = "session_command_log"
|
category = "session_command_log"
|
||||||
|
serializer_cls = SessionCommandSerializer
|
||||||
else:
|
else:
|
||||||
return
|
return
|
||||||
|
|
||||||
data = model_to_json(instance, indent=None)
|
serializer = serializer_cls(instance)
|
||||||
|
data = data_to_json(serializer.data, indent=None)
|
||||||
msg = "{} - {}".format(category, data)
|
msg = "{} - {}".format(category, data)
|
||||||
sys_logger.info(msg)
|
sys_logger.info(msg)
|
||||||
|
|
||||||
|
|
|
@ -208,30 +208,7 @@ def ensure_last_char_is_ascii(data):
|
||||||
secret_pattern = re.compile(r'password|secret|key', re.IGNORECASE)
|
secret_pattern = re.compile(r'password|secret|key', re.IGNORECASE)
|
||||||
|
|
||||||
|
|
||||||
def model_to_dict_pro(instance, fields=None, exclude=None):
|
def data_to_json(data, sort_keys=True, indent=2, cls=None):
|
||||||
from ..fields.model import EncryptMixin
|
|
||||||
opts = instance._meta
|
|
||||||
data = {}
|
|
||||||
for f in chain(opts.concrete_fields, opts.private_fields):
|
|
||||||
if not getattr(f, 'editable', False):
|
|
||||||
continue
|
|
||||||
if fields and f.name not in fields:
|
|
||||||
continue
|
|
||||||
if exclude and f.name in exclude:
|
|
||||||
continue
|
|
||||||
if isinstance(f, FileField):
|
|
||||||
continue
|
|
||||||
if isinstance(f, EncryptMixin):
|
|
||||||
continue
|
|
||||||
if secret_pattern.search(f.name):
|
|
||||||
continue
|
|
||||||
value = f.value_from_object(instance)
|
|
||||||
data[f.name] = value
|
|
||||||
return data
|
|
||||||
|
|
||||||
|
|
||||||
def model_to_json(instance, sort_keys=True, indent=2, cls=None):
|
|
||||||
data = model_to_dict_pro(instance)
|
|
||||||
if cls is None:
|
if cls is None:
|
||||||
cls = DjangoJSONEncoder
|
cls = DjangoJSONEncoder
|
||||||
return json.dumps(data, sort_keys=sort_keys, indent=indent, cls=cls)
|
return json.dumps(data, sort_keys=sort_keys, indent=indent, cls=cls)
|
||||||
|
|
|
@ -12,7 +12,7 @@ from rest_framework import viewsets, views
|
||||||
from rest_framework.response import Response
|
from rest_framework.response import Response
|
||||||
from rest_framework.decorators import action
|
from rest_framework.decorators import action
|
||||||
|
|
||||||
from common.utils import model_to_json
|
from common.utils import data_to_json
|
||||||
from .. import utils
|
from .. import utils
|
||||||
from common.const.http import GET
|
from common.const.http import GET
|
||||||
from common.utils import get_logger, get_object_or_none
|
from common.utils import get_logger, get_object_or_none
|
||||||
|
@ -62,7 +62,9 @@ class SessionViewSet(OrgBulkModelViewSet):
|
||||||
os.chdir(dir_path)
|
os.chdir(dir_path)
|
||||||
|
|
||||||
with open(meta_filename, 'wt') as f:
|
with open(meta_filename, 'wt') as f:
|
||||||
f.write(model_to_json(session))
|
serializer = serializers.SessionDisplaySerializer(session)
|
||||||
|
data = data_to_json(serializer.data)
|
||||||
|
f.write(data)
|
||||||
|
|
||||||
with tarfile.open(offline_filename, 'w') as f:
|
with tarfile.open(offline_filename, 'w') as f:
|
||||||
f.add(replay_filename)
|
f.add(replay_filename)
|
||||||
|
|
Loading…
Reference in New Issue