diff --git a/user_scanner/email_scan/adult/fapfolder.py b/user_scanner/email_scan/adult/fapfolder.py new file mode 100644 index 00000000..e7d3fcae --- /dev/null +++ b/user_scanner/email_scan/adult/fapfolder.py @@ -0,0 +1,57 @@ +import httpx +from user_scanner.core.result import Result + + +async def _check(email: str) -> Result: + url = "https://fapfolder.club/includes/ajax/core/signup.php" + show_url = "https://fapfolder.club" + + payload = { + 'username': "l0v3_d0n0t_3xist", + 'email': email, + 'email2': email, + 'password': "1", + 'field1': "", + 'privacy_agree': "on" + } + + headers = { + 'User-Agent': "Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Mobile Safari/537.36", + 'Accept': "application/json, text/javascript, */*; q=0.01", + 'Accept-Encoding': "identity", + 'sec-ch-ua-platform': '"Android"', + 'x-requested-with': "XMLHttpRequest", + 'sec-ch-ua': '"Chromium";v="146", "Not-A.Brand";v="24", "Google Chrome";v="146"', + 'sec-ch-ua-mobile': "?1", + 'origin': "https://fapfolder.club", + 'sec-fetch-site': "same-origin", + 'sec-fetch-mode': "cors", + 'sec-fetch-dest': "empty", + 'referer': "https://fapfolder.club/signup", + 'accept-language': "en-US,en;q=0.9" + } + + try: + async with httpx.AsyncClient(timeout=7.0) as client: + response = await client.post(url, data=payload, headers=headers) + + if response.status_code == 403: + return Result.error("403") + + data = response.json() + message = data.get("message", "") + + if "belongs to an existing account" in message: + return Result.taken(url=show_url) + + if "password must be at least" in message: + return Result.available(url=show_url) + + return Result.error(f"Unexpected: {message[:50]}") + + except Exception as e: + return Result.error(e) + + +async def validate_fapfolder(email: str) -> Result: + return await _check(email) diff --git a/user_scanner/email_scan/adult/lovescape.py b/user_scanner/email_scan/adult/lovescape.py new file mode 100644 index 00000000..d2e35155 --- /dev/null +++ b/user_scanner/email_scan/adult/lovescape.py @@ -0,0 +1,89 @@ +import httpx +import json +from user_scanner.core.result import Result + +async def _check(email: str) -> Result: + url = "https://lovescape.com/api/front/auth/signup" + show_url = "https://lovescape.com" + + payload = { + "username": "W3ak3n3dCut3n3ss3674", + "email": email, + "password": "igy8868yiyy", + "recaptcha": "", + "fingerprint": "", + "modelName": "", + "isPwa": False, + "affiliateId": "", + "trafficSource": "", + "isUnThrottled": False, + "hasActionParam": False, + "source": "page_signup", + "device": "mobile", + "deviceName": "Android Mobile", + "browser": "Chrome", + "os": "Android", + "locale": "en", + "authType": "native", + "ampl": { + "ep": { + "source": "page_signup", + "startSessionUrl": "/create-ai-sex-girlfriend/style", + "firstVisitedUrl": "/create-ai-sex-girlfriend/style", + "referrerHost": "hakurei.us-cdnbo.org", + "referrerId": "us-cdnbo", + "signupUrl": "/signup", + "page": "signup", + "project": "Lovescape", + "isCookieAccepted": True, + "displayMode": "browser" + }, + "up": { + "source": "page_signup", + "startSessionUrl": "/create-ai-sex-girlfriend/style", + "firstVisitedUrl": "/create-ai-sex-girlfriend/style", + "referrerHost": "hakurei.us-cdnbo.org", + "referrerId": "us-cdnbo", + "signupUrl": "/signup" + }, + "device_id": "", + "session_id": 1774884558258 + } + } + + headers = { + 'User-Agent': "Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Mobile Safari/537.36", + 'Accept': "application/json", + 'Accept-Encoding': "identity", + 'Content-Type': "text/plain;charset=UTF-8", + 'sec-ch-ua-platform': '"Android"', + 'sec-ch-ua': '"Chromium";v="146", "Not-A.Brand";v="24", "Google Chrome";v="146"', + 'sec-ch-ua-mobile': "?1", + 'Origin': "https://lovescape.com", + 'Referer': "https://lovescape.com/signup", + 'Priority': "u=1, i" + } + + try: + async with httpx.AsyncClient(timeout=7.0) as client: + response = await client.post(url, content=json.dumps(payload), headers=headers) + + if response.status_code == 403: + return Result.error("403") + + data = response.json() + error_msg = data.get("error", "") + + if "Email is already used" in error_msg: + return Result.taken(url=show_url) + + if "recaptcha is required" in error_msg: + return Result.available(url=show_url) + + return Result.error(f"Unexpected: {error_msg}") + + except Exception as e: + return Result.error(e) + +async def validate_lovescape(email: str) -> Result: + return await _check(email) diff --git a/user_scanner/email_scan/community/nextdoor.py b/user_scanner/email_scan/community/nextdoor.py new file mode 100644 index 00000000..3153e8b0 --- /dev/null +++ b/user_scanner/email_scan/community/nextdoor.py @@ -0,0 +1,51 @@ +import httpx +from user_scanner.core.result import Result + +async def _check(email: str) -> Result: + url = "https://auth.nextdoor.com/v2/token" + show_url = "https://nextdoor.com" + + payload = { + 'scope': "openid", + 'client_id': "NEXTDOOR-WEB", + 'login_type': "basic", + 'grant_type': "password", + 'username': email, + 'password': "vhj87uyguu77" + } + + headers = { + 'User-Agent': "Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Mobile Safari/537.36", + 'Accept': "application/json, text/plain, */*", + 'Accept-Encoding': "identity", + 'sec-ch-ua-platform': '"Android"', + 'sec-ch-ua': '"Chromium";v="146", "Not-A.Brand";v="24", "Google Chrome";v="146"', + 'sec-ch-ua-mobile': "?1", + 'Origin': "https://nextdoor.com", + 'Referer': "https://nextdoor.com/", + 'Priority': "u=1, i" + } + + try: + async with httpx.AsyncClient(timeout=6.0) as client: + response = await client.post(url, data=payload, headers=headers) + + if response.status_code == 403: + return Result.error("403") + + data = response.json() + error = data.get("error", "") + + if error == "invalid_grant": + return Result.taken(url=show_url) + + if error == "not_found": + return Result.available(url=show_url) + + return Result.error(f"Unexpected: {error}") + + except Exception as e: + return Result.error(e) + +async def validate_nextdoor(email: str) -> Result: + return await _check(email)