forked from Patrowl/PatrowlManager
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathviews.py
57 lines (45 loc) · 3.45 KB
/
views.py
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
from django.shortcuts import render
from django.db.models import Q
from assets.models import Asset, AssetGroup, AssetOwner, AssetOwnerContact, AssetOwnerDocument
from engines.models import Engine, EnginePolicy
from scans.models import ScanDefinition
from findings.models import Finding
def search_view(request):
results = []
kw = request.GET.get('srch-term', None)
if not kw:
return render(request, 'search-results.html', {'results': results})
# search by asset value or description
for asset in Asset.objects.filter(
Q(value__icontains=kw) | Q(description__icontains=kw) | Q(name__icontains=kw)):
results.append({"type": "asset", "value": asset.value, "id": asset.id, "link": "/assets/details/"+str(asset.id)})
# search by asset value or description
for asset_group in AssetGroup.objects.filter(
Q(description__icontains=kw) | Q(name__icontains=kw)):
results.append({"type": "asset_group", "value": asset_group.name, "id": asset_group.id, "link": "/assets/list"})
# search by asset owner name, url or comments
for asset_owner in AssetOwner.objects.filter(Q(name__icontains=kw) | Q(url__icontains=kw) | Q(comments__icontains=kw)):
results.append({"type": "asset_owner", "value": asset_owner.name, "id": asset_owner.id, "link": "/assets/owners/details/"+str(asset_owner.id)})
# search by asset owner contacts name, info
for asset_owner_contact in AssetOwnerContact.objects.filter(
Q(name__icontains=kw) | Q(department__icontains=kw) | Q(title__icontains=kw) | Q(url__icontains=kw) | Q(comments__icontains=kw)):
results.append({"type": "asset_owner_contact", "value": asset_owner_contact.name, "id": asset_owner_contact.id, "link": "/assets/owners/list"})
# search by asset document doctitle or comments
for asset_owner_doc in AssetOwnerDocument.objects.filter(Q(doctitle__icontains=kw) | Q(comments__icontains=kw)):
results.append({"type": "asset_owner_doc", "value": asset_owner_doc.name, "id": asset_owner_doc.id})
# search by engine name or description
for engine in Engine.objects.filter(Q(name__icontains=kw) | Q(description__icontains=kw)):
results.append({"type": "engine", "value": engine.name, "id": engine.id, "link": "/engines/edit/"+str(engine.id)})
# search by engine policy name or description
for engine_policy in EnginePolicy.objects.filter(
Q(name__icontains=kw) | Q(description__icontains=kw) | Q(options__icontains=kw)):# | Q(engine__name__icontains=kw) | Q(scopes__name__icontains=kw)):
results.append({"type": "engine_policy", "value": engine_policy.name, "id": engine_policy.id, "link": "/engines/policies/edit/"+str(engine_policy.id)})
# search on scan name or description
for scan in ScanDefinition.objects.filter(
Q(title__icontains=kw) | Q(description__icontains=kw)):
results.append({"type": "scan_definition", "value": scan.title, "id": scan.id, "link": "/scans/defs/details/"+str(scan.id)})
# search on findings title, type, references
for finding in Finding.objects.filter(
Q(title__icontains=kw) | Q(description__icontains=kw) | Q(type__icontains=kw) | Q(solution__icontains=kw) | Q(vuln_refs__icontains=kw) | Q(links__icontains=kw) | Q(tags__icontains=kw)):
results.append({"type": "finding", "value": finding.title, "id": finding.id, "link": "/findings/details/"+str(finding.id)})
return render(request, 'search-results.html', {'results': results, 'search_term': kw})