From 567cbce9caf92e778e183ecffeaea4a0fdcb1815 Mon Sep 17 00:00:00 2001 From: iuime <41294179+iuime@users.noreply.github.com> Date: Wed, 13 Dec 2023 15:19:44 +0800 Subject: [PATCH 01/10] Update models.py Add Send Notifications to Lark --- web/scanEngine/models.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/web/scanEngine/models.py b/web/scanEngine/models.py index 89a7cbb31..3e5c6d07f 100644 --- a/web/scanEngine/models.py +++ b/web/scanEngine/models.py @@ -70,10 +70,12 @@ class InterestingLookupModel(models.Model): class Notification(models.Model): id = models.AutoField(primary_key=True) send_to_slack = models.BooleanField(default=False) + send_to_lark = models.BooleanField(default=False) send_to_discord = models.BooleanField(default=False) send_to_telegram = models.BooleanField(default=False) slack_hook_url = models.CharField(max_length=200, null=True, blank=True) + lark_hook_url = models.CharField(max_length=200, null=True, blank=True) discord_hook_url = models.CharField(max_length=200, null=True, blank=True) telegram_bot_token = models.CharField(max_length=100, null=True, blank=True) telegram_bot_chat_id = models.CharField(max_length=100, null=True, blank=True) From 738dc06b2525a59ca4a1bf6cabfaae14eaab7eec Mon Sep 17 00:00:00 2001 From: iuime <41294179+iuime@users.noreply.github.com> Date: Wed, 13 Dec 2023 15:26:26 +0800 Subject: [PATCH 02/10] Update forms.py Add Send Notifications to Lark --- web/scanEngine/forms.py | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/web/scanEngine/forms.py b/web/scanEngine/forms.py index b4fb5455a..4eddf0d92 100644 --- a/web/scanEngine/forms.py +++ b/web/scanEngine/forms.py @@ -183,6 +183,23 @@ class Meta: "placeholder": "https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX", })) + send_to_lark = forms.BooleanField( + required=False, + widget=forms.CheckboxInput( + attrs={ + "class": "form-check-input", + "id": "lark_checkbox", + })) + + lark_hook_url = forms.CharField( + required=False, + widget=forms.TextInput( + attrs={ + "class": "form-control", + "id": "lark_hook_url", + "placeholder": "https://open.larksuite.com/open-apis/bot/v2/hook/XXXXXXXXXXXXXXXXXXXXXXXX", + })) + send_to_discord = forms.BooleanField( required=False, widget=forms.CheckboxInput( @@ -280,10 +297,12 @@ class Meta: def set_value(self, key): self.initial['send_to_slack'] = key.send_to_slack + self.initial['send_to_lark'] = key.send_to_lark self.initial['send_to_discord'] = key.send_to_discord self.initial['send_to_telegram'] = key.send_to_telegram self.initial['slack_hook_url'] = key.slack_hook_url + self.initial['lark_hook_url'] = key.lark_hook_url self.initial['discord_hook_url'] = key.discord_hook_url self.initial['telegram_bot_token'] = key.telegram_bot_token self.initial['telegram_bot_chat_id'] = key.telegram_bot_chat_id @@ -298,6 +317,8 @@ def set_value(self, key): if not key.send_to_slack: self.fields['slack_hook_url'].widget.attrs['readonly'] = True + if not key.send_to_lark: + self.fields['lark_hook_url'].widget.attrs['readonly'] = True if not key.send_to_discord: self.fields['discord_hook_url'].widget.attrs['readonly'] = True if not key.send_to_telegram: @@ -307,10 +328,12 @@ def set_value(self, key): def set_initial(self): self.initial['send_to_slack'] = False + self.initial['send_to_lark'] = False self.initial['send_to_discord'] = False self.initial['send_to_telegram'] = False self.fields['slack_hook_url'].widget.attrs['readonly'] = True + self.fields['lark_hook_url'].widget.attrs['readonly'] = True self.fields['discord_hook_url'].widget.attrs['readonly'] = True self.fields['telegram_bot_token'].widget.attrs['readonly'] = True self.fields['telegram_bot_chat_id'].widget.attrs['readonly'] = True From 7850694a262f174e290272a59472349f587fd244 Mon Sep 17 00:00:00 2001 From: iuime <41294179+iuime@users.noreply.github.com> Date: Wed, 13 Dec 2023 15:34:15 +0800 Subject: [PATCH 03/10] Update common_func.py Add Send Notifications to Lark --- web/reNgine/common_func.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/web/reNgine/common_func.py b/web/reNgine/common_func.py index cb0f1ad11..a057e5f33 100644 --- a/web/reNgine/common_func.py +++ b/web/reNgine/common_func.py @@ -572,6 +572,23 @@ def send_slack_message(message): hook_url = notif.slack_hook_url requests.post(url=hook_url, data=json.dumps(message), headers=headers) +def send_lark_message(message): + """Send lark message. + + Args: + message (str): Message. + """ + headers = {'content-type': 'application/json'} + message = {'msg_type': 'text', 'content':{'text': message}} + notif = Notification.objects.first() + do_send = ( + notif and + notif.send_to_lark and + notif.lark_hook_url) + if not do_send: + return + hook_url = notif.lark_hook_url + requests.post(url=hook_url, data=json.dumps(message), headers=headers) def send_discord_message( message, From daf11b2698ff77694bbbb54f3d2b2970ff760050 Mon Sep 17 00:00:00 2001 From: iuime <41294179+iuime@users.noreply.github.com> Date: Wed, 13 Dec 2023 16:07:14 +0800 Subject: [PATCH 04/10] Update notification.html Add Send Notifications to Lark --- .../scanEngine/settings/notification.html | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/web/scanEngine/templates/scanEngine/settings/notification.html b/web/scanEngine/templates/scanEngine/settings/notification.html index 8259884e7..215b38cd1 100644 --- a/web/scanEngine/templates/scanEngine/settings/notification.html +++ b/web/scanEngine/templates/scanEngine/settings/notification.html @@ -51,6 +51,29 @@

Send Notifications to:

Slack Webhook API Documentation +
+ +
+
+
+ +
+ {{form.send_to_lark}} +
+
+
+ {{form.lark_hook_url}} +
+ + + +
+
+
+
+ Lark Webhook API Documentation +
+
@@ -183,6 +206,16 @@

Upload S } }); + var lark_checkbox = document.getElementById("lark_checkbox"); + lark_checkbox.addEventListener('change', function() { + if (this.checked) { + document.getElementById("lark_hook_url").readOnly = false; + } + else{ + document.getElementById("lark_hook_url").readOnly = true; + } + }); + var discord_checkbox = document.getElementById("discord_checkbox"); discord_checkbox.addEventListener('change', function() { if (this.checked) { From ef69478f6d66f1ef16a1cff9d5be5042f8c3aee4 Mon Sep 17 00:00:00 2001 From: iuime <41294179+iuime@users.noreply.github.com> Date: Wed, 13 Dec 2023 16:09:17 +0800 Subject: [PATCH 05/10] Update 0001_initial.py Add Send Notifications to Lark --- web/scanEngine/migrations/0001_initial.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/web/scanEngine/migrations/0001_initial.py b/web/scanEngine/migrations/0001_initial.py index 5f0d7d51f..b656cfbc3 100644 --- a/web/scanEngine/migrations/0001_initial.py +++ b/web/scanEngine/migrations/0001_initial.py @@ -84,9 +84,11 @@ class Migration(migrations.Migration): fields=[ ('id', models.AutoField(primary_key=True, serialize=False)), ('send_to_slack', models.BooleanField(default=False)), + ('send_to_lark', models.BooleanField(default=False)), ('send_to_discord', models.BooleanField(default=False)), ('send_to_telegram', models.BooleanField(default=False)), ('slack_hook_url', models.CharField(blank=True, max_length=200, null=True)), + ('lark_hook_url', models.CharField(blank=True, max_length=200, null=True)), ('discord_hook_url', models.CharField(blank=True, max_length=200, null=True)), ('telegram_bot_token', models.CharField(blank=True, max_length=100, null=True)), ('telegram_bot_chat_id', models.CharField(blank=True, max_length=100, null=True)), From a910f20e47d385775bc99a832676655cd3c06826 Mon Sep 17 00:00:00 2001 From: iuime <41294179+iuime@users.noreply.github.com> Date: Wed, 13 Dec 2023 16:11:34 +0800 Subject: [PATCH 06/10] Update views.py Add Send Notifications to Lark --- web/scanEngine/views.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/web/scanEngine/views.py b/web/scanEngine/views.py index 0a06cb790..6426daeb0 100644 --- a/web/scanEngine/views.py +++ b/web/scanEngine/views.py @@ -11,7 +11,7 @@ from rolepermissions.decorators import has_permission_decorator from reNgine.common_func import * -from reNgine.tasks import (run_command, send_discord_message, send_slack_message, send_telegram_message) +from reNgine.tasks import (run_command, send_discord_message, send_slack_message,send_lark_message, send_telegram_message) from scanEngine.forms import * from scanEngine.forms import ConfigurationForm from scanEngine.models import * @@ -306,6 +306,7 @@ def notification_settings(request, slug): if form.is_valid(): form.save() send_slack_message('*reNgine*\nCongratulations! your notification services are working.') + send_lark_message('*reNgine*\nCongratulations! your notification services are working.') send_telegram_message('*reNgine*\nCongratulations! your notification services are working.') send_discord_message('**reNgine**\nCongratulations! your notification services are working.') messages.add_message( From bf57294aa989e53c0794d266fa6f3d601c99a68f Mon Sep 17 00:00:00 2001 From: iuime <41294179+iuime@users.noreply.github.com> Date: Wed, 13 Dec 2023 16:13:35 +0800 Subject: [PATCH 07/10] Update tasks.py Add Send Notifications to Lark --- web/reNgine/tasks.py | 1 + 1 file changed, 1 insertion(+) diff --git a/web/reNgine/tasks.py b/web/reNgine/tasks.py index 613293f86..69998c7a3 100644 --- a/web/reNgine/tasks.py +++ b/web/reNgine/tasks.py @@ -2906,6 +2906,7 @@ def send_notif( message = enrich_notification(message, scan_history_id, subscan_id) send_discord_message(message, **options) send_slack_message(message) + send_lark_message(message) send_telegram_message(message) From 35390e1c3f631b847c8ae6ab3a2b3e91ab646340 Mon Sep 17 00:00:00 2001 From: iuime <41294179+iuime@users.noreply.github.com> Date: Wed, 13 Dec 2023 20:45:03 +0800 Subject: [PATCH 08/10] Update notification.html --- web/scanEngine/templates/scanEngine/settings/notification.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/scanEngine/templates/scanEngine/settings/notification.html b/web/scanEngine/templates/scanEngine/settings/notification.html index 215b38cd1..dbd5d301e 100644 --- a/web/scanEngine/templates/scanEngine/settings/notification.html +++ b/web/scanEngine/templates/scanEngine/settings/notification.html @@ -65,7 +65,7 @@

Send Notifications to:

{{form.lark_hook_url}}
- +
From 7f127f508a325fa57df02cc2cb3615aff91dcad9 Mon Sep 17 00:00:00 2001 From: iuime <41294179+iuime@users.noreply.github.com> Date: Wed, 13 Dec 2023 22:21:22 +0800 Subject: [PATCH 09/10] Update notification.html Update logo --- web/scanEngine/templates/scanEngine/settings/notification.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/scanEngine/templates/scanEngine/settings/notification.html b/web/scanEngine/templates/scanEngine/settings/notification.html index dbd5d301e..cffc23511 100644 --- a/web/scanEngine/templates/scanEngine/settings/notification.html +++ b/web/scanEngine/templates/scanEngine/settings/notification.html @@ -65,7 +65,7 @@

Send Notifications to:

{{form.lark_hook_url}}
- +
From e93b51b8848ecc9bf64398ae23c56cd8fdd52ed4 Mon Sep 17 00:00:00 2001 From: iuime <41294179+iuime@users.noreply.github.com> Date: Wed, 13 Dec 2023 22:38:35 +0800 Subject: [PATCH 10/10] Update common_func.py Update message format to support markdown --- web/reNgine/common_func.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/reNgine/common_func.py b/web/reNgine/common_func.py index a057e5f33..4d8f48698 100644 --- a/web/reNgine/common_func.py +++ b/web/reNgine/common_func.py @@ -579,7 +579,7 @@ def send_lark_message(message): message (str): Message. """ headers = {'content-type': 'application/json'} - message = {'msg_type': 'text', 'content':{'text': message}} + message = {"msg_type":"interactive","card":{"elements":[{"tag":"div","text":{"content":message,"tag":"lark_md"}}]}} notif = Notification.objects.first() do_send = ( notif and