Skip to content

Commit 1cd9488

Browse files
authored
email cc sender (#2468)
* email sender Signed-off-by: 0ssigeno <[email protected]> * Fix Signed-off-by: 0ssigeno <[email protected]> * Added case for list Signed-off-by: 0ssigeno <[email protected]> * Blake Signed-off-by: 0ssigeno <[email protected]> --------- Signed-off-by: 0ssigeno <[email protected]>
1 parent c5c061b commit 1cd9488

File tree

3 files changed

+107
-0
lines changed

3 files changed

+107
-0
lines changed

api_app/connectors_manager/connectors/email_sender.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
from typing import List
2+
13
from django.core.mail import EmailMessage
24

35
from api_app.connectors_manager.classes import Connector
@@ -11,6 +13,7 @@ class EmailSender(Connector):
1113
header: str
1214
body: str
1315
footer: str
16+
CCs: List[str] = []
1417

1518
def run(self) -> dict:
1619
if hasattr(self, "sender") and self.sender:
@@ -27,6 +30,7 @@ def run(self) -> dict:
2730
from_email=sender,
2831
to=[self._job.observable_name],
2932
body=body,
33+
cc=self.CCs if self.CCs else [],
3034
)
3135
base_eml.send()
3236
return {
Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
from django.db import migrations
2+
from django.db.models.fields.related_descriptors import (
3+
ForwardManyToOneDescriptor,
4+
ForwardOneToOneDescriptor,
5+
ManyToManyDescriptor,
6+
)
7+
8+
params = [
9+
{
10+
"python_module": {
11+
"module": "abuse_submitter.AbuseSubmitter",
12+
"base_path": "api_app.connectors_manager.connectors",
13+
},
14+
"name": "CCs",
15+
"type": "list",
16+
"description": "List of email addresses that will be added in CC",
17+
"is_secret": False,
18+
"required": False,
19+
},
20+
{
21+
"python_module": {
22+
"module": "email_sender.EmailSender",
23+
"base_path": "api_app.connectors_manager.connectors",
24+
},
25+
"name": "CCs",
26+
"type": "list",
27+
"description": "List of email addresses that will be added in CC",
28+
"is_secret": False,
29+
"required": False,
30+
},
31+
]
32+
33+
values = []
34+
35+
36+
def _get_real_obj(Model, field, value):
37+
def _get_obj(Model, other_model, value):
38+
if isinstance(value, dict):
39+
real_vals = {}
40+
for key, real_val in value.items():
41+
real_vals[key] = _get_real_obj(other_model, key, real_val)
42+
value = other_model.objects.get_or_create(**real_vals)[0]
43+
# it is just the primary key serialized
44+
else:
45+
if isinstance(value, int):
46+
value = other_model.objects.get(pk=value)
47+
else:
48+
value = other_model.objects.get(name=value)
49+
return value
50+
51+
if (
52+
type(getattr(Model, field))
53+
in [ForwardManyToOneDescriptor, ForwardOneToOneDescriptor]
54+
and value
55+
):
56+
other_model = getattr(Model, field).get_queryset().model
57+
value = _get_obj(Model, other_model, value)
58+
elif type(getattr(Model, field)) in [ManyToManyDescriptor] and value:
59+
other_model = getattr(Model, field).rel.model
60+
value = [_get_obj(Model, other_model, val) for val in value]
61+
return value
62+
63+
64+
def _create_object(Model, data):
65+
mtm, no_mtm = {}, {}
66+
for field, value in data.items():
67+
value = _get_real_obj(Model, field, value)
68+
if type(getattr(Model, field)) is ManyToManyDescriptor:
69+
mtm[field] = value
70+
else:
71+
no_mtm[field] = value
72+
try:
73+
o = Model.objects.get(**no_mtm)
74+
except Model.DoesNotExist:
75+
o = Model(**no_mtm)
76+
o.full_clean()
77+
o.save()
78+
for field, value in mtm.items():
79+
attribute = getattr(o, field)
80+
if value is not None:
81+
attribute.set(value)
82+
return False
83+
return True
84+
85+
86+
def migrate(apps, schema_editor):
87+
Parameter = apps.get_model("api_app", "Parameter")
88+
for param in params:
89+
_create_object(Parameter, param)
90+
91+
92+
class Migration(migrations.Migration):
93+
atomic = False
94+
dependencies = [
95+
("api_app", "0062_alter_parameter_python_module"),
96+
("connectors_manager", "0031_connector_config_abusesubmitter"),
97+
]
98+
99+
operations = [migrations.RunPython(migrate, migrations.RunPython.noop)]

api_app/queryset.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -584,6 +584,10 @@ def _alias_for_test(self):
584584
When(
585585
type=ParamTypes.INT.value, then=Value(10, output_field=JSONField())
586586
),
587+
When(
588+
type=ParamTypes.LIST.value,
589+
then=Value(["test"], output_field=JSONField()),
590+
),
587591
default=Value("test", output_field=JSONField()),
588592
output_field=JSONField(),
589593
)

0 commit comments

Comments
 (0)