From 5c637e872e314562e63545d95d2d6fac652c209e Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Tue, 1 Oct 2024 21:31:20 +0300 Subject: [PATCH 01/51] Bumped rolling version --- 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 9db06f9..ea0ad16 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 // 1.1.1 (rolling) // OSINT-TECHNOLOGIES\n' + Style.RESET_ALL) + print(Fore.MAGENTA + Style.BRIGHT + 'DPULSE-CLI // 1.1.2 (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 aae975d4b3221bda7cf36bf0daa7e0d1daa46988 Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Thu, 3 Oct 2024 17:35:49 +0300 Subject: [PATCH 02/51] Added support for adminpanels_dorking.sb --- datagather_modules/data_assembler.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/datagather_modules/data_assembler.py b/datagather_modules/data_assembler.py index bf0d4b1..c58e7d2 100644 --- a/datagather_modules/data_assembler.py +++ b/datagather_modules/data_assembler.py @@ -31,6 +31,9 @@ def establishing_dork_db_connection(dorking_flag): elif dorking_flag == 'files': dorking_db_path = 'dorking//files_dorking.db' table = 'files_dorks' + elif dorking_flag == 'admins': + dorking_db_path = 'dorking//adminpanels_dorking.db' + table = 'adminpanels_dorks' return dorking_db_path, table class DataProcessing(): @@ -252,6 +255,11 @@ def data_gathering(self, short_domain, url, report_file_type, pagesearch_flag, k 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) + elif dorking_flag == 'admins': + 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) data_array = [ip, res, mails, subdomains, subdomains_amount, social_medias, subdomain_mails, sd_socials, subdomain_ip, issuer, subject, notBefore, notAfter, commonName, serialNumber, mx_records, From 891e10e1731210c3aca3d6b64da9d9adea7070da Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Thu, 3 Oct 2024 17:38:54 +0300 Subject: [PATCH 03/51] Added support for adminpanels_dorking.db --- dorking/dorking_handler.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dorking/dorking_handler.py b/dorking/dorking_handler.py index 4c6bbdd..2232aa3 100644 --- a/dorking/dorking_handler.py +++ b/dorking/dorking_handler.py @@ -107,7 +107,7 @@ def transfer_results_to_xlsx(table, queries, pages=10): def dorks_files_check(): dorks_path = 'dorking//' - dorks_files = ['iot_dorking.db', 'files_dorking.db', 'basic_dorking.db'] + dorks_files = ['iot_dorking.db', 'files_dorking.db', 'basic_dorking.db', 'adminpanels_dorking.db'] dorks_files_counter = 0 for dork_files in dorks_files: files_path = os.path.join(dorks_path, dork_files) @@ -115,7 +115,7 @@ def dorks_files_check(): dorks_files_counter += 1 else: pass - if dorks_files_counter == 3: + if dorks_files_counter == 4: print(Fore.GREEN + "Dorks databases presence: OK" + Style.RESET_ALL) else: print(Fore.RED + "Dorks databases presence: NOT OK\nSome files may not be in folder. Please compare dorking folder with the same folder on the official repository\n" + Style.RESET_ALL) From ac0ebdf7d3138ea483c4b442296d482b21963c86 Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Thu, 3 Oct 2024 17:39:33 +0300 Subject: [PATCH 04/51] Added support for adminpanels_dorking.db --- dpulse.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/dpulse.py b/dpulse.py index a5cac2d..74c37ef 100644 --- a/dpulse.py +++ b/dpulse.py @@ -111,7 +111,7 @@ def run(): 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/None] >> ") + dorking_flag = input(Fore.YELLOW + "Select Dorking mode [Basic/IoT/Files/Admins/None] >> ") #api_flag = input(Fore.YELLOW + "Would you like to use 3rd party API in scan? [Y/N] >> ") #if api_flag.lower() == 'y': #print api db content @@ -129,7 +129,7 @@ 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', 'files']: + if dorking_flag.lower() not in ['basic', 'iot', 'none', 'admins', 'files']: print(Fore.RED + "\nInvalid Dorking mode. Please select mode among Basic, IoT, Files or None") break else: @@ -144,6 +144,9 @@ def run(): elif dorking_flag.lower() == 'files': row_count = get_columns_amount('dorking//files_dorking.db', 'files_dorks') dorking_ui_mark = f'Yes, Files dorking ({row_count} dorks)' + elif dorking_flag.lower() == 'admins': + row_count = get_columns_amount('dorking//adminpanels_dorking.db', 'adminpanels_dorks') + dorking_ui_mark = f'Yes, Admin panels dorking ({row_count} dorks)' print(Fore.LIGHTMAGENTA_EX + "\n[PRE-SCAN SUMMARY]\n" + Style.RESET_ALL) print(Fore.GREEN + "Determined target: " + Fore.LIGHTCYAN_EX + Style.BRIGHT + short_domain + Style.RESET_ALL) print(Fore.GREEN + "Report type: " + Fore.LIGHTCYAN_EX + Style.BRIGHT + report_filetype.lower() + Style.RESET_ALL) From eee9dc2e16b079cb67d43f59f94ed42b1b491789 Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Thu, 3 Oct 2024 10:40:06 -0400 Subject: [PATCH 05/51] Add files via upload --- dorking/adminpanels_dorking.db | Bin 0 -> 28672 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 dorking/adminpanels_dorking.db diff --git a/dorking/adminpanels_dorking.db b/dorking/adminpanels_dorking.db new file mode 100644 index 0000000000000000000000000000000000000000..ae167b22abb7524baf47c6e1d3e0990d18860a71 GIT binary patch literal 28672 zcmeI4U2Ggz702&p;{CGsUdQ>cV>|Zs*s;BK?1}9-PMi;atT(YqY;Wwf(zLW@vOBh? z-ksUZ&L*)+BQ@m#RiZ)&wNix;LMre;5h^?cBq}Hfq>2X@34{vj0|EpH@uk88LV|l{ zzdfrch!+~2vG>2;z2}~L&+nddXUDQ<_1ab4*7$~LrB$1ckw)V2kZH~dA(D9b#AAQq zXLyE3@$eLXc*wIvhL@iY(XSIJlqB?-P?EOgzaG*Dn~(q!Kmter2_OL^fCP{L5#&YBH@G8P(8I+4ZDpZD(C?cq1#(nRt}PXJ)TPx$J6}d4Dh< zL*I2hDF+so;?c{|6~43_=Syo>uky8}g==fk69pSN5RX0~S_-Y=?byn~;>^koekFRN zzvPC`ti_iXmc-DD(WQ7e7@qNZo7WT%(T${bH+w53t`pbQoNYR<*IkoZA920qi|zL| z4-R^6IB^$TWVKs4%}8i_Ue;B`yr;3>P}AB8(KAelC+4smdPJ7{s{Gbu8G00$MWa15 zi>yWSqfiYAtkQpnb<~9wF2b+;Zz}`W_I@a+5J)2k9!LNQAOR$R1dsp{Kmter2_OL^ zfCP}h<4Pb1f#LQ4U7ZN}MNB{{S0VIF~kN^@u0!RP}Ac0B(`@{?Qn*eym0|_7j zB!C2v01`j~NB{{S0VIF~kN^^R%m~2W|9jZ)iTK6?2_OL^fCP{L5Njj~4iTl#(aI=x4qrWfha(BDJ92z?{; zQpgC+hMF3F)9|3-wT8`x^9={;|5*RM`cKuz>*e6TgFg+v5qu%I8JrFF1pXR$H}HBO z7kDbr6Y%-p_rL9b)&HD7<{$Id`~K$pk?+gC7kwY~P5U~$A9&yMzU_U(`?A;eUiY5% z9<2Lw-8*%k7Zbt*2_OL^@K_V*n3qT-D{iba`P}ndH*!{LQpu#W?DkN~+|&(a;Ic%X zDz@kEU884hOSMglI~Fn@%&6Jy9n(s7Uy{gTwQb2Jsask?blQ=l61h?|(hXa;Q`)4Q zFb&%>Q{1^Jk=!*Wkp-8HbL!w~Lfp6~D|bdD5-pp+yq)&^C-c%FYnvpye(mcrbesU4h>$k3kV%#n){8LNKNF>bj~F-o3YA;A9g z61iUPQGiepK$-42iCnI2Szy~bDUow!3m}nHvs*V!)k+>eE0Jr}ZO)<%XSOm^xvXYg zaK@C+)LN4mq=C%ktB?qC$Amjk)>G<^nX|LX$hZN_Er?`~8e)k6Poz*s zF}S&x+%i~^fQ90Ad@92O5=pomMl5y1=3+`NPXpnKZJ<=OE4iCH+%))#s;9D|&kWpG zOz!A+XNmzfY=^zp5D>gQ{rN_;}-pQC_%0PFm*y1;0%VT0Xu+Cy%;Q1=(m8&w;nTT^YGFT<0 zRCh{$SFHjUtCO%aTN`)6%ojr!uiER%p(!Q5Cp#swS&qI?7K^5tOu?Gx1LU^J?JbRi zojlPYkzBcl<20=$b@h(Et(P4us~Ih!tEtH~u@yK0jvkZ9cDZA5DCl}!bcK2E?IMTU zYgNjVn!zKgW%H3?2sfV^-EFm2s$`ls3b)qsx17-o$KTlS-IBlX(TAEk{&>C?Mp|lR zT}%{^t*&mF88OcZ;TM*hFX!vJz1f|0PGSxvwcE?e;i z5|euytE!-wCF102h%6i}El&$`*PJt$BGX!DoW+6%XCS#dR4Z9Toh|O&+NXn`>l8H?>^wWZ}PHn+dlVM>rQ4U55LDFk!4qf zlsXsY2LJy*Pge;07yAeM3;P56HG7}^oc)CTnEjA_mwlUklYNbSg?*8Ij=ds&KkyR! z1iQ!XGK;0y2KyL$lEv8)n`g7^JUh)!vH{k^I#>&9Vhzm82>mDhfc}a8j{b`NlKzbD z(s$?&=v(vweUpBbeu;j8zD7SwU#6d=_vy#!ZJMFa(jT(6eVj&zu3Bm;gO}8gzUd^wcTPu`$rmQP7bQ(39e#-Q!Ud(BWawp&`%{ zCqM@WK?epv!(q_=e$c)?(B59qV=1Z`>pJ#YZDu@RIpP)b2VA<%{f(E57NU=TDA d0QLJpeLhgH7qqSpbpL)(Ndn!sPm%(G{{a2j*^U4J literal 0 HcmV?d00001 From d40eea1425272873f95ac05db0c82e590e17f1fc Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Fri, 4 Oct 2024 00:39:15 +0300 Subject: [PATCH 06/51] Added config parameters for Google Dorking module --- service/config_processing.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/service/config_processing.py b/service/config_processing.py index baee6c1..0419036 100644 --- a/service/config_processing.py +++ b/service/config_processing.py @@ -5,6 +5,7 @@ def create_config(): config = configparser.ConfigParser() config['LOGGING'] = {'log_level': 'info'} config['CLI VISUAL'] = {'preview_color': 'red', 'font': 'slant'} + config['DORKING'] = {'dorking_delay (secs)': '2', 'delay_step': '5'} with open('service//config.ini', 'w') as configfile: config.write(configfile) @@ -19,11 +20,15 @@ def read_config(): log_level = config.get('LOGGING', 'log_level') cli_preview_color = config.get('CLI VISUAL', 'preview_color') wm_font = config.get('CLI VISUAL', 'font') + dorking_delay = config.get('DORKING', 'dorking_delay (secs)') + delay_step = config.get('DORKING', 'delay_step') config_values = { 'logging_level': log_level, 'preview_color': cli_preview_color, - 'wm_font': wm_font + 'wm_font': wm_font, + 'dorking_delay (secs)': dorking_delay, + 'delay_step': delay_step } return config_values From 12923b412b8e55c6142fd64fb33f7be7ce61d584 Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Fri, 4 Oct 2024 01:02:32 +0300 Subject: [PATCH 07/51] Added some logging and dorking delay --- dorking/dorking_handler.py | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/dorking/dorking_handler.py b/dorking/dorking_handler.py index 2232aa3..b09e914 100644 --- a/dorking/dorking_handler.py +++ b/dorking/dorking_handler.py @@ -1,4 +1,7 @@ import sys +sys.path.append('service') +from config_processing import read_config +from logs_processing import logging try: import requests.exceptions @@ -7,6 +10,7 @@ import re import requests import sqlite3 + import time import os except ImportError as e: print(Fore.RED + "Import error appeared. Reason: {}".format(e) + Style.RESET_ALL) @@ -30,7 +34,7 @@ def get_columns_amount(dorking_db_path, table): conn.close() return row_count -def solid_google_dorking(query, pages=100): +def solid_google_dorking(query, pages=100, dorking_delay=5, delay_step=10): try: browser = mechanicalsoup.StatefulBrowser() browser.open("https://www.google.com/") @@ -38,6 +42,7 @@ def solid_google_dorking(query, pages=100): browser["q"] = str(query) browser.submit_selected(btnName="btnG") result_query = [] + request_count = 0 for page in range(pages): for link in browser.links(): target = link.attrs['href'] @@ -45,26 +50,35 @@ def solid_google_dorking(query, pages=100): target.startswith("/url?q=http://webcache.googleusercontent.com")): target = re.sub(r"^/url\?q=([^&]*)&.*", r"\1", target) result_query.append(target) + request_count += 1 + if request_count % delay_step == 0: + time.sleep(dorking_delay) try: browser.follow_link(nr=page + 1) except mechanicalsoup.LinkNotFoundError: break + del result_query[-2:] return result_query except requests.exceptions.ConnectionError as e: - print(Fore.RED + "Error while establishing connection with domain. No results will appear. Reason: {}".format(e) + Style.RESET_ALL) + print(Fore.RED + "Error while establishing connection with domain. No results will appear. See journal for details" + Style.RESET_ALL) + logging.error(f'DORKING PROCESSING: ERROR. REASON: {e}') def save_results_to_txt(folderpath, table, queries, pages=10): try: + config_values = read_config() + dorking_delay = int(config_values['dorking_delay (secs)']) + delay_step = int(config_values['delay_step']) txt_writepath = folderpath + '//04-dorking_results.txt' total_results = [] total_dorks_amount = len(queries) with open(txt_writepath, 'w') as f: print(Fore.GREEN + "Started Google Dorking. Please, be patient, it may take some time") + print(Fore.GREEN + f"{dorking_delay} seconds delay after each {delay_step} dorking requests was configured" + Style.RESET_ALL) dorked_query_counter = 0 for i, query in enumerate(queries, start=1): f.write(f"QUERY #{i}: {query}\n") - results = solid_google_dorking(query, pages) + results = solid_google_dorking(query, pages, dorking_delay, delay_step) if not results: f.write("=> NO RESULT FOUND\n") total_results.append((query, 0)) @@ -82,12 +96,17 @@ def save_results_to_txt(folderpath, table, queries, pages=10): count = 'no results' print(Fore.GREEN + f"[+] Found results for " + Fore.LIGHTCYAN_EX + f'{query}' + Fore.GREEN + ' query: ' + Fore.LIGHTCYAN_EX + f'{count}' + Style.RESET_ALL) return f'Successfully dorked domain with {table.upper()} dorks table', txt_writepath - except Exception: + except Exception as e: print(Fore.RED + 'Error appeared while trying to dork target. See journal for details') + logging.error(f'DORKING PROCESSING: ERROR. REASON: {e}') return 'Domain dorking failed. See journal for details', txt_writepath def transfer_results_to_xlsx(table, queries, pages=10): + config_values = read_config() + dorking_delay = int(config_values['dorking_delay (secs)']) + delay_step = int(config_values['delay_step']) print(Fore.GREEN + "Started Google Dorking. Please, be patient, it may take some time") + print(Fore.GREEN + f"{dorking_delay} seconds delay after each {delay_step} dorking requests was configured" + Style.RESET_ALL) dorked_query_counter = 0 total_dorks_amount = len(queries) dorking_return_list = [] From b8da955b0f0f0c4f01d4c78942a34f1652d75bdc Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Fri, 4 Oct 2024 01:05:12 +0300 Subject: [PATCH 08/51] Modified dorking_delay and delay_step transfer --- dorking/dorking_handler.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dorking/dorking_handler.py b/dorking/dorking_handler.py index b09e914..b9c5293 100644 --- a/dorking/dorking_handler.py +++ b/dorking/dorking_handler.py @@ -34,7 +34,7 @@ def get_columns_amount(dorking_db_path, table): conn.close() return row_count -def solid_google_dorking(query, pages=100, dorking_delay=5, delay_step=10): +def solid_google_dorking(query, dorking_delay, delay_step, pages=100): try: browser = mechanicalsoup.StatefulBrowser() browser.open("https://www.google.com/") @@ -78,7 +78,7 @@ def save_results_to_txt(folderpath, table, queries, pages=10): dorked_query_counter = 0 for i, query in enumerate(queries, start=1): f.write(f"QUERY #{i}: {query}\n") - results = solid_google_dorking(query, pages, dorking_delay, delay_step) + results = solid_google_dorking(query, dorking_delay, delay_step, pages) if not results: f.write("=> NO RESULT FOUND\n") total_results.append((query, 0)) From f32d0ce68fce8dca1ac8f9841b203e0ef9ac2a8d Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Fri, 4 Oct 2024 01:29:49 +0300 Subject: [PATCH 09/51] Added pring&return function --- service/config_processing.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/service/config_processing.py b/service/config_processing.py index 0419036..095c7c8 100644 --- a/service/config_processing.py +++ b/service/config_processing.py @@ -1,5 +1,6 @@ import configparser import os +from colorama import Fore, Style def create_config(): config = configparser.ConfigParser() @@ -32,3 +33,15 @@ def read_config(): } return config_values + +def print_and_return_config(): + config = configparser.ConfigParser() + cfg_content = config.read('service//config.ini') + print(Fore.LIGHTMAGENTA_EX + "\n[CURRENT CONFIG CONTENT START]" + Style.RESET_ALL) + for section in config.sections(): + print('\n') + 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) + return config From 07eeed57cef09ff4acc0ece6647f8120d507d526 Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Fri, 4 Oct 2024 01:30:14 +0300 Subject: [PATCH 10/51] Updated CLI visual --- service/cli_init.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/service/cli_init.py b/service/cli_init.py index ea0ad16..9bb5369 100644 --- a/service/cli_init.py +++ b/service/cli_init.py @@ -38,8 +38,8 @@ def print_settings_menu(self): print(Fore.MAGENTA + Back.WHITE + '[SETTINGS MENU]' + Style.RESET_ALL) print(Fore.CYAN + "1. Print current config file") print(Fore.CYAN + "2. Edit config file") - print(Fore.CYAN + "3. Generate custom Dorking DB") - print(Fore.CYAN + "4. Add API key for existing API") + print(Fore.CYAN + "3. Generate custom Dorking DB (not active)") + print(Fore.CYAN + "4. Add API key for existing API (not active)") print(Fore.LIGHTRED_EX + "5. Return to main menu" + Style.RESET_ALL + '\n') def print_help_menu(self): From c2832443306662829b76c1e694c5cbcb16c3f35d Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Fri, 4 Oct 2024 01:32:30 +0300 Subject: [PATCH 11/51] Reactivated some part of settings menu, added possibility to view and edit cfg file --- dpulse.py | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/dpulse.py b/dpulse.py index 74c37ef..534229e 100644 --- a/dpulse.py +++ b/dpulse.py @@ -6,7 +6,7 @@ from colorama import Fore, Style, Back import cli_init -from config_processing import create_config, check_cfg_presence, read_config +from config_processing import create_config, check_cfg_presence, read_config, print_and_return_config import db_processing as db import os from dorking_handler import dorks_files_check, get_columns_amount @@ -217,7 +217,25 @@ def run(): print(Fore.RED + "\nUnsupported PageSearch mode. Please choose between Y, N or SI") elif choice == "2": - print(Fore.RED + "Sorry, but this menu is deprecated since v1.1.1. It will be back soon") + cli.print_settings_menu() + choice_settings = input(Fore.YELLOW + "Enter your choice >> ") + if choice_settings == '1': + import configparser + config = print_and_return_config() + elif choice_settings == '2': + import configparser + config = print_and_return_config() + section = input(Fore.YELLOW + "Enter 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 + "Configuration updated successfully" + Style.RESET_ALL) + else: + continue elif choice == "5": cli.print_help_menu() From f6189ed6b29f8ed417c689462c6ff055cff12def Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Fri, 4 Oct 2024 01:38:43 +0300 Subject: [PATCH 12/51] Fixed DPULSE stuck by config file absence --- dpulse.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/dpulse.py b/dpulse.py index 534229e..5c6e017 100644 --- a/dpulse.py +++ b/dpulse.py @@ -9,10 +9,8 @@ from config_processing import create_config, check_cfg_presence, read_config, print_and_return_config import db_processing as db import os -from dorking_handler import dorks_files_check, get_columns_amount db.db_creation('report_storage.db') -dorks_files_check() cfg_presence = check_cfg_presence() if cfg_presence is True: print(Fore.GREEN + "Global config file presence: OK" + Style.RESET_ALL) @@ -21,7 +19,8 @@ create_config() print(Fore.GREEN + "Successfully generated global config file") - +from dorking_handler import dorks_files_check, get_columns_amount +dorks_files_check() import pdf_report_creation as pdf_rc import xlsx_report_creation as xlsx_rc import html_report_creation as html_rc From 2957d35d5318c72a0d2e268338515aa31a84f43d Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Tue, 8 Oct 2024 17:05:51 +0300 Subject: [PATCH 13/51] Added new settings point menu --- service/cli_init.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/service/cli_init.py b/service/cli_init.py index 9bb5369..c2c03e8 100644 --- a/service/cli_init.py +++ b/service/cli_init.py @@ -40,7 +40,8 @@ def print_settings_menu(self): print(Fore.CYAN + "2. Edit config file") print(Fore.CYAN + "3. Generate custom Dorking DB (not active)") print(Fore.CYAN + "4. Add API key for existing API (not active)") - print(Fore.LIGHTRED_EX + "5. Return to main menu" + Style.RESET_ALL + '\n') + print(Fore.CYAN + "5. Clear journal content") + print(Fore.LIGHTRED_EX + "6. Return to main menu" + Style.RESET_ALL + '\n') def print_help_menu(self): print(Fore.MAGENTA + Back.WHITE + '[HELP MENU]' + Style.RESET_ALL) From a447d913d91d8dcc0e478528e7770f8afdc15b44 Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Tue, 8 Oct 2024 17:06:17 +0300 Subject: [PATCH 14/51] Added clear journal content logic --- dpulse.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/dpulse.py b/dpulse.py index 5c6e017..df7e60f 100644 --- a/dpulse.py +++ b/dpulse.py @@ -233,7 +233,11 @@ def run(): with open('service//config.ini', 'w') as configfile: config.write(configfile) print(Fore.GREEN + "Configuration updated successfully" + Style.RESET_ALL) - else: + elif choice_settings == '5': + with open('journal.log', 'w'): + print(Fore.GREEN + "Journal file was successfully cleared" + Style.RESET_ALL) + pass + elif choice_settings == '6': continue elif choice == "5": From a1bbc03cb67622a4020464288cc728137be23ae5 Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Tue, 8 Oct 2024 17:35:14 +0300 Subject: [PATCH 15/51] 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 0421fb0e05dd0a27ff09ba51ee40caa19a87d1cd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20480 zcmeI)J#W)M7zglk&Uvv>`mlviTDi&6s1*{RfZC-5WK|Jq(uPE$Q{*OYWi_$WI8iI1 z4lqJL2Ye0~n3$LlNS%Ozg_i*_FmTs4iJO98L8{9C6kqQA_|BJKyx32ayDJ5!Ya8oc zr)71GYwSEz6n4`v7-J!^g~iq{ifE|)j(C^-Ka~)>T-uG(cczZ*v9W!6Mvp`T1p*L& z00bZa0SG_<0uX=z1paG*Wi^tRnNe1|)>_l{x0>R{wC3AeJ=?91cEh*JX0BoymE5g@ zX^b2@?OH8+R*cL%$SBc7I;}iR9?ZFB`A)so@H(4*pcy(gS1J%m8PmF!lE>GaMoP;U zE9RnEHj1T+QLGjUMzxq9?rCfQ{xMQwP4`wrR)k-N}6z5(t ziSXJ$6prd9(e>?0-U>Fw{T1;MSak1$%!RQOU zr#IsM{0Tj#7M19_*oguG2tWV=5P$##AOHafKmY;|INJiLMaS)R5;|vD*=WwMS@q3c z+wjFRiTV4x32hLld+xfk(GOgTakk*NU3;fHpK4pazwLDzsX;Uvi1vKDBOg=@qR9wn zbBAZ^*c*=DwLATR$?zc5@V4EiXEpkvggRJCuN@3%oU>%hYK!ISA Date: Tue, 8 Oct 2024 10:35:43 -0400 Subject: [PATCH 16/51] Updated basic_dorking content --- 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..e5455fd7a3c9e9374b61bd61088c8703ade4a1a5 GIT binary patch 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, 8 Oct 2024 10:45:43 -0400 Subject: [PATCH 17/51] Added webstructure dorking database --- dorking/webstructure_dorking.db | Bin 0 -> 20480 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 dorking/webstructure_dorking.db diff --git a/dorking/webstructure_dorking.db b/dorking/webstructure_dorking.db new file mode 100644 index 0000000000000000000000000000000000000000..a9e05914860ed9e9b43d04442f898fdaaf47b036 GIT binary patch literal 20480 zcmeI4Piz}S6vk&gw&QiO^PI%q^(Hy2%q39^kqK4Rl&GYUg+f!O4K^jGu=Z}!RW`e> zcTEDQNI*|WRGdH{PDmiQaDZ~*LQfn3fy9NLH~<2~0XQKJNHF8XiR_8QpBw0nykERC z^WMDqX)m*%m4`2{c(H43hV30Yw&qBVC<=MNvIrpxzf%0_HF2Np-SEHS{;!%s?peLA z!EYqVt`PP%yaxgQf(;2E0VIF~kN^@u0!RP}AOR$R1pY4sE+x~(i4)3tY&U#2y5{pU z=0@aR>$pL4@HVxyR#~i7tlHxFm5MbmcRH|l+><Hhx6jUq1$bVG`W!)-Sx=#-TEBltPvBd3sK&)o~l0tvpDx{cy`< zQmKy3kN$S#7B#6NFNk8>_w^BJiO7vREn`@!v>67Q-jF}5&Djima;VL=60twnWAK&pV4mXZeCUF2Ju9alC%ATjvZZXgm&A}skBFq z%M0{`)NeaGUNEIla_%Ts?C!<$rS1y{E8Hw)`Lk+*PvCd>6@Gyq;am6$?!XuDDSQOC z;RCn@@4#E|I=sf;4ZH}?!wq;E_Mpu}upt2?fCP{L5FI&~1OLA$M|AyvL#O3|2;u+h6ZFhLchCPX6zQpfp?&{9FE4)J|BoLV!u|iT0-YVm z#r^+Lxz?`#pOa^ELmT8$d;UL@D?0H1HF=4y|34yEy6^uFAG6AV|DTm(_WgfVW-I*v zjJyr*{}0Jo_Wl3#6kQl#bmaf1Ch6IM!9)K)DetlC|5LfY>;EUF=sET1p&Ic2#qa+W s_<`^bHY9)qkN^@u0!RP}AOR$R1dsp{KmthMKTbeb_zNNV{{WbO0;qR(ApigX literal 0 HcmV?d00001 From e61fe1a8427774d08ca6ea0e3f5a7e402f70005b Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Tue, 8 Oct 2024 17:56:37 +0300 Subject: [PATCH 18/51] Added new dorking table support --- dorking/dorking_handler.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dorking/dorking_handler.py b/dorking/dorking_handler.py index b9c5293..19a1d3e 100644 --- a/dorking/dorking_handler.py +++ b/dorking/dorking_handler.py @@ -126,7 +126,7 @@ def transfer_results_to_xlsx(table, queries, pages=10): def dorks_files_check(): dorks_path = 'dorking//' - dorks_files = ['iot_dorking.db', 'files_dorking.db', 'basic_dorking.db', 'adminpanels_dorking.db'] + dorks_files = ['iot_dorking.db', 'files_dorking.db', 'basic_dorking.db', 'adminpanels_dorking.db', 'webstructure_dorking.db'] dorks_files_counter = 0 for dork_files in dorks_files: files_path = os.path.join(dorks_path, dork_files) @@ -134,7 +134,7 @@ def dorks_files_check(): dorks_files_counter += 1 else: pass - if dorks_files_counter == 4: + if dorks_files_counter == 5: print(Fore.GREEN + "Dorks databases presence: OK" + Style.RESET_ALL) else: print(Fore.RED + "Dorks databases presence: NOT OK\nSome files may not be in folder. Please compare dorking folder with the same folder on the official repository\n" + Style.RESET_ALL) From d98dfb26de7185919bd77c418766952c2e8123e1 Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Tue, 8 Oct 2024 17:56:59 +0300 Subject: [PATCH 19/51] Added new dorking table support --- datagather_modules/data_assembler.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/datagather_modules/data_assembler.py b/datagather_modules/data_assembler.py index c58e7d2..cf73b6d 100644 --- a/datagather_modules/data_assembler.py +++ b/datagather_modules/data_assembler.py @@ -34,6 +34,9 @@ def establishing_dork_db_connection(dorking_flag): elif dorking_flag == 'admins': dorking_db_path = 'dorking//adminpanels_dorking.db' table = 'adminpanels_dorks' + elif dorking_flag == 'web': + dorking_db_path = 'dorking//webstructure_dorking.db' + table = 'webstructure_dorks' return dorking_db_path, table class DataProcessing(): @@ -150,6 +153,11 @@ def data_gathering(self, short_domain, url, report_file_type, pagesearch_flag, k 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) + elif dorking_flag == 'web': + 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) data_array = [ip, res, mails, subdomains, subdomains_amount, social_medias, subdomain_mails, sd_socials, subdomain_ip, issuer, subject, notBefore, notAfter, commonName, serialNumber, mx_records, @@ -201,6 +209,11 @@ def data_gathering(self, short_domain, url, report_file_type, pagesearch_flag, k 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) + elif dorking_flag == 'web': + 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) data_array = [ip, res, mails, subdomains, subdomains_amount, social_medias, subdomain_mails, sd_socials, subdomain_ip, issuer, subject, notBefore, notAfter, commonName, serialNumber, mx_records, @@ -260,6 +273,11 @@ def data_gathering(self, short_domain, url, report_file_type, pagesearch_flag, k 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) + elif dorking_flag == 'web': + 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) data_array = [ip, res, mails, subdomains, subdomains_amount, social_medias, subdomain_mails, sd_socials, subdomain_ip, issuer, subject, notBefore, notAfter, commonName, serialNumber, mx_records, From 4e4c211618887df679451d0cf62a59d0f185c548 Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Tue, 8 Oct 2024 17:57:19 +0300 Subject: [PATCH 20/51] Added new dorking table support --- dpulse.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/dpulse.py b/dpulse.py index df7e60f..3880f2f 100644 --- a/dpulse.py +++ b/dpulse.py @@ -110,7 +110,7 @@ def run(): 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/None] >> ") + dorking_flag = input(Fore.YELLOW + "Select Dorking mode [Basic/IoT/Files/Admins/Web/None] >> ") #api_flag = input(Fore.YELLOW + "Would you like to use 3rd party API in scan? [Y/N] >> ") #if api_flag.lower() == 'y': #print api db content @@ -128,7 +128,7 @@ 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']: + if dorking_flag.lower() not in ['basic', 'iot', 'none', 'admins', 'files', 'web']: print(Fore.RED + "\nInvalid Dorking mode. Please select mode among Basic, IoT, Files or None") break else: @@ -146,6 +146,9 @@ def run(): elif dorking_flag.lower() == 'admins': row_count = get_columns_amount('dorking//adminpanels_dorking.db', 'adminpanels_dorks') dorking_ui_mark = f'Yes, Admin panels dorking ({row_count} dorks)' + elif dorking_flag.lower() == 'web': + row_count = get_columns_amount('dorking//webstructure_dorking.db', 'webstructure_dorks') + dorking_ui_mark = f'Yes, Admin panels dorking ({row_count} dorks)' print(Fore.LIGHTMAGENTA_EX + "\n[PRE-SCAN SUMMARY]\n" + Style.RESET_ALL) print(Fore.GREEN + "Determined target: " + Fore.LIGHTCYAN_EX + Style.BRIGHT + short_domain + Style.RESET_ALL) print(Fore.GREEN + "Report type: " + Fore.LIGHTCYAN_EX + Style.BRIGHT + report_filetype.lower() + Style.RESET_ALL) From a00526aef38d292d3603771e4467b1c8f615e985 Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Mon, 14 Oct 2024 11:42:14 +0300 Subject: [PATCH 21/51] Fixed SSL/TLS security fix --- datagather_modules/networking_processor.py | 1 + 1 file changed, 1 insertion(+) diff --git a/datagather_modules/networking_processor.py b/datagather_modules/networking_processor.py index 71256cc..3a886d0 100644 --- a/datagather_modules/networking_processor.py +++ b/datagather_modules/networking_processor.py @@ -40,6 +40,7 @@ def get_ssl_certificate(short_domain, port=443): try: logging.info('SSL CERTIFICATE GATHERING: OK') context = ssl.create_default_context() + context.minimum_version = ssl.TLSVersion.TLSv1_2 conn = socket.create_connection((short_domain, port)) sock = context.wrap_socket(conn, server_hostname=short_domain) cert = sock.getpeercert() From fcbda255dd39b628adaa89b590742327e8aa2e6b Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Mon, 14 Oct 2024 12:01:22 +0300 Subject: [PATCH 22/51] Fixed incomplete URL substring sanitization issue --- datagather_modules/crawl_processor.py | 43 ++++++++++++++------------- 1 file changed, 23 insertions(+), 20 deletions(-) diff --git a/datagather_modules/crawl_processor.py b/datagather_modules/crawl_processor.py index 1424d05..b7c818b 100644 --- a/datagather_modules/crawl_processor.py +++ b/datagather_modules/crawl_processor.py @@ -113,25 +113,27 @@ def sm_gather(url): 'VKontakte': [], 'YouTube': [], 'Odnoklassniki': [], 'WeChat': []} for link in links: - if 'facebook.com' in link: + parsed_url = urlparse(link) + hostname = parsed_url.hostname + if hostname and hostname.endswith('facebook.com'): categorized_links['Facebook'].append(urllib.parse.unquote(link)) - elif 'twitter.com' in link: + elif hostname and hostname.endswith('twitter.com'): categorized_links['Twitter'].append(urllib.parse.unquote(link)) - elif 'instagram.com' in link: + elif hostname and hostname.endswith('instagram.com'): categorized_links['Instagram'].append(urllib.parse.unquote(link)) - elif 't.me' in link: + elif hostname and hostname.endswith('t.me'): categorized_links['Telegram'].append(urllib.parse.unquote(link)) - elif 'tiktok.com' in link: + elif hostname and hostname.endswith('tiktok.com'): categorized_links['TikTok'].append(urllib.parse.unquote(link)) - elif 'linkedin.com' in link: + elif hostname and hostname.endswith('linkedin.com'): categorized_links['LinkedIn'].append(urllib.parse.unquote(link)) - elif 'vk.com' in link: + elif hostname and hostname.endswith('vk.com'): categorized_links['VKontakte'].append(urllib.parse.unquote(link)) - elif 'youtube.com' in link: + elif hostname and hostname.endswith('youtube.com'): categorized_links['YouTube'].append(urllib.parse.unquote(link)) - elif 'wechat.com' in link: + elif hostname and hostname.endswith('wechat.com'): categorized_links['WeChat'].append(urllib.parse.unquote(link)) - elif 'ok.ru' in link: + elif hostname and hostname.endswith('ok.ru'): categorized_links['Odnoklassniki'].append(urllib.parse.unquote(link)) if not categorized_links['Odnoklassniki']: @@ -211,25 +213,26 @@ def domains_reverse_research(subdomains, report_file_type): for inner_list in subdomain_socials_grouped: for link in inner_list: - if 'facebook.com' in link: + hostname = urlparse(link).hostname + if hostname and hostname.endswith('facebook.com'): sd_socials['Facebook'].append(urllib.parse.unquote(link)) - elif 'twitter.com' in link: + elif hostname and hostname.endswith('twitter.com'): sd_socials['Twitter'].append(urllib.parse.unquote(link)) - elif 'instagram.com' in link: + elif hostname and hostname.endswith('instagram.com'): sd_socials['Instagram'].append(urllib.parse.unquote(link)) - elif 't.me' in link: + elif hostname and hostname.endswith('t.me'): sd_socials['Telegram'].append(urllib.parse.unquote(link)) - elif 'tiktok.com' in link: + elif hostname and hostname.endswith('tiktok.com'): sd_socials['TikTok'].append(urllib.parse.unquote(link)) - elif 'linkedin.com' in link: + elif hostname and hostname.endswith('linkedin.com'): sd_socials['LinkedIn'].append(urllib.parse.unquote(link)) - elif 'vk.com' in link: + elif hostname and hostname.endswith('vk.com'): sd_socials['VKontakte'].append(urllib.parse.unquote(link)) - elif 'youtube.com' in link: + elif hostname and hostname.endswith('youtube.com'): sd_socials['YouTube'].append(urllib.parse.unquote(link)) - elif 'wechat.com' in link: + elif hostname and hostname.endswith('wechat.com'): sd_socials['WeChat'].append(urllib.parse.unquote(link)) - elif 'ok.ru' in link: + elif hostname and hostname.endswith('ok.ru'): sd_socials['Odnoklassniki'].append(urllib.parse.unquote(link)) sd_socials = {k: list(set(v)) for k, v in sd_socials.items()} From c2373e9e6ac638d3121c7eab56cca8f31eac305e Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Mon, 14 Oct 2024 12:06:59 +0300 Subject: [PATCH 23/51] Fixed 'No such file or directory' error when dorking mode is set to None --- 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 477fb90..862c76f 100644 --- a/reporting_modules/html_report_creation.py +++ b/reporting_modules/html_report_creation.py @@ -167,8 +167,10 @@ def report_assembling(short_domain, url, case_comment, data_array, report_info_a if generate_report(context, html_report_name, template_path): print(Fore.GREEN + "HTML 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) - with open(dorking_file_path, 'r') as df: - dorking_content = df.read() + + 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(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) #, dorking_content was removed here From 4ab7b1b996f4f6c1b639705bb49e31a003df9d90 Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Mon, 14 Oct 2024 12:07:30 +0300 Subject: [PATCH 24/51] Fixed 'No such file or directory' error when dorking mode is set to None --- reporting_modules/pdf_report_creation.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/reporting_modules/pdf_report_creation.py b/reporting_modules/pdf_report_creation.py index 3d97fa8..0e9fc71 100644 --- a/reporting_modules/pdf_report_creation.py +++ b/reporting_modules/pdf_report_creation.py @@ -173,8 +173,9 @@ def report_assembling(short_domain, url, case_comment, data_array, report_info_a 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) - with open(dorking_file_path, 'r') as df: - dorking_content = df.read() + 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 From fa1744583d68d4974822e56cdea4cf687d51ff2b Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Mon, 14 Oct 2024 12:20:06 +0300 Subject: [PATCH 25/51] Updated README.md (removed some badges) --- README.md | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 19a2c92..1f767dd 100644 --- a/README.md +++ b/README.md @@ -9,12 +9,10 @@

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

-

-GitHub License GitHub Issues or Pull Requests GitHub repo size GitHub last commit -

+ > DPULSE was created as a research tool, and it is not intended for criminal activities. Use DPULSE only on allowed domains and for legal purposes! From 6f829e9b87b512e20042e73de481f0c806a09b23 Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Mon, 14 Oct 2024 12:21:45 +0300 Subject: [PATCH 26/51] Update README.md (added new mentions) --- README.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 1f767dd..88094e2 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@

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

@@ -139,7 +139,7 @@ If you have problems with starting installer.sh, you should try to use `dos2unix # Tasks to complete before new release -- [ ] Rework Google Dorking module in separate mode +- [x] Rework Google Dorking module in separate mode - [ ] Rework Google Dorks list into separate databases with different pre-configured dorks for various purposes - [ ] Allow user to create their own dorks DB - [ ] Add separate API search mode with different free APIs @@ -188,6 +188,10 @@ If you have problems with starting installer.sh, you should try to use `dos2unix ### [by C.I.T Security](https://t.me/citsecurity/8578) +### [by Adityaa_oky](https://t.me/adityaa_oky/960) + +### [by Реальний OSINT](https://t.me/realOSINT/462) + From 673c64cd2a6f1633cdbbcfc50effc02561570ab3 Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Tue, 15 Oct 2024 01:25:56 +0300 Subject: [PATCH 27/51] Added support of custom Dorking DB generation --- dpulse.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/dpulse.py b/dpulse.py index 3880f2f..1c00a2c 100644 --- a/dpulse.py +++ b/dpulse.py @@ -240,6 +240,16 @@ def run(): with open('journal.log', 'w'): print(Fore.GREEN + "Journal file was successfully cleared" + Style.RESET_ALL) pass + elif choice_settings == '3': + from db_creator import manage_dorks + print('\n') + print(Fore.GREEN + "You've entered custom Dorking DB generator!\n" + Style.RESET_ALL) + print(Fore.GREEN + "Remember some rules in order to successfully create your custom Dorking DB:" + Style.RESET_ALL) + print(Fore.GREEN + "[1] - dork_id variable must be unique, starting with 1 and then +1 every new dork" + Style.RESET_ALL) + print(Fore.GREEN + "[2] - When it comes to define domain in dork, put {} in it\n" + Style.RESET_ALL) + print(Fore.GREEN + "Examples: related:{}, site:{} inurl:login and so on\n" + Style.RESET_ALL) + ddb_name = input(Fore.YELLOW + "Enter a name for your custom Dorking DB (without any extensions) >> ") + manage_dorks(ddb_name) elif choice_settings == '6': continue From 20d78e78ab779c86ac628df0edd4cd0793ed4bea Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Tue, 15 Oct 2024 01:26:25 +0300 Subject: [PATCH 28/51] Reactivated "Generate custom Dorking DB" menu point --- 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 c2c03e8..e7009b0 100644 --- a/service/cli_init.py +++ b/service/cli_init.py @@ -38,7 +38,7 @@ def print_settings_menu(self): print(Fore.MAGENTA + Back.WHITE + '[SETTINGS MENU]' + Style.RESET_ALL) print(Fore.CYAN + "1. Print current config file") print(Fore.CYAN + "2. Edit config file") - print(Fore.CYAN + "3. Generate custom Dorking DB (not active)") + print(Fore.CYAN + "3. Generate custom Dorking DB") print(Fore.CYAN + "4. Add API key for existing API (not active)") print(Fore.CYAN + "5. Clear journal content") print(Fore.LIGHTRED_EX + "6. Return to main menu" + Style.RESET_ALL + '\n') From c5b4ffb6019a0a3ed952708cdf064fe13257a8cb Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Mon, 14 Oct 2024 18:27:00 -0400 Subject: [PATCH 29/51] Added separate module to handle custom dorking db generation --- dorking/db_creator.py | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 dorking/db_creator.py diff --git a/dorking/db_creator.py b/dorking/db_creator.py new file mode 100644 index 0000000..d4856f3 --- /dev/null +++ b/dorking/db_creator.py @@ -0,0 +1,31 @@ +import sqlite3 +from colorama import Fore + +def manage_dorks(db_name): + db_prep_string = str(db_name) + '.db' + conn = sqlite3.connect('dorking//' + str(db_prep_string)) + cursor = conn.cursor() + + cursor.execute(''' + CREATE TABLE IF NOT EXISTS dorks ( + dork_id INTEGER PRIMARY KEY, + dork TEXT NOT NULL + ) + ''') + conn.commit() + + def add_dork(dork_id, dork): + try: + cursor.execute('INSERT INTO dorks (dork_id, dork) VALUES (?, ?)', (dork_id, dork)) + conn.commit() + print(Fore.GREEN + "Successfully added new dork") + except sqlite3.IntegrityError: + print(Fore.RED + "Attention, dork_id variable must be unique") + + while True: + dork_id = input(Fore.YELLOW + "Enter dork_id (or 'q' to quit this mode and save changes) >> ") + if dork_id.lower() == 'q': + break + dork = input(Fore.YELLOW + "Enter new dork >> ") + add_dork(int(dork_id), dork) + conn.close() From a7b606de8e1cf354ef5aa3b484b251a5fb8aa433 Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Tue, 15 Oct 2024 17:09:51 +0300 Subject: [PATCH 30/51] Added custom Dorking DB usage support --- dpulse.py | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/dpulse.py b/dpulse.py index 1c00a2c..991f2e4 100644 --- a/dpulse.py +++ b/dpulse.py @@ -110,7 +110,7 @@ def run(): 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/None] >> ") + 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 api_flag.lower() == 'y': #print api db content @@ -128,8 +128,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']: - print(Fore.RED + "\nInvalid Dorking mode. Please select mode among Basic, IoT, Files or None") + 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") break else: if dorking_flag.lower() == 'basic': @@ -149,6 +149,11 @@ def run(): elif dorking_flag.lower() == 'web': row_count = get_columns_amount('dorking//webstructure_dorking.db', 'webstructure_dorks') dorking_ui_mark = f'Yes, Admin panels 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) >> ")) + 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") print(Fore.LIGHTMAGENTA_EX + "\n[PRE-SCAN SUMMARY]\n" + Style.RESET_ALL) print(Fore.GREEN + "Determined target: " + Fore.LIGHTCYAN_EX + Style.BRIGHT + short_domain + Style.RESET_ALL) print(Fore.GREEN + "Report type: " + Fore.LIGHTCYAN_EX + Style.BRIGHT + report_filetype.lower() + Style.RESET_ALL) @@ -208,7 +213,8 @@ def run(): 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()) + print(dorking_flag) + data_array, report_info_array = data_processing.data_gathering(short_domain, url, report_filetype.lower(), pagesearch_flag.lower(), '', keywords_flag, str(dorking_flag.lower())) 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) From 60bb93feed9a38680ed18e14b0e6e086251d3bc1 Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Tue, 15 Oct 2024 17:10:12 +0300 Subject: [PATCH 31/51] Added custom Dorking DB usage support From 4c2cf67d7190c5582a52e86de28cfddfd2b03d22 Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Tue, 15 Oct 2024 17:10:46 +0300 Subject: [PATCH 32/51] Added custom Dorking DB usage support --- datagather_modules/data_assembler.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/datagather_modules/data_assembler.py b/datagather_modules/data_assembler.py index cf73b6d..c580e95 100644 --- a/datagather_modules/data_assembler.py +++ b/datagather_modules/data_assembler.py @@ -37,6 +37,11 @@ def establishing_dork_db_connection(dorking_flag): elif dorking_flag == 'web': dorking_db_path = 'dorking//webstructure_dorking.db' table = 'webstructure_dorks' + elif dorking_flag.startswith('custom'): + lst = dorking_flag.split('+') + dorking_db_name = lst[1] + dorking_db_path = 'dorking//' + dorking_db_name + table = 'dorks' return dorking_db_path, table class DataProcessing(): @@ -158,6 +163,11 @@ def data_gathering(self, short_domain, url, report_file_type, pagesearch_flag, k 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) + elif dorking_flag.startswith('custom'): + 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) data_array = [ip, res, mails, subdomains, subdomains_amount, social_medias, subdomain_mails, sd_socials, subdomain_ip, issuer, subject, notBefore, notAfter, commonName, serialNumber, mx_records, @@ -214,6 +224,11 @@ def data_gathering(self, short_domain, url, report_file_type, pagesearch_flag, k 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) + elif dorking_flag.startswith('custom'): + 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) data_array = [ip, res, mails, subdomains, subdomains_amount, social_medias, subdomain_mails, sd_socials, subdomain_ip, issuer, subject, notBefore, notAfter, commonName, serialNumber, mx_records, @@ -278,6 +293,11 @@ def data_gathering(self, short_domain, url, report_file_type, pagesearch_flag, k 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) + elif dorking_flag.startswith('custom'): + 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) data_array = [ip, res, mails, subdomains, subdomains_amount, social_medias, subdomain_mails, sd_socials, subdomain_ip, issuer, subject, notBefore, notAfter, commonName, serialNumber, mx_records, From fe8361d902b395b6259a4dc4c9db05ed71bf8065 Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Tue, 15 Oct 2024 17:11:23 +0300 Subject: [PATCH 33/51] Added custom Dorking DB usage support From 76d6a73c840ba83d2e46ed465b7ffa5f798f450b Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Tue, 15 Oct 2024 17:35:15 +0300 Subject: [PATCH 34/51] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 88094e2..2df0d0a 100644 --- a/README.md +++ b/README.md @@ -140,8 +140,8 @@ If you have problems with starting installer.sh, you should try to use `dos2unix # Tasks to complete before new release - [x] Rework Google Dorking module in separate mode -- [ ] Rework Google Dorks list into separate databases with different pre-configured dorks for various purposes -- [ ] Allow user to create their own dorks DB +- [x] Rework Google Dorks list into separate databases with different pre-configured dorks for various purposes +- [x] Allow user to create their own dorks DB - [ ] Add separate API search mode with different free APIs # DPULSE mentions in social medias From 711fa9dcdef4f080e1e13940d55141008b49ff5b Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Tue, 15 Oct 2024 19:43:06 +0300 Subject: [PATCH 35/51] Added check on existent custom DB name --- dorking/db_creator.py | 53 +++++++++++++++++++++++-------------------- 1 file changed, 29 insertions(+), 24 deletions(-) diff --git a/dorking/db_creator.py b/dorking/db_creator.py index d4856f3..97053bd 100644 --- a/dorking/db_creator.py +++ b/dorking/db_creator.py @@ -1,31 +1,36 @@ import sqlite3 from colorama import Fore +import os def manage_dorks(db_name): db_prep_string = str(db_name) + '.db' - conn = sqlite3.connect('dorking//' + str(db_prep_string)) - cursor = conn.cursor() + if os.path.exists('dorking//' + db_prep_string): + print(Fore.RED + f"Sorry, but {db_prep_string} database is already exists. Choose other name for your custom DB") + pass + else: + conn = sqlite3.connect('dorking//' + str(db_prep_string)) + cursor = conn.cursor() - cursor.execute(''' - CREATE TABLE IF NOT EXISTS dorks ( - dork_id INTEGER PRIMARY KEY, - dork TEXT NOT NULL - ) - ''') - conn.commit() + cursor.execute(''' + CREATE TABLE IF NOT EXISTS dorks ( + dork_id INTEGER PRIMARY KEY, + dork TEXT NOT NULL + ) + ''') + conn.commit() - def add_dork(dork_id, dork): - try: - cursor.execute('INSERT INTO dorks (dork_id, dork) VALUES (?, ?)', (dork_id, dork)) - conn.commit() - print(Fore.GREEN + "Successfully added new dork") - except sqlite3.IntegrityError: - print(Fore.RED + "Attention, dork_id variable must be unique") - - while True: - dork_id = input(Fore.YELLOW + "Enter dork_id (or 'q' to quit this mode and save changes) >> ") - if dork_id.lower() == 'q': - break - dork = input(Fore.YELLOW + "Enter new dork >> ") - add_dork(int(dork_id), dork) - conn.close() + def add_dork(dork_id, dork): + try: + cursor.execute('INSERT INTO dorks (dork_id, dork) VALUES (?, ?)', (dork_id, dork)) + conn.commit() + print(Fore.GREEN + "Successfully added new dork") + except sqlite3.IntegrityError: + print(Fore.RED + "Attention, dork_id variable must be unique") + + while True: + dork_id = input(Fore.YELLOW + "Enter dork_id (or 'q' to quit this mode and save changes) >> ") + if dork_id.lower() == 'q': + break + dork = input(Fore.YELLOW + "Enter new dork >> ") + add_dork(int(dork_id), dork) + conn.close() From ae7f2f9148257026333fe0eec10ec92fc811a6e6 Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Tue, 15 Oct 2024 20:00:51 +0300 Subject: [PATCH 36/51] Updated CLI visual --- service/cli_init.py | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/service/cli_init.py b/service/cli_init.py index e7009b0..3106a53 100644 --- a/service/cli_init.py +++ b/service/cli_init.py @@ -26,22 +26,22 @@ def welcome_menu(self): def print_main_menu(self): print('\n') print(Fore.MAGENTA + Back.WHITE + '[MAIN MENU]' + Style.RESET_ALL) - print(Fore.CYAN + "1. Determine target and start scan") - print(Fore.CYAN + "2. Settings") - print(Fore.CYAN + "3. Report storage DB management") - print(Fore.CYAN + "4. Show API module status (not active)") - print(Fore.CYAN + "5. Help") - print(Fore.LIGHTRED_EX + "6. Exit DPULSE" + Style.RESET_ALL + '\n') + print(Fore.CYAN + "1. Target selection & scanning") + print(Fore.CYAN + "2. General settings") + print(Fore.CYAN + "3. Dorking module manager") + print(Fore.CYAN + "4. Report storage DB manager") + print(Fore.CYAN + "5. API modules manager (not active)") + print(Fore.CYAN + "6. Help") + print(Fore.LIGHTRED_EX + "7. Exit DPULSE" + Style.RESET_ALL + '\n') def print_settings_menu(self): print('\n') print(Fore.MAGENTA + Back.WHITE + '[SETTINGS MENU]' + Style.RESET_ALL) print(Fore.CYAN + "1. Print current config file") print(Fore.CYAN + "2. Edit config file") - print(Fore.CYAN + "3. Generate custom Dorking DB") - print(Fore.CYAN + "4. Add API key for existing API (not active)") - print(Fore.CYAN + "5. Clear journal content") - print(Fore.LIGHTRED_EX + "6. Return to main menu" + Style.RESET_ALL + '\n') + print(Fore.CYAN + "3. Add API key for existing API (not active)") + print(Fore.CYAN + "4. Clear journal content") + print(Fore.LIGHTRED_EX + "5. Return to main menu" + Style.RESET_ALL + '\n') def print_help_menu(self): print(Fore.MAGENTA + Back.WHITE + '[HELP MENU]' + Style.RESET_ALL) @@ -55,7 +55,14 @@ def print_help_menu(self): def print_db_menu(self): print('\n') - print(Fore.MAGENTA + Back.WHITE + '[DATABASE MENU]' + Style.RESET_ALL) + print(Fore.MAGENTA + Back.WHITE + '[REPORTS DATABASE MANAGER]' + Style.RESET_ALL) print(Fore.CYAN + "1. Show database content") print(Fore.CYAN + "2. Recreate report from database") print(Fore.LIGHTRED_EX + "3. Return to main menu" + Style.RESET_ALL) + + def dorking_db_manager(self): + print('\n') + print(Fore.MAGENTA + Back.WHITE + '[DORKING DB MANAGER]' + Style.RESET_ALL) + print(Fore.CYAN + "1. Generate custom Dorking DB") + print(Fore.LIGHTRED_EX + "2. Return to main menu" + Style.RESET_ALL) + print('\n') From ce8ea93043767b27039ab20f10146276cbd0aff1 Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Tue, 15 Oct 2024 20:01:11 +0300 Subject: [PATCH 37/51] Updated CLI visual --- dpulse.py | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/dpulse.py b/dpulse.py index 991f2e4..b637446 100644 --- a/dpulse.py +++ b/dpulse.py @@ -242,11 +242,16 @@ def run(): with open('service//config.ini', 'w') as configfile: config.write(configfile) print(Fore.GREEN + "Configuration updated successfully" + Style.RESET_ALL) - elif choice_settings == '5': + elif choice_settings == '4': with open('journal.log', 'w'): print(Fore.GREEN + "Journal file was successfully cleared" + Style.RESET_ALL) pass - elif choice_settings == '3': + elif choice_settings == '5': + continue + elif choice == '3': + cli.dorking_db_manager() + choice_dorking = input(Fore.YELLOW + "Enter your choice >> ") + if choice_dorking == '1': from db_creator import manage_dorks print('\n') print(Fore.GREEN + "You've entered custom Dorking DB generator!\n" + Style.RESET_ALL) @@ -256,10 +261,9 @@ def run(): print(Fore.GREEN + "Examples: related:{}, site:{} inurl:login and so on\n" + Style.RESET_ALL) ddb_name = input(Fore.YELLOW + "Enter a name for your custom Dorking DB (without any extensions) >> ") manage_dorks(ddb_name) - elif choice_settings == '6': + elif choice_dorking == '2': continue - - elif choice == "5": + elif choice == "6": cli.print_help_menu() choice_help = input(Fore.YELLOW + "Enter your choice >> ") if choice_help == '1': @@ -277,7 +281,7 @@ def run(): else: print(Fore.RED + "\nInvalid menu item. Please select between existing menu items") - elif choice == "3": + elif choice == "4": cli.print_db_menu() print('\n') db.db_creation('report_storage.db') @@ -302,7 +306,7 @@ def run(): elif choice_db == "3": print(Fore.GREEN + "\nDatabase connection is successfully closed") continue - elif choice == "6": + elif choice == "7": print(Fore.RED + "Exiting the program." + Style.RESET_ALL) break else: From acecfbb5ae7f237f9d86f284310e87cbe5a11adf Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Tue, 15 Oct 2024 20:07:14 +0300 Subject: [PATCH 38/51] Updated CLI visual --- 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 3106a53..4774c2d 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 // 1.1.2 (rolling) // OSINT-TECHNOLOGIES\n' + Style.RESET_ALL) + print(Fore.MAGENTA + Style.BRIGHT + '[DPULSE-CLI] - [v1.1.2 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 fc6b78aa21fd2b0452d65facff0bc07bab0d9cba Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Tue, 15 Oct 2024 21:53:10 +0300 Subject: [PATCH 39/51] Updated CLI visual --- dpulse.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dpulse.py b/dpulse.py index b637446..1b87ac7 100644 --- a/dpulse.py +++ b/dpulse.py @@ -77,7 +77,7 @@ def run(): print(Fore.RED + '\nYour string does not match domain pattern') else: url = "http://" + short_domain + "/" - print(Fore.GREEN + 'Pinging domain...' + Style.RESET_ALL) + print(Fore.GREEN + 'Pinging domain...' + Style.RESET_ALL, end = ' ') if domain_precheck(short_domain): print(Fore.GREEN + 'Entered domain is accessible. Continuation' + Style.RESET_ALL) else: From f84f2b406485f1c3725dca18af455527ca2f63c2 Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Tue, 15 Oct 2024 22:40:07 +0300 Subject: [PATCH 40/51] Code refactored --- dpulse.py | 38 ++++++++++++++++++-------------------- 1 file changed, 18 insertions(+), 20 deletions(-) diff --git a/dpulse.py b/dpulse.py index 1b87ac7..4c684ae 100644 --- a/dpulse.py +++ b/dpulse.py @@ -132,25 +132,21 @@ def run(): print(Fore.RED + "\nInvalid Dorking mode. Please select mode among Basic/IoT/Files/Web/Admins/Custom or None") break else: - if dorking_flag.lower() == 'basic': - row_count = get_columns_amount('dorking//basic_dorking.db', 'basic_dorks') - dorking_ui_mark = f'Yes, Basic dorking ({row_count} dorks)' - elif dorking_flag.lower() == 'iot': - row_count = get_columns_amount('dorking//iot_dorking.db', 'iot_dorks') - dorking_ui_mark = f'Yes, IoT dorking ({row_count} dorks)' - elif dorking_flag.lower() == 'none': - dorking_ui_mark = 'No' - elif dorking_flag.lower() == 'files': - row_count = get_columns_amount('dorking//files_dorking.db', 'files_dorks') - dorking_ui_mark = f'Yes, Files dorking ({row_count} dorks)' - elif dorking_flag.lower() == 'admins': - row_count = get_columns_amount('dorking//adminpanels_dorking.db', 'adminpanels_dorks') - dorking_ui_mark = f'Yes, Admin panels dorking ({row_count} dorks)' - elif dorking_flag.lower() == 'web': - row_count = get_columns_amount('dorking//webstructure_dorking.db', 'webstructure_dorks') - dorking_ui_mark = f'Yes, Admin panels dorking ({row_count} dorks)' + dorking_ui_mark = 'No' + if dorking_flag.lower() in ('basic', 'iot', 'files', 'admins', 'web'): + db_name = { + 'basic': 'basic_dorking.db', + 'iot': 'iot_dorking.db', + 'files': 'files_dorking.db', + 'admins': 'adminpanels_dorking.db', + 'web': 'webstructure_dorking.db' + }[dorking_flag.lower()] + 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") @@ -301,8 +297,10 @@ def run(): os.makedirs(extracted_folder_name) db.db_report_recreate(extracted_folder_name, id_to_extract) except FileExistsError: - print(Fore.RED + "Folder with the same name already exists. Delete it or just check it's content" + Style.RESET_ALL) - pass + print(Fore.RED + "Report with the same recreated folder already exists. Please check its content or delete it and try again" + Style.RESET_ALL) + except Exception as e: + print(Fore.RED + "Error appeared when trying to recreate report from DB. See journal for details" + Style.RESET_ALL) + elif choice_db == "3": print(Fore.GREEN + "\nDatabase connection is successfully closed") continue From 607dd3188fdf187b04d8132ec147faa189b534e5 Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Wed, 16 Oct 2024 00:44:35 +0300 Subject: [PATCH 41/51] Delete dorking/adminpanels_dorking.db --- dorking/adminpanels_dorking.db | Bin 28672 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 dorking/adminpanels_dorking.db diff --git a/dorking/adminpanels_dorking.db b/dorking/adminpanels_dorking.db deleted file mode 100644 index ae167b22abb7524baf47c6e1d3e0990d18860a71..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28672 zcmeI4U2Ggz702&p;{CGsUdQ>cV>|Zs*s;BK?1}9-PMi;atT(YqY;Wwf(zLW@vOBh? z-ksUZ&L*)+BQ@m#RiZ)&wNix;LMre;5h^?cBq}Hfq>2X@34{vj0|EpH@uk88LV|l{ zzdfrch!+~2vG>2;z2}~L&+nddXUDQ<_1ab4*7$~LrB$1ckw)V2kZH~dA(D9b#AAQq zXLyE3@$eLXc*wIvhL@iY(XSIJlqB?-P?EOgzaG*Dn~(q!Kmter2_OL^fCP{L5#&YBH@G8P(8I+4ZDpZD(C?cq1#(nRt}PXJ)TPx$J6}d4Dh< zL*I2hDF+so;?c{|6~43_=Syo>uky8}g==fk69pSN5RX0~S_-Y=?byn~;>^koekFRN zzvPC`ti_iXmc-DD(WQ7e7@qNZo7WT%(T${bH+w53t`pbQoNYR<*IkoZA920qi|zL| z4-R^6IB^$TWVKs4%}8i_Ue;B`yr;3>P}AB8(KAelC+4smdPJ7{s{Gbu8G00$MWa15 zi>yWSqfiYAtkQpnb<~9wF2b+;Zz}`W_I@a+5J)2k9!LNQAOR$R1dsp{Kmter2_OL^ zfCP}h<4Pb1f#LQ4U7ZN}MNB{{S0VIF~kN^@u0!RP}Ac0B(`@{?Qn*eym0|_7j zB!C2v01`j~NB{{S0VIF~kN^^R%m~2W|9jZ)iTK6?2_OL^fCP{L5Njj~4iTl#(aI=x4qrWfha(BDJ92z?{; zQpgC+hMF3F)9|3-wT8`x^9={;|5*RM`cKuz>*e6TgFg+v5qu%I8JrFF1pXR$H}HBO z7kDbr6Y%-p_rL9b)&HD7<{$Id`~K$pk?+gC7kwY~P5U~$A9&yMzU_U(`?A;eUiY5% z9<2Lw-8*%k7Zbt*2_OL^@K_V*n3qT-D{iba`P}ndH*!{LQpu#W?DkN~+|&(a;Ic%X zDz@kEU884hOSMglI~Fn@%&6Jy9n(s7Uy{gTwQb2Jsask?blQ=l61h?|(hXa;Q`)4Q zFb&%>Q{1^Jk=!*Wkp-8HbL!w~Lfp6~D|bdD5-pp+yq)&^C-c%FYnvpye(mcrbesU4h>$k3kV%#n){8LNKNF>bj~F-o3YA;A9g z61iUPQGiepK$-42iCnI2Szy~bDUow!3m}nHvs*V!)k+>eE0Jr}ZO)<%XSOm^xvXYg zaK@C+)LN4mq=C%ktB?qC$Amjk)>G<^nX|LX$hZN_Er?`~8e)k6Poz*s zF}S&x+%i~^fQ90Ad@92O5=pomMl5y1=3+`NPXpnKZJ<=OE4iCH+%))#s;9D|&kWpG zOz!A+XNmzfY=^zp5D>gQ{rN_;}-pQC_%0PFm*y1;0%VT0Xu+Cy%;Q1=(m8&w;nTT^YGFT<0 zRCh{$SFHjUtCO%aTN`)6%ojr!uiER%p(!Q5Cp#swS&qI?7K^5tOu?Gx1LU^J?JbRi zojlPYkzBcl<20=$b@h(Et(P4us~Ih!tEtH~u@yK0jvkZ9cDZA5DCl}!bcK2E?IMTU zYgNjVn!zKgW%H3?2sfV^-EFm2s$`ls3b)qsx17-o$KTlS-IBlX(TAEk{&>C?Mp|lR zT}%{^t*&mF88OcZ;TM*hFX!vJz1f|0PGSxvwcE?e;i z5|euytE!-wCF102h%6i}El&$`*PJt$BGX!DoW+6%XCS#dR4Z9Toh|O&+NXn`>l8H?>^wWZ}PHn+dlVM>rQ4U55LDFk!4qf zlsXsY2LJy*Pge;07yAeM3;P56HG7}^oc)CTnEjA_mwlUklYNbSg?*8Ij=ds&KkyR! z1iQ!XGK;0y2KyL$lEv8)n`g7^JUh)!vH{k^I#>&9Vhzm82>mDhfc}a8j{b`NlKzbD z(s$?&=v(vweUpBbeu;j8zD7SwU#6d=_vy#!ZJMFa(jT(6eVj&zu3Bm;gO}8gzUd^wcTPu`$rmQP7bQ(39e#-Q!Ud(BWawp&`%{ zCqM@WK?epv!(q_=e$c)?(B59qV=1Z`>pJ#YZDu@RIpP)b2VA<%{f(E57NU=TDA d0QLJpeLhgH7qqSpbpL)(Ndn!sPm%(G{{a2j*^U4J From 3b90293b358c5eca18234f496c07bfa661033ba2 Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Tue, 15 Oct 2024 17:44:57 -0400 Subject: [PATCH 42/51] Updated table name in adminpanels_dorking.db --- dorking/adminpanels_dorking.db | Bin 0 -> 28672 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 dorking/adminpanels_dorking.db diff --git a/dorking/adminpanels_dorking.db b/dorking/adminpanels_dorking.db new file mode 100644 index 0000000000000000000000000000000000000000..c2bc4780e4dc298e322d748d8f089118b84b826b GIT binary patch literal 28672 zcmeI4Yit}>702&-?0wmLuk*BHJNEVX5w9J4Vmpo#=eb^QVw3n0Ka`}UG2`8dJ@xL) zW_LD;RT`;*52z9qLRFC}gb-4J4-}z-L_nf~fm@giv^>@BtygJ+ref z&o&>5L|bw;%752;&pr2^-#z!vOyYZ&E??3ujo&acDb?bmq>*?$wJS~av}b~RyUHnXlTywSy2WI4u{Ba@e6To&a! zTx4%1*H$epm0q{?&Z4UeoW&(F+>re|Yw%i&;nq1M|pFyOgn z_fqshJZi3HwVOH3h-*83tgGnoj>0}eO=*Wk&9F!U(`GsN&MYH-Z_|q6A-a*!?l_** zoMqZSuZk}!*;SzjkGm1bw{hX>V$VCdvIou?#MR;QpQLAce7>fh9?!i{sh{P;?R?%b zOyw^AHzO1hK~C4*CG1W19rh`fU?Z%N{+@oHzC`cRC+Hb^AoTapuR>oBJsUDYlcC)W zziYVP@M6Py!>NW{^?$1WUi~NQm+R%=zk@#uz8riexE`Dgb_f0%cq8yqAQyN%&>isk z-}1la|BU}B|AK$iU+?>y??=8b`99|Ruom%Yzn$6xeGl{PA5}B>EE!rgXj20J_w&a*ZE*6Y*!_uv!HX+AN!^)UR zZr_y1ol_E-aoO07b2Tn5+*!FJDv?;p1o~apIo&i`Cna*a(jcW8>bjQF468XJk@3pH zH8sAe8Ht1EBoe7Car$O=ZO>VW4DKjS?>{4v(aJAvoD`0rs7e$dytJ2SQl@ zCAudia-q7V!?tBYA}320Kq8@LH`Yuwlju1ik;|23_Mi==H_~TwSuJzgZc{#9ZA=y* z4P-7~f<%zp$K8ptnpC&UoRw9E$CU6fiCil+<%G1fp=PuNao=MJM@#y;!DkG)X-pzx zB~v@+Hq5N0^d6PSQmMf4F=bkFnl+c()P#>|VJEkay2e(4YH>58DdCZ-9dU{w9yMpg zH_~cCZW(r=Q*x=bj2btU@R4e6R`R97%cRH`^TrK5uE{Nm+f6)`O$dC-p&^N^xI(%p za!`+(!cBB`iBAFN)0VWVs34Vn+9K0^<-AmiNNw8xA(a-B?A^p zzU|>d64704Pd%v`>p)~lj1;#m^9zj#Pj2g#$k|dAJ7erbUWNZQ>gp+5cZ!``NSZbh zk-lPKlbgHUEUc}xIjZz`Rf}!;+QR&(=njmtSQmJH7WB#$8ESXLzNv>%Qi}6V>FcaE z!NusrGn%E1*q?<1MZZTnB(h$L-kBD&rkO~>nCAoJmdULRjf0&$-Y$_` zsfO(|r6qLrw!W#C94kv{Ev~D{i50OF*a40ll*neOVxcLhdPP))e($Uzhuf;nl*crK zN7anQhle2Cd}?&HRvW3JY2GN@QqA9dS~F~aqeFL!{=x?yYHIuA`MEIMTrKMs#00X` zr42JJ`Z+HA!f^BX{Jd^!a%Y{Ln1c!JmNKwkB2Tzbl{qYTHL$Omv6+pUsg#z9YkZ_E zs-eBrCTE$k9am{~^zW&bz_%uI$)slK20vQnyJfd~t+Hc^rIcGPf$h6uOXV&pxHzaq3swIn%w*|*s@*jL$?*%#Pn*$d*|2cBggXLs2h zmSIVDgMEZO#+KO}n`V>j6g$R_uzuFf+F3K(%^H}O5&BR1Hhn<Fe|d z^i_JFzCyo3zeqn%U!>2|=jbQsJ^E34i>B$5G(oS^tD-~rLIOwt2_OL^fCP{L5W)x2EA|r^!$0ySPXP(3N#u8oty-XL_p7-13h~d^voI1)2BgCodP|1 z5_Dn$^u!6!9^oV$9_jnWqbZ7{4a1iwHVbFmA z(EfhVa2T|&5A@I>(B59qo*vNdZqTkSP+11;>;&Z;w4(#Gy&d%6LD04~(AHMamKM+h z2SA&fL7SRD_wNVYw-0phUeG;zKzHv3-L(s}u@RIpP)b2VA<%{f(E57NU=TDA0QLJp zeLhgH7qqSpw6+#hl0a)}Bq$92-d zbYqRwz>% literal 0 HcmV?d00001 From ba2c61f6ad8a0d335c9eb9cb68026287f317030d Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Wed, 16 Oct 2024 00:49:16 +0300 Subject: [PATCH 43/51] Code refactored / admins_dorks table support --- datagather_modules/data_assembler.py | 49 ++++++++++++++-------------- 1 file changed, 24 insertions(+), 25 deletions(-) diff --git a/datagather_modules/data_assembler.py b/datagather_modules/data_assembler.py index c580e95..f254b0b 100644 --- a/datagather_modules/data_assembler.py +++ b/datagather_modules/data_assembler.py @@ -22,26 +22,30 @@ sys.exit() def establishing_dork_db_connection(dorking_flag): - if dorking_flag == 'basic': - dorking_db_path = 'dorking//basic_dorking.db' - table = 'basic_dorks' - elif dorking_flag == 'iot': - dorking_db_path = 'dorking//iot_dorking.db' - table = 'iot_dorks' - elif dorking_flag == 'files': - dorking_db_path = 'dorking//files_dorking.db' - table = 'files_dorks' - elif dorking_flag == 'admins': - dorking_db_path = 'dorking//adminpanels_dorking.db' - table = 'adminpanels_dorks' - elif dorking_flag == 'web': - dorking_db_path = 'dorking//webstructure_dorking.db' - table = 'webstructure_dorks' + dorking_db_paths = { + 'basic': 'dorking//basic_dorking.db', + 'iot': 'dorking//iot_dorking.db', + 'files': 'dorking//files_dorking.db', + 'admins': 'dorking//adminpanels_dorking.db', + 'web': 'dorking//webstructure_dorking.db', + } + dorking_tables = { + 'basic': 'basic_dorks', + 'iot': 'iot_dorks', + 'files': 'files_dorks', + 'admins': 'admins_dorks', + 'web': 'webstructure_dorks', + } + if dorking_flag in dorking_db_paths: + dorking_db_path = dorking_db_paths[dorking_flag] + table = dorking_tables[dorking_flag] elif dorking_flag.startswith('custom'): lst = dorking_flag.split('+') dorking_db_name = lst[1] dorking_db_path = 'dorking//' + dorking_db_name table = 'dorks' + else: + raise ValueError(f"Invalid dorking flag: {dorking_flag}") return dorking_db_path, table class DataProcessing(): @@ -49,20 +53,15 @@ def report_preprocessing(self, short_domain, report_file_type): report_ctime = datetime.now().strftime('%d-%m-%Y, %H:%M:%S') files_ctime = datetime.now().strftime('(%d-%m-%Y, %Hh%Mm%Ss)') files_body = short_domain.replace(".", "") + '_' + files_ctime - if report_file_type == 'pdf': - casename = files_body + '.pdf' - elif report_file_type == 'xlsx': - casename = files_body + '.xlsx' - elif report_file_type == 'html': - casename = files_body + '.html' + casename = f"{files_body}.{report_file_type}" foldername = files_body db_casename = short_domain.replace(".", "") now = datetime.now() db_creation_date = str(now.year) + str(now.month) + str(now.day) - report_folder = "report_{}".format(foldername) - robots_filepath = report_folder + '//01-robots.txt' - sitemap_filepath = report_folder + '//02-sitemap.txt' - sitemap_links_filepath = report_folder + '//03-sitemap_links.txt' + report_folder = f"report_{foldername}" + robots_filepath = os.path.join(report_folder, '01-robots.txt') + sitemap_filepath = os.path.join(report_folder, '02-sitemap.txt') + sitemap_links_filepath = os.path.join(report_folder, '03-sitemap_links.txt') os.makedirs(report_folder, exist_ok=True) return casename, db_casename, db_creation_date, robots_filepath, sitemap_filepath, sitemap_links_filepath, report_file_type, report_folder, files_ctime, report_ctime From a3e8e1cc1359f8922f98ac730621f37e4f4e172f Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Wed, 16 Oct 2024 00:49:32 +0300 Subject: [PATCH 44/51] Code refactored --- dpulse.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/dpulse.py b/dpulse.py index 4c684ae..f4bc0d8 100644 --- a/dpulse.py +++ b/dpulse.py @@ -139,10 +139,8 @@ def run(): 'iot': 'iot_dorking.db', 'files': 'files_dorking.db', 'admins': 'adminpanels_dorking.db', - 'web': 'webstructure_dorking.db' - }[dorking_flag.lower()] - row_count = get_columns_amount(f'dorking//{db_name}', - f'{dorking_flag.lower()}_dorks') + 'web': 'webstructure_dorking.db'}[dorking_flag.lower()] + 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( From 276a9e343dc0eeb59d733b13d70673ef3b86e074 Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Wed, 16 Oct 2024 00:50:37 +0300 Subject: [PATCH 45/51] Code refactored --- dorking/db_creator.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dorking/db_creator.py b/dorking/db_creator.py index 97053bd..f457ce2 100644 --- a/dorking/db_creator.py +++ b/dorking/db_creator.py @@ -26,7 +26,7 @@ def add_dork(dork_id, dork): print(Fore.GREEN + "Successfully added new dork") except sqlite3.IntegrityError: print(Fore.RED + "Attention, dork_id variable must be unique") - + while True: dork_id = input(Fore.YELLOW + "Enter dork_id (or 'q' to quit this mode and save changes) >> ") if dork_id.lower() == 'q': From e8d117761d134d5c7275f3698ff1cfd6aa2758c0 Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Wed, 16 Oct 2024 00:54:02 +0300 Subject: [PATCH 46/51] Delete dorking/webstructure_dorking.db --- dorking/webstructure_dorking.db | Bin 20480 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 dorking/webstructure_dorking.db diff --git a/dorking/webstructure_dorking.db b/dorking/webstructure_dorking.db deleted file mode 100644 index a9e05914860ed9e9b43d04442f898fdaaf47b036..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20480 zcmeI4Piz}S6vk&gw&QiO^PI%q^(Hy2%q39^kqK4Rl&GYUg+f!O4K^jGu=Z}!RW`e> zcTEDQNI*|WRGdH{PDmiQaDZ~*LQfn3fy9NLH~<2~0XQKJNHF8XiR_8QpBw0nykERC z^WMDqX)m*%m4`2{c(H43hV30Yw&qBVC<=MNvIrpxzf%0_HF2Np-SEHS{;!%s?peLA z!EYqVt`PP%yaxgQf(;2E0VIF~kN^@u0!RP}AOR$R1pY4sE+x~(i4)3tY&U#2y5{pU z=0@aR>$pL4@HVxyR#~i7tlHxFm5MbmcRH|l+><Hhx6jUq1$bVG`W!)-Sx=#-TEBltPvBd3sK&)o~l0tvpDx{cy`< zQmKy3kN$S#7B#6NFNk8>_w^BJiO7vREn`@!v>67Q-jF}5&Djima;VL=60twnWAK&pV4mXZeCUF2Ju9alC%ATjvZZXgm&A}skBFq z%M0{`)NeaGUNEIla_%Ts?C!<$rS1y{E8Hw)`Lk+*PvCd>6@Gyq;am6$?!XuDDSQOC z;RCn@@4#E|I=sf;4ZH}?!wq;E_Mpu}upt2?fCP{L5FI&~1OLA$M|AyvL#O3|2;u+h6ZFhLchCPX6zQpfp?&{9FE4)J|BoLV!u|iT0-YVm z#r^+Lxz?`#pOa^ELmT8$d;UL@D?0H1HF=4y|34yEy6^uFAG6AV|DTm(_WgfVW-I*v zjJyr*{}0Jo_Wl3#6kQl#bmaf1Ch6IM!9)K)DetlC|5LfY>;EUF=sET1p&Ic2#qa+W s_<`^bHY9)qkN^@u0!RP}AOR$R1dsp{KmthMKTbeb_zNNV{{WbO0;qR(ApigX From 870b09b643583dfab78fa03067813858ba78895c Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Tue, 15 Oct 2024 17:54:26 -0400 Subject: [PATCH 47/51] Updated web_dorks table --- dorking/webstructure_dorking.db | Bin 0 -> 32768 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 dorking/webstructure_dorking.db diff --git a/dorking/webstructure_dorking.db b/dorking/webstructure_dorking.db new file mode 100644 index 0000000000000000000000000000000000000000..b225d456d9e8cc65deb17b3578b9552b60d2f75e GIT binary patch literal 32768 zcmeI*Pi)&%90zbaFaKM=m$pe9?~iI_gKgTN%E~mYV;TiTsI2R@E(OLVxQ(|(P3NFcayfN|jfJ8=L6f(sJ|4uC-70PMmE3Ep$lbjj^00Izz00bZa0SG`~a|HO+%E$W9 zkh*k_Z%x;1??P?5?Avqoa`3iXkP4!YOcqB=MYA;e@OaV8OZ9nkcQTQ$xQ*FzwUSSa zO_Yj{7AMV#6D4zEYJA+BnixAZRovJ5Og>R6KFMpO+LM!G$44j6n8%7|cDH*oN2f|B z#wPd(ju$6Ndy;$j=ub}#sY=zU*b96p{OYc3HGMaDUzWyJ-Y*r!c^9dhyC_7XdU5bp zUC!InWwCEwxzJvXoeW3yy?fO&D}rJao_(QdJ2L|G=C_d!y{^jLjx}fR<1P2_V}D66 z6x5}~LuxEo*&dBVgEL}r7cUtcRF}2~n`@7vy%Or!M7~|l4~%vvM@CB)Vs}Qczuk9y zaYtl%RGC|hs_V3Ax7^gzMH7N4MPWa%&)ECy74|H9nmxvb*%taY{h5AAuhQ4(3v`xF z(FbXsCbZwQZ?#Xfx3rf6dIShS00Izz00bZa0SG_<0uWe_K-M72u*WZsN1nfER-I;} zHd417yOzrl@R?&4!&DkTza#RG+bYTkl`1NyGNjeMA}R?8~ZGvngq;6??jQF3qG**W7akm4;fe z_?5Kf**Q%bQPuH$t5(bQN}KR(zggFNq>;|J&e`fYBPnmiop)-kRnZetn`T{9Wa5&o zxIL7PNxR|JDtc7vW!jpVZPvF&h;pRUXuf_QAC+%A{+2LN4tG{oEbsiZYc(oaBJCsR zsyf+_RBlz~s?Ii*C`VWO^6dqGBp=)jGTpQJq&QE-_5WY&Pxc4zhA_@J`qzX5g8MaQV}&x#NJ*JdwN7nCPhpn zM2yEpjKxHZMn#N7L=1;TBt*neh>%30r7phfFTUd+Vix^{y-HuFHKx!H>1Fl-JEmRH zey2O=5t`KAreCoKv} z7tjCq$zu)j|0(&?JfY3xp|0frsXU@q{$G9{y(~n9O*Jz&HqQXlEYnOM z`2N4jZYb;q`)=dTYxE2O2tWV=5P$##AOHafKmY;|fWU?c+^b3tcQCXN8C2WP8ZgB5 zzriQ-WB&h!9R+j@0SG_<0uX=z1Rwwb2tYs3O*8+Nh9|Nn32|NjG*IHg+v literal 0 HcmV?d00001 From 3f7a48ab7b508f16fdf891367d67e05e27799f97 Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Wed, 16 Oct 2024 00:55:31 +0300 Subject: [PATCH 48/51] Added web_dorks table support --- datagather_modules/data_assembler.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/datagather_modules/data_assembler.py b/datagather_modules/data_assembler.py index f254b0b..3b43f1f 100644 --- a/datagather_modules/data_assembler.py +++ b/datagather_modules/data_assembler.py @@ -34,7 +34,7 @@ def establishing_dork_db_connection(dorking_flag): 'iot': 'iot_dorks', 'files': 'files_dorks', 'admins': 'admins_dorks', - 'web': 'webstructure_dorks', + 'web': 'web_dorks', } if dorking_flag in dorking_db_paths: dorking_db_path = dorking_db_paths[dorking_flag] From 3337e9746785ba54bb21ca20c3e5d0d1aaa8f006 Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Wed, 16 Oct 2024 01:03:13 +0300 Subject: [PATCH 49/51] Code refactored --- datagather_modules/data_assembler.py | 76 ++-------------------------- 1 file changed, 4 insertions(+), 72 deletions(-) diff --git a/datagather_modules/data_assembler.py b/datagather_modules/data_assembler.py index 3b43f1f..8071526 100644 --- a/datagather_modules/data_assembler.py +++ b/datagather_modules/data_assembler.py @@ -139,30 +139,9 @@ def data_gathering(self, short_domain, url, report_file_type, pagesearch_flag, k pass if dorking_flag == 'none': - pass dorking_status = 'Google Dorking mode was not selected for this scan' dorking_file_path = 'Google Dorking mode was not selected for this scan' - elif dorking_flag == 'basic': - 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) - elif dorking_flag == 'iot': - 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) - elif dorking_flag == 'files': - 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) - elif dorking_flag == 'web': - 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) - elif dorking_flag.startswith('custom'): + 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)) @@ -200,30 +179,9 @@ def data_gathering(self, short_domain, url, report_file_type, pagesearch_flag, k pass if dorking_flag == 'none': - pass dorking_status = 'Google Dorking mode was not selected for this scan' - dorking_results = 'Google Dorking mode was not selected for this scan' - elif dorking_flag == 'basic': - 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) - elif dorking_flag == 'iot': - 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) - elif dorking_flag == 'files': - 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) - elif dorking_flag == 'web': - 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) - elif dorking_flag.startswith('custom'): + 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)) @@ -264,35 +222,9 @@ def data_gathering(self, short_domain, url, report_file_type, pagesearch_flag, k pass if dorking_flag == 'none': - pass dorking_status = 'Google Dorking mode was not selected for this scan' dorking_file_path = 'Google Dorking mode was not selected for this scan' - elif dorking_flag == 'basic': - 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) - elif dorking_flag == 'iot': - 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) - elif dorking_flag == 'files': - 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) - elif dorking_flag == 'admins': - 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) - elif dorking_flag == 'web': - 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) - elif dorking_flag.startswith('custom'): + 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)) From bb16fd87762cbbce53b8f87ec7cee8d373f685d5 Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Thu, 17 Oct 2024 00:35:55 +0300 Subject: [PATCH 50/51] Update pyproject.toml with 1.1.2 version --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 49c530d..241f6a8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "poetry.core.masonry.api" [tool.poetry] name = "dpulse" -version = "1.1.1" +version = "1.1.2" description = "Convenient,fast and user-friendly collector of domain information from Open-Sources" authors = ["OSINT-TECHNOLOGIES "] readme = "README.md" From 8a955f5b1b42c131550ace135d8eb5d1de02f97c Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Thu, 17 Oct 2024 00:36:52 +0300 Subject: [PATCH 51/51] Update poetry.lock with 1.1.2 version --- poetry.lock | 401 ++++++++++++++++++++++++++-------------------------- 1 file changed, 200 insertions(+), 201 deletions(-) diff --git a/poetry.lock b/poetry.lock index f2f0bd9..23e2488 100644 --- a/poetry.lock +++ b/poetry.lock @@ -737,95 +737,90 @@ asn1crypto = ">=1.5.1" [[package]] name = "pillow" -version = "10.4.0" +version = "11.0.0" description = "Python Imaging Library (Fork)" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "pillow-10.4.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:4d9667937cfa347525b319ae34375c37b9ee6b525440f3ef48542fcf66f2731e"}, - {file = "pillow-10.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:543f3dc61c18dafb755773efc89aae60d06b6596a63914107f75459cf984164d"}, - {file = "pillow-10.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7928ecbf1ece13956b95d9cbcfc77137652b02763ba384d9ab508099a2eca856"}, - {file = "pillow-10.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4d49b85c4348ea0b31ea63bc75a9f3857869174e2bf17e7aba02945cd218e6f"}, - {file = "pillow-10.4.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:6c762a5b0997f5659a5ef2266abc1d8851ad7749ad9a6a5506eb23d314e4f46b"}, - {file = "pillow-10.4.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:a985e028fc183bf12a77a8bbf36318db4238a3ded7fa9df1b9a133f1cb79f8fc"}, - {file = "pillow-10.4.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:812f7342b0eee081eaec84d91423d1b4650bb9828eb53d8511bcef8ce5aecf1e"}, - {file = "pillow-10.4.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:ac1452d2fbe4978c2eec89fb5a23b8387aba707ac72810d9490118817d9c0b46"}, - {file = "pillow-10.4.0-cp310-cp310-win32.whl", hash = "sha256:bcd5e41a859bf2e84fdc42f4edb7d9aba0a13d29a2abadccafad99de3feff984"}, - {file = "pillow-10.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:ecd85a8d3e79cd7158dec1c9e5808e821feea088e2f69a974db5edf84dc53141"}, - {file = "pillow-10.4.0-cp310-cp310-win_arm64.whl", hash = "sha256:ff337c552345e95702c5fde3158acb0625111017d0e5f24bf3acdb9cc16b90d1"}, - {file = "pillow-10.4.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:0a9ec697746f268507404647e531e92889890a087e03681a3606d9b920fbee3c"}, - {file = "pillow-10.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:dfe91cb65544a1321e631e696759491ae04a2ea11d36715eca01ce07284738be"}, - {file = "pillow-10.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5dc6761a6efc781e6a1544206f22c80c3af4c8cf461206d46a1e6006e4429ff3"}, - {file = "pillow-10.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5e84b6cc6a4a3d76c153a6b19270b3526a5a8ed6b09501d3af891daa2a9de7d6"}, - {file = "pillow-10.4.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:bbc527b519bd3aa9d7f429d152fea69f9ad37c95f0b02aebddff592688998abe"}, - {file = "pillow-10.4.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:76a911dfe51a36041f2e756b00f96ed84677cdeb75d25c767f296c1c1eda1319"}, - {file = "pillow-10.4.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:59291fb29317122398786c2d44427bbd1a6d7ff54017075b22be9d21aa59bd8d"}, - {file = "pillow-10.4.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:416d3a5d0e8cfe4f27f574362435bc9bae57f679a7158e0096ad2beb427b8696"}, - {file = "pillow-10.4.0-cp311-cp311-win32.whl", hash = "sha256:7086cc1d5eebb91ad24ded9f58bec6c688e9f0ed7eb3dbbf1e4800280a896496"}, - {file = "pillow-10.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:cbed61494057c0f83b83eb3a310f0bf774b09513307c434d4366ed64f4128a91"}, - {file = "pillow-10.4.0-cp311-cp311-win_arm64.whl", hash = "sha256:f5f0c3e969c8f12dd2bb7e0b15d5c468b51e5017e01e2e867335c81903046a22"}, - {file = "pillow-10.4.0-cp312-cp312-macosx_10_10_x86_64.whl", hash = "sha256:673655af3eadf4df6b5457033f086e90299fdd7a47983a13827acf7459c15d94"}, - {file = "pillow-10.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:866b6942a92f56300012f5fbac71f2d610312ee65e22f1aa2609e491284e5597"}, - {file = "pillow-10.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:29dbdc4207642ea6aad70fbde1a9338753d33fb23ed6956e706936706f52dd80"}, - {file = "pillow-10.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf2342ac639c4cf38799a44950bbc2dfcb685f052b9e262f446482afaf4bffca"}, - {file = "pillow-10.4.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:f5b92f4d70791b4a67157321c4e8225d60b119c5cc9aee8ecf153aace4aad4ef"}, - {file = "pillow-10.4.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:86dcb5a1eb778d8b25659d5e4341269e8590ad6b4e8b44d9f4b07f8d136c414a"}, - {file = "pillow-10.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:780c072c2e11c9b2c7ca37f9a2ee8ba66f44367ac3e5c7832afcfe5104fd6d1b"}, - {file = "pillow-10.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:37fb69d905be665f68f28a8bba3c6d3223c8efe1edf14cc4cfa06c241f8c81d9"}, - {file = "pillow-10.4.0-cp312-cp312-win32.whl", hash = "sha256:7dfecdbad5c301d7b5bde160150b4db4c659cee2b69589705b6f8a0c509d9f42"}, - {file = "pillow-10.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:1d846aea995ad352d4bdcc847535bd56e0fd88d36829d2c90be880ef1ee4668a"}, - {file = "pillow-10.4.0-cp312-cp312-win_arm64.whl", hash = "sha256:e553cad5179a66ba15bb18b353a19020e73a7921296a7979c4a2b7f6a5cd57f9"}, - {file = "pillow-10.4.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8bc1a764ed8c957a2e9cacf97c8b2b053b70307cf2996aafd70e91a082e70df3"}, - {file = "pillow-10.4.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:6209bb41dc692ddfee4942517c19ee81b86c864b626dbfca272ec0f7cff5d9fb"}, - {file = "pillow-10.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bee197b30783295d2eb680b311af15a20a8b24024a19c3a26431ff83eb8d1f70"}, - {file = "pillow-10.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ef61f5dd14c300786318482456481463b9d6b91ebe5ef12f405afbba77ed0be"}, - {file = "pillow-10.4.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:297e388da6e248c98bc4a02e018966af0c5f92dfacf5a5ca22fa01cb3179bca0"}, - {file = "pillow-10.4.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:e4db64794ccdf6cb83a59d73405f63adbe2a1887012e308828596100a0b2f6cc"}, - {file = "pillow-10.4.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:bd2880a07482090a3bcb01f4265f1936a903d70bc740bfcb1fd4e8a2ffe5cf5a"}, - {file = "pillow-10.4.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4b35b21b819ac1dbd1233317adeecd63495f6babf21b7b2512d244ff6c6ce309"}, - {file = "pillow-10.4.0-cp313-cp313-win32.whl", hash = "sha256:551d3fd6e9dc15e4c1eb6fc4ba2b39c0c7933fa113b220057a34f4bb3268a060"}, - {file = "pillow-10.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:030abdbe43ee02e0de642aee345efa443740aa4d828bfe8e2eb11922ea6a21ea"}, - {file = "pillow-10.4.0-cp313-cp313-win_arm64.whl", hash = "sha256:5b001114dd152cfd6b23befeb28d7aee43553e2402c9f159807bf55f33af8a8d"}, - {file = "pillow-10.4.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:8d4d5063501b6dd4024b8ac2f04962d661222d120381272deea52e3fc52d3736"}, - {file = "pillow-10.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7c1ee6f42250df403c5f103cbd2768a28fe1a0ea1f0f03fe151c8741e1469c8b"}, - {file = "pillow-10.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b15e02e9bb4c21e39876698abf233c8c579127986f8207200bc8a8f6bb27acf2"}, - {file = "pillow-10.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a8d4bade9952ea9a77d0c3e49cbd8b2890a399422258a77f357b9cc9be8d680"}, - {file = "pillow-10.4.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:43efea75eb06b95d1631cb784aa40156177bf9dd5b4b03ff38979e048258bc6b"}, - {file = "pillow-10.4.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:950be4d8ba92aca4b2bb0741285a46bfae3ca699ef913ec8416c1b78eadd64cd"}, - {file = "pillow-10.4.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:d7480af14364494365e89d6fddc510a13e5a2c3584cb19ef65415ca57252fb84"}, - {file = "pillow-10.4.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:73664fe514b34c8f02452ffb73b7a92c6774e39a647087f83d67f010eb9a0cf0"}, - {file = "pillow-10.4.0-cp38-cp38-win32.whl", hash = "sha256:e88d5e6ad0d026fba7bdab8c3f225a69f063f116462c49892b0149e21b6c0a0e"}, - {file = "pillow-10.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:5161eef006d335e46895297f642341111945e2c1c899eb406882a6c61a4357ab"}, - {file = "pillow-10.4.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:0ae24a547e8b711ccaaf99c9ae3cd975470e1a30caa80a6aaee9a2f19c05701d"}, - {file = "pillow-10.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:298478fe4f77a4408895605f3482b6cc6222c018b2ce565c2b6b9c354ac3229b"}, - {file = "pillow-10.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:134ace6dc392116566980ee7436477d844520a26a4b1bd4053f6f47d096997fd"}, - {file = "pillow-10.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:930044bb7679ab003b14023138b50181899da3f25de50e9dbee23b61b4de2126"}, - {file = "pillow-10.4.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:c76e5786951e72ed3686e122d14c5d7012f16c8303a674d18cdcd6d89557fc5b"}, - {file = "pillow-10.4.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:b2724fdb354a868ddf9a880cb84d102da914e99119211ef7ecbdc613b8c96b3c"}, - {file = "pillow-10.4.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:dbc6ae66518ab3c5847659e9988c3b60dc94ffb48ef9168656e0019a93dbf8a1"}, - {file = "pillow-10.4.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:06b2f7898047ae93fad74467ec3d28fe84f7831370e3c258afa533f81ef7f3df"}, - {file = "pillow-10.4.0-cp39-cp39-win32.whl", hash = "sha256:7970285ab628a3779aecc35823296a7869f889b8329c16ad5a71e4901a3dc4ef"}, - {file = "pillow-10.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:961a7293b2457b405967af9c77dcaa43cc1a8cd50d23c532e62d48ab6cdd56f5"}, - {file = "pillow-10.4.0-cp39-cp39-win_arm64.whl", hash = "sha256:32cda9e3d601a52baccb2856b8ea1fc213c90b340c542dcef77140dfa3278a9e"}, - {file = "pillow-10.4.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:5b4815f2e65b30f5fbae9dfffa8636d992d49705723fe86a3661806e069352d4"}, - {file = "pillow-10.4.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:8f0aef4ef59694b12cadee839e2ba6afeab89c0f39a3adc02ed51d109117b8da"}, - {file = "pillow-10.4.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9f4727572e2918acaa9077c919cbbeb73bd2b3ebcfe033b72f858fc9fbef0026"}, - {file = "pillow-10.4.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ff25afb18123cea58a591ea0244b92eb1e61a1fd497bf6d6384f09bc3262ec3e"}, - {file = "pillow-10.4.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:dc3e2db6ba09ffd7d02ae9141cfa0ae23393ee7687248d46a7507b75d610f4f5"}, - {file = "pillow-10.4.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:02a2be69f9c9b8c1e97cf2713e789d4e398c751ecfd9967c18d0ce304efbf885"}, - {file = "pillow-10.4.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:0755ffd4a0c6f267cccbae2e9903d95477ca2f77c4fcf3a3a09570001856c8a5"}, - {file = "pillow-10.4.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:a02364621fe369e06200d4a16558e056fe2805d3468350df3aef21e00d26214b"}, - {file = "pillow-10.4.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:1b5dea9831a90e9d0721ec417a80d4cbd7022093ac38a568db2dd78363b00908"}, - {file = "pillow-10.4.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9b885f89040bb8c4a1573566bbb2f44f5c505ef6e74cec7ab9068c900047f04b"}, - {file = "pillow-10.4.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87dd88ded2e6d74d31e1e0a99a726a6765cda32d00ba72dc37f0651f306daaa8"}, - {file = "pillow-10.4.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:2db98790afc70118bd0255c2eeb465e9767ecf1f3c25f9a1abb8ffc8cfd1fe0a"}, - {file = "pillow-10.4.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:f7baece4ce06bade126fb84b8af1c33439a76d8a6fd818970215e0560ca28c27"}, - {file = "pillow-10.4.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:cfdd747216947628af7b259d274771d84db2268ca062dd5faf373639d00113a3"}, - {file = "pillow-10.4.0.tar.gz", hash = "sha256:166c1cd4d24309b30d61f79f4a9114b7b2313d7450912277855ff5dfd7cd4a06"}, + {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 (>=7.3)", "sphinx-copybutton", "sphinx-inline-tabs", "sphinxext-opengraph"] +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"] @@ -1014,128 +1009,132 @@ image = ["Pillow (>=8.0.0)"] [[package]] name = "python-bidi" -version = "0.6.0" +version = "0.6.3" description = "Python Bidi layout wrapping the Rust crate unicode-bidi" optional = false python-versions = "*" files = [ - {file = "python_bidi-0.6.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:032b16f70c5d4f48c8dc5a4ade071826a0fb64172e0435d49deba6ea66fc5d42"}, - {file = "python_bidi-0.6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:53b50f6ad3e633dcc74fc96bb959bf375a84db36db380d76f9c189ce33099ede"}, - {file = "python_bidi-0.6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2d2928ae4aedff4f49ac2e334d176b9488762276bae8b32045c3b91f41c447e4"}, - {file = "python_bidi-0.6.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8f3e5ef9093699300868f9c92975e4d3472131e9da1125501b1950faa0eec62a"}, - {file = "python_bidi-0.6.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0eb05fc7115f296e09e06d47648b032a2dff4322b363b8b7f88d4695be452951"}, - {file = "python_bidi-0.6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6fdf72111aed1e30bb89989f55e167411d5fb7a94ee412a3116b9a9b257516f4"}, - {file = "python_bidi-0.6.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d9daa84f8f8138521a5971d38c92d918bdb0a899268d83d9daa5eba7dce641ce"}, - {file = "python_bidi-0.6.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d2e5bafacba56696712ea2284c27f8a3d3b4ee94684b7dcd06af8775cf650dea"}, - {file = "python_bidi-0.6.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:7214a175dd09a4da5f755dbf19d767261d2087686dfff321b4a3967d09096081"}, - {file = "python_bidi-0.6.0-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:9f6fe4d9b86c123a960c7506ffb31ebba0c7c465a364b344f96858679bf54401"}, - {file = "python_bidi-0.6.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:ddf12de3ce92bbfcc3f0cdcc4591f9dbbdf3f83388da22646dbf0ba56d66844d"}, - {file = "python_bidi-0.6.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:550565296af0e3e938cedc87c78a6ba02e38dab7c4bb2fbbf3717f2412e2a6e1"}, - {file = "python_bidi-0.6.0-cp310-none-win32.whl", hash = "sha256:b6958bc4a27e2854c1e9a3d6a2dac0cfd09451834c64f96738c3365d8a053358"}, - {file = "python_bidi-0.6.0-cp310-none-win_amd64.whl", hash = "sha256:712d666331e813f498ad6f16e23b6c9795f21e7a231b7047f32f2843e303ec92"}, - {file = "python_bidi-0.6.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:b3984f4d91b75f19c1e1c2e5a52f4263f4c4a11de2c1f5bfb7b8fceb7960d8d8"}, - {file = "python_bidi-0.6.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:603b4485b7dc588bc58f80f1271f103b859a45b19024b90686c639a451e50b0a"}, - {file = "python_bidi-0.6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9d4f2a41ba306fd2827a1e5f153e856f5e79176abf4f0ae41def5255113548cc"}, - {file = "python_bidi-0.6.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bb50d50809508f0f9907973e8c99fd663d7d3b2bb124218c7f9d9abe374527c5"}, - {file = "python_bidi-0.6.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fd5d2c89acc022cfd3b2d87b09f3ac8503beb6ca45af2ee31df9bd0fbbbe85ce"}, - {file = "python_bidi-0.6.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:08c7ebd084312706868df172fb46f635ee437344181c0c55302f0da221f3bf75"}, - {file = "python_bidi-0.6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3f8689da1893a5a70e5bb6b47fff4571b8ab6a3653b8f9e3d3555ddaaabb607f"}, - {file = "python_bidi-0.6.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7cac60293dddbe6307bfb15f8a227f614afa882999ff669b5af795dca7db97dc"}, - {file = "python_bidi-0.6.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:4019165cb8e9e73bebec839156ff25e02b499da5f3e849e44c5c76fd487be967"}, - {file = "python_bidi-0.6.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:6684e0f1cb2d769281b6b8bbb51c69a700b63b18a6cb6088d3f34a9eb544620a"}, - {file = "python_bidi-0.6.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:7203782c888fcffc0e20e1e6b2d8bfe947ce356796a6709c09c1d751943b6ed7"}, - {file = "python_bidi-0.6.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f7d98736704548a001fb072becdfbda9d67dde8fd993320494c2370243c92f87"}, - {file = "python_bidi-0.6.0-cp311-none-win32.whl", hash = "sha256:205d885944f929e93283b88a45fe57ae0102c39ba0576ab856f9e5dd50d7a049"}, - {file = "python_bidi-0.6.0-cp311-none-win_amd64.whl", hash = "sha256:b7847f882442179fd67608958c1ce8af9ee4b051a921342c7a3bc071e2ba0fc4"}, - {file = "python_bidi-0.6.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:694373c087f2d5067289832070a21e84fc648ac087163723ccd0759dac3a7161"}, - {file = "python_bidi-0.6.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:dd2ae8876412974b8959520688a271c1b3dbb65ef57306e3bf745115147d05b8"}, - {file = "python_bidi-0.6.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2d748eccc2c40ce5b56bde1b7eef72f7b6037e289fb34a38335cd05e3b5f7cd6"}, - {file = "python_bidi-0.6.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:22b6866cf18e2e8189cdbc5ede22b843c15c8aaef5eb8438fb02f8197fb29bf9"}, - {file = "python_bidi-0.6.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e056f602e634b8cd3c8c5497f52d43674f5de088df4f1a8d73e99cd97735fb3f"}, - {file = "python_bidi-0.6.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3adf383d7e1bc50c8357f78ec3591c483066f9b7744a0c2c89d1ef501c75f693"}, - {file = "python_bidi-0.6.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db9981b2d05ef108a540424dabfa157dff20ec4adb909e5a6d2938cac6cf3987"}, - {file = "python_bidi-0.6.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7dcf1d8834e1db2f4d3372c607fe2a12acbeeb4a9aba1bf0014cc37474ef08d1"}, - {file = "python_bidi-0.6.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:58b9628fa1d15b30686fb6196cc2b3d6c1546bfe7e5fbdd9b758d69a76411cd4"}, - {file = "python_bidi-0.6.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:7fa5babd7d89a541d6507bddd4839271db1504a54f46a5ee64c959dde41c0596"}, - {file = "python_bidi-0.6.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0b5c33ad97ad7bb2fa335a0ce63d0a887e99dbc86ce2684f7622c0fb1b25873e"}, - {file = "python_bidi-0.6.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:48034cc54c792dfeeb017505293600bc4ece89fca1fc28d6fb24f932d7ef1bcf"}, - {file = "python_bidi-0.6.0-cp312-none-win32.whl", hash = "sha256:8483de08f3b41063f1819a397aa6686ae88ac908192e448b72e4bf7caa91a655"}, - {file = "python_bidi-0.6.0-cp312-none-win_amd64.whl", hash = "sha256:a82ee4b48e9b192d4ff3873f2fd063efae063b904b6283119b8cef7165a54084"}, - {file = "python_bidi-0.6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e080e4bf367c3761fc9a430a6a0375dcb10a541721a6b688142a9bbee883e576"}, - {file = "python_bidi-0.6.0-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1002a9b65deae763b236d7d4ea6f046acdb778c85932053ce0d4607f691a1a93"}, - {file = "python_bidi-0.6.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9418a69c7189907cd27ebe783708572dff979be77e1a7d2b646ff0a456f4f59b"}, - {file = "python_bidi-0.6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:61c05401d8ff120221b53938e7576a330fde22b22e22bf9243e8fffa225cd35f"}, - {file = "python_bidi-0.6.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5e8382835ae85a4bacd188e563fcd5c90d73be7406f7e4ee1148f7a3fa61ff1"}, - {file = "python_bidi-0.6.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:19d07a95ebab603849a639d649a07474dc54485ad822aa045309a12ec0f7d388"}, - {file = "python_bidi-0.6.0-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:e8695ad198e816b42df61ea2a315f7d84189f69a3aa608c0fa71bb5d9105790e"}, - {file = "python_bidi-0.6.0-cp37-cp37m-musllinux_1_2_armv7l.whl", hash = "sha256:13956919a2bcf0d5f240d66acd99256996abec10ae235d328d93433480dac62a"}, - {file = "python_bidi-0.6.0-cp37-cp37m-musllinux_1_2_i686.whl", hash = "sha256:88ee27d0ce129b51e0aedcf88a7961e300f0e3b5d0e707ca813e2af33b46e8a1"}, - {file = "python_bidi-0.6.0-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:50ec1353643a03c8c324968e1216624e0bba57b77af465675932ce6cc5505015"}, - {file = "python_bidi-0.6.0-cp37-none-win32.whl", hash = "sha256:9ec06a91c64fb6832351dc8ab1dc9f970b505e09ccb83b8ff2c91bd04ce31417"}, - {file = "python_bidi-0.6.0-cp37-none-win_amd64.whl", hash = "sha256:4425879da7b1ca6257759ace9277506d9d6cf0fc13820bfa1e779931a6bb9795"}, - {file = "python_bidi-0.6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5985ed1f85b8a2853c73976d259e3095122559646956c5bf8f1c6c4eb2bd7ebd"}, - {file = "python_bidi-0.6.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:afb77402c6d79daa1715a8a5d6d0eff13387e0db1a34c0f91a09b40ca6a60972"}, - {file = "python_bidi-0.6.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2c6d339b94efde502286a8f80f130db6014762c8218e6f3af23bfe446217b10e"}, - {file = "python_bidi-0.6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:afec9e08733d6754ef309eef617ba324eacf4bdf0081c3ec34758cbfb964e889"}, - {file = "python_bidi-0.6.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2901c29525e8c6071781bd796658f7934143fe6bcfb4f998a11cc80372f756fc"}, - {file = "python_bidi-0.6.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c71bb7e5fbd67fd64dc7b07c0a69a1b1daffdae0839d543e6e48dbfa82509208"}, - {file = "python_bidi-0.6.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:782b166b22cdd1738dc557acf7311a1d85565b9f58c48eb4004e4f770854c9d2"}, - {file = "python_bidi-0.6.0-cp38-cp38-musllinux_1_2_armv7l.whl", hash = "sha256:1000815b42e9eba8d4e28e8d6f9558f055d54b9ec746875117d8b8150c86511c"}, - {file = "python_bidi-0.6.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:dfae0ea2444833acab3f7c62fd38b965f7332617993ef09098672ca9279bb27d"}, - {file = "python_bidi-0.6.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:65fcf6afe02d64b3ec9a6b97513fad50b858f88b83f785e4c0416a9acac5bc63"}, - {file = "python_bidi-0.6.0-cp38-none-win32.whl", hash = "sha256:0fc9ad821600a0bd4c9bd6327f5cac3c1494f0d291173bf41e655f2ec80f1cee"}, - {file = "python_bidi-0.6.0-cp38-none-win_amd64.whl", hash = "sha256:09cd618b42b6e042140c3c15792942c4a2fd259ed68cd68f224dfe00ff312f1d"}, - {file = "python_bidi-0.6.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:332506db671bc2ba8ae2591ba48c617a25dd2924a0ae185bc970f9f4e386a55f"}, - {file = "python_bidi-0.6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c066bffffcb66e13fff3e4cc4a9570d744f4b48e54caa0308faf98a0a8dc4570"}, - {file = "python_bidi-0.6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:36fe41cc095045b23bfddc5c48a6aef1674dc32b1d1a52ece3b302a5fb28f33a"}, - {file = "python_bidi-0.6.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:018747edf332240e6400335a10d34c66d7d27e096d05ea0761afb61dc4e750b0"}, - {file = "python_bidi-0.6.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6aae20bb48ff0ccc4bd3ede085bfb781918c938f2cc09867c879d23252d18775"}, - {file = "python_bidi-0.6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:600236fbce5e43348c71de7327dd88f1484358cdad04ee742752a289569f1d82"}, - {file = "python_bidi-0.6.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e9dc0ac10d7728b17ce9ac22d09918bd6f8b64e9b92a5199cb9a9cf29016dd41"}, - {file = "python_bidi-0.6.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6cbccc3484f6c30a682960fdde2ede944d9bc6b9ed8b8ead683e97af066ebe07"}, - {file = "python_bidi-0.6.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:de1b836e0d8134b8331423a5c76c886b5c25eed8d6f9e5dcac7767feba3d052c"}, - {file = "python_bidi-0.6.0-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:cfb45fecb08bb070dc0e62e6ee8249bbb6b6622181756fae2cff60c8eb5850e9"}, - {file = "python_bidi-0.6.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:fb6b3545296ff4c1a6cef465359f6ed9b32cfc4bd3d8a6633f0234476414e387"}, - {file = "python_bidi-0.6.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:e511838eeff5b76f053afe0b936920e5aca91ea597c43caa196e0c6b5cd0d623"}, - {file = "python_bidi-0.6.0-cp39-none-win32.whl", hash = "sha256:de171a2e7671dc5d19f957054e9f8fba997a98caebfcd3d386c4189d23e0d73f"}, - {file = "python_bidi-0.6.0-cp39-none-win_amd64.whl", hash = "sha256:75243e17201831d8f626be57a1ba52fe4f62594eb8bc777e2a81785a93745466"}, - {file = "python_bidi-0.6.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a75ca41875c8829295931eb2f0f380da50c1448d64e3c28c3db4966afdfbc53f"}, - {file = "python_bidi-0.6.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4700f71dc553cb65dc8b132de1ee542ae6c518fa8e942b5e0d3ba07bca054a42"}, - {file = "python_bidi-0.6.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:13b7a10fa19b949132581dfd621ca800030cf21dc06a13366371a6e71309c6f6"}, - {file = "python_bidi-0.6.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ef186911e27c968be69cdbaccaa378f0fa129b224a2854ec491963632ea37ff1"}, - {file = "python_bidi-0.6.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1af301fe73f76c46e3ddd21b0a3c4467b01e0c3a94f69cd185a78db6810300e8"}, - {file = "python_bidi-0.6.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:bf6e718dbbf15f4fb24fd199ebe089c8a28ed712aedc7757d7730741e28cff27"}, - {file = "python_bidi-0.6.0-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:30214494b84c49247624c162d9141e7fc8dbc3957d21959feb92703cb87b474d"}, - {file = "python_bidi-0.6.0-pp310-pypy310_pp73-musllinux_1_2_armv7l.whl", hash = "sha256:5753d3204d13189a12a298c82c8c23eba94c252ee9aab3dddb7014b0cd4f37b1"}, - {file = "python_bidi-0.6.0-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:959fcb0554ca4136044bbb308654aa88c3ffa9031a6c6b074b29221dbb6d553f"}, - {file = "python_bidi-0.6.0-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:6ca12af1e09355d6296730bd44adf5023a8b696ce77a9a04f35f56b10cd60428"}, - {file = "python_bidi-0.6.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f13deaa892d5dbc742b4ca4f96e9f6255d5f33b4bbfb04c4c77afc4c1b36378a"}, - {file = "python_bidi-0.6.0-pp37-pypy37_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:96b47ad6492fc3f17a8f9335ae76bafec6ae4769138da34c58f493618f653e78"}, - {file = "python_bidi-0.6.0-pp37-pypy37_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:56cb6986f7fe97a425c6914d465f7098223263a498a3e48c49dbffc9ebe46ee3"}, - {file = "python_bidi-0.6.0-pp37-pypy37_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b90235b0c665483821fd5ab4a0d4db59025f12769dbd4fa1e2d6b0616e1178d3"}, - {file = "python_bidi-0.6.0-pp37-pypy37_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:9ca5506abe6b3a03f139703deec86852e88c13ad32d6b66109b5630539f9f386"}, - {file = "python_bidi-0.6.0-pp37-pypy37_pp73-musllinux_1_2_armv7l.whl", hash = "sha256:5f6f04dbd30a667a3dd61356ca9e97d33cbdd8fbbe953c5ad3ab86b6901c73e7"}, - {file = "python_bidi-0.6.0-pp37-pypy37_pp73-musllinux_1_2_i686.whl", hash = "sha256:d63cf8bd056c4ec14ff9d8ee7181543cd758c1f4ce0eea0710fa854e1fede644"}, - {file = "python_bidi-0.6.0-pp37-pypy37_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:17a9db493051792e71a813dd09a4c555e475cd874bf7594429be9c0cf16e270f"}, - {file = "python_bidi-0.6.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:618a70c0183372e23756766db135930507093e95f386c429187f9ae29c4d965f"}, - {file = "python_bidi-0.6.0-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4b880e8e75bea3136c5a44960365665d32abdee204024fd77e9a9975809c72ae"}, - {file = "python_bidi-0.6.0-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f20e5592534f3b06b2beb0a38f1df8ce1fb2c8f628573381637ca53083dd4648"}, - {file = "python_bidi-0.6.0-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:16c8a3284bf874b6c38f8cb10f0f48fd1d7c198cf0a4937d39e73e460096c652"}, - {file = "python_bidi-0.6.0-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:e079ac4ece790fcc4f1a4fcd0b4bfaa290482f2f04bd69936a93aff6a0ce9719"}, - {file = "python_bidi-0.6.0-pp38-pypy38_pp73-musllinux_1_2_armv7l.whl", hash = "sha256:f48486bc16d37361cd21b32a27b2109cb45372cf8e1b4cc59809f2ae4634ad22"}, - {file = "python_bidi-0.6.0-pp38-pypy38_pp73-musllinux_1_2_i686.whl", hash = "sha256:895fe7e1d67acff2d313184148a1414b50fbbf2148df272a5e9a84f8196f2d3e"}, - {file = "python_bidi-0.6.0-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:18c2d0bffafa590629a5e95ee079c491954ee2249350d62db4497164f7d3f4cf"}, - {file = "python_bidi-0.6.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d3dbde6d205610653d17cc5bb785c5d5da5af6ae634e5daf92a7a6e75a50f94a"}, - {file = "python_bidi-0.6.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:132954f67e3af38ca7c7cd85bde6a49c89bd470ba01603acbd0baf8048acbab5"}, - {file = "python_bidi-0.6.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c2c8c79faafbc5852db896f8d488090530cb1421765528305a6678694a1961f0"}, - {file = "python_bidi-0.6.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5a5c0191270c2438953329af2116fdee021c20da3a33f418303f1bf9859984eb"}, - {file = "python_bidi-0.6.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c652bab5b2d978f9abf324e9c1de50cb175599402b5ec14b7553780f68af597d"}, - {file = "python_bidi-0.6.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:657ac6ddf02d40de633d616d8d052e616169787d535902e3a4240738ab902a0c"}, - {file = "python_bidi-0.6.0-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:8096c8a8d7498750cf54a55de44eb689a236ae8d3b47b642e25e55cfbcff6e4e"}, - {file = "python_bidi-0.6.0-pp39-pypy39_pp73-musllinux_1_2_armv7l.whl", hash = "sha256:0458e2f2d24c115f5f103aa54d9fe8b98c5197b85b616b0db68aaba32908c28c"}, - {file = "python_bidi-0.6.0-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:ce855e6be84e0b6e00286c62e2dd1ccb505beaeb78f969e270aec5998e53e4fb"}, - {file = "python_bidi-0.6.0-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:bb3c0dfc5131e706d46df50547ce51ff92722431b6d8d81142ea208374550b3e"}, - {file = "python_bidi-0.6.0.tar.gz", hash = "sha256:0665a0826074a9ff8d29640c0c405a2710b671db14fcc8b1c3ee6615ff10b837"}, + {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]