mirror of https://github.com/jumpserver/jumpserver
refactor: 重构消息
parent
f64740c2db
commit
d34c7edb00
|
@ -1,9 +1,12 @@
|
|||
from typing import Iterable
|
||||
import traceback
|
||||
from itertools import chain
|
||||
import time
|
||||
|
||||
from celery import shared_task
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
from common.utils.timezone import now
|
||||
from common.utils import lazyproperty
|
||||
from users.models import User
|
||||
from notifications.backends import BACKEND
|
||||
|
@ -97,29 +100,50 @@ class Message(metaclass=MessageType):
|
|||
def get_common_msg(self) -> dict:
|
||||
raise NotImplementedError
|
||||
|
||||
def get_text_msg(self) -> dict:
|
||||
return self.common_msg
|
||||
|
||||
def get_html_msg(self) -> dict:
|
||||
return self.common_msg
|
||||
|
||||
@lazyproperty
|
||||
def common_msg(self) -> dict:
|
||||
return self.get_common_msg()
|
||||
|
||||
@lazyproperty
|
||||
def text_msg(self) -> dict:
|
||||
return self.get_text_msg()
|
||||
|
||||
@lazyproperty
|
||||
def html_msg(self) -> dict:
|
||||
return self.get_html_msg()
|
||||
|
||||
# --------------------------------------------------------------
|
||||
# 支持不同发送消息的方式定义自己的消息内容,比如有些支持 html 标签
|
||||
def get_dingtalk_msg(self) -> dict:
|
||||
return self.common_msg
|
||||
# 钉钉相同的消息一天只能发一次,所以给所有消息添加基于时间的序号,使他们不相同
|
||||
message = self.text_msg['message']
|
||||
suffix = _('\nTime: {}').format(now())
|
||||
|
||||
return {
|
||||
'subject': self.text_msg['subject'],
|
||||
'message': message + suffix
|
||||
}
|
||||
|
||||
def get_wecom_msg(self) -> dict:
|
||||
return self.common_msg
|
||||
return self.text_msg
|
||||
|
||||
def get_feishu_msg(self) -> dict:
|
||||
return self.common_msg
|
||||
return self.text_msg
|
||||
|
||||
def get_email_msg(self) -> dict:
|
||||
return self.common_msg
|
||||
return self.html_msg
|
||||
|
||||
def get_site_msg_msg(self) -> dict:
|
||||
return self.common_msg
|
||||
return self.html_msg
|
||||
|
||||
def get_sms_msg(self) -> dict:
|
||||
return self.common_msg
|
||||
return self.text_msg
|
||||
# --------------------------------------------------------------
|
||||
|
||||
|
||||
|
|
|
@ -9,6 +9,7 @@ from notifications.notifications import SystemMessage
|
|||
from terminal.models import Session, Command
|
||||
from notifications.models import SystemMsgSubscription
|
||||
from notifications.backends import BACKEND
|
||||
from common.utils import lazyproperty
|
||||
|
||||
logger = get_logger(__name__)
|
||||
|
||||
|
@ -23,12 +24,8 @@ class CommandAlertMixin:
|
|||
_get_message: Callable
|
||||
message_type_label: str
|
||||
|
||||
def get_dingtalk_msg(self) -> str:
|
||||
msg = self._get_message()
|
||||
msg = msg.replace('<br>', '')
|
||||
return msg
|
||||
|
||||
def get_subject(self):
|
||||
@lazyproperty
|
||||
def subject(self):
|
||||
_input = self.command['input']
|
||||
if isinstance(_input, str):
|
||||
_input = _input.replace('\r\n', ' ').replace('\r', ' ').replace('\n', ' ')
|
||||
|
@ -70,7 +67,35 @@ class CommandAlertMessage(CommandAlertMixin, SystemMessage):
|
|||
def __init__(self, command):
|
||||
self.command = command
|
||||
|
||||
def _get_message(self):
|
||||
def get_text_msg(self) -> dict:
|
||||
command = self.command
|
||||
session = Session.objects.get(id=command['session'])
|
||||
session_detail_url = reverse(
|
||||
'api-terminal:session-detail', kwargs={'pk': command['session']},
|
||||
external=True, api_to_ui=True
|
||||
)
|
||||
|
||||
message = _("""
|
||||
Command: %(command)s
|
||||
Asset: %(hostname)s (%(host_ip)s)
|
||||
User: %(user)s
|
||||
Level: %(risk_level)s
|
||||
Session: %(session_detail_url)s?oid=%(oid)s
|
||||
""") % {
|
||||
'command': command['input'],
|
||||
'hostname': command['asset'],
|
||||
'host_ip': session.asset_obj.ip,
|
||||
'user': command['user'],
|
||||
'risk_level': Command.get_risk_level_str(command['risk_level']),
|
||||
'session_detail_url': session_detail_url,
|
||||
'oid': session.org_id
|
||||
}
|
||||
return {
|
||||
'subject': self.subject,
|
||||
'message': message
|
||||
}
|
||||
|
||||
def get_html_msg(self) -> dict:
|
||||
command = self.command
|
||||
session = Session.objects.get(id=command['session'])
|
||||
session_detail_url = reverse(
|
||||
|
@ -98,15 +123,9 @@ class CommandAlertMessage(CommandAlertMixin, SystemMessage):
|
|||
'session_detail_url': session_detail_url,
|
||||
'oid': session.org_id
|
||||
}
|
||||
return message
|
||||
|
||||
def get_common_msg(self):
|
||||
msg = self._get_message()
|
||||
subject = self.get_subject()
|
||||
|
||||
return {
|
||||
'subject': subject,
|
||||
'message': msg
|
||||
'subject': self.subject,
|
||||
'message': message
|
||||
}
|
||||
|
||||
|
||||
|
@ -118,7 +137,7 @@ class CommandExecutionAlert(CommandAlertMixin, SystemMessage):
|
|||
def __init__(self, command):
|
||||
self.command = command
|
||||
|
||||
def _get_message(self):
|
||||
def get_html_msg(self) -> dict:
|
||||
command = self.command
|
||||
_input = command['input']
|
||||
_input = _input.replace('\n', '<br>')
|
||||
|
@ -141,13 +160,31 @@ class CommandExecutionAlert(CommandAlertMixin, SystemMessage):
|
|||
'user': command['user'],
|
||||
'risk_level': Command.get_risk_level_str(command['risk_level'])
|
||||
}
|
||||
return message
|
||||
|
||||
def get_common_msg(self):
|
||||
subject = self.get_subject()
|
||||
message = self._get_message()
|
||||
|
||||
return {
|
||||
'subject': subject,
|
||||
'subject': self.subject,
|
||||
'message': message
|
||||
}
|
||||
|
||||
def get_text_msg(self) -> dict:
|
||||
command = self.command
|
||||
_input = command['input']
|
||||
|
||||
assets = ', '.join([str(asset) for asset in command['assets']])
|
||||
message = _("""
|
||||
Assets: %(assets)s
|
||||
User: %(user)s
|
||||
Level: %(risk_level)s
|
||||
|
||||
Commands 👇 ------------
|
||||
%(command)s
|
||||
------------------------
|
||||
""") % {
|
||||
'command': _input,
|
||||
'assets': assets,
|
||||
'user': command['user'],
|
||||
'risk_level': Command.get_risk_level_str(command['risk_level'])
|
||||
}
|
||||
return {
|
||||
'subject': self.subject,
|
||||
'message': message
|
||||
}
|
||||
|
|
|
@ -6,38 +6,7 @@ from common.utils import reverse, get_request_ip_or_data, get_request_user_agent
|
|||
from notifications.notifications import UserMessage
|
||||
|
||||
|
||||
class BaseUserMessage(UserMessage):
|
||||
def get_text_msg(self) -> dict:
|
||||
raise NotImplementedError
|
||||
|
||||
def get_html_msg(self) -> dict:
|
||||
raise NotImplementedError
|
||||
|
||||
@lazyproperty
|
||||
def text_msg(self) -> dict:
|
||||
return self.get_text_msg()
|
||||
|
||||
@lazyproperty
|
||||
def html_msg(self) -> dict:
|
||||
return self.get_html_msg()
|
||||
|
||||
def get_dingtalk_msg(self) -> dict:
|
||||
return self.text_msg
|
||||
|
||||
def get_wecom_msg(self) -> dict:
|
||||
return self.text_msg
|
||||
|
||||
def get_feishu_msg(self) -> dict:
|
||||
return self.text_msg
|
||||
|
||||
def get_email_msg(self) -> dict:
|
||||
return self.html_msg
|
||||
|
||||
def get_site_msg_msg(self) -> dict:
|
||||
return self.html_msg
|
||||
|
||||
|
||||
class ResetPasswordMsg(BaseUserMessage):
|
||||
class ResetPasswordMsg(UserMessage):
|
||||
def get_text_msg(self) -> dict:
|
||||
user = self.user
|
||||
subject = _('Reset password')
|
||||
|
@ -104,7 +73,7 @@ Login direct 👇
|
|||
}
|
||||
|
||||
|
||||
class ResetPasswordSuccessMsg(BaseUserMessage):
|
||||
class ResetPasswordSuccessMsg(UserMessage):
|
||||
def __init__(self, user, request):
|
||||
super().__init__(user)
|
||||
self.ip_address = get_request_ip_or_data(request)
|
||||
|
@ -187,7 +156,7 @@ Browser: %(browser)s
|
|||
}
|
||||
|
||||
|
||||
class PasswordExpirationReminderMsg(BaseUserMessage):
|
||||
class PasswordExpirationReminderMsg(UserMessage):
|
||||
def get_text_msg(self) -> dict:
|
||||
user = self.user
|
||||
|
||||
|
@ -263,7 +232,7 @@ Login direct 👇
|
|||
}
|
||||
|
||||
|
||||
class UserExpirationReminderMsg(BaseUserMessage):
|
||||
class UserExpirationReminderMsg(UserMessage):
|
||||
def get_text_msg(self) -> dict:
|
||||
subject = _('Expiration notice')
|
||||
message = _("""
|
||||
|
@ -303,7 +272,7 @@ In order not to affect your normal work, please contact the administrator for co
|
|||
}
|
||||
|
||||
|
||||
class ResetSSHKeyMsg(BaseUserMessage):
|
||||
class ResetSSHKeyMsg(UserMessage):
|
||||
def get_text_msg(self) -> dict:
|
||||
subject = _('SSH Key Reset')
|
||||
message = _("""
|
||||
|
@ -347,7 +316,7 @@ Login direct 👇
|
|||
}
|
||||
|
||||
|
||||
class ResetMFAMsg(BaseUserMessage):
|
||||
class ResetMFAMsg(UserMessage):
|
||||
def get_text_msg(self) -> dict:
|
||||
subject = _('MFA Reset')
|
||||
message = _("""
|
||||
|
|
Loading…
Reference in New Issue