Skip to content

Commit

Permalink
Add username and site information to Query Result object. This will a…
Browse files Browse the repository at this point in the history
…llow whoever defines a Query Notify object to have all of the context required to do their notifications.
  • Loading branch information
hoadlck committed Apr 19, 2020
1 parent c07d396 commit ae2fd7a
Show file tree
Hide file tree
Showing 2 changed files with 50 additions and 13 deletions.
19 changes: 15 additions & 4 deletions sherlock/result.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,14 +31,22 @@ class QueryResult():
Describes result of query about a given username.
"""
def __init__(self, status, query_time=None, context=None):
def __init__(self, username, site_name, site_url_user, status,
query_time=None, context=None):
"""Create Query Result Object.
Contains information about a specific method of detecting usernames on
a given type of web sites.
Keyword Arguments:
self -- This object.
username -- String indicating username that query result
was about.
site_name -- String which identifies site.
site_url_user -- String containing URL for username on site.
NOTE: The site may or may not exist: this
just indicates what the name would
be, if it existed.
status -- Enumeration of type QueryStatus() indicating
the status of the query.
query_time -- Time (in seconds) required to perform query.
Expand All @@ -53,9 +61,12 @@ def __init__(self, status, query_time=None, context=None):
Nothing.
"""

self.status = status
self.query_time = query_time
self.context = context
self.username = username
self.site_name = site_name
self.site_url_user = site_url_user
self.status = status
self.query_time = query_time
self.context = context

return

Expand Down
44 changes: 35 additions & 9 deletions sherlock/sherlock.py
Original file line number Diff line number Diff line change
Expand Up @@ -274,21 +274,26 @@ def sherlock(username, site_data, query_notify, verbose=False,
# Override/append any extra headers required by a given site.
headers.update(net_info["headers"])

# URL of user on site (if it exists)
url = net_info["url"].format(username)

# Don't make request if username is invalid for the site
regex_check = net_info.get("regexCheck")
if regex_check and re.search(regex_check, username) is None:
# No need to do the check at the site: this user name is not allowed.
if (print_output == True) and not print_found_only:
print_invalid(social_network, "Illegal Username Format For This Site!", color)

results_site['status'] = QueryResult(QueryStatus.ILLEGAL)
results_site['status'] = QueryResult(username,
social_network,
url,
QueryStatus.ILLEGAL)
results_site["url_user"] = ""
results_site['http_status'] = ""
results_site['response_text'] = ""
query_notify.update(results_site['status'])
else:
# URL of user on site (if it exists)
url = net_info["url"].format(username)
results_site["url_user"] = url
url_probe = net_info.get("urlProbe")
if url_probe is None:
Expand Down Expand Up @@ -381,25 +386,40 @@ def sherlock(username, site_data, query_notify, verbose=False,
response_text = ""

if error_text is not None:
result = QueryResult(QueryStatus.UNKNOWN,
result = QueryResult(username,
social_network,
url,
QueryStatus.UNKNOWN,
query_time=response_time,
context=error_text)
elif error_type == "message":
error = net_info.get("errorMsg")
# Checks if the error message is in the HTML
if not error in r.text:
result = QueryResult(QueryStatus.CLAIMED,
result = QueryResult(username,
social_network,
url,
QueryStatus.CLAIMED,
query_time=response_time)
else:
result = QueryResult(QueryStatus.AVAILABLE,
result = QueryResult(username,
social_network,
url,
QueryStatus.AVAILABLE,
query_time=response_time)
elif error_type == "status_code":
# Checks if the status code of the response is 2XX
if not r.status_code >= 300 or r.status_code < 200:
result = QueryResult(QueryStatus.CLAIMED,
result = QueryResult(username,
social_network,
url,
QueryStatus.CLAIMED,
query_time=response_time)
else:
result = QueryResult(QueryStatus.AVAILABLE,
result = QueryResult(username,
social_network,
url,
QueryStatus.AVAILABLE,
query_time=response_time)
elif error_type == "response_url":
# For this detection method, we have turned off the redirect.
Expand All @@ -408,10 +428,16 @@ def sherlock(username, site_data, query_notify, verbose=False,
# code indicates that the request was successful (i.e. no 404, or
# forward to some odd redirect).
if 200 <= r.status_code < 300:
result = QueryResult(QueryStatus.CLAIMED,
result = QueryResult(username,
social_network,
url,
QueryStatus.CLAIMED,
query_time=response_time)
else:
result = QueryResult(QueryStatus.AVAILABLE,
result = QueryResult(username,
social_network,
url,
QueryStatus.AVAILABLE,
query_time=response_time)
else:
#It should be impossible to ever get here...
Expand Down

0 comments on commit ae2fd7a

Please sign in to comment.