From e3f6c14af6c5d9efb20b23f06951cfcdde673d5a Mon Sep 17 00:00:00 2001 From: kaifcodec Date: Thu, 2 Apr 2026 16:51:28 +0530 Subject: [PATCH] fix: false positive and reddit validation logic to use json api --- user_scanner/user_scan/social/reddit.py | 33 +++++++++++++++++-------- 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/user_scanner/user_scan/social/reddit.py b/user_scanner/user_scan/social/reddit.py index c802761..f07a62e 100644 --- a/user_scanner/user_scan/social/reddit.py +++ b/user_scanner/user_scan/social/reddit.py @@ -1,18 +1,31 @@ +import json from user_scanner.core.orchestrator import generic_validate from user_scanner.core.result import Result - def validate_reddit(user): - url = f"https://www.reddit.com/user/{user}/" + url = f"https://www.reddit.com/user/{user}/about.json" show_url = f"https://www.reddit.com/user/{user}/" def process(response): + if response.status_code == 404: + return Result.available() + + if response.status_code == 429: + return Result.error("Rate limit exceeded") + if response.status_code == 200: - if "Sorry, nobody on Reddit goes by that name." in response.text: - return Result.available() - else: - return Result.taken() - else: - return Result.error() - - return generic_validate(url, process, show_url=show_url, follow_redirects=True) + try: + data = response.json() + + if data.get("error") == 404 or data.get("message") == "Not Found": + return Result.available() + + if data.get("kind") == "t2" or "data" in data: + return Result.taken() + + except (json.JSONDecodeError, KeyError): + return Result.error("Malformed JSON response, report it on Github") + + return Result.error(f"HTTP {response.status_code}") + + return generic_validate(url, process, show_url=show_url)