Skip to content

Commit aa8a3cc

Browse files
Moved pdf_report_creation.py from datagather_modules folder
1 parent 3a46059 commit aa8a3cc

File tree

1 file changed

+110
-0
lines changed

1 file changed

+110
-0
lines changed
Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
import sys
2+
sys.path.append('service')
3+
4+
import db_processing as db
5+
import files_processing as fp
6+
7+
try:
8+
import requests
9+
from datetime import datetime
10+
from jinja2 import Environment, FileSystemLoader
11+
from xhtml2pdf import pisa
12+
import os
13+
from io import BytesIO
14+
from colorama import Fore, Style
15+
import webbrowser
16+
import sqlite3
17+
except ImportError as e:
18+
print(Fore.RED + "Import error appeared. Reason: {}".format(e) + Style.RESET_ALL)
19+
sys.exit()
20+
21+
try:
22+
current_script = os.path.realpath(__file__)
23+
current_directory = os.path.dirname(current_script)
24+
cfg_file_path = os.path.join(current_directory, fp.find_files('dorkslist.txt'))
25+
print(Fore.GREEN + 'Dorks list was found at {}'.format(cfg_file_path))
26+
except TypeError as e:
27+
print(Fore.RED + 'Dorks list was not found in DPULSE root directory. Reason: {}'.format(e) + Style.RESET_ALL)
28+
sys.exit()
29+
30+
short_domain = ''
31+
search_query = []
32+
33+
def create_pdf(template_src, output_dst, context_data):
34+
env = Environment(loader=FileSystemLoader('.'))
35+
template = env.get_template(template_src)
36+
rendered_html = template.render(context_data)
37+
with open(output_dst, "w+b") as result_file:
38+
pdf = pisa.pisaDocument(BytesIO(rendered_html.encode('UTF-8')), result_file, encoding='utf-8')
39+
if pdf.err:
40+
return False
41+
return True
42+
43+
def report_assembling(short_domain, url, case_comment, data_array, report_info_array):
44+
try:
45+
ip = data_array[0]
46+
res = data_array[1]
47+
mails = data_array[2]
48+
subdomains = data_array[3]
49+
subdomains_amount = data_array[4]
50+
social_medias = data_array[5]
51+
subdomain_mails = data_array[6]
52+
subdomain_ip = data_array[8]
53+
issuer = data_array[9]
54+
subject = data_array[10]
55+
notBefore = data_array[11]
56+
notAfter = data_array[12]
57+
commonName = data_array[13]
58+
serialNumber = data_array[14]
59+
mx_records = data_array[15]
60+
robots_txt_result = data_array[16]
61+
sitemap_xml_result = data_array[17]
62+
sitemap_links_status = data_array[18]
63+
web_servers = data_array[19]
64+
cms = data_array[20]
65+
programming_languages = data_array[21]
66+
web_frameworks = data_array[22]
67+
analytics = data_array[23]
68+
javascript_frameworks = data_array[24]
69+
ports = data_array[25]
70+
hostnames = data_array[26]
71+
cpes = data_array[27]
72+
tags = data_array[28]
73+
vulns = data_array[29]
74+
dorking_status = data_array[30]
75+
common_socials = data_array[31]
76+
total_socials = data_array[32]
77+
casename = report_info_array[0]
78+
db_casename = report_info_array[1]
79+
db_creation_date = report_info_array[2]
80+
report_folder = report_info_array[3]
81+
ctime = report_info_array[4]
82+
83+
context = {'sh_domain': short_domain, 'full_url': url, 'ip_address': ip, 'registrar': res['registrar'],
84+
'creation_date': res['creation_date'],'expiration_date': res['expiration_date'],
85+
'name_servers': ', '.join(res['name_servers']),'org': res['org'],
86+
'mails': mails, 'subdomain_mails': subdomain_mails, 'subdomain_socials': social_medias,
87+
'subdomain_ip': subdomain_ip,
88+
'subdomains': subdomains, 'fb_links': common_socials['Facebook'],
89+
'tw_links': common_socials['Twitter'], 'inst_links': common_socials['Instagram'],
90+
'tg_links': common_socials['Telegram'], 'tt_links': common_socials['TikTok'],
91+
'li_links': common_socials['LinkedIn'], 'vk_links': common_socials['VKontakte'],
92+
'yt_links': common_socials['YouTube'], 'wc_links': common_socials['WeChat'],
93+
'ok_links': common_socials['Odnoklassniki'], 'robots_txt_result': robots_txt_result, 'sitemap_xml_result': sitemap_xml_result, 'dorking_status': dorking_status,
94+
'sitemap_links': sitemap_links_status, 'web_servers': web_servers, 'cms': cms, 'programming_languages': programming_languages, 'web_frameworks': web_frameworks, 'analytics': analytics,
95+
'javascript_frameworks': javascript_frameworks,
96+
'ctime': ctime, 'a_tsf': subdomains_amount, 'mx_records': mx_records, 'issuer': issuer, 'subject': subject, 'notBefore': notBefore, 'notAfter': notAfter,
97+
'commonName': commonName, 'serialNumber': serialNumber, 'ports': ports, 'hostnames': hostnames, 'cpes': cpes,
98+
'tags': tags, 'vulns': vulns, 'a_tsm': total_socials}
99+
100+
pdf_report_name = report_folder + '//' + casename
101+
template_path = 'report_template.html'
102+
if create_pdf(template_path, pdf_report_name, context):
103+
print(Fore.GREEN + "Report for {} case was created at {}".format(''.join(short_domain), ctime) + Style.RESET_ALL)
104+
else:
105+
print(Fore.RED + 'Unable to create PDF report. Reason: {}')
106+
robots_content, sitemap_content, sitemap_links_content, dorking_content = fp.get_db_columns(report_folder)
107+
pdf_blob = fp.get_blob(pdf_report_name)
108+
db.insert_blob('PDF', pdf_blob, db_casename, db_creation_date, case_comment, robots_content, sitemap_content, sitemap_links_content, dorking_content)
109+
except Exception as e:
110+
print(Fore.RED + 'Unable to create PDF report. Reason: {}'.format(e))

0 commit comments

Comments
 (0)