From 11a9430188227b341a93f159ee24a72ff82f875b Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Sat, 2 Nov 2024 23:55:28 +0300 Subject: [PATCH 01/46] Bumped version to v1.1.4 --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index bbaa278..e2a5d3f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "poetry.core.masonry.api" [tool.poetry] name = "dpulse" -version = "1.1.3" +version = "1.1.4" description = "Convenient,fast and user-friendly collector of domain information from Open-Sources" authors = ["OSINT-TECHNOLOGIES "] readme = "README.md" From 676baefb3cce5948aae5769da772c2385b82d882 Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Sat, 2 Nov 2024 23:56:11 +0300 Subject: [PATCH 02/46] Bumped version to v1.1.4 --- service/cli_init.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/service/cli_init.py b/service/cli_init.py index 541de86..7f1ec8d 100644 --- a/service/cli_init.py +++ b/service/cli_init.py @@ -20,7 +20,7 @@ def welcome_menu(self): fig = Figlet(font=wm_font) print('\n') self.console.print(fig.renderText('DPULSE'), style=preview_style) - print(Fore.MAGENTA + Style.BRIGHT + '[DPULSE-CLI] - [v1.1.3 rolling] - [OSINT-TECHNOLOGIES]\n' + Style.RESET_ALL) + print(Fore.MAGENTA + Style.BRIGHT + '[DPULSE-CLI] - [v1.1.4 rolling] - [OSINT-TECHNOLOGIES]\n' + Style.RESET_ALL) print(Fore.MAGENTA + Style.BRIGHT + 'Visit our pages:\nhttps://github.com/OSINT-TECHNOLOGIES\nhttps://pypi.org/project/dpulse/' + Style.RESET_ALL) def print_main_menu(self): From 2f8a4e5ccacd5b9ab2e14f9dae4004b609fba81c Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Tue, 5 Nov 2024 21:27:11 +0300 Subject: [PATCH 03/46] Significant cosmetical improvements for PDF/HTML reports Added TOC, Dorking results part, separators and some changes in paragraphs contents --- .../default_report_temp.html | 255 ++++++++---------- 1 file changed, 116 insertions(+), 139 deletions(-) diff --git a/service/pdf_report_templates/default_report_temp.html b/service/pdf_report_templates/default_report_temp.html index 1586fbe..1b252cb 100644 --- a/service/pdf_report_templates/default_report_temp.html +++ b/service/pdf_report_templates/default_report_temp.html @@ -7,6 +7,22 @@

Open Source Information Research Report

{{org}}

 

+
+

 

+

Table of contents

+

1. General scan information

+

[BASIC SCAN INFO]

+

2. WHOIS information

+

3. Social medias links

+

4. Subdomains information

+

5. DNS & SSL information

+

6. Services & frameworks information

+

7. Basic pre-pentest information

+

[DORKING SCAN INFO]

+

8. Dorking queries and results links

+

 

+
+

 

GENERAL SCAN INFORMATION

Total subdomains found: {{a_tsf}}

Total social media links found: {{a_tsm}}

@@ -17,6 +33,7 @@

PageSearch conduction: {{pagesearch_ui_mark}}

Report creation time: {{ctime}}

 

+

 

 

WHOIS INFORMATION

@@ -28,174 +45,134 @@

Expiration date: {{expiration_date}}

Organization name: {{org}}

Contact e-mails: {{mails}}

-

 

- -

SOCIAL MEDIAS SEARCH RESULTS

-

 

 

+
+

 

+

SOCIAL MEDIAS SEARCH RESULTS

FACEBOOK:

    {% for link in fb_links %}
  • => {{ link }}
  • {% endfor %}

TWITTER:

-
    - {% for link in tw_links %} -
  • => {{ link }}
  • - {% endfor %} -
+
    {% for link in tw_links %} +
  • => {{ link }}
  • + {% endfor %}

INSTAGRAM:

-
    - {% for link in inst_links %} -
  • => {{ link }}
  • - {% endfor %} -
+
    {% for link in inst_links %} +
  • => {{ link }}
  • + {% endfor %}

TELEGRAM:

-
    - {% for link in tg_links %} -
  • => {{ link }}
  • - {% endfor %} -
+
    {% for link in tg_links %} +
  • => {{ link }}
  • + {% endfor %}

TIKTOK:

-
    - {% for link in tt_links %} -
  • => {{ link }}
  • - {% endfor %} -
+
    {% for link in tt_links %} +
  • => {{ link }}
  • + {% endfor %}

LINKEDIN:

-
    - {% for link in li_links %} -
  • => {{ link }}
  • - {% endfor %} -
+
    {% for link in li_links %} +
  • => {{ link }}
  • + {% endfor %}

VKONTAKTE:

-
    - {% for link in vk_links %} -
  • => {{ link }}
  • - {% endfor %} -
+
    {% for link in vk_links %} +
  • => {{ link }}
  • + {% endfor %}

YOUTUBE:

-
    - {% for link in yt_links %} -
  • => {{ link }}
  • - {% endfor %} -
+
    {% for link in yt_links %} +
  • => {{ link }}
  • + {% endfor %}

ODNOKLASSNIKI:

-
    - {% for link in ok_links %} -
  • => {{ link }}
  • - {% endfor %} -
+
    {% for link in ok_links %} +
  • => {{ link }}
  • + {% endfor %}

WECHAT:

-
    - {% for link in wc_links %} -
  • => {{ link }}
  • - {% endfor %} -
+
    {% for link in wc_links %} +
  • => {{ link }}
  • + {% endfor %}

 

- +

 

+

SUBDOMAINS ANALYSIS RESULTS

Found subdomains:

-
    - {% for sd in subdomains %} -
  • => {{ sd }}
  • - {% endfor %} -
+
    {% for sd in subdomains %} +
  • => {{ sd }}
  • + {% endfor %}

Subdomains IP addresses:

-
    - {% for sdip in subdomain_ip %} -
  • => {{ sdip }}
  • - {% endfor %} -
+
    {% for sdip in subdomain_ip %} +
  • => {{ sdip }}
  • + {% endfor %}

Subdomains e-mails:

-
    - {% for smails in subdomain_mails %} -
  • => {{ smails }}
  • - {% endfor %} -
+
    {% for smails in subdomain_mails %} +
  • => {{ smails }}
  • + {% endfor %}
+

 

- -

DNS SCAN RESULTS

-

Name servers: {{name_servers}}

-

MX addresses: {{mx_records}}

+

DNS & SSL INFORMATION

+

(DNS) Name servers: {{name_servers}}

+

(DNS) MX addresses: {{mx_records}}

+

(SSL) Issuer: {{issuer}}

+

(SSL) Subject: {{subject}}

+

(SSL) Not before: {{notBefore}}

+

(SSL) Not after: {{notAfter}}

+

(SSL) Certificate name: {{commonName}}

+

(SSL) Certificate serial number: {{serialNumber}}

 

-

SSL CERTIFICATE INFORMATION

-

Issuer: {{issuer}}

-

Subject: {{subject}}

-

Not before: {{notBefore}}

-

Not after: {{notAfter}}

-

Certificate name: {{commonName}}

-

Certificate serial number: {{serialNumber}}

+

 

- -

INTERNETDB API SEARCH RESULTS

-

Open ports:

-
    - {% for op in ports %} -
  • => {{ op }}
  • - {% endfor %} -

Hostnames:

-
    - {% for hn in hostnames %} -
  • => {{ hn }}
  • - {% endfor %} -

Tags:

-
    - {% for tag in tags %} -
  • => {{ tag }}
  • - {% endfor %} -

Potential vulnerabilities:

-
    - {% for vuln in vulns %} -
  • => {{ vuln }}
  • - {% endfor %} -

Common Platform Enumeration:

-
    - {% for cpe in cpes %} -
  • => {{ cpe }}
  • - {% endfor %} -

 

-

WEBSITE TECHNOLOGIES SEARCH RESULTS

+

SERVICES & FRAMEWORKS INFORMATION

Web servers:

-
    - {% for ws in web_servers %} -
  • => {{ ws }}
  • - {% endfor %} -
+
    {% for ws in web_servers %} +
  • => {{ ws }}
  • + {% endfor %}

CMS:

-
    - {% for cm in cms %} -
  • => {{ cm }}
  • - {% endfor %} -
+
    {% for cm in cms %} +
  • => {{ cm }}
  • + {% endfor %}

Used programming languages:

-
    - {% for pl in programming_languages %} -
  • => {{ pl }}
  • - {% endfor %} -
+
    {% for pl in programming_languages %} +
  • => {{ pl }}
  • + {% endfor %}

Used web frameworks:

-
    - {% for wf in web_frameworks %} -
  • => {{ wf }}
  • - {% endfor %} -
+
    {% for wf in web_frameworks %} +
  • => {{ wf }}
  • + {% endfor %}

Analytics service:

-
    - {% for analytic in analytics %} -
  • => {{ analytic }}
  • - {% endfor %} -
+
    {% for analytic in analytics %} +
  • => {{ analytic }}
  • + {% endfor %}

Used JavaScript frameworks:

-
    - {% for jsf in javascript_frameworks %} -
  • => {{ jsf }}
  • - {% endfor %} -
-

 

-

 

-

 

+
    {% for jsf in javascript_frameworks %} +
  • => {{ jsf }}
  • + {% endfor %}
+

Tags:

+
    {% for tag in tags %} +
  • => {{ tag }}
  • + {% endfor %}
+

Common Platform Enumeration:

+
    {% for cpe in cpes %} +
  • => {{ cpe }}
  • + {% endfor %}
+
+

 

+

BASIC PRE-PENTEST INFORMATION

+

Open ports:

+
    {% for op in ports %} +
  • => {{ op }}
  • + {% endfor %}
+

Hostnames:

+
    {% for hn in hostnames %} +
  • => {{ hn }}
  • + {% endfor %}
+

Potential vulnerabilities:

+
    {% for vuln in vulns %} +
  • => {{ vuln }}
  • + {% endfor %}

 

- +
+

 

+

DORKING SCAN INFO

+
{{ add_dsi | safe }}

+

Created using DPULSE software by OSINT-TECHNOLOGIES

Visit our web-pages:

    From 3408639a649c9d7de9a85435a5e7a3b18822a504 Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Tue, 5 Nov 2024 21:30:12 +0300 Subject: [PATCH 04/46] Removed ps/si HTML report template usage, added dorking results file reading for reporting --- reporting_modules/html_report_creation.py | 89 ++++++++--------------- 1 file changed, 30 insertions(+), 59 deletions(-) diff --git a/reporting_modules/html_report_creation.py b/reporting_modules/html_report_creation.py index f1b5dee..ca3dff8 100644 --- a/reporting_modules/html_report_creation.py +++ b/reporting_modules/html_report_creation.py @@ -101,65 +101,36 @@ def report_assembling(short_domain, url, case_comment, data_array, report_info_a new_emails = email.split(', ') subdomain_mails_cleaned.extend(new_emails) - if pagesearch_keyword == 'n': - template_path = pdf_templates_path + '//default_report_temp.html' - context = {'sh_domain': short_domain, 'full_url': url, 'ip_address': ip, 'registrar': res['registrar'], - 'creation_date': res['creation_date'],'expiration_date': res['expiration_date'], - 'name_servers': ', '.join(res['name_servers']),'org': res['org'], - 'mails': mails, 'subdomain_mails': subdomain_mails_cleaned, 'subdomain_socials': social_medias, - 'subdomain_ip': subdomain_ip, - 'subdomains': subdomains, 'fb_links': common_socials['Facebook'], - 'tw_links': common_socials['Twitter'], 'inst_links': common_socials['Instagram'], - 'tg_links': common_socials['Telegram'], 'tt_links': common_socials['TikTok'], - 'li_links': common_socials['LinkedIn'], 'vk_links': common_socials['VKontakte'], - 'yt_links': common_socials['YouTube'], 'wc_links': common_socials['WeChat'], - 'ok_links': common_socials['Odnoklassniki'], 'robots_txt_result': robots_txt_result, 'sitemap_xml_result': sitemap_xml_result, - 'sitemap_links': sitemap_links_status, 'web_servers': web_servers, 'cms': cms, 'programming_languages': programming_languages, 'web_frameworks': web_frameworks, 'analytics': analytics, - 'javascript_frameworks': javascript_frameworks, - 'ctime': report_ctime, 'a_tsf': subdomains_amount, 'mx_records': mx_records, 'issuer': issuer, 'subject': subject, 'notBefore': notBefore, 'notAfter': notAfter, - 'commonName': commonName, 'serialNumber': serialNumber, 'ports': ports, 'hostnames': hostnames, 'cpes': cpes, - 'tags': tags, 'vulns': vulns, 'a_tsm': total_socials, 'pagesearch_ui_mark': pagesearch_ui_mark, 'dorking_status': dorking_status} - - elif pagesearch_keyword == 'y': - template_path = pdf_templates_path + '//ps_report_temp.html' - context = {'sh_domain': short_domain, 'full_url': url, 'ip_address': ip, 'registrar': res['registrar'], - 'creation_date': res['creation_date'],'expiration_date': res['expiration_date'], - 'name_servers': ', '.join(res['name_servers']),'org': res['org'], - 'mails': mails, 'subdomain_mails': subdomain_mails_cleaned, 'subdomain_socials': social_medias, - 'subdomain_ip': subdomain_ip, - 'subdomains': subdomains, 'fb_links': common_socials['Facebook'], - 'tw_links': common_socials['Twitter'], 'inst_links': common_socials['Instagram'], - 'tg_links': common_socials['Telegram'], 'tt_links': common_socials['TikTok'], - 'li_links': common_socials['LinkedIn'], 'vk_links': common_socials['VKontakte'], - 'yt_links': common_socials['YouTube'], 'wc_links': common_socials['WeChat'], - 'ok_links': common_socials['Odnoklassniki'], 'robots_txt_result': robots_txt_result, 'sitemap_xml_result': sitemap_xml_result, - 'sitemap_links': sitemap_links_status, 'web_servers': web_servers, 'cms': cms, 'programming_languages': programming_languages, 'web_frameworks': web_frameworks, 'analytics': analytics, - 'javascript_frameworks': javascript_frameworks, - 'ctime': report_ctime, 'a_tsf': subdomains_amount, 'mx_records': mx_records, 'issuer': issuer, 'subject': subject, 'notBefore': notBefore, 'notAfter': notAfter, - 'commonName': commonName, 'serialNumber': serialNumber, 'ports': ports, 'hostnames': hostnames, 'cpes': cpes, - 'tags': tags, 'vulns': vulns, 'a_tsm': total_socials, 'pagesearch_ui_mark': pagesearch_ui_mark, - 'acc_sd': accessible_subdomains, 'add_mails': emails_amount, 'extr_files': files_counter, 'cookies': cookies_counter, 'apis': api_keys_counter, - 'wpe': website_elements_counter, 'exp_pass': exposed_passwords_counter, 'kml': keywords_messages_list, 'dorking_status': dorking_status} - - elif pagesearch_keyword == 'si': - template_path = pdf_templates_path + '//si_report_temp.html' - context = {'sh_domain': short_domain, 'full_url': url, 'ip_address': ip, 'registrar': res['registrar'], - 'creation_date': res['creation_date'],'expiration_date': res['expiration_date'], - 'name_servers': ', '.join(res['name_servers']),'org': res['org'], - 'mails': mails, 'subdomain_mails': subdomain_mails_cleaned, 'subdomain_socials': social_medias, - 'subdomain_ip': subdomain_ip, - 'subdomains': subdomains, 'fb_links': common_socials['Facebook'], - 'tw_links': common_socials['Twitter'], 'inst_links': common_socials['Instagram'], - 'tg_links': common_socials['Telegram'], 'tt_links': common_socials['TikTok'], - 'li_links': common_socials['LinkedIn'], 'vk_links': common_socials['VKontakte'], - 'yt_links': common_socials['YouTube'], 'wc_links': common_socials['WeChat'], - 'ok_links': common_socials['Odnoklassniki'], 'robots_txt_result': robots_txt_result, 'sitemap_xml_result': sitemap_xml_result, - 'sitemap_links': sitemap_links_status, 'web_servers': web_servers, 'cms': cms, 'programming_languages': programming_languages, 'web_frameworks': web_frameworks, 'analytics': analytics, - 'javascript_frameworks': javascript_frameworks, - 'ctime': report_ctime, 'a_tsf': subdomains_amount, 'mx_records': mx_records, 'issuer': issuer, 'subject': subject, 'notBefore': notBefore, 'notAfter': notAfter, - 'commonName': commonName, 'serialNumber': serialNumber, 'ports': ports, 'hostnames': hostnames, 'cpes': cpes, - 'tags': tags, 'vulns': vulns, 'a_tsm': total_socials, 'pagesearch_ui_mark': pagesearch_ui_mark, - 'a_sml': total_links_counter, 'acc_sml': accessed_links_counter, 'add_mails': emails_amount, 'dorking_status': dorking_status} + template_path = pdf_templates_path + '//default_report_temp.html' + dorking_results_path = report_folder + '//04-dorking_results.txt' + if os.path.isfile(dorking_results_path): + with open(dorking_results_path, 'r') as f: + add_dsi = f.read() + else: + add_dsi = 'Dorking mode was not enabled so there is no results to see' + context = {'sh_domain': short_domain, 'full_url': url, 'ip_address': ip, 'registrar': res['registrar'], + 'creation_date': res['creation_date'], 'expiration_date': res['expiration_date'], + 'name_servers': ', '.join(res['name_servers']), 'org': res['org'], + 'mails': mails, 'subdomain_mails': subdomain_mails_cleaned, 'subdomain_socials': social_medias, + 'subdomain_ip': subdomain_ip, + 'subdomains': subdomains, 'fb_links': common_socials['Facebook'], + 'tw_links': common_socials['Twitter'], 'inst_links': common_socials['Instagram'], + 'tg_links': common_socials['Telegram'], 'tt_links': common_socials['TikTok'], + 'li_links': common_socials['LinkedIn'], 'vk_links': common_socials['VKontakte'], + 'yt_links': common_socials['YouTube'], 'wc_links': common_socials['WeChat'], + 'ok_links': common_socials['Odnoklassniki'], 'robots_txt_result': robots_txt_result, + 'sitemap_xml_result': sitemap_xml_result, + 'sitemap_links': sitemap_links_status, 'web_servers': web_servers, 'cms': cms, + 'programming_languages': programming_languages, 'web_frameworks': web_frameworks, + 'analytics': analytics, + 'javascript_frameworks': javascript_frameworks, + 'ctime': report_ctime, 'a_tsf': subdomains_amount, 'mx_records': mx_records, 'issuer': issuer, + 'subject': subject, 'notBefore': notBefore, 'notAfter': notAfter, + 'commonName': commonName, 'serialNumber': serialNumber, 'ports': ports, 'hostnames': hostnames, + 'cpes': cpes, + 'tags': tags, 'vulns': vulns, 'a_tsm': total_socials, 'pagesearch_ui_mark': pagesearch_ui_mark, + 'dorking_status': dorking_status, + 'add_dsi': add_dsi} html_report_name = report_folder + '//' + casename if generate_report(context, html_report_name, template_path): From 643827e9ff6169ac07358aed3af8d790008f6e07 Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Tue, 5 Nov 2024 21:54:36 +0300 Subject: [PATCH 05/46] More cosmetical improvements for HTML report template --- service/pdf_report_templates/default_report_temp.html | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/service/pdf_report_templates/default_report_temp.html b/service/pdf_report_templates/default_report_temp.html index 1b252cb..606fbf7 100644 --- a/service/pdf_report_templates/default_report_temp.html +++ b/service/pdf_report_templates/default_report_temp.html @@ -19,8 +19,7 @@

    6. Services & frameworks information

    7. Basic pre-pentest information

    [DORKING SCAN INFO]

    -

    8. Dorking queries and results links

    -

     

    +

    8. Dorking queries and results links (if was selected)

     


     

    GENERAL SCAN INFORMATION

    From 5a616f2a7634c4f7198b3409517bc594e38e5c16 Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Wed, 6 Nov 2024 00:35:30 +0300 Subject: [PATCH 06/46] Added PS and SI paragraphs for reporting --- .../default_report_temp.html | 30 +++++++++++++++++-- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/service/pdf_report_templates/default_report_temp.html b/service/pdf_report_templates/default_report_temp.html index 606fbf7..289abd6 100644 --- a/service/pdf_report_templates/default_report_temp.html +++ b/service/pdf_report_templates/default_report_temp.html @@ -19,9 +19,13 @@

    6. Services & frameworks information

    7. Basic pre-pentest information

    [DORKING SCAN INFO]

    -

    8. Dorking queries and results links (if was selected)

     

    -
    +

    8. Dorking queries and results links (if was selected)

    +

    [PAGESEARCH SCAN INFO]

    +

    9. PageSearch results (if was selected)

    +

    10. PageSearch Sitemap Inspection results (if was selected)

     

    +
    +
     

    GENERAL SCAN INFORMATION

    Total subdomains found: {{a_tsf}}

    Total social media links found: {{a_tsm}}

    @@ -170,8 +174,28 @@

     

    DORKING SCAN INFO

    -
    {{ add_dsi | safe }}

    +
    {{ add_dsi | safe }}

    +

     

    +

    PAGESEARCH RESULTS

    +

     

    +

    Amount of accessible subdomains: {{ps_s}}

    +

    Amount of email addresses: {{ps_e}}

    +

    Amount of found documents: {{ps_f}}

    +

    Amount of found cookies: {{ps_c}}

    +

    Amount of found API key: {{ps_a}}

    +

    Amount of WEB elements found: {{ps_w}}

    +

    Amount of exposed passwords found: {{ps_p}}

    +

     

    +
    +

     

    +

    PAGESEARCH SITEMAP INSPECTION RESULTS

    +

     

    +

    Total links amount: {{ss_l}}

    +

    Amount of accessed links: {{ss_a}}

    +

     

    +
    +

     

    Created using DPULSE software by OSINT-TECHNOLOGIES

    Visit our web-pages:

      From 36f774d08b20a4845a0b079804d0ed9531fb90c4 Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Wed, 6 Nov 2024 00:36:07 +0300 Subject: [PATCH 07/46] Added PS and SI paragraphs support in HTML template --- reporting_modules/html_report_creation.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/reporting_modules/html_report_creation.py b/reporting_modules/html_report_creation.py index ca3dff8..1919156 100644 --- a/reporting_modules/html_report_creation.py +++ b/reporting_modules/html_report_creation.py @@ -108,6 +108,7 @@ def report_assembling(short_domain, url, case_comment, data_array, report_info_a add_dsi = f.read() else: add_dsi = 'Dorking mode was not enabled so there is no results to see' + context = {'sh_domain': short_domain, 'full_url': url, 'ip_address': ip, 'registrar': res['registrar'], 'creation_date': res['creation_date'], 'expiration_date': res['expiration_date'], 'name_servers': ', '.join(res['name_servers']), 'org': res['org'], @@ -130,7 +131,8 @@ def report_assembling(short_domain, url, case_comment, data_array, report_info_a 'cpes': cpes, 'tags': tags, 'vulns': vulns, 'a_tsm': total_socials, 'pagesearch_ui_mark': pagesearch_ui_mark, 'dorking_status': dorking_status, - 'add_dsi': add_dsi} + 'add_dsi': add_dsi, 'ps_s': accessible_subdomains, 'ps_e': emails_amount, 'ps_f': files_counter, 'ps_c': cookies_counter, 'ps_a': api_keys_counter, + 'ps_w': website_elements_counter, 'ps_p': exposed_passwords_counter, 'ss_l': total_links_counter, 'ss_a': accessed_links_counter} html_report_name = report_folder + '//' + casename if generate_report(context, html_report_name, template_path): From 1b1723f9f0007d2d95e8503375f24021db024fb5 Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Thu, 7 Nov 2024 13:40:27 +0300 Subject: [PATCH 08/46] Cosmetical improvements for HTML report template --- .../default_report_temp.html | 24 ++++++++++--------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/service/pdf_report_templates/default_report_temp.html b/service/pdf_report_templates/default_report_temp.html index 289abd6..0475ffc 100644 --- a/service/pdf_report_templates/default_report_temp.html +++ b/service/pdf_report_templates/default_report_temp.html @@ -8,7 +8,7 @@

      {{org}}

       


      -

       

      +
       

      Table of contents

      1. General scan information

      [BASIC SCAN INFO]

      @@ -37,7 +37,6 @@

      Report creation time: {{ctime}}

       


      -

       

       

      WHOIS INFORMATION

      Domain: {{sh_domain}}

      @@ -50,7 +49,7 @@

      Contact e-mails: {{mails}}

       


      -

       

      +
       

      SOCIAL MEDIAS SEARCH RESULTS

      FACEBOOK:

        {% for link in fb_links %} @@ -92,9 +91,9 @@

        {% for link in wc_links %}
      • => {{ link }}
      • {% endfor %}

      -

       

      -

       

      +

       


      +
       

      SUBDOMAINS ANALYSIS RESULTS

      Found subdomains:

        {% for sd in subdomains %} @@ -108,8 +107,9 @@

        {% for smails in subdomain_mails %}
      • => {{ smails }}
      • {% endfor %}

      +

       


      -

       

      +
       

      DNS & SSL INFORMATION

      (DNS) Name servers: {{name_servers}}

      (DNS) MX addresses: {{mx_records}}

      @@ -121,7 +121,7 @@

      (SSL) Certificate serial number: {{serialNumber}}

       


      -

       

      +
       

      SERVICES & FRAMEWORKS INFORMATION

      Web servers:

        {% for ws in web_servers %} @@ -155,8 +155,9 @@

        {% for cpe in cpes %}
      • => {{ cpe }}
      • {% endfor %}

      +

       


      -

       

      +
       

      BASIC PRE-PENTEST INFORMATION

      Open ports:

        {% for op in ports %} @@ -172,11 +173,12 @@

         


        -

         

        +
         

        DORKING SCAN INFO

        {{ add_dsi | safe }}
        +

         


        -

         

        +
         

        PAGESEARCH RESULTS

         

        Amount of accessible subdomains: {{ps_s}}

        @@ -188,7 +190,7 @@

        Amount of exposed passwords found: {{ps_p}}

         


        -

         

        +
         

        PAGESEARCH SITEMAP INSPECTION RESULTS

         

        Total links amount: {{ss_l}}

        From 123a92e9dc5abf1c47428ef310f10dfcd0c63784 Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Thu, 7 Nov 2024 15:25:19 +0300 Subject: [PATCH 09/46] Added message about PDF report deprecation and further removal --- dpulse.py | 1 + 1 file changed, 1 insertion(+) diff --git a/dpulse.py b/dpulse.py index 3868826..83834e8 100644 --- a/dpulse.py +++ b/dpulse.py @@ -89,6 +89,7 @@ def run(): print(Fore.RED + "Entered domain is not accessible. Scan is impossible" + Style.RESET_ALL) break case_comment = input(Fore.YELLOW + "Enter case comment >> ") + print(Fore.GREEN + "Be advised that PDF report support is deprecated since v1.1.4. Instead, try to work with HTML report :)\nSoon PDF report creation choice will be removed" + Style.RESET_ALL) report_filetype = input(Fore.YELLOW + "Enter report file extension [xlsx/pdf/html] >> ") if not report_filetype: print(Fore.RED + "\nReport filetype cannot be empty") From f85a66e24e13ba9fe4f052f62998a594651edbef Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Thu, 7 Nov 2024 15:26:36 +0300 Subject: [PATCH 10/46] Updated poetry.lock for v1.1.4 --- poetry.lock | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/poetry.lock b/poetry.lock index fd28251..1cd4e33 100644 --- a/poetry.lock +++ b/poetry.lock @@ -371,13 +371,13 @@ wmi = ["wmi (>=1.5.1)"] [[package]] name = "et-xmlfile" -version = "1.1.0" +version = "2.0.0" description = "An implementation of lxml.xmlfile for the standard library" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" files = [ - {file = "et_xmlfile-1.1.0-py3-none-any.whl", hash = "sha256:a2ba85d1d6a74ef63837eed693bcb89c3f752169b0e3e7ae5b16ca5e1b3deada"}, - {file = "et_xmlfile-1.1.0.tar.gz", hash = "sha256:8eb9e2bc2f8c97e37a2dc85a09ecdcdec9d8a396530a6d5a33b30b9a92da0c5c"}, + {file = "et_xmlfile-2.0.0-py3-none-any.whl", hash = "sha256:7a91720bc756843502c3b7504c77b8fe44217c85c537d85037f0f536151b2caa"}, + {file = "et_xmlfile-2.0.0.tar.gz", hash = "sha256:dab3f4764309081ce75662649be815c4c9081e88f0837825f90fd28317d4da54"}, ] [[package]] @@ -988,23 +988,24 @@ files = [ [[package]] name = "pypdf" -version = "5.0.1" +version = "5.1.0" description = "A pure-python PDF library capable of splitting, merging, cropping, and transforming PDF files" optional = false python-versions = ">=3.8" files = [ - {file = "pypdf-5.0.1-py3-none-any.whl", hash = "sha256:ff8a32da6c7a63fea9c32fa4dd837cdd0db7966adf6c14f043e3f12592e992db"}, - {file = "pypdf-5.0.1.tar.gz", hash = "sha256:a361c3c372b4a659f9c8dd438d5ce29a753c79c620dc6e1fd66977651f5547ea"}, + {file = "pypdf-5.1.0-py3-none-any.whl", hash = "sha256:3bd4f503f4ebc58bae40d81e81a9176c400cbbac2ba2d877367595fb524dfdfc"}, + {file = "pypdf-5.1.0.tar.gz", hash = "sha256:425a129abb1614183fd1aca6982f650b47f8026867c0ce7c4b9f281c443d2740"}, ] [package.dependencies] typing_extensions = {version = ">=4.0", markers = "python_version < \"3.11\""} [package.extras] -crypto = ["PyCryptodome", "cryptography"] +crypto = ["cryptography"] +cryptodome = ["PyCryptodome"] dev = ["black", "flit", "pip-tools", "pre-commit (<2.18.0)", "pytest-cov", "pytest-socket", "pytest-timeout", "pytest-xdist", "wheel"] docs = ["myst_parser", "sphinx", "sphinx_rtd_theme"] -full = ["Pillow (>=8.0.0)", "PyCryptodome", "cryptography"] +full = ["Pillow (>=8.0.0)", "cryptography"] image = ["Pillow (>=8.0.0)"] [[package]] From 1e3bfb338a9ed88e723c4c5a08169543c43557f8 Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Sat, 9 Nov 2024 15:03:53 +0300 Subject: [PATCH 11/46] Added used API flag transfer to Report Storage DB --- reporting_modules/html_report_creation.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/reporting_modules/html_report_creation.py b/reporting_modules/html_report_creation.py index 1919156..b09af69 100644 --- a/reporting_modules/html_report_creation.py +++ b/reporting_modules/html_report_creation.py @@ -76,6 +76,7 @@ def report_assembling(short_domain, url, case_comment, data_array, report_info_a db_creation_date = report_info_array[2] report_folder = report_info_array[3] report_ctime = report_info_array[6] + api_scan_db = report_info_array[7] pdf_templates_path = 'service//pdf_report_templates' @@ -144,7 +145,7 @@ def report_assembling(short_domain, url, case_comment, data_array, report_info_a dorking_content = df.read() robots_content, sitemap_content, sitemap_links_content, dorking_content = fp.get_db_columns(report_folder) pdf_blob = fp.get_blob(html_report_name) - db.insert_blob('HTML', pdf_blob, db_casename, db_creation_date, case_comment, robots_content, sitemap_content, sitemap_links_content, dorking_content) + db.insert_blob('HTML', pdf_blob, db_casename, db_creation_date, case_comment, robots_content, sitemap_content, sitemap_links_content, dorking_content, api_scan_db) except Exception as e: print(Fore.RED + 'Unable to create HTML report. See journal for details') logging.error(f'HTML REPORT CREATION: ERROR. REASON: {e}') From 978f800d7802075154ee3be738ea265bc0355f22 Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Sat, 9 Nov 2024 15:04:38 +0300 Subject: [PATCH 12/46] Added used API flag transfer to Report Storage DB --- datagather_modules/data_assembler.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/datagather_modules/data_assembler.py b/datagather_modules/data_assembler.py index cff43d7..c65050f 100644 --- a/datagather_modules/data_assembler.py +++ b/datagather_modules/data_assembler.py @@ -252,16 +252,21 @@ def data_gathering(self, short_domain, url, report_file_type, pagesearch_flag, k dorking_status, dorking_file_path = dp.save_results_to_txt(report_folder, table, dp.get_dorking_query(short_domain, dorking_db_path, table)) print(Fore.LIGHTMAGENTA_EX + f"\n[EXTENDED SCAN END: {dorking_flag.upper()} DORKING]\n" + Style.RESET_ALL) + api_scan_db = [] if used_api_flag != ['Empty']: print(Fore.LIGHTMAGENTA_EX + f"\n[EXTENDED SCAN START: API SCANNING]\n" + Style.RESET_ALL) if 1 in used_api_flag: api_virustotal_check(short_domain) + api_scan_db.append('VirusTotal') if 2 in used_api_flag: api_securitytrails_check(short_domain) + api_scan_db.append('SecurityTrails') print(Fore.LIGHTMAGENTA_EX + f"\n[EXTENDED SCAN END: API SCANNING]\n" + Style.RESET_ALL) else: + api_scan_db.append('No') pass + data_array = [ip, res, mails, subdomains, subdomains_amount, social_medias, subdomain_mails, sd_socials, subdomain_ip, issuer, subject, notBefore, notAfter, commonName, serialNumber, mx_records, robots_txt_result, sitemap_xml_result, sitemap_links_status, @@ -270,6 +275,6 @@ def data_gathering(self, short_domain, url, report_file_type, pagesearch_flag, k accessible_subdomains, emails_amount, files_counter, cookies_counter, api_keys_counter, website_elements_counter, exposed_passwords_counter, total_links_counter, accessed_links_counter, keywords_messages_list, dorking_status, dorking_file_path] - report_info_array = [casename, db_casename, db_creation_date, report_folder, ctime, report_file_type, report_ctime] + report_info_array = [casename, db_casename, db_creation_date, report_folder, ctime, report_file_type, report_ctime, api_scan_db] logging.info(f'### THIS LOG PART FOR {casename} CASE, TIME: {ctime} ENDS HERE') return data_array, report_info_array From 8798355feaf60cc788028467336331d25be6c5d9 Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Sat, 9 Nov 2024 15:05:29 +0300 Subject: [PATCH 13/46] Added used API flag transfer to Report Storage DB, added new column in RSDB --- service/db_processing.py | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/service/db_processing.py b/service/db_processing.py index b929770..25aab24 100644 --- a/service/db_processing.py +++ b/service/db_processing.py @@ -27,6 +27,7 @@ def db_creation(db_path): "robots_text" TEXT, "sitemap_text" TEXT, "sitemap_file" TEXT, + "api_scan" TEXT, PRIMARY KEY("id" AUTOINCREMENT) ); """ @@ -45,7 +46,7 @@ def db_select(): rows = cursor.fetchall() if rows: try: - select_query = "SELECT creation_date, report_file_extension, target, id, comment, dorks_results, robots_text, sitemap_text, sitemap_file FROM report_storage;" + select_query = "SELECT creation_date, report_file_extension, target, id, comment, dorks_results, robots_text, sitemap_text, sitemap_file, api_scan FROM report_storage;" cursor.execute(select_query) records = cursor.fetchall() for row in records: @@ -56,7 +57,7 @@ def db_select(): robots_presence = "In DB" if len(row[6]) > 1: sitemap_presence = "In DB" - print(Fore.LIGHTBLUE_EX + f"Case ID: {row[3]} | Case name: {row[2]} | Case file extension: {row[1]} | Case comment: {row[4]} | Case creation date: {row[0]} | Dorks: {dorks_presence} | robots.txt: {robots_presence} | sitemap.xml: {sitemap_presence}" + Style.RESET_ALL) + print(Fore.LIGHTBLUE_EX + f"Case ID: {row[3]} | Case name: {row[2]} | Case file extension: {row[1]} | Case comment: {row[4]} | Case creation date: {row[0]} | Dorking: {dorks_presence} | robots.txt: {robots_presence} | sitemap.xml: {sitemap_presence} | API scan: {ap}" + Style.RESET_ALL) except sqlite3.Error as e: print(Fore.RED + "Failed to see storage database's content. Reason: {}".format(e)) sqlite_connection.close() @@ -104,16 +105,25 @@ def db_report_recreate(extracted_folder_name, id_to_extract): except Exception as e: print(Fore.RED + "Error appeared when recreating report from database. Reason: {}".format(e)) -def insert_blob(report_file_type, pdf_blob, db_casename, creation_date, case_comment, robots, sitemap_xml, sitemap_links, dorking_results): #, dorking_results was removed here +def insert_blob(report_file_type, pdf_blob, db_casename, creation_date, case_comment, robots, sitemap_xml, sitemap_links, dorking_results, api_scan_db): #, dorking_results was removed here try: sqlite_connection = sqlite3.connect('report_storage.db') cursor = sqlite_connection.cursor() print(Fore.GREEN + "Connected to report storage database") + if 'No' in api_scan_db: + api_scan_insert = 'No' + elif 'VirusTotal' and 'SecurityTrails' in api_scan_db: + api_scan_insert = 'VirusTotal and SecurityTrails' + elif 'VirusTotal' in api_scan_db: + api_scan_insert = 'VirusTotal' + elif 'SecurityTrails' in api_scan_db: + api_scan_insert = 'SecurityTrails' + sqlite_insert_blob_query = """INSERT INTO report_storage - (report_file_extension, report_content, creation_date, target, comment, sitemap_file, robots_text, sitemap_text, dorks_results) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)""" + (report_file_extension, report_content, creation_date, target, comment, sitemap_file, robots_text, sitemap_text, dorks_results, api_scan) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)""" #dorks_results was removed between comment and robots_text - data_tuple = (report_file_type, pdf_blob, creation_date, db_casename, case_comment, sitemap_xml, robots, sitemap_links, dorking_results) + data_tuple = (report_file_type, pdf_blob, creation_date, db_casename, case_comment, sitemap_xml, robots, sitemap_links, dorking_results, api_scan_insert) cursor.execute(sqlite_insert_blob_query, data_tuple) sqlite_connection.commit() print(Fore.GREEN + "Scanning results are successfully saved in report storage database") From c9d0dacd73ecd10adecef130a3c42f0925aae8ef Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Sat, 9 Nov 2024 15:09:31 +0300 Subject: [PATCH 14/46] Added API scan status to show in DB CLI --- service/db_processing.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/service/db_processing.py b/service/db_processing.py index 25aab24..9d52973 100644 --- a/service/db_processing.py +++ b/service/db_processing.py @@ -57,7 +57,7 @@ def db_select(): robots_presence = "In DB" if len(row[6]) > 1: sitemap_presence = "In DB" - print(Fore.LIGHTBLUE_EX + f"Case ID: {row[3]} | Case name: {row[2]} | Case file extension: {row[1]} | Case comment: {row[4]} | Case creation date: {row[0]} | Dorking: {dorks_presence} | robots.txt: {robots_presence} | sitemap.xml: {sitemap_presence} | API scan: {ap}" + Style.RESET_ALL) + print(Fore.LIGHTBLUE_EX + f"Case ID: {row[3]} | Case name: {row[2]} | Case file extension: {row[1]} | Case comment: {row[4]} | Case creation date: {row[0]} | Dorking: {dorks_presence} | robots.txt: {robots_presence} | sitemap.xml: {sitemap_presence} | API scan: {row[-1]}" + Style.RESET_ALL) except sqlite3.Error as e: print(Fore.RED + "Failed to see storage database's content. Reason: {}".format(e)) sqlite_connection.close() From c24f420d3daee184cb992eab0aec99ab56c87cce Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Mon, 11 Nov 2024 00:46:28 +0300 Subject: [PATCH 15/46] Disabled function calls to generate PDF report Also rewritten all "None" selectors for just "N" --- dpulse.py | 45 +++++++++++++-------------------------------- 1 file changed, 13 insertions(+), 32 deletions(-) diff --git a/dpulse.py b/dpulse.py index 83834e8..43f9505 100644 --- a/dpulse.py +++ b/dpulse.py @@ -89,18 +89,18 @@ def run(): print(Fore.RED + "Entered domain is not accessible. Scan is impossible" + Style.RESET_ALL) break case_comment = input(Fore.YELLOW + "Enter case comment >> ") - print(Fore.GREEN + "Be advised that PDF report support is deprecated since v1.1.4. Instead, try to work with HTML report :)\nSoon PDF report creation choice will be removed" + Style.RESET_ALL) - report_filetype = input(Fore.YELLOW + "Enter report file extension [xlsx/pdf/html] >> ") + print(Fore.GREEN + "Be advised that PDF report support is deprecated since v1.1.4. Instead, try to work with HTML report :)" + Style.RESET_ALL) + report_filetype = input(Fore.YELLOW + "Enter report file extension [XLSX/HTML] >> ") if not report_filetype: print(Fore.RED + "\nReport filetype cannot be empty") - if report_filetype.lower() not in ['pdf', 'xlsx', 'html']: - print(Fore.RED + '\nYou need to choose between PDF, XLSX or HTML report file types') + if report_filetype.lower() not in ['xlsx', 'html']: + print(Fore.RED + '\nYou need to choose between XLSX or HTML report file types') else: print(Fore.GREEN + "[!] SI mode suppose you to have sitemap_links.txt file in report folder [!]\n[!] It'll visit every link from this file [!]") - pagesearch_flag = input(Fore.YELLOW + "Would you like to use PageSearch function? [Y/N/SI] >> ") + pagesearch_flag = input(Fore.YELLOW + "Would you like to use PageSearch function? [Y/SI/N (for No)] >> ") if pagesearch_flag.lower() == 'y': - keywords_input = input(Fore.YELLOW + "Enter keywords (separate by comma) to search in files during PageSearch process (or write None if you don't need it) >> ") - if keywords_input.lower() != "none": + keywords_input = input(Fore.YELLOW + "Enter keywords (separate by comma) to search in files during PageSearch process (or write N if you don't need it) >> ") + if keywords_input.lower() != "n": if len(keywords_input.lower()) > 0: keywords_list = [keyword.strip() for keyword in keywords_input.split(',')] keywords_flag = 1 @@ -115,9 +115,9 @@ def run(): elif pagesearch_flag.lower() == 'si': keywords_list = None keywords_flag = 0 - if report_filetype.lower() == 'pdf' or report_filetype.lower() == 'xlsx' or report_filetype.lower() == 'html': - dorking_flag = input(Fore.YELLOW + "Select Dorking mode [Basic/IoT/Files/Admins/Web/Custom/None] >> ") - api_flag = input(Fore.YELLOW + "Would you like to use 3rd party API in scan? [Y/N] >> ") + if report_filetype.lower() == 'xlsx' or report_filetype.lower() == 'html': + dorking_flag = input(Fore.YELLOW + "Select Dorking mode [Basic/IoT/Files/Admins/Web/Custom/N (for None)] >> ") + api_flag = input(Fore.YELLOW + "Would you like to use 3rd party API in scan? [Y/N (for No)] >> ") if api_flag.lower() == 'y': print(Fore.GREEN + "\nSupported APIs and your keys:\n") db.select_api_keys('printing') @@ -146,8 +146,8 @@ def run(): pagesearch_ui_mark = 'Yes, in Sitemap Inspection mode' else: pagesearch_ui_mark = 'Yes, without keywords search' - if dorking_flag.lower() not in ['basic', 'iot', 'none', 'admins', 'files', 'web', 'custom']: - print(Fore.RED + "\nInvalid Dorking mode. Please select mode among Basic/IoT/Files/Web/Admins/Custom or None") + if dorking_flag.lower() not in ['basic', 'iot', 'n', 'admins', 'files', 'web', 'custom']: + print(Fore.RED + "\nInvalid Dorking mode. Please select mode among Basic/IoT/Files/Web/Admins/Custom or N") break else: dorking_ui_mark = 'No' @@ -170,26 +170,7 @@ def run(): print(Fore.LIGHTMAGENTA_EX + "[BASIC SCAN START]\n" + Style.RESET_ALL) spinner_thread = ProgressBar() spinner_thread.start() - if report_filetype.lower() == 'pdf': - try: - if pagesearch_flag.lower() == 'y': - start = time() - data_array, report_info_array = data_processing.data_gathering(short_domain, url, report_filetype.lower(), pagesearch_flag.lower(), keywords_list, keywords_flag, dorking_flag.lower(), used_api_flag) - end = time() - start - elif pagesearch_flag.lower() == 'si': - start = time() - data_array, report_info_array = data_processing.data_gathering(short_domain, url, report_filetype.lower(), pagesearch_flag.lower(), keywords_list, keywords_flag, dorking_flag.lower(), used_api_flag) - end = time() - start - else: - start = time() - data_array, report_info_array = data_processing.data_gathering(short_domain, url, report_filetype.lower(), pagesearch_flag.lower(), '', keywords_flag, dorking_flag.lower(), used_api_flag) - end = time() - start - endtime_string = time_processing(end) - pdf_rc.report_assembling(short_domain, url, case_comment, data_array, report_info_array, pagesearch_ui_mark, pagesearch_flag.lower(), endtime_string) - finally: - spinner_thread.do_run = False - spinner_thread.join() - elif report_filetype.lower() == 'xlsx': + if report_filetype.lower() == 'xlsx': try: if pagesearch_flag.lower() == 'y': start = time() From 350385ad950cb162b231ea2b640278ca0dbf886f Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Mon, 11 Nov 2024 00:48:29 +0300 Subject: [PATCH 16/46] Removed PDF report creation module --- reporting_modules/pdf_report_creation.py | 185 ----------------------- 1 file changed, 185 deletions(-) delete mode 100644 reporting_modules/pdf_report_creation.py diff --git a/reporting_modules/pdf_report_creation.py b/reporting_modules/pdf_report_creation.py deleted file mode 100644 index 0e9fc71..0000000 --- a/reporting_modules/pdf_report_creation.py +++ /dev/null @@ -1,185 +0,0 @@ -import sys - -sys.path.append('service') - -from logs_processing import logging -import db_processing as db -import files_processing as fp - -try: - from datetime import datetime - from jinja2 import Environment, FileSystemLoader - from xhtml2pdf import pisa - import os - from io import BytesIO - from colorama import Fore, Style - import sqlite3 -except ImportError as e: - print(Fore.RED + "Import error appeared. Reason: {}".format(e) + Style.RESET_ALL) - sys.exit() - - -short_domain = '' -search_query = [] - -def create_pdf(template_src, output_dst, context_data): - env = Environment(loader=FileSystemLoader('.')) - template = env.get_template(template_src) - rendered_html = template.render(context_data) - with open(output_dst, "w+b") as result_file: - pdf = pisa.pisaDocument(BytesIO(rendered_html.encode('UTF-8')), result_file, encoding='utf-8') - if pdf.err: - return False - return True - -def report_assembling(short_domain, url, case_comment, data_array, report_info_array, pagesearch_ui_mark, pagesearch_keyword, end): - try: - ip = data_array[0] - res = data_array[1] - mails = data_array[2] - subdomains = data_array[3] - subdomains_amount = data_array[4] - social_medias = data_array[5] - subdomain_mails = data_array[6] - subdomain_ip = data_array[8] - issuer = data_array[9] - subject = data_array[10] - notBefore = data_array[11] - notAfter = data_array[12] - commonName = data_array[13] - serialNumber = data_array[14] - mx_records = data_array[15] - robots_txt_result = data_array[16] - sitemap_xml_result = data_array[17] - sitemap_links_status = data_array[18] - web_servers = data_array[19] - cms = data_array[20] - programming_languages = data_array[21] - web_frameworks = data_array[22] - analytics = data_array[23] - javascript_frameworks = data_array[24] - ports = data_array[25] - hostnames = data_array[26] - cpes = data_array[27] - tags = data_array[28] - vulns = data_array[29] - #dorking_status = data_array[30] - common_socials = data_array[30] - total_socials = data_array[31] - ps_emails_return = data_array[32] - accessible_subdomains = data_array[33] - emails_amount = data_array[34] - files_counter = data_array[35] - cookies_counter = data_array[36] - api_keys_counter = data_array[37] - website_elements_counter = data_array[38] - exposed_passwords_counter = data_array[39] - total_links_counter = data_array[40] - accessed_links_counter = data_array[41] - keywords_messages_list = data_array[42] - dorking_status = data_array[43] - dorking_file_path = data_array[44] - casename = report_info_array[0] - db_casename = report_info_array[1] - db_creation_date = report_info_array[2] - report_folder = report_info_array[3] - report_ctime = report_info_array[6] - - pdf_templates_path = 'service//pdf_report_templates' - - if len(ps_emails_return) > 0: - subdomain_mails += ps_emails_return - subdomain_mails = list(set(subdomain_mails)) - subdomain_mails_cleaned = [] - substrings = ['m=Base64', 'Ë','Á','Æ','Å','Ä','Ò','Á','ó','ð','É','ë','â'] - for substring in substrings: - if any(substring in s for s in subdomain_mails): - subdomain_mails.remove(next(s for s in subdomain_mails if substring in s)) - for email in subdomain_mails: - new_emails = email.split(', ') - subdomain_mails_cleaned.extend(new_emails) - else: - subdomain_mails = list(set(subdomain_mails)) - subdomain_mails_cleaned = [] - substrings = ['m=Base64', 'Ë','Á','Æ','Å','Ä','Ò','Á','ó','ð','É','ë','â'] - for substring in substrings: - if any(substring in s for s in subdomain_mails): - subdomain_mails.remove(next(s for s in subdomain_mails if substring in s)) - for email in subdomain_mails: - new_emails = email.split(', ') - subdomain_mails_cleaned.extend(new_emails) - - if pagesearch_keyword == 'n': - template_path = pdf_templates_path + '//default_report_temp.html' - context = {'sh_domain': short_domain, 'full_url': url, 'ip_address': ip, 'registrar': res['registrar'], - 'creation_date': res['creation_date'],'expiration_date': res['expiration_date'], - 'name_servers': ', '.join(res['name_servers']),'org': res['org'], - 'mails': mails, 'subdomain_mails': subdomain_mails_cleaned, 'subdomain_socials': social_medias, - 'subdomain_ip': subdomain_ip, - 'subdomains': subdomains, 'fb_links': common_socials['Facebook'], - 'tw_links': common_socials['Twitter'], 'inst_links': common_socials['Instagram'], - 'tg_links': common_socials['Telegram'], 'tt_links': common_socials['TikTok'], - 'li_links': common_socials['LinkedIn'], 'vk_links': common_socials['VKontakte'], - 'yt_links': common_socials['YouTube'], 'wc_links': common_socials['WeChat'], - 'ok_links': common_socials['Odnoklassniki'], 'robots_txt_result': robots_txt_result, 'sitemap_xml_result': sitemap_xml_result, - 'sitemap_links': sitemap_links_status, 'web_servers': web_servers, 'cms': cms, 'programming_languages': programming_languages, 'web_frameworks': web_frameworks, 'analytics': analytics, - 'javascript_frameworks': javascript_frameworks, - 'ctime': report_ctime, 'a_tsf': subdomains_amount, 'mx_records': mx_records, 'issuer': issuer, 'subject': subject, 'notBefore': notBefore, 'notAfter': notAfter, - 'commonName': commonName, 'serialNumber': serialNumber, 'ports': ports, 'hostnames': hostnames, 'cpes': cpes, - 'tags': tags, 'vulns': vulns, 'a_tsm': total_socials, 'pagesearch_ui_mark': pagesearch_ui_mark, 'dorking_status': dorking_status} - - elif pagesearch_keyword == 'y': - template_path = pdf_templates_path + '//ps_report_temp.html' - context = {'sh_domain': short_domain, 'full_url': url, 'ip_address': ip, 'registrar': res['registrar'], - 'creation_date': res['creation_date'],'expiration_date': res['expiration_date'], - 'name_servers': ', '.join(res['name_servers']),'org': res['org'], - 'mails': mails, 'subdomain_mails': subdomain_mails_cleaned, 'subdomain_socials': social_medias, - 'subdomain_ip': subdomain_ip, - 'subdomains': subdomains, 'fb_links': common_socials['Facebook'], - 'tw_links': common_socials['Twitter'], 'inst_links': common_socials['Instagram'], - 'tg_links': common_socials['Telegram'], 'tt_links': common_socials['TikTok'], - 'li_links': common_socials['LinkedIn'], 'vk_links': common_socials['VKontakte'], - 'yt_links': common_socials['YouTube'], 'wc_links': common_socials['WeChat'], - 'ok_links': common_socials['Odnoklassniki'], 'robots_txt_result': robots_txt_result, 'sitemap_xml_result': sitemap_xml_result, - 'sitemap_links': sitemap_links_status, 'web_servers': web_servers, 'cms': cms, 'programming_languages': programming_languages, 'web_frameworks': web_frameworks, 'analytics': analytics, - 'javascript_frameworks': javascript_frameworks, - 'ctime': report_ctime, 'a_tsf': subdomains_amount, 'mx_records': mx_records, 'issuer': issuer, 'subject': subject, 'notBefore': notBefore, 'notAfter': notAfter, - 'commonName': commonName, 'serialNumber': serialNumber, 'ports': ports, 'hostnames': hostnames, 'cpes': cpes, - 'tags': tags, 'vulns': vulns, 'a_tsm': total_socials, 'pagesearch_ui_mark': pagesearch_ui_mark, - 'acc_sd': accessible_subdomains, 'add_mails': emails_amount, 'extr_files': files_counter, 'cookies': cookies_counter, 'apis': api_keys_counter, - 'wpe': website_elements_counter, 'exp_pass': exposed_passwords_counter, 'kml': keywords_messages_list, 'dorking_status': dorking_status} - - elif pagesearch_keyword == 'si': - template_path = pdf_templates_path + '//si_report_temp.html' - context = {'sh_domain': short_domain, 'full_url': url, 'ip_address': ip, 'registrar': res['registrar'], - 'creation_date': res['creation_date'],'expiration_date': res['expiration_date'], - 'name_servers': ', '.join(res['name_servers']),'org': res['org'], - 'mails': mails, 'subdomain_mails': subdomain_mails_cleaned, 'subdomain_socials': social_medias, - 'subdomain_ip': subdomain_ip, - 'subdomains': subdomains, 'fb_links': common_socials['Facebook'], - 'tw_links': common_socials['Twitter'], 'inst_links': common_socials['Instagram'], - 'tg_links': common_socials['Telegram'], 'tt_links': common_socials['TikTok'], - 'li_links': common_socials['LinkedIn'], 'vk_links': common_socials['VKontakte'], - 'yt_links': common_socials['YouTube'], 'wc_links': common_socials['WeChat'], - 'ok_links': common_socials['Odnoklassniki'], 'robots_txt_result': robots_txt_result, 'sitemap_xml_result': sitemap_xml_result, - 'sitemap_links': sitemap_links_status, 'web_servers': web_servers, 'cms': cms, 'programming_languages': programming_languages, 'web_frameworks': web_frameworks, 'analytics': analytics, - 'javascript_frameworks': javascript_frameworks, - 'ctime': report_ctime, 'a_tsf': subdomains_amount, 'mx_records': mx_records, 'issuer': issuer, 'subject': subject, 'notBefore': notBefore, 'notAfter': notAfter, - 'commonName': commonName, 'serialNumber': serialNumber, 'ports': ports, 'hostnames': hostnames, 'cpes': cpes, - 'tags': tags, 'vulns': vulns, 'a_tsm': total_socials, 'pagesearch_ui_mark': pagesearch_ui_mark, - 'a_sml': total_links_counter, 'acc_sml': accessed_links_counter, 'add_mails': emails_amount, 'dorking_status': dorking_status} - - pdf_report_name = report_folder + '//' + casename - if create_pdf(template_path, pdf_report_name, context): - print(Fore.GREEN + "PDF report for {} case was created at {}".format(''.join(short_domain), report_ctime) + Style.RESET_ALL) - print(Fore.GREEN + f"Scan elapsed time: {end}" + Style.RESET_ALL) - if dorking_status != 'Google Dorking mode was not selected for this scan': - with open(dorking_file_path, 'r') as df: - dorking_content = df.read() - robots_content, sitemap_content, sitemap_links_content, dorking_content = fp.get_db_columns(report_folder) #, dorking_content was removed here - pdf_blob = fp.get_blob(pdf_report_name) - db.insert_blob('PDF', pdf_blob, db_casename, db_creation_date, case_comment, robots_content, sitemap_content, sitemap_links_content, dorking_content) #, dorking_content was removed here - except Exception as e: - print(Fore.RED + 'Unable to create PDF report. See journal for details') - logging.error(f'PDF REPORT CREATION: ERROR. REASON: {e}') - From 18b290ae75e8c36b21ea7110323f762f903e47d2 Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Mon, 11 Nov 2024 00:51:28 +0300 Subject: [PATCH 17/46] Removed deprecated HTML report template --- .../pdf_report_templates/ps_report_temp.html | 221 ------------------ 1 file changed, 221 deletions(-) delete mode 100644 service/pdf_report_templates/ps_report_temp.html diff --git a/service/pdf_report_templates/ps_report_temp.html b/service/pdf_report_templates/ps_report_temp.html deleted file mode 100644 index 7efb843..0000000 --- a/service/pdf_report_templates/ps_report_temp.html +++ /dev/null @@ -1,221 +0,0 @@ - - - - - - -

        Open Source Information Research Report

        -

        {{org}}

        -

         

        -

        GENERAL SCAN INFORMATION

        -

        Total subdomains found: {{a_tsf}}

        -

        Total social media links found: {{a_tsm}}

        -

        Status of robots.txt extraction: {{robots_txt_result}}

        -

        Status of sitemap.xml extraction: {{sitemap_xml_result}}

        -

        Status of sitemap.xml links extraction: {{sitemap_links}}

        -

        Google Dorking status: {{dorking_status}}

        -

        PageSearch conduction: {{pagesearch_ui_mark}}

        -

        Report creation time: {{ctime}}

        -

         

        -

        Since user chose to conduct PageSearch, you are presented with following additional information:

        -

        Total subdomains checked: {{a_tsf}}

        -

        Amount of accessible subdomains: {{acc_sd}}

        -

        Amount of additional e-mails found: {{add_mails}}

        -

        Amount of extracted files: {{extr_files}}

        -

        Found cookies with values: {{cookies}}

        -

        Found API keys: {{apis}}

        -

        Found different web page elements: {{wpe}}

        -

        Found exposed passwords: {{exp_pass}}

        -

        You can find more PageSearch scan results in the end of this report

        -

         

        -

         

        -
         
        -

        WHOIS INFORMATION

        -

        Domain: {{sh_domain}}

        -

        Full URL: {{full_url}}

        -

        IP address: {{ip_address}}

        -

        Registrar: {{registrar}}

        -

        Creation date: {{creation_date}}

        -

        Expiration date: {{expiration_date}}

        -

        Organization name: {{org}}

        -

        Contact e-mails: {{mails}}

        -

         

        - -

        SOCIAL MEDIAS SEARCH RESULTS

        -

         

        -

         

        -

        FACEBOOK:

        -
          {% for link in fb_links %} -
        • => {{ link }}
        • - {% endfor %}
        -

        TWITTER:

        -
          - {% for link in tw_links %} -
        • => {{ link }}
        • - {% endfor %} -
        -

        INSTAGRAM:

        -
          - {% for link in inst_links %} -
        • => {{ link }}
        • - {% endfor %} -
        -

        TELEGRAM:

        -
          - {% for link in tg_links %} -
        • => {{ link }}
        • - {% endfor %} -
        -

        TIKTOK:

        -
          - {% for link in tt_links %} -
        • => {{ link }}
        • - {% endfor %} -
        -

        LINKEDIN:

        -
          - {% for link in li_links %} -
        • => {{ link }}
        • - {% endfor %} -
        -

        VKONTAKTE:

        -
          - {% for link in vk_links %} -
        • => {{ link }}
        • - {% endfor %} -
        -

        YOUTUBE:

        -
          - {% for link in yt_links %} -
        • => {{ link }}
        • - {% endfor %} -
        -

        ODNOKLASSNIKI:

        -
          - {% for link in ok_links %} -
        • => {{ link }}
        • - {% endfor %} -
        -

        WECHAT:

        -
          - {% for link in wc_links %} -
        • => {{ link }}
        • - {% endfor %} -
        -

         

        - -

        SUBDOMAINS ANALYSIS RESULTS

        -

        Found subdomains:

        -
          - {% for sd in subdomains %} -
        • => {{ sd }}
        • - {% endfor %} -
        -

        Subdomains IP addresses:

        -
          - {% for sdip in subdomain_ip %} -
        • => {{ sdip }}
        • - {% endfor %} -
        -

        Subdomains e-mails:

        -
          - {% for smails in subdomain_mails %} -
        • => {{ smails }}
        • - {% endfor %} -
        -

         

        - -

        DNS SCAN RESULTS

        -

        Name servers: {{name_servers}}

        -

        MX addresses: {{mx_records}}

        -

         

        -

        SSL CERTIFICATE INFORMATION

        -

        Issuer: {{issuer}}

        -

        Subject: {{subject}}

        -

        Not before: {{notBefore}}

        -

        Not after: {{notAfter}}

        -

        Certificate name: {{commonName}}

        -

        Certificate serial number: {{serialNumber}}

        -

         

        - -

        INTERNETDB API SEARCH RESULTS

        -

        Open ports:

        -
          - {% for op in ports %} -
        • => {{ op }}
        • - {% endfor %} -

        Hostnames:

        -
          - {% for hn in hostnames %} -
        • => {{ hn }}
        • - {% endfor %} -

        Tags:

        -
          - {% for tag in tags %} -
        • => {{ tag }}
        • - {% endfor %} -

        Potential vulnerabilities:

        -
          - {% for vuln in vulns %} -
        • => {{ vuln }}
        • - {% endfor %} -

        Common Platform Enumeration:

        -
          - {% for cpe in cpes %} -
        • => {{ cpe }}
        • - {% endfor %} -

         

        -

        WEBSITE TECHNOLOGIES SEARCH RESULTS

        -

        Web servers:

        -
          - {% for ws in web_servers %} -
        • => {{ ws }}
        • - {% endfor %} -
        -

        CMS:

        -
          - {% for cm in cms %} -
        • => {{ cm }}
        • - {% endfor %} -
        -

        Used programming languages:

        -
          - {% for pl in programming_languages %} -
        • => {{ pl }}
        • - {% endfor %} -
        -

        Used web frameworks:

        -
          - {% for wf in web_frameworks %} -
        • => {{ wf }}
        • - {% endfor %} -
        -

        Analytics service:

        -
          - {% for analytic in analytics %} -
        • => {{ analytic }}
        • - {% endfor %} -
        -

        Used JavaScript frameworks:

        -
          - {% for jsf in javascript_frameworks %} -
        • => {{ jsf }}
        • - {% endfor %} -
        -

         

        -

         

        - -

        PAGESEARCH SCAN RESULTS

        -

        Found keywords in PDFs:

        -
          - {% for km in kml %} -
        • => {{ km }}
        • - {% endfor %} -
        -

         

        -

        Created using DPULSE software by OSINT-TECHNOLOGIES

        -

        Visit our web-pages:

        -
          -
        • https://github.com/OSINT-TECHNOLOGIES
        • -
        • https://pypi.org/project/dpulse/
        • -
        From 88533c8c79540a4f610e3c17247c1d294008aca2 Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Mon, 11 Nov 2024 00:51:50 +0300 Subject: [PATCH 18/46] Removed deprecated HTML report template --- .../pdf_report_templates/si_report_temp.html | 208 ------------------ 1 file changed, 208 deletions(-) delete mode 100644 service/pdf_report_templates/si_report_temp.html diff --git a/service/pdf_report_templates/si_report_temp.html b/service/pdf_report_templates/si_report_temp.html deleted file mode 100644 index 4262fbb..0000000 --- a/service/pdf_report_templates/si_report_temp.html +++ /dev/null @@ -1,208 +0,0 @@ - - - - - - -

        Open Source Information Research Report

        -

        {{org}}

        -

         

        -

        GENERAL SCAN INFORMATION

        -

        Total subdomains found: {{a_tsf}}

        -

        Total social media links found: {{a_tsm}}

        -

        Status of robots.txt extraction: {{robots_txt_result}}

        -

        Status of sitemap.xml extraction: {{sitemap_xml_result}}

        -

        Status of sitemap.xml links extraction: {{sitemap_links}}

        -

        Google Dorking status: {{dorking_status}}

        -

        PageSearch conduction: {{pagesearch_ui_mark}}

        -

        Report creation time: {{ctime}}

        -

         

        -

        Since user chose to conduct PageSearch Sitemap Inspection, you are presented with following additional information:

        -

        Total sitemap links checked: {{a_sml}}

        -

        Amount of accessible sitemap links: {{acc_sml}}

        -

        Amount of additional e-mails found: {{add_mails}}

        -

         

        -
         
        -

        WHOIS INFORMATION

        -

        Domain: {{sh_domain}}

        -

        Full URL: {{full_url}}

        -

        IP address: {{ip_address}}

        -

        Registrar: {{registrar}}

        -

        Creation date: {{creation_date}}

        -

        Expiration date: {{expiration_date}}

        -

        Organization name: {{org}}

        -

        Contact e-mails: {{mails}}

        -

         

        - -

        SOCIAL MEDIAS SEARCH RESULTS

        -

         

        -

         

        -

        FACEBOOK:

        -
          {% for link in fb_links %} -
        • => {{ link }}
        • - {% endfor %}
        -

        TWITTER:

        -
          - {% for link in tw_links %} -
        • => {{ link }}
        • - {% endfor %} -
        -

        INSTAGRAM:

        -
          - {% for link in inst_links %} -
        • => {{ link }}
        • - {% endfor %} -
        -

        TELEGRAM:

        -
          - {% for link in tg_links %} -
        • => {{ link }}
        • - {% endfor %} -
        -

        TIKTOK:

        -
          - {% for link in tt_links %} -
        • => {{ link }}
        • - {% endfor %} -
        -

        LINKEDIN:

        -
          - {% for link in li_links %} -
        • => {{ link }}
        • - {% endfor %} -
        -

        VKONTAKTE:

        -
          - {% for link in vk_links %} -
        • => {{ link }}
        • - {% endfor %} -
        -

        YOUTUBE:

        -
          - {% for link in yt_links %} -
        • => {{ link }}
        • - {% endfor %} -
        -

        ODNOKLASSNIKI:

        -
          - {% for link in ok_links %} -
        • => {{ link }}
        • - {% endfor %} -
        -

        WECHAT:

        -
          - {% for link in wc_links %} -
        • => {{ link }}
        • - {% endfor %} -
        -

         

        - -

        SUBDOMAINS ANALYSIS RESULTS

        -

        Found subdomains:

        -
          - {% for sd in subdomains %} -
        • => {{ sd }}
        • - {% endfor %} -
        -

        Subdomains IP addresses:

        -
          - {% for sdip in subdomain_ip %} -
        • => {{ sdip }}
        • - {% endfor %} -
        -

        Subdomains e-mails:

        -
          - {% for smails in subdomain_mails %} -
        • => {{ smails }}
        • - {% endfor %} -
        -

         

        - -

        DNS SCAN RESULTS

        -

        Name servers: {{name_servers}}

        -

        MX addresses: {{mx_records}}

        -

         

        -

        SSL CERTIFICATE INFORMATION

        -

        Issuer: {{issuer}}

        -

        Subject: {{subject}}

        -

        Not before: {{notBefore}}

        -

        Not after: {{notAfter}}

        -

        Certificate name: {{commonName}}

        -

        Certificate serial number: {{serialNumber}}

        -

         

        - -

        INTERNETDB API SEARCH RESULTS

        -

        Open ports:

        -
          - {% for op in ports %} -
        • => {{ op }}
        • - {% endfor %} -

        Hostnames:

        -
          - {% for hn in hostnames %} -
        • => {{ hn }}
        • - {% endfor %} -

        Tags:

        -
          - {% for tag in tags %} -
        • => {{ tag }}
        • - {% endfor %} -

        Potential vulnerabilities:

        -
          - {% for vuln in vulns %} -
        • => {{ vuln }}
        • - {% endfor %} -

        Common Platform Enumeration:

        -
          - {% for cpe in cpes %} -
        • => {{ cpe }}
        • - {% endfor %} -

         

        -

        WEBSITE TECHNOLOGIES SEARCH RESULTS

        -

        Web servers:

        -
          - {% for ws in web_servers %} -
        • => {{ ws }}
        • - {% endfor %} -
        -

        CMS:

        -
          - {% for cm in cms %} -
        • => {{ cm }}
        • - {% endfor %} -
        -

        Used programming languages:

        -
          - {% for pl in programming_languages %} -
        • => {{ pl }}
        • - {% endfor %} -
        -

        Used web frameworks:

        -
          - {% for wf in web_frameworks %} -
        • => {{ wf }}
        • - {% endfor %} -
        -

        Analytics service:

        -
          - {% for analytic in analytics %} -
        • => {{ analytic }}
        • - {% endfor %} -
        -

        Used JavaScript frameworks:

        -
          - {% for jsf in javascript_frameworks %} -
        • => {{ jsf }}
        • - {% endfor %} -
        -

         

        -

         

        -

         

        -

         

        - -

        Created using DPULSE software by OSINT-TECHNOLOGIES

        -

        Visit our web-pages:

        -
          -
        • https://github.com/OSINT-TECHNOLOGIES
        • -
        • https://pypi.org/project/dpulse/
        • -
        From 0e1ddf611b8e151fe5c533f786580e69f8ff2bdb Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Mon, 11 Nov 2024 00:52:28 +0300 Subject: [PATCH 19/46] Removed PDF report mention in README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 38e20a6..81558dc 100644 --- a/README.md +++ b/README.md @@ -78,7 +78,7 @@ DPULSE is a software solution for conducting OSINT research in relation to a cer 5. ***API scan:*** extended domain research function with prepared functions for 3rd party APIs usage. Currently DPULSE supports VirusTotal API (for brief domain information gathering) and SecurityTrails API (deep subdomains and DNS enumeration) -Finally, DPULSE compiles all found data into an easy-to-read PDF, HTML or XLSX report by category. It also saves all information about scan in local report storage database, which can be restored later. +Finally, DPULSE compiles all found data into an easy-to-read HTML or XLSX report by category. It also saves all information about scan in local report storage database, which can be restored later. # How to install and run DPULSE From 040592a3a5c230b6a08c6dc56ee9751a5b71d998 Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Mon, 11 Nov 2024 00:53:37 +0300 Subject: [PATCH 20/46] Removed PDF report handling --- service/db_processing.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/service/db_processing.py b/service/db_processing.py index 9d52973..2a49167 100644 --- a/service/db_processing.py +++ b/service/db_processing.py @@ -76,10 +76,7 @@ def db_report_recreate(extracted_folder_name, id_to_extract): blob_data = blob[0] cursor.execute("SELECT report_file_extension FROM report_storage WHERE id=?", (id_to_extract,)) report_file_extension = (cursor.fetchone())[0] - if str(report_file_extension) == 'PDF': - with open(extracted_folder_name + '//report_extracted.pdf', 'wb') as file: - file.write(blob_data) - elif str(report_file_extension) == 'XLSX': + if str(report_file_extension) == 'XLSX': with open(extracted_folder_name + '//report_extracted.xlsx', 'wb') as file: file.write(blob_data) elif str(report_file_extension) == 'HTML': From a5a456db3bbf5540985932b365c046357207f831 Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Mon, 11 Nov 2024 00:54:34 +0300 Subject: [PATCH 21/46] Removed xhtml2pdf requirement --- requirements.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index d631f4c..8a6b94d 100644 --- a/requirements.txt +++ b/requirements.txt @@ -15,6 +15,5 @@ MechanicalSoup==1.3.0 builtwith==1.3.4 dnspython==2.6.1 lxml==5.2.2 -xhtml2pdf==0.2.16 openpyxl==3.1.2 PyMuPDF==1.24.7 From e907af58fd7822beb696452904baf83e29c77a3a Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Mon, 11 Nov 2024 00:55:07 +0300 Subject: [PATCH 22/46] Removed xhtml2pdf requirement --- pyproject.toml | 1 - 1 file changed, 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index e2a5d3f..a44d03b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -40,7 +40,6 @@ builtwith = "1.3.4" dnspython = "2.6.1" lxml = "5.2.2" openpyxl = "3.1.2" -xhtml2pdf = "0.2.16" PyMuPDF = "1.24.7" [tool.poetry.scripts] From a5dc85175623523ad317d7a4277dfc8d2e0a8d7d Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Mon, 11 Nov 2024 00:55:46 +0300 Subject: [PATCH 23/46] Re-generated poetry.lock without xhtml2pdf requirement --- poetry.lock | 775 +--------------------------------------------------- 1 file changed, 1 insertion(+), 774 deletions(-) diff --git a/poetry.lock b/poetry.lock index 1cd4e33..8f6def7 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,30 +1,5 @@ # This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand. -[[package]] -name = "arabic-reshaper" -version = "3.0.0" -description = "Reconstruct Arabic sentences to be used in applications that do not support Arabic" -optional = false -python-versions = "*" -files = [ - {file = "arabic_reshaper-3.0.0-py3-none-any.whl", hash = "sha256:3f71d5034bb694204a239a6f1ebcf323ac3c5b059de02259235e2016a1a5e2dc"}, - {file = "arabic_reshaper-3.0.0.tar.gz", hash = "sha256:ffcd13ba5ec007db71c072f5b23f420da92ac7f268512065d49e790e62237099"}, -] - -[package.extras] -with-fonttools = ["fonttools (>=4.0)"] - -[[package]] -name = "asn1crypto" -version = "1.5.1" -description = "Fast ASN.1 parser and serializer with definitions for private keys, public keys, certificates, CRL, OCSP, CMS, PKCS#3, PKCS#7, PKCS#8, PKCS#12, PKCS#5, X.509 and TSP" -optional = false -python-versions = "*" -files = [ - {file = "asn1crypto-1.5.1-py2.py3-none-any.whl", hash = "sha256:db4e40728b728508912cbb3d44f19ce188f218e9eba635821bb4b68564f8fd67"}, - {file = "asn1crypto-1.5.1.tar.gz", hash = "sha256:13ae38502be632115abf8a24cbe5f4da52e3b5231990aff31123c805306ccb9c"}, -] - [[package]] name = "beautifulsoup4" version = "4.12.2" @@ -67,96 +42,6 @@ files = [ {file = "certifi-2024.8.30.tar.gz", hash = "sha256:bec941d2aa8195e248a60b31ff9f0558284cf01a52591ceda73ea9afffd69fd9"}, ] -[[package]] -name = "cffi" -version = "1.17.1" -description = "Foreign Function Interface for Python calling C code." -optional = false -python-versions = ">=3.8" -files = [ - {file = "cffi-1.17.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:df8b1c11f177bc2313ec4b2d46baec87a5f3e71fc8b45dab2ee7cae86d9aba14"}, - {file = "cffi-1.17.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f2cdc858323644ab277e9bb925ad72ae0e67f69e804f4898c070998d50b1a67"}, - {file = "cffi-1.17.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:edae79245293e15384b51f88b00613ba9f7198016a5948b5dddf4917d4d26382"}, - {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45398b671ac6d70e67da8e4224a065cec6a93541bb7aebe1b198a61b58c7b702"}, - {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ad9413ccdeda48c5afdae7e4fa2192157e991ff761e7ab8fdd8926f40b160cc3"}, - {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5da5719280082ac6bd9aa7becb3938dc9f9cbd57fac7d2871717b1feb0902ab6"}, - {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2bb1a08b8008b281856e5971307cc386a8e9c5b625ac297e853d36da6efe9c17"}, - {file = "cffi-1.17.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:045d61c734659cc045141be4bae381a41d89b741f795af1dd018bfb532fd0df8"}, - {file = "cffi-1.17.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6883e737d7d9e4899a8a695e00ec36bd4e5e4f18fabe0aca0efe0a4b44cdb13e"}, - {file = "cffi-1.17.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6b8b4a92e1c65048ff98cfe1f735ef8f1ceb72e3d5f0c25fdb12087a23da22be"}, - {file = "cffi-1.17.1-cp310-cp310-win32.whl", hash = "sha256:c9c3d058ebabb74db66e431095118094d06abf53284d9c81f27300d0e0d8bc7c"}, - {file = "cffi-1.17.1-cp310-cp310-win_amd64.whl", hash = "sha256:0f048dcf80db46f0098ccac01132761580d28e28bc0f78ae0d58048063317e15"}, - {file = "cffi-1.17.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a45e3c6913c5b87b3ff120dcdc03f6131fa0065027d0ed7ee6190736a74cd401"}, - {file = "cffi-1.17.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:30c5e0cb5ae493c04c8b42916e52ca38079f1b235c2f8ae5f4527b963c401caf"}, - {file = "cffi-1.17.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f75c7ab1f9e4aca5414ed4d8e5c0e303a34f4421f8a0d47a4d019ceff0ab6af4"}, - {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a1ed2dd2972641495a3ec98445e09766f077aee98a1c896dcb4ad0d303628e41"}, - {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:46bf43160c1a35f7ec506d254e5c890f3c03648a4dbac12d624e4490a7046cd1"}, - {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a24ed04c8ffd54b0729c07cee15a81d964e6fee0e3d4d342a27b020d22959dc6"}, - {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:610faea79c43e44c71e1ec53a554553fa22321b65fae24889706c0a84d4ad86d"}, - {file = "cffi-1.17.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:a9b15d491f3ad5d692e11f6b71f7857e7835eb677955c00cc0aefcd0669adaf6"}, - {file = "cffi-1.17.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:de2ea4b5833625383e464549fec1bc395c1bdeeb5f25c4a3a82b5a8c756ec22f"}, - {file = "cffi-1.17.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fc48c783f9c87e60831201f2cce7f3b2e4846bf4d8728eabe54d60700b318a0b"}, - {file = "cffi-1.17.1-cp311-cp311-win32.whl", hash = "sha256:85a950a4ac9c359340d5963966e3e0a94a676bd6245a4b55bc43949eee26a655"}, - {file = "cffi-1.17.1-cp311-cp311-win_amd64.whl", hash = "sha256:caaf0640ef5f5517f49bc275eca1406b0ffa6aa184892812030f04c2abf589a0"}, - {file = "cffi-1.17.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:805b4371bf7197c329fcb3ead37e710d1bca9da5d583f5073b799d5c5bd1eee4"}, - {file = "cffi-1.17.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:733e99bc2df47476e3848417c5a4540522f234dfd4ef3ab7fafdf555b082ec0c"}, - {file = "cffi-1.17.1-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1257bdabf294dceb59f5e70c64a3e2f462c30c7ad68092d01bbbfb1c16b1ba36"}, - {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da95af8214998d77a98cc14e3a3bd00aa191526343078b530ceb0bd710fb48a5"}, - {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d63afe322132c194cf832bfec0dc69a99fb9bb6bbd550f161a49e9e855cc78ff"}, - {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f79fc4fc25f1c8698ff97788206bb3c2598949bfe0fef03d299eb1b5356ada99"}, - {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b62ce867176a75d03a665bad002af8e6d54644fad99a3c70905c543130e39d93"}, - {file = "cffi-1.17.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:386c8bf53c502fff58903061338ce4f4950cbdcb23e2902d86c0f722b786bbe3"}, - {file = "cffi-1.17.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4ceb10419a9adf4460ea14cfd6bc43d08701f0835e979bf821052f1805850fe8"}, - {file = "cffi-1.17.1-cp312-cp312-win32.whl", hash = "sha256:a08d7e755f8ed21095a310a693525137cfe756ce62d066e53f502a83dc550f65"}, - {file = "cffi-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:51392eae71afec0d0c8fb1a53b204dbb3bcabcb3c9b807eedf3e1e6ccf2de903"}, - {file = "cffi-1.17.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f3a2b4222ce6b60e2e8b337bb9596923045681d71e5a082783484d845390938e"}, - {file = "cffi-1.17.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0984a4925a435b1da406122d4d7968dd861c1385afe3b45ba82b750f229811e2"}, - {file = "cffi-1.17.1-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d01b12eeeb4427d3110de311e1774046ad344f5b1a7403101878976ecd7a10f3"}, - {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:706510fe141c86a69c8ddc029c7910003a17353970cff3b904ff0686a5927683"}, - {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de55b766c7aa2e2a3092c51e0483d700341182f08e67c63630d5b6f200bb28e5"}, - {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c59d6e989d07460165cc5ad3c61f9fd8f1b4796eacbd81cee78957842b834af4"}, - {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd398dbc6773384a17fe0d3e7eeb8d1a21c2200473ee6806bb5e6a8e62bb73dd"}, - {file = "cffi-1.17.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:3edc8d958eb099c634dace3c7e16560ae474aa3803a5df240542b305d14e14ed"}, - {file = "cffi-1.17.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:72e72408cad3d5419375fc87d289076ee319835bdfa2caad331e377589aebba9"}, - {file = "cffi-1.17.1-cp313-cp313-win32.whl", hash = "sha256:e03eab0a8677fa80d646b5ddece1cbeaf556c313dcfac435ba11f107ba117b5d"}, - {file = "cffi-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a"}, - {file = "cffi-1.17.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:636062ea65bd0195bc012fea9321aca499c0504409f413dc88af450b57ffd03b"}, - {file = "cffi-1.17.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c7eac2ef9b63c79431bc4b25f1cd649d7f061a28808cbc6c47b534bd789ef964"}, - {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e221cf152cff04059d011ee126477f0d9588303eb57e88923578ace7baad17f9"}, - {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:31000ec67d4221a71bd3f67df918b1f88f676f1c3b535a7eb473255fdc0b83fc"}, - {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6f17be4345073b0a7b8ea599688f692ac3ef23ce28e5df79c04de519dbc4912c"}, - {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e2b1fac190ae3ebfe37b979cc1ce69c81f4e4fe5746bb401dca63a9062cdaf1"}, - {file = "cffi-1.17.1-cp38-cp38-win32.whl", hash = "sha256:7596d6620d3fa590f677e9ee430df2958d2d6d6de2feeae5b20e82c00b76fbf8"}, - {file = "cffi-1.17.1-cp38-cp38-win_amd64.whl", hash = "sha256:78122be759c3f8a014ce010908ae03364d00a1f81ab5c7f4a7a5120607ea56e1"}, - {file = "cffi-1.17.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b2ab587605f4ba0bf81dc0cb08a41bd1c0a5906bd59243d56bad7668a6fc6c16"}, - {file = "cffi-1.17.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:28b16024becceed8c6dfbc75629e27788d8a3f9030691a1dbf9821a128b22c36"}, - {file = "cffi-1.17.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1d599671f396c4723d016dbddb72fe8e0397082b0a77a4fab8028923bec050e8"}, - {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca74b8dbe6e8e8263c0ffd60277de77dcee6c837a3d0881d8c1ead7268c9e576"}, - {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f7f5baafcc48261359e14bcd6d9bff6d4b28d9103847c9e136694cb0501aef87"}, - {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:98e3969bcff97cae1b2def8ba499ea3d6f31ddfdb7635374834cf89a1a08ecf0"}, - {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cdf5ce3acdfd1661132f2a9c19cac174758dc2352bfe37d98aa7512c6b7178b3"}, - {file = "cffi-1.17.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9755e4345d1ec879e3849e62222a18c7174d65a6a92d5b346b1863912168b595"}, - {file = "cffi-1.17.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f1e22e8c4419538cb197e4dd60acc919d7696e5ef98ee4da4e01d3f8cfa4cc5a"}, - {file = "cffi-1.17.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c03e868a0b3bc35839ba98e74211ed2b05d2119be4e8a0f224fba9384f1fe02e"}, - {file = "cffi-1.17.1-cp39-cp39-win32.whl", hash = "sha256:e31ae45bc2e29f6b2abd0de1cc3b9d5205aa847cafaecb8af1476a609a2f6eb7"}, - {file = "cffi-1.17.1-cp39-cp39-win_amd64.whl", hash = "sha256:d016c76bdd850f3c626af19b0542c9677ba156e4ee4fccfdd7848803533ef662"}, - {file = "cffi-1.17.1.tar.gz", hash = "sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824"}, -] - -[package.dependencies] -pycparser = "*" - -[[package]] -name = "chardet" -version = "5.2.0" -description = "Universal encoding detector for Python 3" -optional = false -python-versions = ">=3.7" -files = [ - {file = "chardet-5.2.0-py3-none-any.whl", hash = "sha256:e1cf59446890a00105fe7b7912492ea04b6e6f06d4b742b2c788469e34c82970"}, - {file = "chardet-5.2.0.tar.gz", hash = "sha256:1b3b6ff479a8c414bc3fa2c0852995695c4a026dcd6d0633b2dd092ca39c1cf7"}, -] - [[package]] name = "charset-normalizer" version = "3.3.2" @@ -256,20 +141,6 @@ files = [ {file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"}, ] -[[package]] -name = "click" -version = "8.1.7" -description = "Composable command line interface toolkit" -optional = false -python-versions = ">=3.7" -files = [ - {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, - {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, -] - -[package.dependencies] -colorama = {version = "*", markers = "platform_system == \"Windows\""} - [[package]] name = "colorama" version = "0.4.6" @@ -281,74 +152,6 @@ files = [ {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, ] -[[package]] -name = "cryptography" -version = "43.0.3" -description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." -optional = false -python-versions = ">=3.7" -files = [ - {file = "cryptography-43.0.3-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:bf7a1932ac4176486eab36a19ed4c0492da5d97123f1406cf15e41b05e787d2e"}, - {file = "cryptography-43.0.3-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:63efa177ff54aec6e1c0aefaa1a241232dcd37413835a9b674b6e3f0ae2bfd3e"}, - {file = "cryptography-43.0.3-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e1ce50266f4f70bf41a2c6dc4358afadae90e2a1e5342d3c08883df1675374f"}, - {file = "cryptography-43.0.3-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:443c4a81bb10daed9a8f334365fe52542771f25aedaf889fd323a853ce7377d6"}, - {file = "cryptography-43.0.3-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:74f57f24754fe349223792466a709f8e0c093205ff0dca557af51072ff47ab18"}, - {file = "cryptography-43.0.3-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:9762ea51a8fc2a88b70cf2995e5675b38d93bf36bd67d91721c309df184f49bd"}, - {file = "cryptography-43.0.3-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:81ef806b1fef6b06dcebad789f988d3b37ccaee225695cf3e07648eee0fc6b73"}, - {file = "cryptography-43.0.3-cp37-abi3-win32.whl", hash = "sha256:cbeb489927bd7af4aa98d4b261af9a5bc025bd87f0e3547e11584be9e9427be2"}, - {file = "cryptography-43.0.3-cp37-abi3-win_amd64.whl", hash = "sha256:f46304d6f0c6ab8e52770addfa2fc41e6629495548862279641972b6215451cd"}, - {file = "cryptography-43.0.3-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:8ac43ae87929a5982f5948ceda07001ee5e83227fd69cf55b109144938d96984"}, - {file = "cryptography-43.0.3-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:846da004a5804145a5f441b8530b4bf35afbf7da70f82409f151695b127213d5"}, - {file = "cryptography-43.0.3-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f996e7268af62598f2fc1204afa98a3b5712313a55c4c9d434aef49cadc91d4"}, - {file = "cryptography-43.0.3-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:f7b178f11ed3664fd0e995a47ed2b5ff0a12d893e41dd0494f406d1cf555cab7"}, - {file = "cryptography-43.0.3-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:c2e6fc39c4ab499049df3bdf567f768a723a5e8464816e8f009f121a5a9f4405"}, - {file = "cryptography-43.0.3-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:e1be4655c7ef6e1bbe6b5d0403526601323420bcf414598955968c9ef3eb7d16"}, - {file = "cryptography-43.0.3-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:df6b6c6d742395dd77a23ea3728ab62f98379eff8fb61be2744d4679ab678f73"}, - {file = "cryptography-43.0.3-cp39-abi3-win32.whl", hash = "sha256:d56e96520b1020449bbace2b78b603442e7e378a9b3bd68de65c782db1507995"}, - {file = "cryptography-43.0.3-cp39-abi3-win_amd64.whl", hash = "sha256:0c580952eef9bf68c4747774cde7ec1d85a6e61de97281f2dba83c7d2c806362"}, - {file = "cryptography-43.0.3-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:d03b5621a135bffecad2c73e9f4deb1a0f977b9a8ffe6f8e002bf6c9d07b918c"}, - {file = "cryptography-43.0.3-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:a2a431ee15799d6db9fe80c82b055bae5a752bef645bba795e8e52687c69efe3"}, - {file = "cryptography-43.0.3-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:281c945d0e28c92ca5e5930664c1cefd85efe80e5c0d2bc58dd63383fda29f83"}, - {file = "cryptography-43.0.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:f18c716be16bc1fea8e95def49edf46b82fccaa88587a45f8dc0ff6ab5d8e0a7"}, - {file = "cryptography-43.0.3-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:4a02ded6cd4f0a5562a8887df8b3bd14e822a90f97ac5e544c162899bc467664"}, - {file = "cryptography-43.0.3-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:53a583b6637ab4c4e3591a15bc9db855b8d9dee9a669b550f311480acab6eb08"}, - {file = "cryptography-43.0.3-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:1ec0bcf7e17c0c5669d881b1cd38c4972fade441b27bda1051665faaa89bdcaa"}, - {file = "cryptography-43.0.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:2ce6fae5bdad59577b44e4dfed356944fbf1d925269114c28be377692643b4ff"}, - {file = "cryptography-43.0.3.tar.gz", hash = "sha256:315b9001266a492a6ff443b61238f956b214dbec9910a081ba5b6646a055a805"}, -] - -[package.dependencies] -cffi = {version = ">=1.12", markers = "platform_python_implementation != \"PyPy\""} - -[package.extras] -docs = ["sphinx (>=5.3.0)", "sphinx-rtd-theme (>=1.1.1)"] -docstest = ["pyenchant (>=1.6.11)", "readme-renderer", "sphinxcontrib-spelling (>=4.0.1)"] -nox = ["nox"] -pep8test = ["check-sdist", "click", "mypy", "ruff"] -sdist = ["build"] -ssh = ["bcrypt (>=3.1.5)"] -test = ["certifi", "cryptography-vectors (==43.0.3)", "pretend", "pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-xdist"] -test-randomorder = ["pytest-randomly"] - -[[package]] -name = "cssselect2" -version = "0.7.0" -description = "CSS selectors for Python ElementTree" -optional = false -python-versions = ">=3.7" -files = [ - {file = "cssselect2-0.7.0-py3-none-any.whl", hash = "sha256:fd23a65bfd444595913f02fc71f6b286c29261e354c41d722ca7a261a49b5969"}, - {file = "cssselect2-0.7.0.tar.gz", hash = "sha256:1ccd984dab89fc68955043aca4e1b03e0cf29cad9880f6e28e3ba7a74b14aa5a"}, -] - -[package.dependencies] -tinycss2 = "*" -webencodings = "*" - -[package.extras] -doc = ["sphinx", "sphinx_rtd_theme"] -test = ["flake8", "isort", "pytest"] - [[package]] name = "dnspython" version = "2.6.1" @@ -380,27 +183,6 @@ files = [ {file = "et_xmlfile-2.0.0.tar.gz", hash = "sha256:dab3f4764309081ce75662649be815c4c9081e88f0837825f90fd28317d4da54"}, ] -[[package]] -name = "html5lib" -version = "1.1" -description = "HTML parser based on the WHATWG HTML specification" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -files = [ - {file = "html5lib-1.1-py2.py3-none-any.whl", hash = "sha256:0d78f8fde1c230e99fe37986a60526d7049ed4bf8a9fadbad5f00e22e58e041d"}, - {file = "html5lib-1.1.tar.gz", hash = "sha256:b2e5b40261e20f354d198eae92afc10d750afb487ed5e50f9c4eaf07c184146f"}, -] - -[package.dependencies] -six = ">=1.9" -webencodings = "*" - -[package.extras] -all = ["chardet (>=2.2)", "genshi", "lxml"] -chardet = ["chardet (>=2.2)"] -genshi = ["genshi"] -lxml = ["lxml"] - [[package]] name = "idna" version = "3.7" @@ -721,123 +503,6 @@ files = [ [package.dependencies] et-xmlfile = "*" -[[package]] -name = "oscrypto" -version = "1.3.0" -description = "TLS (SSL) sockets, key generation, encryption, decryption, signing, verification and KDFs using the OS crypto libraries. Does not require a compiler, and relies on the OS for patching. Works on Windows, OS X and Linux/BSD." -optional = false -python-versions = "*" -files = [ - {file = "oscrypto-1.3.0-py2.py3-none-any.whl", hash = "sha256:2b2f1d2d42ec152ca90ccb5682f3e051fb55986e1b170ebde472b133713e7085"}, - {file = "oscrypto-1.3.0.tar.gz", hash = "sha256:6f5fef59cb5b3708321db7cca56aed8ad7e662853351e7991fcf60ec606d47a4"}, -] - -[package.dependencies] -asn1crypto = ">=1.5.1" - -[[package]] -name = "pillow" -version = "11.0.0" -description = "Python Imaging Library (Fork)" -optional = false -python-versions = ">=3.9" -files = [ - {file = "pillow-11.0.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:6619654954dc4936fcff82db8eb6401d3159ec6be81e33c6000dfd76ae189947"}, - {file = "pillow-11.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b3c5ac4bed7519088103d9450a1107f76308ecf91d6dabc8a33a2fcfb18d0fba"}, - {file = "pillow-11.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a65149d8ada1055029fcb665452b2814fe7d7082fcb0c5bed6db851cb69b2086"}, - {file = "pillow-11.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88a58d8ac0cc0e7f3a014509f0455248a76629ca9b604eca7dc5927cc593c5e9"}, - {file = "pillow-11.0.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:c26845094b1af3c91852745ae78e3ea47abf3dbcd1cf962f16b9a5fbe3ee8488"}, - {file = "pillow-11.0.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:1a61b54f87ab5786b8479f81c4b11f4d61702830354520837f8cc791ebba0f5f"}, - {file = "pillow-11.0.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:674629ff60030d144b7bca2b8330225a9b11c482ed408813924619c6f302fdbb"}, - {file = "pillow-11.0.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:598b4e238f13276e0008299bd2482003f48158e2b11826862b1eb2ad7c768b97"}, - {file = "pillow-11.0.0-cp310-cp310-win32.whl", hash = "sha256:9a0f748eaa434a41fccf8e1ee7a3eed68af1b690e75328fd7a60af123c193b50"}, - {file = "pillow-11.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:a5629742881bcbc1f42e840af185fd4d83a5edeb96475a575f4da50d6ede337c"}, - {file = "pillow-11.0.0-cp310-cp310-win_arm64.whl", hash = "sha256:ee217c198f2e41f184f3869f3e485557296d505b5195c513b2bfe0062dc537f1"}, - {file = "pillow-11.0.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:1c1d72714f429a521d8d2d018badc42414c3077eb187a59579f28e4270b4b0fc"}, - {file = "pillow-11.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:499c3a1b0d6fc8213519e193796eb1a86a1be4b1877d678b30f83fd979811d1a"}, - {file = "pillow-11.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c8b2351c85d855293a299038e1f89db92a2f35e8d2f783489c6f0b2b5f3fe8a3"}, - {file = "pillow-11.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f4dba50cfa56f910241eb7f883c20f1e7b1d8f7d91c750cd0b318bad443f4d5"}, - {file = "pillow-11.0.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:5ddbfd761ee00c12ee1be86c9c0683ecf5bb14c9772ddbd782085779a63dd55b"}, - {file = "pillow-11.0.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:45c566eb10b8967d71bf1ab8e4a525e5a93519e29ea071459ce517f6b903d7fa"}, - {file = "pillow-11.0.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:b4fd7bd29610a83a8c9b564d457cf5bd92b4e11e79a4ee4716a63c959699b306"}, - {file = "pillow-11.0.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:cb929ca942d0ec4fac404cbf520ee6cac37bf35be479b970c4ffadf2b6a1cad9"}, - {file = "pillow-11.0.0-cp311-cp311-win32.whl", hash = "sha256:006bcdd307cc47ba43e924099a038cbf9591062e6c50e570819743f5607404f5"}, - {file = "pillow-11.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:52a2d8323a465f84faaba5236567d212c3668f2ab53e1c74c15583cf507a0291"}, - {file = "pillow-11.0.0-cp311-cp311-win_arm64.whl", hash = "sha256:16095692a253047fe3ec028e951fa4221a1f3ed3d80c397e83541a3037ff67c9"}, - {file = "pillow-11.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d2c0a187a92a1cb5ef2c8ed5412dd8d4334272617f532d4ad4de31e0495bd923"}, - {file = "pillow-11.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:084a07ef0821cfe4858fe86652fffac8e187b6ae677e9906e192aafcc1b69903"}, - {file = "pillow-11.0.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8069c5179902dcdce0be9bfc8235347fdbac249d23bd90514b7a47a72d9fecf4"}, - {file = "pillow-11.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f02541ef64077f22bf4924f225c0fd1248c168f86e4b7abdedd87d6ebaceab0f"}, - {file = "pillow-11.0.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:fcb4621042ac4b7865c179bb972ed0da0218a076dc1820ffc48b1d74c1e37fe9"}, - {file = "pillow-11.0.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:00177a63030d612148e659b55ba99527803288cea7c75fb05766ab7981a8c1b7"}, - {file = "pillow-11.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8853a3bf12afddfdf15f57c4b02d7ded92c7a75a5d7331d19f4f9572a89c17e6"}, - {file = "pillow-11.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3107c66e43bda25359d5ef446f59c497de2b5ed4c7fdba0894f8d6cf3822dafc"}, - {file = "pillow-11.0.0-cp312-cp312-win32.whl", hash = "sha256:86510e3f5eca0ab87429dd77fafc04693195eec7fd6a137c389c3eeb4cfb77c6"}, - {file = "pillow-11.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:8ec4a89295cd6cd4d1058a5e6aec6bf51e0eaaf9714774e1bfac7cfc9051db47"}, - {file = "pillow-11.0.0-cp312-cp312-win_arm64.whl", hash = "sha256:27a7860107500d813fcd203b4ea19b04babe79448268403172782754870dac25"}, - {file = "pillow-11.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:bcd1fb5bb7b07f64c15618c89efcc2cfa3e95f0e3bcdbaf4642509de1942a699"}, - {file = "pillow-11.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0e038b0745997c7dcaae350d35859c9715c71e92ffb7e0f4a8e8a16732150f38"}, - {file = "pillow-11.0.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ae08bd8ffc41aebf578c2af2f9d8749d91f448b3bfd41d7d9ff573d74f2a6b2"}, - {file = "pillow-11.0.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d69bfd8ec3219ae71bcde1f942b728903cad25fafe3100ba2258b973bd2bc1b2"}, - {file = "pillow-11.0.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:61b887f9ddba63ddf62fd02a3ba7add935d053b6dd7d58998c630e6dbade8527"}, - {file = "pillow-11.0.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:c6a660307ca9d4867caa8d9ca2c2658ab685de83792d1876274991adec7b93fa"}, - {file = "pillow-11.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:73e3a0200cdda995c7e43dd47436c1548f87a30bb27fb871f352a22ab8dcf45f"}, - {file = "pillow-11.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fba162b8872d30fea8c52b258a542c5dfd7b235fb5cb352240c8d63b414013eb"}, - {file = "pillow-11.0.0-cp313-cp313-win32.whl", hash = "sha256:f1b82c27e89fffc6da125d5eb0ca6e68017faf5efc078128cfaa42cf5cb38798"}, - {file = "pillow-11.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:8ba470552b48e5835f1d23ecb936bb7f71d206f9dfeee64245f30c3270b994de"}, - {file = "pillow-11.0.0-cp313-cp313-win_arm64.whl", hash = "sha256:846e193e103b41e984ac921b335df59195356ce3f71dcfd155aa79c603873b84"}, - {file = "pillow-11.0.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:4ad70c4214f67d7466bea6a08061eba35c01b1b89eaa098040a35272a8efb22b"}, - {file = "pillow-11.0.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:6ec0d5af64f2e3d64a165f490d96368bb5dea8b8f9ad04487f9ab60dc4bb6003"}, - {file = "pillow-11.0.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c809a70e43c7977c4a42aefd62f0131823ebf7dd73556fa5d5950f5b354087e2"}, - {file = "pillow-11.0.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:4b60c9520f7207aaf2e1d94de026682fc227806c6e1f55bba7606d1c94dd623a"}, - {file = "pillow-11.0.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:1e2688958a840c822279fda0086fec1fdab2f95bf2b717b66871c4ad9859d7e8"}, - {file = "pillow-11.0.0-cp313-cp313t-win32.whl", hash = "sha256:607bbe123c74e272e381a8d1957083a9463401f7bd01287f50521ecb05a313f8"}, - {file = "pillow-11.0.0-cp313-cp313t-win_amd64.whl", hash = "sha256:5c39ed17edea3bc69c743a8dd3e9853b7509625c2462532e62baa0732163a904"}, - {file = "pillow-11.0.0-cp313-cp313t-win_arm64.whl", hash = "sha256:75acbbeb05b86bc53cbe7b7e6fe00fbcf82ad7c684b3ad82e3d711da9ba287d3"}, - {file = "pillow-11.0.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:2e46773dc9f35a1dd28bd6981332fd7f27bec001a918a72a79b4133cf5291dba"}, - {file = "pillow-11.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2679d2258b7f1192b378e2893a8a0a0ca472234d4c2c0e6bdd3380e8dfa21b6a"}, - {file = "pillow-11.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eda2616eb2313cbb3eebbe51f19362eb434b18e3bb599466a1ffa76a033fb916"}, - {file = "pillow-11.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:20ec184af98a121fb2da42642dea8a29ec80fc3efbaefb86d8fdd2606619045d"}, - {file = "pillow-11.0.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:8594f42df584e5b4bb9281799698403f7af489fba84c34d53d1c4bfb71b7c4e7"}, - {file = "pillow-11.0.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:c12b5ae868897c7338519c03049a806af85b9b8c237b7d675b8c5e089e4a618e"}, - {file = "pillow-11.0.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:70fbbdacd1d271b77b7721fe3cdd2d537bbbd75d29e6300c672ec6bb38d9672f"}, - {file = "pillow-11.0.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:5178952973e588b3f1360868847334e9e3bf49d19e169bbbdfaf8398002419ae"}, - {file = "pillow-11.0.0-cp39-cp39-win32.whl", hash = "sha256:8c676b587da5673d3c75bd67dd2a8cdfeb282ca38a30f37950511766b26858c4"}, - {file = "pillow-11.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:94f3e1780abb45062287b4614a5bc0874519c86a777d4a7ad34978e86428b8dd"}, - {file = "pillow-11.0.0-cp39-cp39-win_arm64.whl", hash = "sha256:290f2cc809f9da7d6d622550bbf4c1e57518212da51b6a30fe8e0a270a5b78bd"}, - {file = "pillow-11.0.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:1187739620f2b365de756ce086fdb3604573337cc28a0d3ac4a01ab6b2d2a6d2"}, - {file = "pillow-11.0.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:fbbcb7b57dc9c794843e3d1258c0fbf0f48656d46ffe9e09b63bbd6e8cd5d0a2"}, - {file = "pillow-11.0.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d203af30149ae339ad1b4f710d9844ed8796e97fda23ffbc4cc472968a47d0b"}, - {file = "pillow-11.0.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21a0d3b115009ebb8ac3d2ebec5c2982cc693da935f4ab7bb5c8ebe2f47d36f2"}, - {file = "pillow-11.0.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:73853108f56df97baf2bb8b522f3578221e56f646ba345a372c78326710d3830"}, - {file = "pillow-11.0.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:e58876c91f97b0952eb766123bfef372792ab3f4e3e1f1a2267834c2ab131734"}, - {file = "pillow-11.0.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:224aaa38177597bb179f3ec87eeefcce8e4f85e608025e9cfac60de237ba6316"}, - {file = "pillow-11.0.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:5bd2d3bdb846d757055910f0a59792d33b555800813c3b39ada1829c372ccb06"}, - {file = "pillow-11.0.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:375b8dd15a1f5d2feafff536d47e22f69625c1aa92f12b339ec0b2ca40263273"}, - {file = "pillow-11.0.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:daffdf51ee5db69a82dd127eabecce20729e21f7a3680cf7cbb23f0829189790"}, - {file = "pillow-11.0.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7326a1787e3c7b0429659e0a944725e1b03eeaa10edd945a86dead1913383944"}, - {file = "pillow-11.0.0.tar.gz", hash = "sha256:72bacbaf24ac003fea9bff9837d1eedb6088758d41e100c1552930151f677739"}, -] - -[package.extras] -docs = ["furo", "olefile", "sphinx (>=8.1)", "sphinx-copybutton", "sphinx-inline-tabs", "sphinxext-opengraph"] -fpx = ["olefile"] -mic = ["olefile"] -tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout"] -typing = ["typing-extensions"] -xmp = ["defusedxml"] - -[[package]] -name = "pycparser" -version = "2.22" -description = "C parser in Python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc"}, - {file = "pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6"}, -] - [[package]] name = "pyfiglet" version = "1.0.2" @@ -863,64 +528,6 @@ files = [ [package.extras] windows-terminal = ["colorama (>=0.4.6)"] -[[package]] -name = "pyhanko" -version = "0.25.1" -description = "Tools for stamping and signing PDF files" -optional = false -python-versions = ">=3.8" -files = [ - {file = "pyHanko-0.25.1-py3-none-any.whl", hash = "sha256:045a0999c5e3b22caad86e4fa11ef488c3fd7f5b5886c045ca11ffa24254c33c"}, - {file = "pyhanko-0.25.1.tar.gz", hash = "sha256:8718d9046d442589eef6dd6973110fa5e385555cc4a6b2b1aeca3c2f3b6742e9"}, -] - -[package.dependencies] -asn1crypto = ">=1.5.1" -click = ">=8.1.3" -cryptography = ">=42.0.1" -pyhanko-certvalidator = ">=0.26.2,<0.27" -pyyaml = ">=6.0" -qrcode = ">=7.3.1" -requests = ">=2.31.0" -tzlocal = ">=4.3" - -[package.extras] -async-http = ["aiohttp (>=3.9.0,<3.10.0)"] -docs = ["sphinx", "sphinx-rtd-theme"] -etsi = ["xsdata (>=24.4,<25.0)"] -extra-pubkey-algs = ["oscrypto (>=1.2.1)"] -image-support = ["Pillow (>=7.2.0)", "python-barcode (==0.15.1)"] -live-test = ["certomancer-csc-dummy (==0.3.0)", "certomancer[web-api] (==0.12.*)", "pyHanko[async-http,extra-pubkey-algs,testing-basic,xmp]", "pytest-aiohttp (>=1.0.4,<1.1.0)", "pytest-cov (>=4.0,<5.1)"] -mypy = ["pyHanko[async-http,etsi,extra-pubkey-algs,image-support,opentype,pkcs11,xmp]", "types-PyYAML", "types-python-dateutil", "types-requests", "types-tzlocal"] -opentype = ["fonttools (>=4.33.3)", "uharfbuzz (>=0.25.0,<0.40.0)"] -pkcs11 = ["python-pkcs11 (>=0.7.0,<0.8.0)"] -testing = ["certomancer-csc-dummy (==0.3.0)", "pyHanko[async-http,extra-pubkey-algs,image-support,opentype,pkcs11,testing-basic,xmp]", "pyHanko[etsi]", "pytest-aiohttp (>=1.0.4,<1.1.0)"] -testing-basic = ["backports.zoneinfo[tzdata]", "certomancer (==0.12.*)", "freezegun (>=1.1.0)", "pytest (>=6.1.1)", "pytest-asyncio (==0.23.8)", "pytest-cov (>=4.0,<5.1)", "requests-mock (>=1.8.0)"] -xmp = ["defusedxml (>=0.7.1,<0.8.0)"] - -[[package]] -name = "pyhanko-certvalidator" -version = "0.26.3" -description = "Validates X.509 certificates and paths; forked from wbond/certvalidator" -optional = false -python-versions = ">=3.7" -files = [ - {file = "pyhanko-certvalidator-0.26.3.tar.gz", hash = "sha256:47fba8e9dbf846d766f2e0a453572dd4b25b2f1397847a31fe892c8eb00391f5"}, - {file = "pyhanko_certvalidator-0.26.3-py3-none-any.whl", hash = "sha256:e386c87e202ff1caacf5fd941da6c3509e79db54dbd7b43c6550ceebe5e67077"}, -] - -[package.dependencies] -asn1crypto = ">=1.5.1" -cryptography = ">=41.0.5" -oscrypto = ">=1.1.0" -requests = ">=2.31.0" -uritools = ">=3.0.1" - -[package.extras] -async-http = ["aiohttp (>=3.8,<3.10)"] -mypy = ["pyhanko-certvalidator[testing]", "types-requests"] -testing = ["aiohttp (>=3.8,<3.10)", "freezegun (>=1.1.0)", "pyhanko-certvalidator[async-http]", "pytest (>=6.1.1)", "pytest-aiohttp (>=1.0.4,<1.1.0)", "pytest-cov (>=4.0,<4.2)"] - [[package]] name = "pymupdf" version = "1.24.7" @@ -986,161 +593,6 @@ files = [ {file = "PyMuPDFb-1.24.6.tar.gz", hash = "sha256:f5a40b1732d65a1e519916d698858b9ce7473e23edf9001ddd085c5293d59d30"}, ] -[[package]] -name = "pypdf" -version = "5.1.0" -description = "A pure-python PDF library capable of splitting, merging, cropping, and transforming PDF files" -optional = false -python-versions = ">=3.8" -files = [ - {file = "pypdf-5.1.0-py3-none-any.whl", hash = "sha256:3bd4f503f4ebc58bae40d81e81a9176c400cbbac2ba2d877367595fb524dfdfc"}, - {file = "pypdf-5.1.0.tar.gz", hash = "sha256:425a129abb1614183fd1aca6982f650b47f8026867c0ce7c4b9f281c443d2740"}, -] - -[package.dependencies] -typing_extensions = {version = ">=4.0", markers = "python_version < \"3.11\""} - -[package.extras] -crypto = ["cryptography"] -cryptodome = ["PyCryptodome"] -dev = ["black", "flit", "pip-tools", "pre-commit (<2.18.0)", "pytest-cov", "pytest-socket", "pytest-timeout", "pytest-xdist", "wheel"] -docs = ["myst_parser", "sphinx", "sphinx_rtd_theme"] -full = ["Pillow (>=8.0.0)", "cryptography"] -image = ["Pillow (>=8.0.0)"] - -[[package]] -name = "python-bidi" -version = "0.6.3" -description = "Python Bidi layout wrapping the Rust crate unicode-bidi" -optional = false -python-versions = "*" -files = [ - {file = "python_bidi-0.6.3-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:7e2a62d7ebb4af9831c85921063154ab4067c73768ad04f466dff1359e6f2650"}, - {file = "python_bidi-0.6.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6b8035f02c3fcb52d372bfe51db00a0c95a3fdd6f0504a32e70d4f799809070d"}, - {file = "python_bidi-0.6.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:854edec3ef1ef50c49f689b44900fb6c51d35f277e10b4749755d053f405a44a"}, - {file = "python_bidi-0.6.3-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fe4c4ab61701a5e3b916c6b63811c6fd708539a3f189ec6ca6bd22948a125af0"}, - {file = "python_bidi-0.6.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:855a4dc2d237587a734babc6179130f9e7b7c028651cdead6ec5b162115ac112"}, - {file = "python_bidi-0.6.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3c0635bf46ddd56cf3f71d0711fbc160fd90c36fd3176b3e91b0bf7447e549f1"}, - {file = "python_bidi-0.6.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a4b7b6e458173614348db8e4a4406e468338c13ecc7b74d1e208d38d0d1d264"}, - {file = "python_bidi-0.6.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:25a39a3b61851506ed489867c69f3580ba75063195bf4b00f1983de88e02bf30"}, - {file = "python_bidi-0.6.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:24ea5c9f5cf9f3919d81669d24a1405709f4d66c82c3ffa7f982fcece856b325"}, - {file = "python_bidi-0.6.3-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:631d32fd1414d4795348122b820dadbff1ddaa6e53a70c1ee9d5a84911cc3c2d"}, - {file = "python_bidi-0.6.3-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:205aac547f8166005e041b33069da2c8a345171b0d7c8177c3d16408acde9acd"}, - {file = "python_bidi-0.6.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:a05249eac27e983a103babb9a2812726312bd8f685fdc3264f78b8ff8124d09a"}, - {file = "python_bidi-0.6.3-cp310-none-win32.whl", hash = "sha256:44023d51ae78ae119ef11043b5fb8f3dfc5de5ec04d937d7c5abc4da8cba1770"}, - {file = "python_bidi-0.6.3-cp310-none-win_amd64.whl", hash = "sha256:866865bbbc97a144e74508e2513373bb590d38fca3b6e52b6905de54b34ddbd9"}, - {file = "python_bidi-0.6.3-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:a656b91c74b77a5b005e6dac092947f00d546cce5d0ca70b6b6741b93f7705bf"}, - {file = "python_bidi-0.6.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4cb80856ce1e3f24c0d878fc85ab767c201ab8891a68f41d8da87eaf39c827de"}, - {file = "python_bidi-0.6.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9ad3f50925a5943d244c6ca05e0553922e917b3cc415580460d86af6a385ee23"}, - {file = "python_bidi-0.6.3-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:22f293338ec7d44e02991787d306d39e02f0b145810eef60802abd7833b6c2d0"}, - {file = "python_bidi-0.6.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:12b1d522cbd0af85094ccce8ae95c57a6a9d4f98e85f3e7c1ad1fb5d1c2cd09e"}, - {file = "python_bidi-0.6.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:da00726ebf17f857d458b310e868cae4b3bac668396cd5e874e17809894417e5"}, - {file = "python_bidi-0.6.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b1204f2aa62ac6226f11dd1bee250d428abb128046cf1999317b3f303c70ea2"}, - {file = "python_bidi-0.6.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7c99881440b2a4d8de7c2d7f3ac23e5f0a0ee0c5ae652f53188a21e9b0911f2d"}, - {file = "python_bidi-0.6.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:10f7c23dbb23dd0d2b0f67f7d4c2ba59eb42f777e1749ed9e13dbc8c4d28ea75"}, - {file = "python_bidi-0.6.3-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:d7527247a9d8e0aa9d2d4ecd24cbd8216bc4e3e89e77f9c833eedf278d9761cc"}, - {file = "python_bidi-0.6.3-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:5d6829865ff94925280af066c8536ff9595a6e40d300f9fc0e6ca4ebbf3bc306"}, - {file = "python_bidi-0.6.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0e0d574c22fbab1ea996ddb1ebb3eabae521f5d129d7c699445cad81e81bc351"}, - {file = "python_bidi-0.6.3-cp311-none-win32.whl", hash = "sha256:8c5fc9f065c24bd8058d7e9a5d42415134de3cc1aa480eebc27e2ca132919dd8"}, - {file = "python_bidi-0.6.3-cp311-none-win_amd64.whl", hash = "sha256:46ee694cf5a632a8d47cc35de6926581e586425b582216962d3e6d913aea0b88"}, - {file = "python_bidi-0.6.3-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:4bdc9dc1143c558ca6931d6712339a30470959f2b7eecb3d0687db7075c20a87"}, - {file = "python_bidi-0.6.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0775499b8037103278f05b2bf92d25bf04f40a9f77884ec3d42b01a1e52a40fe"}, - {file = "python_bidi-0.6.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eb3091aa5efbfc4da6fd52a2fccbf7853c6dc253ddaf9a189bcf3c4345865aa9"}, - {file = "python_bidi-0.6.3-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c75a9b68b3f5a8da9a33fe37607d9b267a8a3c5806d283a4a47365256773dd1e"}, - {file = "python_bidi-0.6.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:208e09819ee0485c2ed4dc1932c39fc073dac3f2cb70b6d2ae0b7296e86831e6"}, - {file = "python_bidi-0.6.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e17b67d86cd38f2bebc4a46090f83cabb0d1da3a3c920c68efe8093ae1a8d0d1"}, - {file = "python_bidi-0.6.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:933a17938f767fa64a8365732eba787a81c26214d89e1b3abe87912325ba26a9"}, - {file = "python_bidi-0.6.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:772efb3e0ef17396bfd9d47da4805c74ed6c04f27cac08d7757f76602837fb9d"}, - {file = "python_bidi-0.6.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:9a99114f33f8c0273a61b4afe7d4d715e098318ee4e5ce8f6bb5da8dcd3f95c7"}, - {file = "python_bidi-0.6.3-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:b30e620d39e85a30bb42f460fd8b5274caf261517edeb853b975d9ea1939b6bd"}, - {file = "python_bidi-0.6.3-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:bee94e3152a6c9ba731e086c9cc6203904290506ba52c505a2e59abab481eb13"}, - {file = "python_bidi-0.6.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:926164ec594e9ea9a64faf54273c711d5e3233bcc6ef8966c6eeaddfb3b3075f"}, - {file = "python_bidi-0.6.3-cp312-none-win32.whl", hash = "sha256:cea395a7daee14c7d50a7e20890d12b9ff1938d81b23eb564f1707a175c37202"}, - {file = "python_bidi-0.6.3-cp312-none-win_amd64.whl", hash = "sha256:350e6c76f942465871f2b473a2076f5002f1df06e4c7abee3029ccca5f006786"}, - {file = "python_bidi-0.6.3-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:617d4391b19969de725922a256599e8218fc9c1ef0ff85884f1698fff482a977"}, - {file = "python_bidi-0.6.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:81f418d54948542b21c03cd8ce622a480ead85fc53175a124c4562bdf55cec49"}, - {file = "python_bidi-0.6.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0999b77af58396cfd789c8d068bac78d2d51363265aaf1369622099be9e0eb32"}, - {file = "python_bidi-0.6.3-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f5a0e852e8451147d96876f8233a9db6ed28c914d9767a6696cbc899e7df00c2"}, - {file = "python_bidi-0.6.3-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:905e212b12c9edfaa3a916a3acd11426b89507ed0f31641257ad586467602e8d"}, - {file = "python_bidi-0.6.3-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:144adab8dc3a8560e294461114ce6dafec1a986cde6297994c1d31b3252f3298"}, - {file = "python_bidi-0.6.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:abdbd5c265d64251798243d97228bb78441a1320fe3cf51c9a31191c56407839"}, - {file = "python_bidi-0.6.3-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:65f824a878a593121570ce3da847d3b9ac50521782c433996d7f81f770d3ed00"}, - {file = "python_bidi-0.6.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c7dcbc7eb70a0c7c66ed5219213ee2afcc815988cb9e4b134631579c4ae46980"}, - {file = "python_bidi-0.6.3-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:ccbf53bc71a0a1b7f77524d1c2e51b245ae23a4f16afb80728071e21c187a768"}, - {file = "python_bidi-0.6.3-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:702527506ca97bf549710ce03d89a2577ebe35e34c42eaecfbacb0862ba06dc6"}, - {file = "python_bidi-0.6.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:1563a8d9cfaeeeb5b4fc806f52a500b19893c63652bbd497dd6ed9def7b9ee8e"}, - {file = "python_bidi-0.6.3-cp313-none-win32.whl", hash = "sha256:f9b8e024eeaddecb4ca189e3199181985fab20c224db9a1f08db48b905c9905a"}, - {file = "python_bidi-0.6.3-cp313-none-win_amd64.whl", hash = "sha256:36b3fb05ef990613a81a23822246eaf6eef29af5182f8d8cdd174be13c92d1cc"}, - {file = "python_bidi-0.6.3-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:3ef3c351c19348133e78aa4a05bc939f9f11d53c6733c5e8ec160a9fd78c902f"}, - {file = "python_bidi-0.6.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f482f205a62c958273e40c20405141f18c2d0529abb22ba6aa440602655f43a7"}, - {file = "python_bidi-0.6.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:982f805714a5ee83b034b8ad6a27f37db994483b72657c7898053333737a5fe3"}, - {file = "python_bidi-0.6.3-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3ee410954d7dc7591106f9526c3ce9893a64345e69edf86d084fe8841e62bfa0"}, - {file = "python_bidi-0.6.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b4d4a8917804a1c749e92aafb152d239cd25127cea0bb8710b99315266022009"}, - {file = "python_bidi-0.6.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:984cb68c5bc7980f9cc66ae2f9d06b7426445b7dfcce4d555ff04333c34d01a6"}, - {file = "python_bidi-0.6.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bedcbab3867227519e2dfee6c3ac26d7722ce6a048f5c72585cf83779b8e61f8"}, - {file = "python_bidi-0.6.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:eda3e04c6f54e0e44e55433da0fabab6776c69bcfb1965f09e4bb5b5b4446846"}, - {file = "python_bidi-0.6.3-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:2825a720d9dbd8ff6158a458edfbdc55bfd3de3f8181a59c7126f78ef3e27b7b"}, - {file = "python_bidi-0.6.3-cp38-cp38-musllinux_1_2_armv7l.whl", hash = "sha256:6b5f60865b4d10de024c35d9900efe371844da4a0cda1cb2a4bd35746ba69097"}, - {file = "python_bidi-0.6.3-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:9f859236e69250a0cc857968b8beef749ab4f7b29164cb9a8a3150d094c318fc"}, - {file = "python_bidi-0.6.3-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:282c60f86f30ba6263e10427fec528ab17dde97c7a6653c0187d8e2412dec6f4"}, - {file = "python_bidi-0.6.3-cp38-none-win32.whl", hash = "sha256:5d33d011d334795ff4d5d0de57457a980f76055a338ebabe558e795f9e0fbe63"}, - {file = "python_bidi-0.6.3-cp38-none-win_amd64.whl", hash = "sha256:535069329c12ea08ad6a3b38c48cba2d912a704dee25566e7a37f2b67be9fece"}, - {file = "python_bidi-0.6.3-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:d0945a3f116700ebc791911797096afe3e24953927b335c9c818f56475915aef"}, - {file = "python_bidi-0.6.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8eb231d9ab92bfd4a9b7e7282210f02d130d7935ec8cfb1d82d6d53fa858a3de"}, - {file = "python_bidi-0.6.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce288cb2af08d5242b034ce4e6936e540046a4c5fbccda72610ac67d8b06b5cc"}, - {file = "python_bidi-0.6.3-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:304094c931a9ca45a347fa31db9e01b9cbefd48a194950b1441f20ba24ff0d17"}, - {file = "python_bidi-0.6.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3df42de54d0f0daea931439abefc97da6c642d3665bcde510cd31689230777ff"}, - {file = "python_bidi-0.6.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fc5a29d459deb7ce923cf33283de15776fa8008c55b42e1eed5ba76980cc01f3"}, - {file = "python_bidi-0.6.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ae862fc829ee747b30cce23353b2266c706376c9b1ebfea943d63731eb1a0cbd"}, - {file = "python_bidi-0.6.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a9419c87a7657b1b39497302461c7e501bbfd03442186083007e9a1627656871"}, - {file = "python_bidi-0.6.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:d352154a636a243235260ecd8dcbd2b73e3e7d1f42c280fdb6802876152f1435"}, - {file = "python_bidi-0.6.3-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:04448d5355db4233da49c9f656b43b34fa0467f6b0c8ff766c1543eaed52f974"}, - {file = "python_bidi-0.6.3-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:07eb504fcefc9e9f416f03c089dce23b1ba79d0dd38e976f6f00944d8c708461"}, - {file = "python_bidi-0.6.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:7e083f0e7391b5672f9e76393d8d111e1bf875f784ad3659776a4881440ebf1c"}, - {file = "python_bidi-0.6.3-cp39-none-win32.whl", hash = "sha256:a153364706cacaea4f97a63b3d5db780d56b66c0a64f1d202065d3863f782075"}, - {file = "python_bidi-0.6.3-cp39-none-win_amd64.whl", hash = "sha256:4be0d628b84c2a524d080c653726fba6e518432f33ac970db25c6366b9b71303"}, - {file = "python_bidi-0.6.3-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:28cd25ef6141a77e04a7fb6fef0a19cc307106f84a891777fcdd3306ae8cfc20"}, - {file = "python_bidi-0.6.3-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:e4eab3736a14b8d9daea3e8e638ca5a24051497152ba32fb08db9259dd77b858"}, - {file = "python_bidi-0.6.3-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:78d12927cab0f6b8304f04c9ed72bc1a2880df8974d8596e40e7e596c6a98b2e"}, - {file = "python_bidi-0.6.3-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:440be542b334da05673bd94d53ba4922482b06fa3f4daca6c8fa7434afb33e8a"}, - {file = "python_bidi-0.6.3-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a9635ae0c9ee71b69f11cb6ab9523165c79fdb82ca53afb5afb0d401616fef80"}, - {file = "python_bidi-0.6.3-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1ebac008620916b0c02623926fd80719f2e61e4fa9b626ed1e309a6818b57486"}, - {file = "python_bidi-0.6.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:57bb5fd4d9ccad52584ce8ad1468ec2e5b535519840ab1debe05c7fe4d32b800"}, - {file = "python_bidi-0.6.3-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1caacb766872c54742cdb8a5c042bec1282c5a3144e4aeba6f8650ab8911d7f3"}, - {file = "python_bidi-0.6.3-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:584dd7c4617ea0ef39900ef7b06b8c61e6ce3ccb4b90c28ed28fa3bf770c5124"}, - {file = "python_bidi-0.6.3-pp310-pypy310_pp73-musllinux_1_2_armv7l.whl", hash = "sha256:a3bdc284cc4a1d70942ba0582b91853403c5ca7df79909b755be69089ecc5e17"}, - {file = "python_bidi-0.6.3-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:995ed295f2d9095facbef3025d79e209ec7ae1be0d1f385a49818edb2cb4421e"}, - {file = "python_bidi-0.6.3-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:a50d62f4f1e10682babd529d46e9e62236ff202d3025a223c17ead32035cb410"}, - {file = "python_bidi-0.6.3-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:ea2898279afde47dcfec7a821abb54f7476e5584b655389aa731a50b90f8ea52"}, - {file = "python_bidi-0.6.3-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:fe9b6a33f281814dfbf12fe27f35b8780edd6da62ce2a034994f006d6d0184e7"}, - {file = "python_bidi-0.6.3-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:435579d0bf2a7e2f872bb5c7254fe89cddfdea6909ed6dc3e8af4ffe1f3f1f18"}, - {file = "python_bidi-0.6.3-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f8d76a8452c9fa1ece0a70a7be15a516861c3875bb621e125305d0141ceac8e3"}, - {file = "python_bidi-0.6.3-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fbf64f5e3f19913f63f34832c0ddef5ea6a772c5dda54907a949e804c20021e3"}, - {file = "python_bidi-0.6.3-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8e226a888e13c9cf1e9f0de0a2ff5c98a50561cada19c0b0c69c76343685ee54"}, - {file = "python_bidi-0.6.3-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:308ee73ffaa771048b1ccec37145a2735da9d67df55583c2fc2cb73d78e86a91"}, - {file = "python_bidi-0.6.3-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d85744ddcfeb207bbf6774b7e1a29af6e5e208ed5dbecc5853ec60ed8bc8242f"}, - {file = "python_bidi-0.6.3-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:40ab8bf2f528a28a70231ce4015d81aea6d8f0a0cdd2bdaf024e9e7849a5ee55"}, - {file = "python_bidi-0.6.3-pp38-pypy38_pp73-musllinux_1_2_armv7l.whl", hash = "sha256:aa857199f9d797c615a92ae1dec90d443a50373caf7af2cf4e791714afc31b2a"}, - {file = "python_bidi-0.6.3-pp38-pypy38_pp73-musllinux_1_2_i686.whl", hash = "sha256:197fcd6cb88f021333622f83d7d68e842ab9e2df492ab04e1e84b6de8f15c698"}, - {file = "python_bidi-0.6.3-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:f832a45f05c15072edf473c6c3b9b164b25a2515f723d42c7400db848c299e59"}, - {file = "python_bidi-0.6.3-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:3b2ee6cf7cadb5d5cc05eca4b8b55a433dab922633faf85b0d19ec2aeed9ad5b"}, - {file = "python_bidi-0.6.3-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:835b1d72364618fc8313bfdba2f65ce8e11bd9c1eab01fe9a3c3ec93063cb5b1"}, - {file = "python_bidi-0.6.3-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f92e0d6771d184bbb7b06645edb069c023f695de312bf78e35efe45e0da7f66"}, - {file = "python_bidi-0.6.3-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7a6a3e0e130a0db20c4808242470277045e921b414cd9f545cba67a8c17bb785"}, - {file = "python_bidi-0.6.3-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e2b2ee73e0f799ed234ed52af258f77a72aca216477d3ef072c59303f1a938c9"}, - {file = "python_bidi-0.6.3-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:042d0ee4bb9286b605b252488501bdae6f5b249fe2422fb12e4884aa4dc316d1"}, - {file = "python_bidi-0.6.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa68ef8e955d0d63fe2d9aac4f8b8b9f47869bf98a8773c7322918312dbdd109"}, - {file = "python_bidi-0.6.3-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d07c491c2cede5b022356003070bc8e452a0dcf1d884db4a384e9a3383b9efd3"}, - {file = "python_bidi-0.6.3-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:6132d661a3bfac2b8cf0d301bcdd59c7cc3e2145ea090b75505816604d8118d5"}, - {file = "python_bidi-0.6.3-pp39-pypy39_pp73-musllinux_1_2_armv7l.whl", hash = "sha256:61b8a3dc229617b2f8c15165001babf4a199af9001087cad10ded14ec0a028d4"}, - {file = "python_bidi-0.6.3-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:5bcab7ac734c5102e90b0f41274b81bdcf55009b05aaa6a653320d63304f20a7"}, - {file = "python_bidi-0.6.3-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:44560c6abcf3a512e618b52b33bce3d053eaf020c0677d3b4512167715900e66"}, - {file = "python_bidi-0.6.3.tar.gz", hash = "sha256:e12114969001a328aea859f79efc30ab9c15241befb86e07029d8961d97fae36"}, -] - -[package.extras] -dev = ["pytest"] - [[package]] name = "python-dateutil" version = "2.9.0.post0" @@ -1169,107 +621,6 @@ files = [ [package.dependencies] python-dateutil = "*" -[[package]] -name = "pyyaml" -version = "6.0.2" -description = "YAML parser and emitter for Python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "PyYAML-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086"}, - {file = "PyYAML-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf"}, - {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237"}, - {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b"}, - {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed"}, - {file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180"}, - {file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68"}, - {file = "PyYAML-6.0.2-cp310-cp310-win32.whl", hash = "sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99"}, - {file = "PyYAML-6.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e"}, - {file = "PyYAML-6.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774"}, - {file = "PyYAML-6.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee"}, - {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c"}, - {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317"}, - {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85"}, - {file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4"}, - {file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e"}, - {file = "PyYAML-6.0.2-cp311-cp311-win32.whl", hash = "sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5"}, - {file = "PyYAML-6.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44"}, - {file = "PyYAML-6.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab"}, - {file = "PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725"}, - {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5"}, - {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425"}, - {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476"}, - {file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48"}, - {file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b"}, - {file = "PyYAML-6.0.2-cp312-cp312-win32.whl", hash = "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4"}, - {file = "PyYAML-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8"}, - {file = "PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba"}, - {file = "PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1"}, - {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133"}, - {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484"}, - {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5"}, - {file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc"}, - {file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652"}, - {file = "PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183"}, - {file = "PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563"}, - {file = "PyYAML-6.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:24471b829b3bf607e04e88d79542a9d48bb037c2267d7927a874e6c205ca7e9a"}, - {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7fded462629cfa4b685c5416b949ebad6cec74af5e2d42905d41e257e0869f5"}, - {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d84a1718ee396f54f3a086ea0a66d8e552b2ab2017ef8b420e92edbc841c352d"}, - {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9056c1ecd25795207ad294bcf39f2db3d845767be0ea6e6a34d856f006006083"}, - {file = "PyYAML-6.0.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:82d09873e40955485746739bcb8b4586983670466c23382c19cffecbf1fd8706"}, - {file = "PyYAML-6.0.2-cp38-cp38-win32.whl", hash = "sha256:43fa96a3ca0d6b1812e01ced1044a003533c47f6ee8aca31724f78e93ccc089a"}, - {file = "PyYAML-6.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:01179a4a8559ab5de078078f37e5c1a30d76bb88519906844fd7bdea1b7729ff"}, - {file = "PyYAML-6.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:688ba32a1cffef67fd2e9398a2efebaea461578b0923624778664cc1c914db5d"}, - {file = "PyYAML-6.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a8786accb172bd8afb8be14490a16625cbc387036876ab6ba70912730faf8e1f"}, - {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8e03406cac8513435335dbab54c0d385e4a49e4945d2909a581c83647ca0290"}, - {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f753120cb8181e736c57ef7636e83f31b9c0d1722c516f7e86cf15b7aa57ff12"}, - {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b1fdb9dc17f5a7677423d508ab4f243a726dea51fa5e70992e59a7411c89d19"}, - {file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0b69e4ce7a131fe56b7e4d770c67429700908fc0752af059838b1cfb41960e4e"}, - {file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a9f8c2e67970f13b16084e04f134610fd1d374bf477b17ec1599185cf611d725"}, - {file = "PyYAML-6.0.2-cp39-cp39-win32.whl", hash = "sha256:6395c297d42274772abc367baaa79683958044e5d3835486c16da75d2a694631"}, - {file = "PyYAML-6.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:39693e1f8320ae4f43943590b49779ffb98acb81f788220ea932a6b6c51004d8"}, - {file = "pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e"}, -] - -[[package]] -name = "qrcode" -version = "8.0" -description = "QR Code image generator" -optional = false -python-versions = "<4.0,>=3.9" -files = [ - {file = "qrcode-8.0-py3-none-any.whl", hash = "sha256:9fc05f03305ad27a709eb742cf3097fa19e6f6f93bb9e2f039c0979190f6f1b1"}, - {file = "qrcode-8.0.tar.gz", hash = "sha256:025ce2b150f7fe4296d116ee9bad455a6643ab4f6e7dce541613a4758cbce347"}, -] - -[package.dependencies] -colorama = {version = "*", markers = "sys_platform == \"win32\""} - -[package.extras] -all = ["pillow (>=9.1.0)", "pypng"] -pil = ["pillow (>=9.1.0)"] -png = ["pypng"] - -[[package]] -name = "reportlab" -version = "4.2.5" -description = "The Reportlab Toolkit" -optional = false -python-versions = "<4,>=3.7" -files = [ - {file = "reportlab-4.2.5-py3-none-any.whl", hash = "sha256:eb2745525a982d9880babb991619e97ac3f661fae30571b7d50387026ca765ee"}, - {file = "reportlab-4.2.5.tar.gz", hash = "sha256:5cf35b8fd609b68080ac7bbb0ae1e376104f7d5f7b2d3914c7adc63f2593941f"}, -] - -[package.dependencies] -chardet = "*" -pillow = ">=9.0.0" - -[package.extras] -accel = ["rl-accel (>=0.9.0,<1.1)"] -pycairo = ["freetype-py (>=2.3.0,<2.4)", "rlPyCairo (>=0.2.0,<1)"] -renderpm = ["rl-renderPM (>=4.0.3,<4.1)"] - [[package]] name = "requests" version = "2.32.3" @@ -1331,90 +682,6 @@ files = [ {file = "soupsieve-2.5.tar.gz", hash = "sha256:5663d5a7b3bfaeee0bc4372e7fc48f9cff4940b3eec54a6451cc5299f1097690"}, ] -[[package]] -name = "svglib" -version = "1.5.1" -description = "A pure-Python library for reading and converting SVG" -optional = false -python-versions = ">=3.7" -files = [ - {file = "svglib-1.5.1.tar.gz", hash = "sha256:3ae765d3a9409ee60c0fb4d24c2deb6a80617aa927054f5bcd7fc98f0695e587"}, -] - -[package.dependencies] -cssselect2 = ">=0.2.0" -lxml = "*" -reportlab = "*" -tinycss2 = ">=0.6.0" - -[[package]] -name = "tinycss2" -version = "1.4.0" -description = "A tiny CSS parser" -optional = false -python-versions = ">=3.8" -files = [ - {file = "tinycss2-1.4.0-py3-none-any.whl", hash = "sha256:3a49cf47b7675da0b15d0c6e1df8df4ebd96e9394bb905a5775adb0d884c5289"}, - {file = "tinycss2-1.4.0.tar.gz", hash = "sha256:10c0972f6fc0fbee87c3edb76549357415e94548c1ae10ebccdea16fb404a9b7"}, -] - -[package.dependencies] -webencodings = ">=0.4" - -[package.extras] -doc = ["sphinx", "sphinx_rtd_theme"] -test = ["pytest", "ruff"] - -[[package]] -name = "typing-extensions" -version = "4.12.2" -description = "Backported and Experimental Type Hints for Python 3.8+" -optional = false -python-versions = ">=3.8" -files = [ - {file = "typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d"}, - {file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"}, -] - -[[package]] -name = "tzdata" -version = "2024.2" -description = "Provider of IANA time zone data" -optional = false -python-versions = ">=2" -files = [ - {file = "tzdata-2024.2-py2.py3-none-any.whl", hash = "sha256:a48093786cdcde33cad18c2555e8532f34422074448fbc874186f0abd79565cd"}, - {file = "tzdata-2024.2.tar.gz", hash = "sha256:7d85cc416e9382e69095b7bdf4afd9e3880418a2413feec7069d533d6b4e31cc"}, -] - -[[package]] -name = "tzlocal" -version = "5.2" -description = "tzinfo object for the local timezone" -optional = false -python-versions = ">=3.8" -files = [ - {file = "tzlocal-5.2-py3-none-any.whl", hash = "sha256:49816ef2fe65ea8ac19d19aa7a1ae0551c834303d5014c6d5a62e4cbda8047b8"}, - {file = "tzlocal-5.2.tar.gz", hash = "sha256:8d399205578f1a9342816409cc1e46a93ebd5755e39ea2d85334bea911bf0e6e"}, -] - -[package.dependencies] -tzdata = {version = "*", markers = "platform_system == \"Windows\""} - -[package.extras] -devenv = ["check-manifest", "pytest (>=4.3)", "pytest-cov", "pytest-mock (>=3.3)", "zest.releaser"] - -[[package]] -name = "uritools" -version = "4.0.3" -description = "URI parsing, classification and composition" -optional = false -python-versions = ">=3.7" -files = [ - {file = "uritools-4.0.3-py3-none-any.whl", hash = "sha256:bae297d090e69a0451130ffba6f2f1c9477244aa0a5543d66aed2d9f77d0dd9c"}, - {file = "uritools-4.0.3.tar.gz", hash = "sha256:ee06a182a9c849464ce9d5fa917539aacc8edd2a4924d1b7aabeeecabcae3bc2"}, -] - [[package]] name = "urllib3" version = "2.2.2" @@ -1432,47 +699,7 @@ h2 = ["h2 (>=4,<5)"] socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] zstd = ["zstandard (>=0.18.0)"] -[[package]] -name = "webencodings" -version = "0.5.1" -description = "Character encoding aliases for legacy web content" -optional = false -python-versions = "*" -files = [ - {file = "webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78"}, - {file = "webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"}, -] - -[[package]] -name = "xhtml2pdf" -version = "0.2.16" -description = "PDF generator using HTML and CSS" -optional = false -python-versions = ">=3.8" -files = [ - {file = "xhtml2pdf-0.2.16-py3-none-any.whl", hash = "sha256:b37040127627aee42f76f25ebbd5798308ffc93edaf4850a4d3dd894160ebb53"}, - {file = "xhtml2pdf-0.2.16.tar.gz", hash = "sha256:7391adac12afb086561667cdc8d6ef0ac4afe5097bd97383622d42b6343dee71"}, -] - -[package.dependencies] -arabic-reshaper = ">=3.0.0" -html5lib = ">=1.1" -Pillow = ">=8.1.1" -pyHanko = ">=0.12.1" -pyhanko-certvalidator = ">=0.19.5" -pypdf = ">=3.1.0" -python-bidi = ">=0.4.2" -reportlab = ">=4.0.4,<5" -svglib = ">=1.2.1" - -[package.extras] -docs = ["sphinx (>=6)", "sphinx-rtd-theme (>=0.5.0)"] -pycairo = ["reportlab[pycairo] (>=4.0.4,<5)"] -release = ["build", "twine"] -renderpm = ["reportlab[renderpm] (>=4.0.4,<5)"] -test = ["coverage (>=5.3)", "tomli (>=2.0.1)", "tox"] - [metadata] lock-version = "2.0" python-versions = "^3.10" -content-hash = "837f9889f17ed0a618901b4d21dfc6c60aa19f9c0b5e64c137cdf23d125bb27c" +content-hash = "6b5d2a1f3f80e9d4da489516fdda4d8ae185fd01b7e936f615b11ae6232fc722" From 480bf39b379bae170e2faf687026d8506fb62c22 Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Mon, 11 Nov 2024 00:58:28 +0300 Subject: [PATCH 24/46] Removed PDF report handling --- datagather_modules/data_assembler.py | 62 ++-------------------------- 1 file changed, 3 insertions(+), 59 deletions(-) diff --git a/datagather_modules/data_assembler.py b/datagather_modules/data_assembler.py index c65050f..88bc74d 100644 --- a/datagather_modules/data_assembler.py +++ b/datagather_modules/data_assembler.py @@ -82,9 +82,7 @@ def data_gathering(self, short_domain, url, report_file_type, pagesearch_flag, k print(Fore.GREEN + 'Processing social medias gathering' + Style.RESET_ALL) social_medias = cp.sm_gather(url) print(Fore.GREEN + 'Processing subdomain analysis' + Style.RESET_ALL) - if report_file_type == 'pdf': - subdomain_mails, sd_socials, subdomain_ip = cp.domains_reverse_research(subdomains, report_file_type) - elif report_file_type == 'xlsx': + if report_file_type == 'xlsx': subdomain_urls, subdomain_mails, subdomain_ip, sd_socials = cp.domains_reverse_research(subdomains, report_file_type) elif report_file_type == 'html': subdomain_mails, sd_socials, subdomain_ip = cp.domains_reverse_research(subdomains, report_file_type) @@ -95,7 +93,7 @@ def data_gathering(self, short_domain, url, report_file_type, pagesearch_flag, k print(Fore.GREEN + 'Extracting robots.txt and sitemap.xml' + Style.RESET_ALL) robots_txt_result = np.get_robots_txt(short_domain, robots_filepath) sitemap_xml_result = np.get_sitemap_xml(short_domain, sitemap_filepath) - if report_file_type == 'pdf' or report_file_type == 'html': + if report_file_type == 'html': sitemap_links_status = np.extract_links_from_sitemap(sitemap_links_filepath, sitemap_filepath) elif report_file_type == 'xlsx': try: @@ -113,61 +111,7 @@ def data_gathering(self, short_domain, url, report_file_type, pagesearch_flag, k common_socials[key] = list(set(common_socials[key])) total_socials = sum(len(values) for values in common_socials.values()) print(Fore.LIGHTMAGENTA_EX + "\n[BASIC SCAN END]\n" + Style.RESET_ALL) - - if report_file_type == 'pdf': - if pagesearch_flag.lower() == 'y': - if subdomains[0] != 'No subdomains were found': - to_search_array = [subdomains, social_medias, sd_socials] - print(Fore.LIGHTMAGENTA_EX + "\n[EXTENDED SCAN START: PAGESEARCH]\n" + Style.RESET_ALL) - ps_emails_return, accessible_subdomains, emails_amount, files_counter, cookies_counter, api_keys_counter, website_elements_counter, exposed_passwords_counter, keywords_messages_list = normal_search(to_search_array, report_folder, keywords, keywords_flag) - if len(keywords_messages_list) == 0: - keywords_messages_list = ['No keywords were found'] - total_links_counter = accessed_links_counter = 0 - print(Fore.LIGHTMAGENTA_EX + "\n[EXTENDED SCAN END: PAGESEARCH]\n" + Style.RESET_ALL) - else: - print(Fore.RED + "Cant start PageSearch because no subdomains were detected") - ps_emails_return = "" - accessible_subdomains = files_counter = cookies_counter = api_keys_counter = website_elements_counter = exposed_passwords_counter = total_links_counter = accessed_links_counter = emails_amount = 'No data was gathered because no subdomains were found' - keywords_messages_list = ['No data was gathered because no subdomains were found'] - pass - elif pagesearch_flag.lower() == 'si': - print(Fore.LIGHTMAGENTA_EX + "\n[EXTENDED SCAN START: PAGESEARCH SITEMAP INSPECTION]\n" + Style.RESET_ALL) - ps_emails_return, total_links_counter, accessed_links_counter, emails_amount = sitemap_inspection_search(report_folder) - accessible_subdomains = files_counter = cookies_counter = api_keys_counter = website_elements_counter = exposed_passwords_counter = keywords_messages_list = 0 - print(Fore.LIGHTMAGENTA_EX + "\n[EXTENDED SCAN END: PAGESEARCH SITEMAP INSPECTION]\n" + Style.RESET_ALL) - elif pagesearch_flag.lower() == 'n': - accessible_subdomains = files_counter = cookies_counter = api_keys_counter = website_elements_counter = exposed_passwords_counter = total_links_counter = accessed_links_counter = emails_amount = keywords_messages_list = 0 - ps_emails_return = "" - pass - - if dorking_flag == 'none': - dorking_status = 'Google Dorking mode was not selected for this scan' - dorking_file_path = 'Google Dorking mode was not selected for this scan' - else: - dorking_db_path, table = establishing_dork_db_connection(dorking_flag.lower()) - print(Fore.LIGHTMAGENTA_EX + f"\n[EXTENDED SCAN START: {dorking_flag.upper()} DORKING]\n" + Style.RESET_ALL) - dorking_status, dorking_file_path = dp.save_results_to_txt(report_folder, table, dp.get_dorking_query(short_domain, dorking_db_path, table)) - print(Fore.LIGHTMAGENTA_EX + f"\n[EXTENDED SCAN END: {dorking_flag.upper()} DORKING]\n" + Style.RESET_ALL) - - if used_api_flag != ['Empty']: - print(Fore.LIGHTMAGENTA_EX + f"\n[EXTENDED SCAN START: API SCANNING]\n" + Style.RESET_ALL) - if 1 in used_api_flag: - api_virustotal_check(short_domain) - if 2 in used_api_flag: - api_securitytrails_check(short_domain) - print(Fore.LIGHTMAGENTA_EX + f"\n[EXTENDED SCAN END: API SCANNING]\n" + Style.RESET_ALL) - else: - pass - - data_array = [ip, res, mails, subdomains, subdomains_amount, social_medias, subdomain_mails, sd_socials, - subdomain_ip, issuer, subject, notBefore, notAfter, commonName, serialNumber, mx_records, - robots_txt_result, sitemap_xml_result, sitemap_links_status, - web_servers, cms, programming_languages, web_frameworks, analytics, javascript_frameworks, ports, - hostnames, cpes, tags, vulns, common_socials, total_socials, ps_emails_return, - accessible_subdomains, emails_amount, files_counter, cookies_counter, api_keys_counter, - website_elements_counter, exposed_passwords_counter, total_links_counter, accessed_links_counter, keywords_messages_list, dorking_status, dorking_file_path] - - elif report_file_type == 'xlsx': + if report_file_type == 'xlsx': if pagesearch_flag.lower() == 'y': if subdomains[0] != 'No subdomains were found': to_search_array = [subdomains, social_medias, sd_socials] From 4396b6c9a48868752c094beeb4c79a401d80c5e2 Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Mon, 11 Nov 2024 01:00:40 +0300 Subject: [PATCH 25/46] Removed redundant pdf_report_creation module import --- dpulse.py | 1 - 1 file changed, 1 deletion(-) diff --git a/dpulse.py b/dpulse.py index 43f9505..f7a5506 100644 --- a/dpulse.py +++ b/dpulse.py @@ -66,7 +66,6 @@ def run(): choice = input(Fore.YELLOW + "Enter your choice >> ") if choice == "1": from misc import time_processing, domain_precheck - import pdf_report_creation as pdf_rc import xlsx_report_creation as xlsx_rc import html_report_creation as html_rc print(Fore.GREEN + "\nImported and activated reporting modules" + Style.RESET_ALL) From 92e6d1ced8e2fcff54b83dabbc9ffb5e0f6d1479 Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Mon, 11 Nov 2024 01:09:18 +0300 Subject: [PATCH 26/46] Rewritten "None" dorking mark to "N" --- datagather_modules/data_assembler.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/datagather_modules/data_assembler.py b/datagather_modules/data_assembler.py index 88bc74d..70eeaa5 100644 --- a/datagather_modules/data_assembler.py +++ b/datagather_modules/data_assembler.py @@ -134,7 +134,7 @@ def data_gathering(self, short_domain, url, report_file_type, pagesearch_flag, k accessible_subdomains = files_counter = cookies_counter = api_keys_counter = website_elements_counter = exposed_passwords_counter = total_links_counter = accessed_links_counter = emails_amount = 0 pass - if dorking_flag == 'none': + if dorking_flag == 'n': dorking_status = 'Google Dorking mode was not selected for this scan' dorking_results = ['Google Dorking mode was not selected for this scan'] else: @@ -187,7 +187,7 @@ def data_gathering(self, short_domain, url, report_file_type, pagesearch_flag, k ps_emails_return = "" pass - if dorking_flag == 'none': + if dorking_flag == 'n': dorking_status = 'Google Dorking mode was not selected for this scan' dorking_file_path = 'Google Dorking mode was not selected for this scan' else: From f5124ef1e7cf38f026ff2451d16e702c0d38f282 Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Mon, 11 Nov 2024 01:19:35 +0300 Subject: [PATCH 27/46] Added dorking_results.txt file removal after creating HTML report --- reporting_modules/html_report_creation.py | 1 + 1 file changed, 1 insertion(+) diff --git a/reporting_modules/html_report_creation.py b/reporting_modules/html_report_creation.py index b09af69..02dda93 100644 --- a/reporting_modules/html_report_creation.py +++ b/reporting_modules/html_report_creation.py @@ -146,6 +146,7 @@ def report_assembling(short_domain, url, case_comment, data_array, report_info_a robots_content, sitemap_content, sitemap_links_content, dorking_content = fp.get_db_columns(report_folder) pdf_blob = fp.get_blob(html_report_name) db.insert_blob('HTML', pdf_blob, db_casename, db_creation_date, case_comment, robots_content, sitemap_content, sitemap_links_content, dorking_content, api_scan_db) + os.remove(report_folder + '//04-dorking_results.txt') except Exception as e: print(Fore.RED + 'Unable to create HTML report. See journal for details') logging.error(f'HTML REPORT CREATION: ERROR. REASON: {e}') From eeb216c36f69b4036971d4a0e5c183c210a6178a Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Mon, 11 Nov 2024 01:22:45 +0300 Subject: [PATCH 28/46] Removed TXT results file mention --- dorking/dorking_handler.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dorking/dorking_handler.py b/dorking/dorking_handler.py index 51d9489..8259771 100644 --- a/dorking/dorking_handler.py +++ b/dorking/dorking_handler.py @@ -106,7 +106,7 @@ def save_results_to_txt(folderpath, table, queries, pages=10): f.write("\n") dorked_query_counter += 1 print(Fore.GREEN + f" Dorking with " + Style.RESET_ALL + Fore.LIGHTCYAN_EX + Style.BRIGHT + f"{dorked_query_counter}/{total_dorks_amount}" + Style.RESET_ALL + Fore.GREEN + " dork" + Style.RESET_ALL, end="\r") - print(Fore.GREEN + "Google Dorking end. Results successfully saved in TXT file\n" + Style.RESET_ALL) + print(Fore.GREEN + "Google Dorking end. Results successfully saved in HTML report\n" + Style.RESET_ALL) print(Fore.GREEN + f"During Google Dorking with {table.upper()}:") for query, count in total_results: if count == 0: From 9944fdb7c68a4505439702e981473bce4d652419 Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Mon, 11 Nov 2024 01:37:02 +0300 Subject: [PATCH 29/46] Fixed bug with wrong api_scan_db handling in XLSX report --- datagather_modules/data_assembler.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/datagather_modules/data_assembler.py b/datagather_modules/data_assembler.py index 70eeaa5..b24a769 100644 --- a/datagather_modules/data_assembler.py +++ b/datagather_modules/data_assembler.py @@ -143,14 +143,18 @@ def data_gathering(self, short_domain, url, report_file_type, pagesearch_flag, k dorking_status, dorking_results = dp.transfer_results_to_xlsx(table, dp.get_dorking_query(short_domain, dorking_db_path, table)) print(Fore.LIGHTMAGENTA_EX + f"\n[EXTENDED SCAN END: {dorking_flag.upper()} DORKING]\n" + Style.RESET_ALL) + api_scan_db = [] if used_api_flag != ['Empty']: print(Fore.LIGHTMAGENTA_EX + f"\n[EXTENDED SCAN START: API SCANNING]\n" + Style.RESET_ALL) if 1 in used_api_flag: api_virustotal_check(short_domain) + api_scan_db.append('VirusTotal') if 2 in used_api_flag: api_securitytrails_check(short_domain) + api_scan_db.append('SecurityTrails') print(Fore.LIGHTMAGENTA_EX + f"\n[EXTENDED SCAN END: API SCANNING]\n" + Style.RESET_ALL) else: + api_scan_db.append('No') pass data_array = [ip, res, mails, subdomains, subdomains_amount, social_medias, subdomain_mails, sd_socials, From 87e48a1a2b4b0c961015e58960cf665fc9dfa7aa Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Mon, 11 Nov 2024 01:37:28 +0300 Subject: [PATCH 30/46] Fixed bug with wrong api_scan_db handling in XLSX report --- reporting_modules/xlsx_report_creation.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/reporting_modules/xlsx_report_creation.py b/reporting_modules/xlsx_report_creation.py index 7d3af94..1e8895d 100644 --- a/reporting_modules/xlsx_report_creation.py +++ b/reporting_modules/xlsx_report_creation.py @@ -66,6 +66,7 @@ def create_report(short_domain, url, case_comment, data_array, report_info_array db_creation_date = report_info_array[2] report_folder = report_info_array[3] report_ctime = report_info_array[6] + api_scan_db = report_info_array[7] os.makedirs(report_folder, exist_ok=True) if len(ps_emails_return) > 0: @@ -323,7 +324,7 @@ def create_report(short_domain, url, case_comment, data_array, report_info_array print(Fore.GREEN + f"Scan elapsed time: {end}" + Style.RESET_ALL) robots_content, sitemap_content, sitemap_links_content, dorking_content = fp.get_db_columns(report_folder) xlsx_blob = fp.get_blob(report_file) - db.insert_blob('XLSX', xlsx_blob, db_casename, db_creation_date, case_comment, robots_content, sitemap_content, sitemap_links_content, dorking_content) + db.insert_blob('XLSX', xlsx_blob, db_casename, db_creation_date, case_comment, robots_content, sitemap_content, sitemap_links_content, dorking_content, api_scan_db) except Exception as e: print(Fore.RED + 'Unable to create XLSX report. See journal for details') logging.error(f'XLSX REPORT CREATION: ERROR. REASON: {e}') From 408b0362978002d127d5dbfa27bda87fae7fb9d8 Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Mon, 11 Nov 2024 18:30:06 +0300 Subject: [PATCH 31/46] Fixed bug when trying to delete file which doesn't exist --- reporting_modules/html_report_creation.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/reporting_modules/html_report_creation.py b/reporting_modules/html_report_creation.py index 02dda93..f22c281 100644 --- a/reporting_modules/html_report_creation.py +++ b/reporting_modules/html_report_creation.py @@ -146,8 +146,10 @@ def report_assembling(short_domain, url, case_comment, data_array, report_info_a robots_content, sitemap_content, sitemap_links_content, dorking_content = fp.get_db_columns(report_folder) pdf_blob = fp.get_blob(html_report_name) db.insert_blob('HTML', pdf_blob, db_casename, db_creation_date, case_comment, robots_content, sitemap_content, sitemap_links_content, dorking_content, api_scan_db) - os.remove(report_folder + '//04-dorking_results.txt') + if os.path.exists(report_folder + '//04-dorking_results.txt'): + os.remove(report_folder + '//04-dorking_results.txt') + else: + pass except Exception as e: print(Fore.RED + 'Unable to create HTML report. See journal for details') logging.error(f'HTML REPORT CREATION: ERROR. REASON: {e}') - From 6fbb509970f13f6aaf9c2fd6f6f6a0c6c3eb98af Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Mon, 11 Nov 2024 20:30:30 +0300 Subject: [PATCH 32/46] Code clean-up --- service/db_processing.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/service/db_processing.py b/service/db_processing.py index 2a49167..fab120d 100644 --- a/service/db_processing.py +++ b/service/db_processing.py @@ -102,7 +102,7 @@ def db_report_recreate(extracted_folder_name, id_to_extract): except Exception as e: print(Fore.RED + "Error appeared when recreating report from database. Reason: {}".format(e)) -def insert_blob(report_file_type, pdf_blob, db_casename, creation_date, case_comment, robots, sitemap_xml, sitemap_links, dorking_results, api_scan_db): #, dorking_results was removed here +def insert_blob(report_file_type, pdf_blob, db_casename, creation_date, case_comment, robots, sitemap_xml, sitemap_links, dorking_results, api_scan_db): try: sqlite_connection = sqlite3.connect('report_storage.db') cursor = sqlite_connection.cursor() @@ -118,7 +118,6 @@ def insert_blob(report_file_type, pdf_blob, db_casename, creation_date, case_com sqlite_insert_blob_query = """INSERT INTO report_storage (report_file_extension, report_content, creation_date, target, comment, sitemap_file, robots_text, sitemap_text, dorks_results, api_scan) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)""" - #dorks_results was removed between comment and robots_text data_tuple = (report_file_type, pdf_blob, creation_date, db_casename, case_comment, sitemap_xml, robots, sitemap_links, dorking_results, api_scan_insert) cursor.execute(sqlite_insert_blob_query, data_tuple) From 0f1e80134a3544b7cd36e4c1a13359092a1d8968 Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Tue, 12 Nov 2024 19:06:25 +0300 Subject: [PATCH 33/46] Delete dorking/basic_dorking.db --- dorking/basic_dorking.db | Bin 20480 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 dorking/basic_dorking.db diff --git a/dorking/basic_dorking.db b/dorking/basic_dorking.db deleted file mode 100644 index e5455fd7a3c9e9374b61bd61088c8703ade4a1a5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20480 zcmeI)J#W)M7zgk>Uy{aw^bi7-ssgzVL!(x_ssmjhAgc;Z(>6E~ogz1Oi`CRlZAYzy zI=}!D;yb{{fRTl7P*nnn4F-h7%YYadxNF?jeL=7i{^!`a)8ljOU$Q)ToZOkKxRIkR z`oW47X;;Y!LMgeSX@n3a*0fl68Wo+?&OkiN@t+za7iKo{{0B+(KPCO|_$&TIbkHCG z0SG_<0uX=z1Rwwb2teS!7MM+C21ZBed}J-OoN%=z64OTLtaco)d2pD%RWnMap_!$d z6+=6)?}%ruIAdaF@j;RH4HOFW;o$Z$7p%~2Hf%pw4ijBv-?8*WMAt@gsxJ3$xVEmA ztEMq&)U@i1sa5NhidL_d=jz5-ypOJ$#$6FP6rHV=r%SbYZOWJ***%(8s+%+As(9^b zqiPm&#c`GyC>JPkJ=MiD@#o&&m&5UaTp;N%$uJ z%HQ)h{OsN$<7g0o00bZa0SG_<0uX=z1Rwx`9v09iU9S^}3w$vyJFSTYtGV21YoYi~ zV&eXW2t11eP2XE|mlA#dT%${37tTGQIU+^zSe!Uz*%y` z$O#e?FUBF;U-MeNWhX+X;#29g;{X%2`@G5+8CPF2PB zOjg$RPxkeR?eR=TY%^(bCqHA^Y?@KZnA|D~W2)NC|F;O=;ve{1{w=wPd1w%T00bZa z0SG_<0uX=z1Rwx`-WC{+Zvc3CRQ+FO&Ck1m{q=vDeLwzf{a Date: Tue, 12 Nov 2024 11:06:49 -0500 Subject: [PATCH 34/46] Removed empty line in basic_dorking.db --- dorking/basic_dorking.db | Bin 0 -> 20480 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 dorking/basic_dorking.db diff --git a/dorking/basic_dorking.db b/dorking/basic_dorking.db new file mode 100644 index 0000000000000000000000000000000000000000..9c41a05bd1872cbf758afa053b7e2de5f0fb48d6 GIT binary patch literal 20480 zcmeI)%}>){90%~{+0zYL9gi^@Bt%m>4=fO0!$B@OO+zMQ!0Zw^EoCj(Fxt^}fy8jo zgC@rRLH`Urdhw5d#G4+Bi7yA^!Gq7k3X~V4SLgRBZJzRNyQiP+^6Xc*H(&8$S6>Rk zRXf(NlT(CJa!c01>l!51D;2nR%pNS3{1Rwwb z2tWV=5P$##AOHaf{MQ0=N^Wp$j4s6XV#|%zT4G|_h}^Y~>o*VYX7AL@l4a^v>2}4` z4;?$|+pF%lIJ5YuNc#p01^Res=bDRlk5Uxb2Zsx$Xj8tOiqnc{S;~So1sO73< zPMI~mI&10GdZnV*tL6E+Ii4J2sFrzOBuCP@T6v~aThOP?h0(pM>7}|gTds=No-wOd zQ7cZc++evtiRU}+Msi1XCk}S@8>vw>uBCRAiOk=gb~SYx6CbpG`C-e8mGLdYzw-Bd zODyO27n!3$00Izz00bZa0SG_<0uX=z1bSG&nDYEiC~ol8gzU5?7wzUsr>#fgJBi7M zn<99T1kJ!-@|IJzB3t z(|vtndoq_3+g!H$B)^hnlrko_nG9p9Do1E~|BvOL=_?u=qTTvGJHdu&Qvc87*@(Jd|Ci7IQ~sHVA2bL+00Izz00bZa Y0SG_<0uX=z1bRb&Q&ym<{{x`?0%UYKP5=M^ literal 0 HcmV?d00001 From 2adcba3bbe710439a26620a0906126e22a050107 Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Tue, 12 Nov 2024 19:23:21 +0300 Subject: [PATCH 35/46] Minor CLI visual improvements --- dpulse.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dpulse.py b/dpulse.py index f7a5506..2f9c4e7 100644 --- a/dpulse.py +++ b/dpulse.py @@ -219,7 +219,7 @@ def run(): elif choice_settings == '2': import configparser config = print_and_return_config() - section = input(Fore.YELLOW + "Enter the section you want to update >> ") + section = input(Fore.YELLOW + "\nEnter the section you want to update >> ") option = input(Fore.YELLOW + "Enter the option you want to update >> ") value = input(Fore.YELLOW + "Enter the new value >> ") if not config.has_section(section): @@ -227,7 +227,7 @@ def run(): config.set(section, option, value) with open('service//config.ini', 'w') as configfile: config.write(configfile) - print(Fore.GREEN + "Configuration updated successfully" + Style.RESET_ALL) + print(Fore.GREEN + "\nConfiguration updated successfully" + Style.RESET_ALL) elif choice_settings == '3': with open('journal.log', 'w'): print(Fore.GREEN + "Journal file was successfully cleared" + Style.RESET_ALL) From 4fc79afda0268c85a6d4b3f4f7b640db885d6a98 Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Tue, 12 Nov 2024 19:24:07 +0300 Subject: [PATCH 36/46] Minor CLI visual improvements --- service/config_processing.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/service/config_processing.py b/service/config_processing.py index 095c7c8..2541868 100644 --- a/service/config_processing.py +++ b/service/config_processing.py @@ -43,5 +43,5 @@ def print_and_return_config(): print(Fore.GREEN + f"[{section}]" + Style.RESET_ALL) for key in config[section]: print(Fore.GREEN + f"{key} = {config[section][key]}" + Style.RESET_ALL) - print(Fore.LIGHTMAGENTA_EX + "\n\n[CURRENT CONFIG CONTENT END]\n" + Style.RESET_ALL) + print(Fore.LIGHTMAGENTA_EX + "\n\n[CURRENT CONFIG CONTENT END]" + Style.RESET_ALL) return config From 7046dc0c4ff138fcab803b5dd7c7864cf5786395 Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Tue, 12 Nov 2024 19:27:31 +0300 Subject: [PATCH 37/46] Removed double import --- dpulse.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/dpulse.py b/dpulse.py index 2f9c4e7..afd3c89 100644 --- a/dpulse.py +++ b/dpulse.py @@ -211,13 +211,12 @@ def run(): print(Fore.RED + "\nUnsupported PageSearch mode. Please choose between Y, N or SI") elif choice == "2": + import configparser cli.print_settings_menu() choice_settings = input(Fore.YELLOW + "Enter your choice >> ") if choice_settings == '1': - import configparser print_and_return_config() elif choice_settings == '2': - import configparser config = print_and_return_config() section = input(Fore.YELLOW + "\nEnter the section you want to update >> ") option = input(Fore.YELLOW + "Enter the option you want to update >> ") From 07304f02529e13d4d8d5b5960e66497e246c5008 Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Tue, 12 Nov 2024 19:39:02 +0300 Subject: [PATCH 38/46] Improved config editing exception hanling --- dpulse.py | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/dpulse.py b/dpulse.py index afd3c89..82eb6d5 100644 --- a/dpulse.py +++ b/dpulse.py @@ -160,8 +160,7 @@ def run(): row_count = get_columns_amount(f'dorking//{db_name}', f'{dorking_flag.lower()}_dorks') dorking_ui_mark = f'Yes, {dorking_flag.lower().replace("_", " ")} dorking ({row_count} dorks)' elif dorking_flag.lower() == 'custom': - custom_db_name = str(input( - Fore.YELLOW + "Enter your custom Dorking DB name (without any file extensions) >> ")) + custom_db_name = str(input(Fore.YELLOW + "Enter your custom Dorking DB name (without any file extensions) >> ")) row_count = get_columns_amount(f'dorking//{custom_db_name}.db', 'dorks') dorking_ui_mark = f'Yes, Custom table dorking ({row_count} dorks)' dorking_flag = str(dorking_flag.lower() + f"+{custom_db_name}.db") @@ -219,14 +218,20 @@ def run(): elif choice_settings == '2': config = print_and_return_config() section = input(Fore.YELLOW + "\nEnter the section you want to update >> ") - option = input(Fore.YELLOW + "Enter the option you want to update >> ") - value = input(Fore.YELLOW + "Enter the new value >> ") - if not config.has_section(section): - config.add_section(section) - config.set(section, option, value) - with open('service//config.ini', 'w') as configfile: - config.write(configfile) - print(Fore.GREEN + "\nConfiguration updated successfully" + Style.RESET_ALL) + if not config.has_section(section.upper()): + print(Fore.RED + "\nSection you've entered does not exist in config file. Please verify that section name is correct") + pass + else: + option = input(Fore.YELLOW + "Enter the option you want to update >> ") + if not config.has_option(section.upper(), option): + print(Fore.RED + "\nOption you've entered does not exist in config file. Please verify that option name is correct") + pass + else: + value = input(Fore.YELLOW + "Enter the new value >> ") + config.set(section.upper(), option, value) + with open('service//config.ini', 'w') as configfile: + config.write(configfile) + print(Fore.GREEN + "\nConfiguration updated successfully" + Style.RESET_ALL) elif choice_settings == '3': with open('journal.log', 'w'): print(Fore.GREEN + "Journal file was successfully cleared" + Style.RESET_ALL) From ebc28287b5e0233f3767ac33eaee8ed522e94455 Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Tue, 12 Nov 2024 19:44:07 +0300 Subject: [PATCH 39/46] Code clean up (removed unused variable) From bf2363c851c09ac412dcc4aa509d870636ab45b0 Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Tue, 12 Nov 2024 19:44:55 +0300 Subject: [PATCH 40/46] Code clean up (removed unused variable) --- service/config_processing.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/service/config_processing.py b/service/config_processing.py index 2541868..ae692cf 100644 --- a/service/config_processing.py +++ b/service/config_processing.py @@ -36,7 +36,7 @@ def read_config(): def print_and_return_config(): config = configparser.ConfigParser() - cfg_content = config.read('service//config.ini') + config.read('service//config.ini') print(Fore.LIGHTMAGENTA_EX + "\n[CURRENT CONFIG CONTENT START]" + Style.RESET_ALL) for section in config.sections(): print('\n') From f1abc2b2d012270e7f83c8550a99f2c00b40cfaf Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Tue, 12 Nov 2024 22:14:29 +0300 Subject: [PATCH 41/46] Fixed some typos --- dpulse.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dpulse.py b/dpulse.py index 82eb6d5..2b7d9d5 100644 --- a/dpulse.py +++ b/dpulse.py @@ -288,7 +288,7 @@ def run(): print(Fore.GREEN + "\nSuccessfully added new API key" + Style.RESET_ALL) except: print(Fore.RED + "Something went wrong when adding new API key. See journal for details" + Style.RESET_ALL) - logging.error(f'KEYWORDS SEARCH IN PDF (PAGESEARCH): ERROR. REASON: {e}') + logging.error(f'API KEY ADDING: ERROR. REASON: {e}') elif choice_api == '2': import shutil @@ -299,7 +299,7 @@ def run(): print(Fore.RED + "API Keys DB was not found") try: shutil.copyfile('apis//api_keys_reference.db', 'apis//api_keys.db') - print(Fore.GREEN + "Sucessfully restored reference API Keys DB") + print(Fore.GREEN + "Successfully restored reference API Keys DB") except FileNotFoundError: print(Fore.RED + "Reference API Keys DB was not found") else: From e966e9f31c2150839bc69b26269da44f2ba17027 Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Tue, 12 Nov 2024 22:56:21 +0300 Subject: [PATCH 42/46] Refactor / bug fixes / typos fixed 1. Fixed bug when entering "N" as a keyword for cancelling their search but program crashes 2. Unified report creation function 3. Fixed some typos 4. Minor CLI changes --- dpulse.py | 70 ++++++++++++++++++++++--------------------------------- 1 file changed, 28 insertions(+), 42 deletions(-) diff --git a/dpulse.py b/dpulse.py index 2b7d9d5..623e178 100644 --- a/dpulse.py +++ b/dpulse.py @@ -46,6 +46,28 @@ cli = cli_init.Menu() cli.welcome_menu() +def process_report(report_filetype, short_domain, url, case_comment, keywords_list, keywords_flag, dorking_flag, used_api_flag, pagesearch_flag, pagesearch_ui_mark, spinner_thread): + import xlsx_report_creation as xlsx_rc + import html_report_creation as html_rc + from misc import time_processing + + try: + start = time() + if pagesearch_flag in ['y', 'si']: + data_array, report_info_array = data_processing.data_gathering(short_domain, url, report_filetype.lower(), pagesearch_flag.lower(), keywords_list, keywords_flag, dorking_flag.lower(), used_api_flag) + else: + data_array, report_info_array = data_processing.data_gathering(short_domain, url, report_filetype.lower(), pagesearch_flag.lower(), '', keywords_flag, dorking_flag.lower(), used_api_flag) + end = time() - start + endtime_string = time_processing(end) + + if report_filetype == 'xlsx': + xlsx_rc.create_report(short_domain, url, case_comment, data_array, report_info_array, pagesearch_ui_mark, pagesearch_flag, endtime_string) + elif report_filetype == 'html': + html_rc.report_assembling(short_domain, url, case_comment, data_array, report_info_array, pagesearch_ui_mark, pagesearch_flag, endtime_string) + finally: + spinner_thread.do_run = False + spinner_thread.join() + class ProgressBar(threading.Thread): def __init__(self): super(ProgressBar, self).__init__() @@ -65,9 +87,7 @@ def run(): domain_patter = r'^[a-zA-Z0-9-]+\.[a-zA-Z]{2,}$' choice = input(Fore.YELLOW + "Enter your choice >> ") if choice == "1": - from misc import time_processing, domain_precheck - import xlsx_report_creation as xlsx_rc - import html_report_creation as html_rc + from misc import domain_precheck print(Fore.GREEN + "\nImported and activated reporting modules" + Style.RESET_ALL) while True: short_domain = input(Fore.YELLOW + "\nEnter target's domain name (or 'back' to return to the menu) >> ") @@ -106,7 +126,7 @@ def run(): else: print(Fore.RED + "\nThis field must contain at least one keyword") break - elif keywords_input.lower() == "none": + elif keywords_input.lower() == "n": keywords_list = None keywords_flag = 0 elif pagesearch_flag.lower() == 'n': @@ -168,44 +188,10 @@ def run(): print(Fore.LIGHTMAGENTA_EX + "[BASIC SCAN START]\n" + Style.RESET_ALL) spinner_thread = ProgressBar() spinner_thread.start() - if report_filetype.lower() == 'xlsx': - try: - if pagesearch_flag.lower() == 'y': - start = time() - data_array, report_info_array = data_processing.data_gathering(short_domain, url, report_filetype.lower(), pagesearch_flag.lower(), keywords_list, keywords_flag, dorking_flag.lower(), used_api_flag) - end = time() - start - elif pagesearch_flag.lower() == 'si': - start = time() - data_array, report_info_array = data_processing.data_gathering(short_domain, url, report_filetype.lower(), pagesearch_flag.lower(), keywords_list, keywords_flag, dorking_flag.lower(), used_api_flag) - end = time() - start - else: - start = time() - data_array, report_info_array = data_processing.data_gathering(short_domain, url, report_filetype.lower(), pagesearch_flag.lower(), '', keywords_flag, dorking_flag.lower(), used_api_flag) - end = time() - start - endtime_string = time_processing(end) - xlsx_rc.create_report(short_domain, url, case_comment, data_array, report_info_array, pagesearch_ui_mark, pagesearch_flag.lower(), endtime_string) - finally: - spinner_thread.do_run = False - spinner_thread.join() - elif report_filetype.lower() == 'html': - try: - if pagesearch_flag.lower() == 'y': - start = time() - data_array, report_info_array = data_processing.data_gathering(short_domain, url, report_filetype.lower(), pagesearch_flag.lower(), keywords_list, keywords_flag, dorking_flag.lower(), used_api_flag) - end = time() - start - elif pagesearch_flag.lower() == 'si': - start = time() - data_array, report_info_array = data_processing.data_gathering(short_domain, url, report_filetype.lower(), pagesearch_flag.lower(), keywords_list, keywords_flag, dorking_flag.lower(), used_api_flag) - end = time() - start - else: - start = time() - data_array, report_info_array = data_processing.data_gathering(short_domain, url, report_filetype.lower(), pagesearch_flag.lower(), '', keywords_flag, str(dorking_flag.lower()), used_api_flag) - end = time() - start - endtime_string = time_processing(end) - html_rc.report_assembling(short_domain, url, case_comment, data_array, report_info_array, pagesearch_ui_mark, pagesearch_flag.lower(), endtime_string) - finally: - spinner_thread.do_run = False - spinner_thread.join() + if report_filetype.lower() in ['xlsx', 'html']: + process_report(report_filetype, short_domain, url, case_comment, + keywords_list, keywords_flag, dorking_flag, used_api_flag, + pagesearch_flag, pagesearch_ui_mark, spinner_thread) else: print(Fore.RED + "\nUnsupported PageSearch mode. Please choose between Y, N or SI") From c41444a46ff33f260ae7ed7ee0f24f1717e2960d Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Tue, 12 Nov 2024 22:56:51 +0300 Subject: [PATCH 43/46] Adapted data assembler for unified report creation function --- datagather_modules/data_assembler.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/datagather_modules/data_assembler.py b/datagather_modules/data_assembler.py index b24a769..a742d46 100644 --- a/datagather_modules/data_assembler.py +++ b/datagather_modules/data_assembler.py @@ -116,7 +116,7 @@ def data_gathering(self, short_domain, url, report_file_type, pagesearch_flag, k if subdomains[0] != 'No subdomains were found': to_search_array = [subdomains, social_medias, sd_socials] print(Fore.LIGHTMAGENTA_EX + "\n[EXTENDED SCAN START: PAGESEARCH]\n" + Style.RESET_ALL) - ps_emails_return, accessible_subdomains, emails_amount, files_counter, cookies_counter, api_keys_counter, website_elements_counter, exposed_passwords_counter = normal_search(to_search_array, report_folder, keywords, keywords_flag) + ps_emails_return, accessible_subdomains, emails_amount, files_counter, cookies_counter, api_keys_counter, website_elements_counter, exposed_passwords_counter, keywords_messages_list = normal_search(to_search_array, report_folder, keywords, keywords_flag) total_links_counter = accessed_links_counter = 0 print(Fore.LIGHTMAGENTA_EX + "\n[EXTENDED SCAN END: PAGESEARCH]\n" + Style.RESET_ALL) else: @@ -141,7 +141,7 @@ def data_gathering(self, short_domain, url, report_file_type, pagesearch_flag, k dorking_db_path, table = establishing_dork_db_connection(dorking_flag.lower()) print(Fore.LIGHTMAGENTA_EX + f"\n[EXTENDED SCAN START: {dorking_flag.upper()} DORKING]\n" + Style.RESET_ALL) dorking_status, dorking_results = dp.transfer_results_to_xlsx(table, dp.get_dorking_query(short_domain, dorking_db_path, table)) - print(Fore.LIGHTMAGENTA_EX + f"\n[EXTENDED SCAN END: {dorking_flag.upper()} DORKING]\n" + Style.RESET_ALL) + print(Fore.LIGHTMAGENTA_EX + f"[EXTENDED SCAN END: {dorking_flag.upper()} DORKING]\n" + Style.RESET_ALL) api_scan_db = [] if used_api_flag != ['Empty']: @@ -152,7 +152,7 @@ def data_gathering(self, short_domain, url, report_file_type, pagesearch_flag, k if 2 in used_api_flag: api_securitytrails_check(short_domain) api_scan_db.append('SecurityTrails') - print(Fore.LIGHTMAGENTA_EX + f"\n[EXTENDED SCAN END: API SCANNING]\n" + Style.RESET_ALL) + print(Fore.LIGHTMAGENTA_EX + f"[EXTENDED SCAN END: API SCANNING]\n" + Style.RESET_ALL) else: api_scan_db.append('No') pass From f9be4ccf47e3cf2176a9348b162ed0b909b26c59 Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Tue, 12 Nov 2024 22:57:59 +0300 Subject: [PATCH 44/46] Adapted XLSX report for unified report creation function From 635874fb0d87d88bf7537bc42dea003500dbcecf Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Tue, 12 Nov 2024 23:31:34 +0300 Subject: [PATCH 45/46] Improved "About DPULSE" description --- README.md | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 81558dc..f812b1c 100644 --- a/README.md +++ b/README.md @@ -74,9 +74,16 @@ DPULSE is a software solution for conducting OSINT research in relation to a cer 3. ***PageSearch Sitemap inspection scan:*** sitemap links crawler which starts in addition to basic scan and which can find even more e-mails -4. ***Dorking scan:*** extended domain research function with prepared Google Dorking databases for different purposes, such as IoT dorking, files dorking, admin panels dorking and so on. Moreover, this mode allows you to create your own custom Google Dorking database - -5. ***API scan:*** extended domain research function with prepared functions for 3rd party APIs usage. Currently DPULSE supports VirusTotal API (for brief domain information gathering) and SecurityTrails API (deep subdomains and DNS enumeration) +4. ***Dorking scan:*** extended domain research function with prepared Google Dorking databases for different purposes, such as: + - IoT dorking + - files dorking + - admin panels dorking + - web elements dorking + - Moreover, this mode allows you to create your own custom Google Dorking database + +6. ***API scan:*** extended domain research function with prepared functions for 3rd party APIs usage. Currently DPULSE supports these API: + - VirusTotal API (for brief domain information gathering) + - SecurityTrails API (deep subdomains and DNS enumeration) Finally, DPULSE compiles all found data into an easy-to-read HTML or XLSX report by category. It also saves all information about scan in local report storage database, which can be restored later. From 54a00f18b9e6d286b48a00745ea7557452301245 Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Wed, 13 Nov 2024 02:30:22 +0300 Subject: [PATCH 46/46] Bumped versions --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f812b1c..3d13088 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@

        -Static Badge Static Badge +Static Badge Static Badge Static Badge Static Badge