forked from canada-ca/tracker
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathformatting.py
More file actions
142 lines (114 loc) · 5.21 KB
/
formatting.py
File metadata and controls
142 lines (114 loc) · 5.21 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
"""Provides results formatting functions used in methods on Domain and Organization classes"""
GUIDANCE_TAG_CATEGORIES = (
"positiveGuidanceTags",
"neutralGuidanceTags",
"negativeGuidanceTags",
)
def format_dmarc_monthly(result):
"""Formats the result dict in get_dmarc_summary
:param dict result: unformatted dict with results of DMARC_SUMMARY
:return: formatted results
:rtype: dict
"""
result = result["findDomainByDomain"]
result[result.pop("domain")] = result.pop("dmarcSummaryByPeriod")
return result
def format_dmarc_yearly(result):
"""Formats the result dict in get_yearly_dmarc_summaries
:param dict result: unformatted dict with results of YEARLY_DMARC_SUMMARIES
:return: formatted results
:rtype: dict
"""
result = result["findDomainByDomain"]
result[result.pop("domain")] = result.pop("yearlyDmarcSummaries")
return result
def format_summary(result):
"""Formats the result dict in get_summary_by_name
:param dict result: unformatted dict with results of SUMMARY_BY_SLUG
:return: formatted results
:rtype: dict"""
result = {
result["findOrganizationBySlug"].pop("acronym"): result[
"findOrganizationBySlug"
]
}
return result
def format_all_results(result):
"""Formats the result dict in get_all_results
:param dict result: unformatted dict with results of ALL_RESULTS
:return: formatted results
:rtype: dict"""
for result_category in ("web", "email"):
# Extract the contents of the lists of nodes holding results
result["findDomainByDomain"][result_category] = {
k: list(map(lambda item: item["node"], v["edges"]))
for (k, v) in result["findDomainByDomain"][result_category].items()
}
# For each scan category, change guidance tags from lists of edges with nodes
# to dicts with tagId as keys
for scan_category in result["findDomainByDomain"][result_category]:
# dkim is structured differently and has no results currently
if (scan_category) != "dkim":
for scan in result["findDomainByDomain"][result_category][
scan_category
]:
for tag_category in GUIDANCE_TAG_CATEGORIES:
scan[tag_category] = scan[tag_category]["edges"]
scan[tag_category] = {
tag["node"].pop("tagId"): tag["node"]
for tag in scan[tag_category]
}
result = {result["findDomainByDomain"].pop("domain"): result["findDomainByDomain"]}
return result
def format_web_results(result):
"""Formats the result dict in get_all_results
:param dict result: unformatted dict with results of ALL_RESULTS
:return: formatted results
:rtype: dict"""
# Extract the contents of the list of nodes holding web results
result["findDomainByDomain"]["web"] = {
k: list(map(lambda item: item["node"], v["edges"]))
for (k, v) in result["findDomainByDomain"]["web"].items()
}
# For each scan category, change guidance tags from lists of edges with nodes
# to dicts with tagId as keys
for scan_category in result["findDomainByDomain"]["web"]:
for scan in result["findDomainByDomain"]["web"][scan_category]:
for tag_category in GUIDANCE_TAG_CATEGORIES:
scan[tag_category] = scan[tag_category]["edges"]
scan[tag_category] = {
tag["node"].pop("tagId"): tag["node"] for tag in scan[tag_category]
}
result = {result["findDomainByDomain"].pop("domain"): result["findDomainByDomain"]}
return result
def format_email_results(result):
"""Formats the result dict in get_email_results
:param dict result: unformatted dict with results of EMAIL_RESULTS
:return: formatted results
:rtype: dict"""
# Extract the contents of the list of nodes holding email results
result["findDomainByDomain"]["email"] = {
k: list(map(lambda item: item["node"], v["edges"]))
for (k, v) in result["findDomainByDomain"]["email"].items()
}
# For each scan category, change guidance tags from lists of edges with nodes
# to dicts with tagId as keys
for scan_category in result["findDomainByDomain"]["email"]:
# dkim is structured differently and has no results currently
if (scan_category) != "dkim":
for scan in result["findDomainByDomain"]["email"][scan_category]:
for tag_category in GUIDANCE_TAG_CATEGORIES:
scan[tag_category] = scan[tag_category]["edges"]
scan[tag_category] = {
tag["node"].pop("tagId"): tag["node"]
for tag in scan[tag_category]
}
result = {result["findDomainByDomain"].pop("domain"): result["findDomainByDomain"]}
return result
def format_domain_status(result):
"""Formats the result dict in get_domain_status
:param dict result: unformatted dict with results of DOMAIN_STATUS
:return: formatted results
:rtype: dict"""
result = {result["findDomainByDomain"].pop("domain"): result["findDomainByDomain"]}
return result