user-scanner 1.1.0.7__tar.gz → 1.1.0.9__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/PKG-INFO +2 -2
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/README.md +1 -1
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/pyproject.toml +1 -1
- user_scanner-1.1.0.9/user_scanner/email_scan/adult/babestation.py +49 -0
- user_scanner-1.1.0.9/user_scanner/email_scan/adult/flirtbate.py +44 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/email_scan/adult/pornhub.py +1 -1
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/email_scan/adult/xnxx.py +1 -1
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/email_scan/adult/xvideos.py +1 -1
- user_scanner-1.1.0.9/user_scanner/email_scan/dev/envato.py +48 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/email_scan/music/lastfm.py +1 -9
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/email_scan/pipeline/zoho.py +10 -10
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/version.json +1 -1
- user_scanner-1.1.0.7/user_scanner/email_scan/shopping/envato.py +0 -41
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/LICENSE +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/__init__.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/__main__.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/cli/__init__.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/cli/banner.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/config.json +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/core/__init__.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/core/email_orchestrator.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/core/formatter.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/core/helpers.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/core/orchestrator.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/core/result.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/core/version.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/email_scan/__init__.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/email_scan/adult/__init__.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/email_scan/adult/sexvid.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/email_scan/community/__init__.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/email_scan/community/quora.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/email_scan/community/stackoverflow.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/email_scan/creator/__init__.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/email_scan/creator/gumroad.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/email_scan/creator/patreon.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/email_scan/dev/__init__.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/email_scan/dev/bitbucket.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/email_scan/dev/codecademy.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/email_scan/dev/codepen.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/email_scan/dev/devrant.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/email_scan/dev/github.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/email_scan/dev/huggingface.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/email_scan/dev/leetcode.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/email_scan/dev/replit.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/email_scan/dev/wordpress.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/email_scan/entertainment/__init__.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/email_scan/entertainment/appletv.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/email_scan/entertainment/justwatch.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/email_scan/entertainment/netflix.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/email_scan/entertainment/stremio.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/email_scan/gaming/__init__.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/email_scan/gaming/chess_com.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/email_scan/hosting/__init__.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/email_scan/hosting/render.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/email_scan/learning/__init__.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/email_scan/learning/duolingo.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/email_scan/music/__init__.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/email_scan/music/spotify.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/email_scan/other/__init__.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/email_scan/other/eventbrite.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/email_scan/pipeline/__init__.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/email_scan/pipeline/axonaut.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/email_scan/pipeline/hubspot.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/email_scan/pipeline/insightly.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/email_scan/shopping/__init__.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/email_scan/shopping/flipkart.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/email_scan/shopping/naturabuy.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/email_scan/shopping/vivino.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/email_scan/social/__init__.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/email_scan/social/facebook.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/email_scan/social/instagram.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/email_scan/social/mastodon.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/email_scan/social/x.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/email_scan/sports/__init__.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/email_scan/sports/espn.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/email_scan/sports/marca.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/user_scan/community/__init__.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/user_scan/community/coderlegion.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/user_scan/community/hackernews.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/user_scan/community/lemmy.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/user_scan/community/stackoverflow.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/user_scan/creator/__init__.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/user_scan/creator/devto.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/user_scan/creator/gumroad.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/user_scan/creator/hashnode.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/user_scan/creator/itch_io.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/user_scan/creator/kaggle.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/user_scan/creator/medium.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/user_scan/creator/patreon.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/user_scan/creator/producthunt.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/user_scan/creator/substack.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/user_scan/creator/twitch.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/user_scan/dev/__init__.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/user_scan/dev/bitbucket.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/user_scan/dev/codeberg.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/user_scan/dev/cratesio.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/user_scan/dev/dockerhub.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/user_scan/dev/github.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/user_scan/dev/gitlab.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/user_scan/dev/huggingface.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/user_scan/dev/launchpad.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/user_scan/dev/leetcode.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/user_scan/dev/npmjs.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/user_scan/dev/replit.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/user_scan/dev/sourceforge.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/user_scan/donation/__init__.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/user_scan/donation/buymeacoffee.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/user_scan/donation/liberapay.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/user_scan/gaming/__init__.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/user_scan/gaming/battlenet.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/user_scan/gaming/chess_com.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/user_scan/gaming/lichess.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/user_scan/gaming/minecraft.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/user_scan/gaming/monkeytype.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/user_scan/gaming/osu.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/user_scan/gaming/roblox.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/user_scan/gaming/steam.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/user_scan/shopping/__init__.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/user_scan/shopping/vinted.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/user_scan/social/__init__.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/user_scan/social/bluesky.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/user_scan/social/discord.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/user_scan/social/instagram.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/user_scan/social/mastodon.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/user_scan/social/pinterest.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/user_scan/social/reddit.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/user_scan/social/snapchat.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/user_scan/social/soundcloud.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/user_scan/social/telegram.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/user_scan/social/threads.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/user_scan/social/tiktok.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/user_scan/social/x.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/user_scan/social/youtube.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/utils/__init__.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/utils/update.py +0 -0
- {user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/utils/updater_logic.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: user-scanner
|
|
3
|
-
Version: 1.1.0.
|
|
3
|
+
Version: 1.1.0.9
|
|
4
4
|
Summary: Check username availability across multiple popular platforms
|
|
5
5
|
Keywords: username,checker,availability,social,tech,python,user-scanner
|
|
6
6
|
Author-email: Kaif <kafcodec@gmail.com>
|
|
@@ -16,7 +16,7 @@ Project-URL: Homepage, https://github.com/kaifcodec/user-scanner
|
|
|
16
16
|
|
|
17
17
|

|
|
18
18
|
<p align="center">
|
|
19
|
-
<img src="https://img.shields.io/badge/Version-1.1.0.
|
|
19
|
+
<img src="https://img.shields.io/badge/Version-1.1.0.9-blueviolet?style=for-the-badge&logo=github" />
|
|
20
20
|
<img src="https://img.shields.io/github/issues/kaifcodec/user-scanner?style=for-the-badge&logo=github" />
|
|
21
21
|
<img src="https://img.shields.io/badge/Tested%20on-Termux-black?style=for-the-badge&logo=termux" />
|
|
22
22
|
<img src="https://img.shields.io/badge/Tested%20on-Windows-cyan?style=for-the-badge&logo=Windows" />
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|

|
|
4
4
|
<p align="center">
|
|
5
|
-
<img src="https://img.shields.io/badge/Version-1.1.0.
|
|
5
|
+
<img src="https://img.shields.io/badge/Version-1.1.0.9-blueviolet?style=for-the-badge&logo=github" />
|
|
6
6
|
<img src="https://img.shields.io/github/issues/kaifcodec/user-scanner?style=for-the-badge&logo=github" />
|
|
7
7
|
<img src="https://img.shields.io/badge/Tested%20on-Termux-black?style=for-the-badge&logo=termux" />
|
|
8
8
|
<img src="https://img.shields.io/badge/Tested%20on-Windows-cyan?style=for-the-badge&logo=Windows" />
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import httpx
|
|
2
|
+
from user_scanner.core.result import Result
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
async def _check(email: str) -> Result:
|
|
6
|
+
url = "https://www.babestation.tv/user/send/username-reminder"
|
|
7
|
+
|
|
8
|
+
headers = {
|
|
9
|
+
'User-Agent': "Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36",
|
|
10
|
+
'Accept': "application/json, text/plain, */*",
|
|
11
|
+
'Content-Type': "application/json",
|
|
12
|
+
'x-requested-with': "XMLHttpRequest",
|
|
13
|
+
'origin': "https://www.babestation.tv",
|
|
14
|
+
'referer': "https://www.babestation.tv/forgot-password-or-username",
|
|
15
|
+
'accept-language': "en-US,en;q=0.9",
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
payload = {
|
|
19
|
+
"email": email
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
try:
|
|
23
|
+
async with httpx.AsyncClient(timeout=5.0) as client:
|
|
24
|
+
response = await client.post(url, json=payload, headers=headers)
|
|
25
|
+
|
|
26
|
+
if response.status_code in [200, 404]:
|
|
27
|
+
data = response.json()
|
|
28
|
+
success = data.get("success")
|
|
29
|
+
|
|
30
|
+
if success is True:
|
|
31
|
+
return Result.taken()
|
|
32
|
+
|
|
33
|
+
if success is False:
|
|
34
|
+
errors = data.get("errors", [])
|
|
35
|
+
if "Email not found" in errors:
|
|
36
|
+
return Result.available()
|
|
37
|
+
|
|
38
|
+
return Result.error("Unexpected response body, report it via GitHub issues")
|
|
39
|
+
|
|
40
|
+
return Result.error(f"HTTP {response.status_code}")
|
|
41
|
+
|
|
42
|
+
except httpx.TimeoutException:
|
|
43
|
+
return Result.error("Connection timed out")
|
|
44
|
+
except Exception as e:
|
|
45
|
+
return Result.error(f"Unexpected Exception: {e}")
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
async def validate_babestation(email: str) -> Result:
|
|
49
|
+
return await _check(email)
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import httpx
|
|
2
|
+
from user_scanner.core.result import Result
|
|
3
|
+
|
|
4
|
+
async def _check(email: str) -> Result:
|
|
5
|
+
url = "https://api.flirtbate.com/api/v1/customer/reset-password-email"
|
|
6
|
+
|
|
7
|
+
headers = {
|
|
8
|
+
'User-Agent': "Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36",
|
|
9
|
+
'Accept': "application/json",
|
|
10
|
+
'Content-Type': "application/json",
|
|
11
|
+
'origin': "https://flirtbate.com",
|
|
12
|
+
'referer': "https://flirtbate.com/",
|
|
13
|
+
'accept-language': "en-US,en;q=0.9",
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
payload = {
|
|
17
|
+
"email": email
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
try:
|
|
21
|
+
async with httpx.AsyncClient(timeout=5.0) as client:
|
|
22
|
+
response = await client.post(url, json=payload, headers=headers)
|
|
23
|
+
|
|
24
|
+
if response.status_code == 429:
|
|
25
|
+
return Result.error("Rate limited (429)")
|
|
26
|
+
|
|
27
|
+
data = response.json()
|
|
28
|
+
message = data.get("message", "")
|
|
29
|
+
|
|
30
|
+
if "Reset password email sent" in message:
|
|
31
|
+
return Result.taken()
|
|
32
|
+
|
|
33
|
+
if "Email invalid for reset password" in message:
|
|
34
|
+
return Result.available()
|
|
35
|
+
|
|
36
|
+
return Result.error("Unexpected response body, report it via GitHub issues")
|
|
37
|
+
|
|
38
|
+
except httpx.TimeoutException:
|
|
39
|
+
return Result.error("Connection timed out")
|
|
40
|
+
except Exception as e:
|
|
41
|
+
return Result.error(f"Unexpected Exception: {e}")
|
|
42
|
+
|
|
43
|
+
async def validate_flirtbate(email: str) -> Result:
|
|
44
|
+
return await _check(email)
|
|
@@ -14,7 +14,7 @@ async def _check(email: str) -> Result:
|
|
|
14
14
|
"content-type": "application/x-www-form-urlencoded; charset=UTF-8"
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
-
async with httpx.AsyncClient(http2=True, follow_redirects=True, timeout=
|
|
17
|
+
async with httpx.AsyncClient(http2=True, follow_redirects=True, timeout=5.0) as client:
|
|
18
18
|
try:
|
|
19
19
|
landing_resp = await client.get(base_url, headers=headers)
|
|
20
20
|
token_match = re.search(r'var\s+token\s*=\s*"([^"]+)"', landing_resp.text)
|
|
@@ -19,7 +19,7 @@ async def _check(email: str) -> Result:
|
|
|
19
19
|
'Accept-Language': "en-US,en;q=0.9"
|
|
20
20
|
}
|
|
21
21
|
|
|
22
|
-
async with httpx.AsyncClient(http2=True) as client:
|
|
22
|
+
async with httpx.AsyncClient(http2=True, timeout=5.0) as client:
|
|
23
23
|
try:
|
|
24
24
|
response = await client.get(url, params=params, headers=headers)
|
|
25
25
|
|
|
@@ -21,7 +21,7 @@ async def _check(email: str) -> Result:
|
|
|
21
21
|
'Accept-Language': "en-US,en;q=0.9"
|
|
22
22
|
}
|
|
23
23
|
|
|
24
|
-
async with httpx.AsyncClient(http2=True, timeout=
|
|
24
|
+
async with httpx.AsyncClient(http2=True, timeout=5.0) as client:
|
|
25
25
|
try:
|
|
26
26
|
response = await client.get(url, params=params, headers=headers)
|
|
27
27
|
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import httpx
|
|
2
|
+
from user_scanner.core.result import Result
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
async def _check(email: str) -> Result:
|
|
6
|
+
url = "https://account.envato.com/api/public/validate_email"
|
|
7
|
+
|
|
8
|
+
headers = {
|
|
9
|
+
'User-Agent': "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36",
|
|
10
|
+
'Accept': "application/json",
|
|
11
|
+
'Content-Type': "application/json",
|
|
12
|
+
'x-client-version': "3.6.0",
|
|
13
|
+
'origin': "https://elements.envato.com",
|
|
14
|
+
'referer': "https://elements.envato.com/",
|
|
15
|
+
'accept-language': "en-US,en;q=0.9",
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
payload = {
|
|
19
|
+
"language_code": "en",
|
|
20
|
+
"email": email
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
try:
|
|
24
|
+
async with httpx.AsyncClient(timeout=5.0) as client:
|
|
25
|
+
response = await client.post(url, json=payload, headers=headers)
|
|
26
|
+
|
|
27
|
+
if response.status_code == 204:
|
|
28
|
+
return Result.available()
|
|
29
|
+
|
|
30
|
+
if response.status_code == 422:
|
|
31
|
+
data = response.json()
|
|
32
|
+
error_msg = data.get("error_message", "").lower()
|
|
33
|
+
|
|
34
|
+
if "already in use" in error_msg:
|
|
35
|
+
return Result.taken()
|
|
36
|
+
|
|
37
|
+
return Result.error("Unexpected response body, report it via GitHub issues")
|
|
38
|
+
|
|
39
|
+
return Result.error(f"HTTP {response.status_code}")
|
|
40
|
+
|
|
41
|
+
except httpx.TimeoutException:
|
|
42
|
+
return Result.error("Connection timed out")
|
|
43
|
+
except Exception as e:
|
|
44
|
+
return Result.error(f"Unexpected Exception: {e}")
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
async def validate_envato(email: str) -> Result:
|
|
48
|
+
return await _check(email)
|
|
@@ -48,7 +48,7 @@ async def _check(email: str) -> Result:
|
|
|
48
48
|
return Result.available()
|
|
49
49
|
|
|
50
50
|
else:
|
|
51
|
-
return Result.error(
|
|
51
|
+
return Result.error("Unexpected response body, report it via GitHub issues")
|
|
52
52
|
|
|
53
53
|
except httpx.TimeoutException:
|
|
54
54
|
return Result.error("Connection timed out")
|
|
@@ -58,11 +58,3 @@ async def _check(email: str) -> Result:
|
|
|
58
58
|
|
|
59
59
|
async def validate_lastfm(email: str) -> Result:
|
|
60
60
|
return await _check(email)
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
@@ -8,17 +8,15 @@ async def _check(email: str) -> Result:
|
|
|
8
8
|
'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8',
|
|
9
9
|
'Accept': '*/*',
|
|
10
10
|
'Origin': 'https://accounts.zoho.com',
|
|
11
|
-
'
|
|
12
|
-
'Sec-Fetch-Mode': 'cors',
|
|
13
|
-
'Sec-Fetch-Dest': 'empty',
|
|
11
|
+
'Referer': 'https://accounts.zoho.com/',
|
|
14
12
|
'Accept-Language': 'en-US,en;q=0.9',
|
|
15
13
|
}
|
|
16
14
|
|
|
17
15
|
try:
|
|
18
16
|
async with httpx.AsyncClient(timeout=5.0, follow_redirects=True) as client:
|
|
19
|
-
await client.get("https://accounts.zoho.com/
|
|
20
|
-
|
|
17
|
+
await client.get("https://accounts.zoho.com/signin", headers=headers)
|
|
21
18
|
csrf_cookie = client.cookies.get("iamcsr")
|
|
19
|
+
|
|
22
20
|
if not csrf_cookie:
|
|
23
21
|
return Result.error("CSRF cookie not found")
|
|
24
22
|
|
|
@@ -39,24 +37,26 @@ async def _check(email: str) -> Result:
|
|
|
39
37
|
|
|
40
38
|
if response.status_code == 200:
|
|
41
39
|
data = response.json()
|
|
42
|
-
message = data.get("message")
|
|
43
40
|
status = data.get("status_code")
|
|
41
|
+
message = data.get("message", "")
|
|
44
42
|
|
|
45
|
-
if message == "User exists"
|
|
43
|
+
if status == 201 or message == "User exists":
|
|
46
44
|
return Result.taken()
|
|
47
45
|
|
|
48
46
|
elif status == 400:
|
|
49
47
|
return Result.available()
|
|
50
48
|
|
|
51
|
-
|
|
52
|
-
return Result.
|
|
49
|
+
elif "User exists in another DC" in message:
|
|
50
|
+
return Result.taken()
|
|
51
|
+
|
|
52
|
+
return Result.error("Unexpected response body, report it via GitHub issues")
|
|
53
53
|
|
|
54
54
|
return Result.error(f"HTTP {response.status_code}")
|
|
55
55
|
|
|
56
56
|
except httpx.TimeoutException:
|
|
57
57
|
return Result.error("Connection timed out")
|
|
58
58
|
except Exception as e:
|
|
59
|
-
return Result.error(
|
|
59
|
+
return Result.error(f"Unexpected Exception: {e}")
|
|
60
60
|
|
|
61
61
|
|
|
62
62
|
async def validate_zoho(email: str) -> Result:
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
import httpx
|
|
2
|
-
from user_scanner.core.result import Result
|
|
3
|
-
|
|
4
|
-
async def _check(email: str) -> Result:
|
|
5
|
-
headers = {
|
|
6
|
-
'User-Agent': "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36",
|
|
7
|
-
'Accept': 'application/json',
|
|
8
|
-
'Accept-Language': 'en-US,en;q=0.9',
|
|
9
|
-
'Content-Type': 'application/x-www-form-urlencoded',
|
|
10
|
-
'Origin': 'https://account.envato.com',
|
|
11
|
-
'Referer': 'https://account.envato.com/sign_up',
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
payload = {'email': email}
|
|
15
|
-
|
|
16
|
-
try:
|
|
17
|
-
async with httpx.AsyncClient(timeout=10.0) as client:
|
|
18
|
-
response = await client.post(
|
|
19
|
-
'https://account.envato.com/api/validate_email',
|
|
20
|
-
headers=headers,
|
|
21
|
-
data=payload
|
|
22
|
-
)
|
|
23
|
-
|
|
24
|
-
if 'Email is already in use' in response.text:
|
|
25
|
-
return Result.taken()
|
|
26
|
-
|
|
27
|
-
if response.status_code == 200:
|
|
28
|
-
return Result.available()
|
|
29
|
-
|
|
30
|
-
if "Page designed by Kotulsky" in response.text or response.status_code == 429:
|
|
31
|
-
return Result.error("Rate limit or Cloudflare challenge detected")
|
|
32
|
-
|
|
33
|
-
return Result.error(f"Unexpected response: {response.status_code}")
|
|
34
|
-
|
|
35
|
-
except httpx.TimeoutException:
|
|
36
|
-
return Result.error("Connection timed out")
|
|
37
|
-
except Exception as e:
|
|
38
|
-
return Result.error(str(e))
|
|
39
|
-
|
|
40
|
-
async def validate_envato(email: str) -> Result:
|
|
41
|
-
return await _check(email)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/email_scan/community/stackoverflow.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/email_scan/entertainment/__init__.py
RENAMED
|
File without changes
|
{user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/email_scan/entertainment/appletv.py
RENAMED
|
File without changes
|
{user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/email_scan/entertainment/justwatch.py
RENAMED
|
File without changes
|
{user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/email_scan/entertainment/netflix.py
RENAMED
|
File without changes
|
{user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/email_scan/entertainment/stremio.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/user_scan/community/coderlegion.py
RENAMED
|
File without changes
|
{user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/user_scan/community/hackernews.py
RENAMED
|
File without changes
|
|
File without changes
|
{user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/user_scan/community/stackoverflow.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{user_scanner-1.1.0.7 → user_scanner-1.1.0.9}/user_scanner/user_scan/donation/buymeacoffee.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|