diff --git a/.github/ISSUE_TEMPLATE/bug-report.md b/.github/ISSUE_TEMPLATE/bug-report.md new file mode 100644 index 000000000..f7f9b8227 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug-report.md @@ -0,0 +1,38 @@ +--- +name: Bug report +about: Report a bug in Sherlock's functionality +title: '' +labels: bug +assignees: '' + +--- + + + + +## Checklist + + +- [ ] I'm reporting a bug in Sherlock's functionality +- [ ] The bug I'm reporting is not a false positive or a false negative +- [ ] I've verified that I'm running the latest version of Sherlock +- [ ] I've checked for similar bug reports including closed ones +- [ ] I've checked for pull requests that attempt to fix this bug + +## Description + + +WRITE DESCRIPTION HERE diff --git a/.github/ISSUE_TEMPLATE/feature-request.md b/.github/ISSUE_TEMPLATE/feature-request.md new file mode 100644 index 000000000..67ec7ecf0 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature-request.md @@ -0,0 +1,32 @@ +--- +name: Feature request +about: Request a new functionality for Sherlock +title: '' +labels: enhancement +assignees: '' + +--- + + + +## Checklist + +- [ ] I'm reporting a feature request +- [ ] I've checked for similar feature requests including closed ones + +## Description + + +WRITE DESCRIPTION HERE diff --git a/.github/ISSUE_TEMPLATE/question.md b/.github/ISSUE_TEMPLATE/question.md new file mode 100644 index 000000000..b8a0db3b6 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/question.md @@ -0,0 +1,33 @@ +--- +name: Question +about: Ask us a question +title: '' +labels: question +assignees: '' + +--- + + + +## Checklist + +- [ ] I'm asking a question regarding Sherlock +- [ ] My question is not a tech support question. + +**We are not your tech support**. +If you have questions related to `pip`, `git`, or something that is not related to Sherlock, please ask them on [StackOverflow](https://stackoverflow.com/) or [r/learnpython](https://www.reddit.com/r/learnpython/) + + +## Question + +ASK YOUR QUESTION HERE diff --git a/.github/ISSUE_TEMPLATE/reporting-false-negative.md b/.github/ISSUE_TEMPLATE/reporting-false-negative.md new file mode 100644 index 000000000..82ba13deb --- /dev/null +++ b/.github/ISSUE_TEMPLATE/reporting-false-negative.md @@ -0,0 +1,34 @@ +--- +name: Reporting false negative +about: Reporting a site that is returning false positives +title: '' +labels: false negative +assignees: '' + +--- + + + +## Checklist + +- [ ] I'm reporting a website that is returning **false negative** results +- [ ] I've checked for similar site support requests including closed ones +- [ ] I've checked for pull requests attempting to fix this false negative +- [ ] I'm only reporting **one** site (create a seperate issue for each site) + +## Description + + +WRITE DESCRIPTION HERE diff --git a/.github/ISSUE_TEMPLATE/reporting-false-positive.md b/.github/ISSUE_TEMPLATE/reporting-false-positive.md new file mode 100644 index 000000000..045f66f49 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/reporting-false-positive.md @@ -0,0 +1,34 @@ +--- +name: Reporting false positive +about: Reporting a site that is returning false positives +title: '' +labels: false positive +assignees: '' + +--- + + + +## Checklist + +- [ ] I'm reporting a website that is returning **false positive** results +- [ ] I've checked for similar site support requests including closed ones +- [ ] I've checked for pull requests attempting to fix this false positive +- [ ] I'm only reporting **one** site (create a seperate issue for each site) + +## Description + + +WRITE DESCRIPTION HERE diff --git a/.github/ISSUE_TEMPLATE/site-support-request.md b/.github/ISSUE_TEMPLATE/site-support-request.md new file mode 100644 index 000000000..4b3305ad7 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/site-support-request.md @@ -0,0 +1,37 @@ +--- +name: Site support request +about: Request support for a new site +title: '' +labels: site support request +assignees: '' + +--- + + + +## Checklist + + +- [ ] I'm requesting support for a new site +- [ ] I've checked for similar site support requests including closed ones +- [ ] I've checked that the site I am requesting has not been removed in the past and is not documented in [removed_sites.md](https://github.com/sherlock-project/sherlock/blob/master/removed_sites.md) +- [ ] The site I am requesting support for is not a pornographic website +- [ ] I'm only requesting support of **one** website (create a seperate issue for each site) + +## Description + + +URL: diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index d933b6c16..8c8f712d9 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -26,8 +26,8 @@ the site may be removed from the list. The file contains sites that were included at one time in Sherlock, but had to be removed for one reason or another. -In regards to adult sites (e.g. PornHub), we have agreed to not include them in Sherlock. -However, we do understand that some users desires this support. The data.json file is easy to add to, +In regards to adult sites (e.g. Pornhub), we have agreed to not include them in Sherlock. +However, we do understand that some users desire this support. The data.json file is easy to add to, so users will be able to maintain their own forks to have this support. This is not ideal. Maybe there could be another repo with an adult data.json? That would avoid forks getting out of date. diff --git a/removed_sites.json b/removed_sites.json index 6f00a8cc1..660fa5a2f 100644 --- a/removed_sites.json +++ b/removed_sites.json @@ -48,22 +48,6 @@ "username_claimed": "blue", "username_unclaimed": "noonewouldeverusethis7" }, - "Codepen": { - "errorType": "status_code", - "rank": 1359, - "url": "https://codepen.io/{}", - "urlMain": "https://codepen.io/", - "username_claimed": "blue", - "username_unclaimed": "noonewouldeverusethis7" - }, - "ColourLovers": { - "errorType": "status_code", - "rank": 21271, - "url": "https://www.colourlovers.com/lover/{}", - "urlMain": "https://www.colourlovers.com/", - "username_claimed": "blue", - "username_unclaimed": "noonewouldeverusethis7" - }, "EVE Online": { "errorType": "response_url", "errorUrl": "https://eveonline.com", @@ -113,14 +97,6 @@ "username_claimed": "blue", "username_unclaimed": "noonewouldeverusethis7" }, - "Imgur": { - "errorType": "status_code", - "rank": 74, - "url": "https://imgur.com/user/{}", - "urlMain": "https://imgur.com/", - "username_claimed": "blue", - "username_unclaimed": "noonewouldeverusethis7" - }, "Investing.com": { "errorType": "status_code", "rank": 196, @@ -372,14 +348,14 @@ "username_claimed": "deepigoyal", "username_unclaimed": "noonewouldeverusethis7" }, - "mixer.com": { - "errorType": "status_code", - "rank": 1544, - "url": "https://mixer.com/{}", - "urlMain": "https://mixer.com/", - "urlProbe": "https://mixer.com/api/v1/channels/{}", - "username_claimed": "blue", - "username_unclaimed": "noonewouldeverusethis7" + "mixer.com": { + "errorType": "status_code", + "rank": 1544, + "url": "https://mixer.com/{}", + "urlMain": "https://mixer.com/", + "urlProbe": "https://mixer.com/api/v1/channels/{}", + "username_claimed": "blue", + "username_unclaimed": "noonewouldeverusethis7" }, "KanoWorld": { "errorType": "status_code", @@ -522,13 +498,12 @@ "username_claimed": "blue", "username_unclaimed": "noonewouldeverusethis7" }, - "Instagram": { + "Filmogs": { "errorType": "status_code", - "request_head_only": false, - "url": "https://www.instagram.com/{}", - "urlMain": "https://www.instagram.com/", - "username_claimed": "blue", + "url": "https://www.filmo.gs/users/{}", + "urlMain": "https://www.filmo.gs/", + "username_claimed": "cupparober", "username_unclaimed": "noonewouldeverusethis7" - }, + } } diff --git a/removed_sites.md b/removed_sites.md index 19c4bf85e..d3df058bc 100644 --- a/removed_sites.md +++ b/removed_sites.md @@ -61,24 +61,6 @@ required login before access. "username_unclaimed": "noonewouldeverusethis7" }, ``` -## ColourLovers - -As of 2020-05-24, all usernames are reported as claimed. - -There is an API available (https://www.colourlovers.com/api/), but when -there is no match it returns an empty file. So, changes would have to -happen before the lack of a response could be used to detect. - -``` - "ColourLovers": { - "errorType": "status_code", - "rank": 21271, - "url": "https://www.colourlovers.com/lover/{}", - "urlMain": "https://www.colourlovers.com/", - "username_claimed": "blue", - "username_unclaimed": "noonewouldeverusethis7" - }, -``` ## AdobeForums @@ -295,7 +277,11 @@ HTTP Status. ## Foursquare -Usernames that exist are not detected. +When usage of automated tool is detected. Whole IP is banned from future requests. +There is an error message: + +> Please verify you are a human +> Access to this page has been denied because we believe you are using automation tools to browse the website. ``` "Foursquare": { @@ -355,37 +341,6 @@ Usernames that exist are not detected. Forbidden Request 403 Error. }, ``` -## Codepen - -Usernames that exist are not detected. - -``` - "Codepen": { - "errorType": "status_code", - "rank": 1359, - "url": "https://codepen.io/{}", - "urlMain": "https://codepen.io/", - "username_claimed": "blue", - "username_unclaimed": "noonewouldeverusethis7" - }, -``` - -## Imgur - -Looks like they made some changes to the site. Sherlock says that all -usernames are available. - -``` - "Imgur": { - "errorType": "status_code", - "rank": 74, - "url": "https://imgur.com/user/{}", - "urlMain": "https://imgur.com/", - "username_claimed": "blue", - "username_unclaimed": "noonewouldeverusethis7" - }, -``` - ## PowerShell Gallery Accidentally merged even though the original pull request showed that all @@ -1037,15 +992,19 @@ As of 2020-10-21, PokerStrategy returns false positives. This was reported in #7 }, ``` -## Instagram -As of 2020-10-21, Instagram return false positives. This was reported in #764 +## Filmogs + +Filmogs has closed down. + +> **Filmogs is closed** +> **31-Aug 2020** - We are preparing the last data export and collection of images. It will be published here by 19-Oct 2020. If you have requested an export of your data it will also be emailed to you by 19-Oct 2020. + ``` - "Instagram": { + "Filmogs": { "errorType": "status_code", - "request_head_only": false, - "url": "https://www.instagram.com/{}", - "urlMain": "https://www.instagram.com/", - "username_claimed": "blue", + "url": "https://www.filmo.gs/users/{}", + "urlMain": "https://www.filmo.gs/", + "username_claimed": "cupparober", "username_unclaimed": "noonewouldeverusethis7" }, -``` +``` \ No newline at end of file diff --git a/sherlock/__main__.py b/sherlock/__main__.py index 324102125..91140be5f 100644 --- a/sherlock/__main__.py +++ b/sherlock/__main__.py @@ -22,10 +22,7 @@ python_version = str(sys.version_info[0])+"."+str(sys.version_info[1])+"."+str(sys.version_info[2]) - if major != 3: - print("Sherlock requires Python 3.6+\nYou are using Python %s, which is not supported by Sherlock" % (python_version)) - sys.exit(1) - if minor < 6: + if major != 3 or major == 3 and minor < 6: print("Sherlock requires Python 3.6+\nYou are using Python %s, which is not supported by Sherlock" % (python_version)) sys.exit(1) diff --git a/sherlock/resources/data.json b/sherlock/resources/data.json index 4de68efde..72753214c 100644 --- a/sherlock/resources/data.json +++ b/sherlock/resources/data.json @@ -476,8 +476,7 @@ "username_unclaimed": "noonewouldeverusethis7" }, "EyeEm": { - "errorMsg": "Not Found (404) | EyeEm", - "errorType": "message", + "errorType": "status_code", "url": "https://www.eyeem.com/u/{}", "urlMain": "https://www.eyeem.com/", "username_claimed": "blue", @@ -501,6 +500,7 @@ }, "Facenama": { "errorType": "response_url", + "regexCheck": "^[-a-zA-Z0-9_]+$", "errorUrl": "https://facenama.com/404.html", "url": "https://facenama.com/{}", "urlMain": "https://facenama.com/", @@ -514,13 +514,6 @@ "username_claimed": "Jungypoo", "username_unclaimed": "noonewouldeverusethis7" }, - "Filmogs": { - "errorType": "status_code", - "url": "https://www.filmo.gs/users/{}", - "urlMain": "https://www.filmo.gs/", - "username_claimed": "cupparober", - "username_unclaimed": "noonewouldeverusethis7" - }, "Flickr": { "errorType": "status_code", "url": "https://www.flickr.com/people/{}", @@ -560,6 +553,7 @@ "username_unclaimed": "noonewouldeverusethis" }, "Freelance.habr": { + "regexCheck": "^((?!\\.).)*$", "errorMsg": "
", "errorType": "message", "url": "https://freelance.habr.com/freelancers/{}", @@ -757,6 +751,14 @@ "username_claimed": "adam", "username_unclaimed": "noonewouldeverusethis" }, + "Instagram": { + "errorType": "message", + "errorMsg": "href=\"/static/bundles/metro/HttpErrorPage.js/", + "url": "https://www.instagram.com/{}", + "urlMain": "https://www.instagram.com/", + "username_claimed": "blue", + "username_unclaimed": "noonewouldeverusethis7" + }, "Instructables": { "errorMsg": "404: We're sorry, things break sometimes", "errorType": "message", @@ -779,6 +781,13 @@ "username_claimed": "blue", "username_unclaimed": "noonewouldeverusethis7" }, + "jbzd.com.pl": { + "errorType": "status_code", + "url": "https://jbzd.com.pl/uzytkownik/{}", + "urlMain": "https://jbzd.com.pl/", + "username_claimed": "blue", + "username_unclaimed": "noonewouldeverusethis7" + }, "Jimdo": { "errorType": "status_code", "noPeriod": "True", @@ -897,8 +906,10 @@ "username_unclaimed": "noonewouldeverusethis7" }, "Medium": { - "errorType": "status_code", + "errorType": "message", + "errorMsg": "Tinder | Match. Chat. Date.", + "errorMsg": ["Tinder | Dating, Make Friends & Meet New People", + "Tinder | Match. Chat. Date."], "errorType": "message", "url": "https://www.gotinder.com/@{}", "urlMain": "https://tinder.com/", @@ -1624,6 +1635,7 @@ }, "Vero": { "errorType": "status_code", + "request_head_only": false, "url": "https://vero.co/{}", "urlMain": "https://vero.co/", "username_claimed": "blue", @@ -1645,10 +1657,11 @@ "username_unclaimed": "noonewouldeverusethis7" }, "VirusTotal": { - "errorMsg": "not found", - "errorType": "message", + "errorType": "status_code", "url": "https://www.virustotal.com/ui/users/{}/trusted_users", + "urlProbe": "https://www.virustotal.com/ui/users/{}/avatar", "urlMain": "https://www.virustotal.com/", + "request_head_only": false, "username_claimed": "blue", "username_unclaimed": "noonewouldeverusethis7" }, @@ -1660,9 +1673,9 @@ "username_unclaimed": "noonewouldeverusethis77777" }, "Wattpad": { - "errorMsg": "userError-404", - "errorType": "message", + "errorType": "status_code", "url": "https://www.wattpad.com/user/{}", + "urlProbe": "https://www.wattpad.com/api/v3/users/{}/", "urlMain": "https://www.wattpad.com/", "username_claimed": "Dogstho7951", "username_unclaimed": "noonewouldeverusethis7" @@ -2122,7 +2135,7 @@ "opennet": { "errorMsg": "\u0418\u043c\u044f \u0443\u0447\u0430\u0441\u0442\u043d\u0438\u043a\u0430 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e", "errorType": "message", - "regexCheck": "^[^_]*$", + "regexCheck": "^[^-]*$", "url": "https://www.opennet.ru/~{}", "urlMain": "https://www.opennet.ru/", "username_claimed": "anonismus", @@ -2214,5 +2227,27 @@ "urlMain": "https://uid.me/", "username_claimed": "blue", "username_unclaimed": "noonewouldeverusethis7" + }, + "Imgur": { + "errorType": "status_code", + "urlProbe": "https://api.imgur.com/account/v1/accounts/{}?client_id=546c25a59c58ad7", + "url": "https://imgur.com/user/{}", + "urlMain": "https://imgur.com/", + "username_claimed": "blue", + "username_unclaimed": "noonewouldeverusethis7" + }, + "Codepen": { + "errorType": "status_code", + "url": "https://codepen.io/{}", + "urlMain": "https://codepen.io/", + "username_claimed": "blue", + "username_unclaimed": "noonewouldeverusethis7" + }, + "ColourLovers": { + "errorType": "status_code", + "url": "https://www.colourlovers.com/lover/{}", + "urlMain": "https://www.colourlovers.com/", + "username_claimed": "blue", + "username_unclaimed": "noonewouldeverusethis7" } -} \ No newline at end of file +} diff --git a/sherlock/sherlock.py b/sherlock/sherlock.py index 6adbb8c83..e0990b916 100644 --- a/sherlock/sherlock.py +++ b/sherlock/sherlock.py @@ -25,7 +25,7 @@ from sites import SitesInformation module_name = "Sherlock: Find Usernames Across Social Networks" -__version__ = "0.12.9" +__version__ = "0.13.0" @@ -326,9 +326,27 @@ def sherlock(username, site_data, query_notify, 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: + # error_flag True denotes no error found in the HTML + # error_flag False denotes error found in the HTML + error_flag = True + errors=net_info.get("errorMsg") + # errors will hold the error message + # it can be string or list + # by insinstance method we can detect that + # and handle the case for strings as normal procedure + # and if its list we can iterate the errors + if isinstance(errors,str): + # Checks if the error message is in the HTML + # if error is present we will set flag to False + if errors in r.text: + error_flag = False + else: + # If it's list, it will iterate all the error message + for error in errors: + if error in r.text: + error_flag = False + break + if error_flag: result = QueryResult(username, social_network, url,