mirror of
https://github.com/soxoj/maigret.git
synced 2026-05-07 06:24:35 +00:00
Box drawing logic improved, added new settings (#217)
This commit is contained in:
@@ -28,6 +28,7 @@ from .executors import (
|
|||||||
AsyncioSimpleExecutor,
|
AsyncioSimpleExecutor,
|
||||||
AsyncioProgressbarQueueExecutor,
|
AsyncioProgressbarQueueExecutor,
|
||||||
)
|
)
|
||||||
|
|
||||||
from .result import QueryResult, QueryStatus
|
from .result import QueryResult, QueryStatus
|
||||||
from .sites import MaigretDatabase, MaigretSite
|
from .sites import MaigretDatabase, MaigretSite
|
||||||
from .types import QueryOptions, QueryResultWrapper
|
from .types import QueryOptions, QueryResultWrapper
|
||||||
|
|||||||
+24
-20
@@ -252,7 +252,7 @@ def setup_arguments_parser(settings: Settings):
|
|||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
"--with-domains",
|
"--with-domains",
|
||||||
action="store_true",
|
action="store_true",
|
||||||
default=False,
|
default=settings.domain_search,
|
||||||
help="Enable (experimental) feature of checking domains on usernames.",
|
help="Enable (experimental) feature of checking domains on usernames.",
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -264,13 +264,13 @@ def setup_arguments_parser(settings: Settings):
|
|||||||
"--all-sites",
|
"--all-sites",
|
||||||
action="store_true",
|
action="store_true",
|
||||||
dest="all_sites",
|
dest="all_sites",
|
||||||
default=False,
|
default=settings.scan_all_sites,
|
||||||
help="Use all sites for scan.",
|
help="Use all sites for scan.",
|
||||||
)
|
)
|
||||||
filter_group.add_argument(
|
filter_group.add_argument(
|
||||||
"--top-sites",
|
"--top-sites",
|
||||||
action="store",
|
action="store",
|
||||||
default=500,
|
default=settings.top_sites_count,
|
||||||
metavar="N",
|
metavar="N",
|
||||||
type=int,
|
type=int,
|
||||||
help="Count of sites for scan ranked by Alexa Top (default: 500).",
|
help="Count of sites for scan ranked by Alexa Top (default: 500).",
|
||||||
@@ -283,13 +283,13 @@ def setup_arguments_parser(settings: Settings):
|
|||||||
action="append",
|
action="append",
|
||||||
metavar='SITE_NAME',
|
metavar='SITE_NAME',
|
||||||
dest="site_list",
|
dest="site_list",
|
||||||
default=[],
|
default=settings.scan_sites_list,
|
||||||
help="Limit analysis to just the specified sites (multiple option).",
|
help="Limit analysis to just the specified sites (multiple option).",
|
||||||
)
|
)
|
||||||
filter_group.add_argument(
|
filter_group.add_argument(
|
||||||
"--use-disabled-sites",
|
"--use-disabled-sites",
|
||||||
action="store_true",
|
action="store_true",
|
||||||
default=False,
|
default=settings.scan_disabled_sites,
|
||||||
help="Use disabled sites to search (may cause many false positives).",
|
help="Use disabled sites to search (may cause many false positives).",
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -316,7 +316,7 @@ def setup_arguments_parser(settings: Settings):
|
|||||||
modes_group.add_argument(
|
modes_group.add_argument(
|
||||||
"--self-check",
|
"--self-check",
|
||||||
action="store_true",
|
action="store_true",
|
||||||
default=False,
|
default=settings.self_check_enabled,
|
||||||
help="Do self check for sites and database and disable non-working ones.",
|
help="Do self check for sites and database and disable non-working ones.",
|
||||||
)
|
)
|
||||||
modes_group.add_argument(
|
modes_group.add_argument(
|
||||||
@@ -333,14 +333,14 @@ def setup_arguments_parser(settings: Settings):
|
|||||||
"--print-not-found",
|
"--print-not-found",
|
||||||
action="store_true",
|
action="store_true",
|
||||||
dest="print_not_found",
|
dest="print_not_found",
|
||||||
default=False,
|
default=settings.print_not_found,
|
||||||
help="Print sites where the username was not found.",
|
help="Print sites where the username was not found.",
|
||||||
)
|
)
|
||||||
output_group.add_argument(
|
output_group.add_argument(
|
||||||
"--print-errors",
|
"--print-errors",
|
||||||
action="store_true",
|
action="store_true",
|
||||||
dest="print_check_errors",
|
dest="print_check_errors",
|
||||||
default=False,
|
default=settings.print_check_errors,
|
||||||
help="Print errors messages: connection, captcha, site country ban, etc.",
|
help="Print errors messages: connection, captcha, site country ban, etc.",
|
||||||
)
|
)
|
||||||
output_group.add_argument(
|
output_group.add_argument(
|
||||||
@@ -372,14 +372,14 @@ def setup_arguments_parser(settings: Settings):
|
|||||||
"--no-color",
|
"--no-color",
|
||||||
action="store_true",
|
action="store_true",
|
||||||
dest="no_color",
|
dest="no_color",
|
||||||
default=False,
|
default=(not settings.colored_print),
|
||||||
help="Don't color terminal output",
|
help="Don't color terminal output",
|
||||||
)
|
)
|
||||||
output_group.add_argument(
|
output_group.add_argument(
|
||||||
"--no-progressbar",
|
"--no-progressbar",
|
||||||
action="store_true",
|
action="store_true",
|
||||||
dest="no_progressbar",
|
dest="no_progressbar",
|
||||||
default=False,
|
default=(not settings.show_progressbar),
|
||||||
help="Don't show progressbar.",
|
help="Don't show progressbar.",
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -391,7 +391,7 @@ def setup_arguments_parser(settings: Settings):
|
|||||||
"--txt",
|
"--txt",
|
||||||
action="store_true",
|
action="store_true",
|
||||||
dest="txt",
|
dest="txt",
|
||||||
default=False,
|
default=settings.txt_report,
|
||||||
help="Create a TXT report (one report per username).",
|
help="Create a TXT report (one report per username).",
|
||||||
)
|
)
|
||||||
report_group.add_argument(
|
report_group.add_argument(
|
||||||
@@ -399,7 +399,7 @@ def setup_arguments_parser(settings: Settings):
|
|||||||
"--csv",
|
"--csv",
|
||||||
action="store_true",
|
action="store_true",
|
||||||
dest="csv",
|
dest="csv",
|
||||||
default=False,
|
default=settings.csv_report,
|
||||||
help="Create a CSV report (one report per username).",
|
help="Create a CSV report (one report per username).",
|
||||||
)
|
)
|
||||||
report_group.add_argument(
|
report_group.add_argument(
|
||||||
@@ -407,7 +407,7 @@ def setup_arguments_parser(settings: Settings):
|
|||||||
"--html",
|
"--html",
|
||||||
action="store_true",
|
action="store_true",
|
||||||
dest="html",
|
dest="html",
|
||||||
default=False,
|
default=settings.html_report,
|
||||||
help="Create an HTML report file (general report on all usernames).",
|
help="Create an HTML report file (general report on all usernames).",
|
||||||
)
|
)
|
||||||
report_group.add_argument(
|
report_group.add_argument(
|
||||||
@@ -415,7 +415,7 @@ def setup_arguments_parser(settings: Settings):
|
|||||||
"--xmind",
|
"--xmind",
|
||||||
action="store_true",
|
action="store_true",
|
||||||
dest="xmind",
|
dest="xmind",
|
||||||
default=False,
|
default=settings.xmind_report,
|
||||||
help="Generate an XMind 8 mindmap report (one report per username).",
|
help="Generate an XMind 8 mindmap report (one report per username).",
|
||||||
)
|
)
|
||||||
report_group.add_argument(
|
report_group.add_argument(
|
||||||
@@ -423,7 +423,7 @@ def setup_arguments_parser(settings: Settings):
|
|||||||
"--pdf",
|
"--pdf",
|
||||||
action="store_true",
|
action="store_true",
|
||||||
dest="pdf",
|
dest="pdf",
|
||||||
default=False,
|
default=settings.pdf_report,
|
||||||
help="Generate a PDF report (general report on all usernames).",
|
help="Generate a PDF report (general report on all usernames).",
|
||||||
)
|
)
|
||||||
report_group.add_argument(
|
report_group.add_argument(
|
||||||
@@ -431,7 +431,7 @@ def setup_arguments_parser(settings: Settings):
|
|||||||
"--graph",
|
"--graph",
|
||||||
action="store_true",
|
action="store_true",
|
||||||
dest="graph",
|
dest="graph",
|
||||||
default=False,
|
default=settings.graph_report,
|
||||||
help="Generate a graph report (general report on all usernames).",
|
help="Generate a graph report (general report on all usernames).",
|
||||||
)
|
)
|
||||||
report_group.add_argument(
|
report_group.add_argument(
|
||||||
@@ -440,7 +440,7 @@ def setup_arguments_parser(settings: Settings):
|
|||||||
action="store",
|
action="store",
|
||||||
metavar='TYPE',
|
metavar='TYPE',
|
||||||
dest="json",
|
dest="json",
|
||||||
default='',
|
default=settings.json_report_type,
|
||||||
choices=SUPPORTED_JSON_REPORT_FORMATS,
|
choices=SUPPORTED_JSON_REPORT_FORMATS,
|
||||||
help=f"Generate a JSON report of specific type: {', '.join(SUPPORTED_JSON_REPORT_FORMATS)}"
|
help=f"Generate a JSON report of specific type: {', '.join(SUPPORTED_JSON_REPORT_FORMATS)}"
|
||||||
" (one report per username).",
|
" (one report per username).",
|
||||||
@@ -448,7 +448,7 @@ def setup_arguments_parser(settings: Settings):
|
|||||||
|
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
"--reports-sorting",
|
"--reports-sorting",
|
||||||
default='default',
|
default=settings.report_sorting,
|
||||||
choices=('default', 'data'),
|
choices=('default', 'data'),
|
||||||
help="Method of results sorting in reports (default: in order of getting the result)",
|
help="Method of results sorting in reports (default: in order of getting the result)",
|
||||||
)
|
)
|
||||||
@@ -689,7 +689,9 @@ async def main():
|
|||||||
username = report_context['username']
|
username = report_context['username']
|
||||||
|
|
||||||
if args.html:
|
if args.html:
|
||||||
filename = report_filepath_tpl.format(username=username, postfix='_plain.html')
|
filename = report_filepath_tpl.format(
|
||||||
|
username=username, postfix='_plain.html'
|
||||||
|
)
|
||||||
save_html_report(filename, report_context)
|
save_html_report(filename, report_context)
|
||||||
query_notify.warning(f'HTML report on all usernames saved in {filename}')
|
query_notify.warning(f'HTML report on all usernames saved in {filename}')
|
||||||
|
|
||||||
@@ -699,7 +701,9 @@ async def main():
|
|||||||
query_notify.warning(f'PDF report on all usernames saved in {filename}')
|
query_notify.warning(f'PDF report on all usernames saved in {filename}')
|
||||||
|
|
||||||
if args.graph:
|
if args.graph:
|
||||||
filename = report_filepath_tpl.format(username=username, postfix='_graph.html')
|
filename = report_filepath_tpl.format(
|
||||||
|
username=username, postfix='_graph.html'
|
||||||
|
)
|
||||||
save_graph_report(filename, general_results, db)
|
save_graph_report(filename, general_results, db)
|
||||||
query_notify.warning(f'Graph report on all usernames saved in {filename}')
|
query_notify.warning(f'Graph report on all usernames saved in {filename}')
|
||||||
|
|
||||||
|
|||||||
@@ -13078,7 +13078,7 @@
|
|||||||
"us"
|
"us"
|
||||||
],
|
],
|
||||||
"headers": {
|
"headers": {
|
||||||
"authorization": "Bearer BQB8QPkkvz_PhWGy4sSY4ijssYjumEHJgJJBFu3VX2Sm4XIoT9jp0eFZrYL3TayY4QZGHmMiz3BCPLcAth4"
|
"authorization": "Bearer BQB8pjfUq_eeuyy-yvDy5ptoq01QtMbLG0uPW_0t8La7CHd8l4pN3iY4rm5ZBkCEdeWmXyF313-0w9FSp1E"
|
||||||
},
|
},
|
||||||
"errors": {
|
"errors": {
|
||||||
"Spotify is currently not available in your country.": "Access denied in your country, use proxy/vpn"
|
"Spotify is currently not available in your country.": "Access denied in your country, use proxy/vpn"
|
||||||
@@ -14913,7 +14913,7 @@
|
|||||||
"video"
|
"video"
|
||||||
],
|
],
|
||||||
"headers": {
|
"headers": {
|
||||||
"Authorization": "jwt eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2MzU2OTI0NjAsInVzZXJfaWQiOm51bGwsImFwcF9pZCI6NTg0NzksInNjb3BlcyI6InB1YmxpYyIsInRlYW1fdXNlcl9pZCI6bnVsbH0.KZHo96wUe5__rTqZQqAWiJKPKOy2-sjyxRjhOuuhyEc"
|
"Authorization": "jwt eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2MzY0MDY3NjAsInVzZXJfaWQiOm51bGwsImFwcF9pZCI6NTg0NzksInNjb3BlcyI6InB1YmxpYyIsInRlYW1fdXNlcl9pZCI6bnVsbH0.7tNEeKdpPtvT3k4G-7neQhO1SniqondSkOQ50SUkuNc"
|
||||||
},
|
},
|
||||||
"activation": {
|
"activation": {
|
||||||
"url": "https://vimeo.com/_rv/viewer",
|
"url": "https://vimeo.com/_rv/viewer",
|
||||||
|
|||||||
@@ -26,5 +26,23 @@
|
|||||||
"reports_path": "reports",
|
"reports_path": "reports",
|
||||||
"proxy_url": null,
|
"proxy_url": null,
|
||||||
"tor_proxy_url": "socks5://127.0.0.1:9050",
|
"tor_proxy_url": "socks5://127.0.0.1:9050",
|
||||||
"i2p_proxy_url": "http://127.0.0.1:4444"
|
"i2p_proxy_url": "http://127.0.0.1:4444",
|
||||||
|
"domain_search": false,
|
||||||
|
"scan_all_sites": false,
|
||||||
|
"top_sites_count": 500,
|
||||||
|
"scan_disabled_sites": false,
|
||||||
|
"scan_sites_list": [],
|
||||||
|
"self_check_enabled": false,
|
||||||
|
"print_not_found": false,
|
||||||
|
"print_check_errors": false,
|
||||||
|
"colored_print": true,
|
||||||
|
"show_progressbar": true,
|
||||||
|
"report_sorting": "default",
|
||||||
|
"json_report_type": "",
|
||||||
|
"txt_report": false,
|
||||||
|
"csv_report": false,
|
||||||
|
"xmind_report": false,
|
||||||
|
"graph_report": false,
|
||||||
|
"pdf_report": false,
|
||||||
|
"html_report": false
|
||||||
}
|
}
|
||||||
@@ -24,6 +24,24 @@ class Settings:
|
|||||||
proxy_url: str
|
proxy_url: str
|
||||||
tor_proxy_url: str
|
tor_proxy_url: str
|
||||||
i2p_proxy_url: str
|
i2p_proxy_url: str
|
||||||
|
domain_search: bool
|
||||||
|
scan_all_sites: bool
|
||||||
|
top_sites_count: int
|
||||||
|
scan_disabled_sites: bool
|
||||||
|
scan_sites_list: List
|
||||||
|
self_check_enabled: bool
|
||||||
|
print_not_found: bool
|
||||||
|
print_check_errors: bool
|
||||||
|
colored_print: bool
|
||||||
|
show_progressbar: bool
|
||||||
|
report_sorting: str
|
||||||
|
json_report_type: str
|
||||||
|
txt_report: bool
|
||||||
|
csv_report: bool
|
||||||
|
xmind_report: bool
|
||||||
|
pdf_report: bool
|
||||||
|
html_report: bool
|
||||||
|
graph_report: bool
|
||||||
|
|
||||||
# submit mode settings
|
# submit mode settings
|
||||||
presence_strings: list
|
presence_strings: list
|
||||||
|
|||||||
+10
-2
@@ -1,3 +1,4 @@
|
|||||||
|
# coding: utf8
|
||||||
import ast
|
import ast
|
||||||
import difflib
|
import difflib
|
||||||
import re
|
import re
|
||||||
@@ -73,15 +74,22 @@ def ascii_data_display(data: str) -> Any:
|
|||||||
|
|
||||||
|
|
||||||
def get_dict_ascii_tree(items, prepend="", new_line=True):
|
def get_dict_ascii_tree(items, prepend="", new_line=True):
|
||||||
|
new_result = b'\xe2\x94\x9c'.decode()
|
||||||
|
new_line = b'\xe2\x94\x80'.decode()
|
||||||
|
last_result = b'\xe2\x94\x94'.decode()
|
||||||
|
skip_result = b'\xe2\x94\x82'.decode()
|
||||||
|
|
||||||
text = ""
|
text = ""
|
||||||
for num, item in enumerate(items):
|
for num, item in enumerate(items):
|
||||||
box_symbol = "┣╸" if num != len(items) - 1 else "┗╸"
|
box_symbol = (
|
||||||
|
new_result + new_line if num != len(items) - 1 else last_result + new_line
|
||||||
|
)
|
||||||
|
|
||||||
if type(item) == tuple:
|
if type(item) == tuple:
|
||||||
field_name, field_value = item
|
field_name, field_value = item
|
||||||
if field_value.startswith("['"):
|
if field_value.startswith("['"):
|
||||||
is_last_item = num == len(items) - 1
|
is_last_item = num == len(items) - 1
|
||||||
prepend_symbols = " " * 3 if is_last_item else " ┃ "
|
prepend_symbols = " " * 3 if is_last_item else f" {skip_result} "
|
||||||
data = ascii_data_display(field_value)
|
data = ascii_data_display(field_value)
|
||||||
field_value = get_dict_ascii_tree(data, prepend_symbols)
|
field_value = get_dict_ascii_tree(data, prepend_symbols)
|
||||||
text += f"\n{prepend}{box_symbol}{field_name}: {field_value}"
|
text += f"\n{prepend}{box_symbol}{field_name}: {field_value}"
|
||||||
|
|||||||
+13
-13
@@ -123,19 +123,19 @@ def test_get_dict_ascii_tree():
|
|||||||
assert (
|
assert (
|
||||||
ascii_tree
|
ascii_tree
|
||||||
== """
|
== """
|
||||||
┣╸uid: dXJpOm5vZGU6VXNlcjoyNjQwMzQxNQ==
|
├─uid: dXJpOm5vZGU6VXNlcjoyNjQwMzQxNQ==
|
||||||
┣╸legacy_id: 26403415
|
├─legacy_id: 26403415
|
||||||
┣╸username: alexaimephotographycars
|
├─username: alexaimephotographycars
|
||||||
┣╸name: Alex Aimé
|
├─name: Alex Aimé
|
||||||
┣╸links:
|
├─links:
|
||||||
┃ ┗╸ www.instagram.com/street.reality.photography/
|
│ └─ www.instagram.com/street.reality.photography/
|
||||||
┣╸created_at: 2018-05-04T10:17:01.000+0000
|
├─created_at: 2018-05-04T10:17:01.000+0000
|
||||||
┣╸image: https://drscdn.500px.org/user_avatar/26403415/q%3D85_w%3D300_h%3D300/v2?webp=true&v=2&sig=0235678a4f7b65e007e864033ebfaf5ef6d87fad34f80a8639d985320c20fe3b
|
├─image: https://drscdn.500px.org/user_avatar/26403415/q%3D85_w%3D300_h%3D300/v2?webp=true&v=2&sig=0235678a4f7b65e007e864033ebfaf5ef6d87fad34f80a8639d985320c20fe3b
|
||||||
┣╸image_bg: https://drscdn.500px.org/user_cover/26403415/q%3D65_m%3D2048/v2?webp=true&v=1&sig=bea411fb158391a4fdad498874ff17088f91257e59dfb376ff67e3a44c3a4201
|
├─image_bg: https://drscdn.500px.org/user_cover/26403415/q%3D65_m%3D2048/v2?webp=true&v=1&sig=bea411fb158391a4fdad498874ff17088f91257e59dfb376ff67e3a44c3a4201
|
||||||
┣╸website: www.instagram.com/street.reality.photography/
|
├─website: www.instagram.com/street.reality.photography/
|
||||||
┣╸facebook_link: www.instagram.com/street.reality.photography/
|
├─facebook_link: www.instagram.com/street.reality.photography/
|
||||||
┣╸instagram_username: Street.Reality.Photography
|
├─instagram_username: Street.Reality.Photography
|
||||||
┗╸twitter_username: Alexaimephotogr"""
|
└─twitter_username: Alexaimephotogr"""
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user