Skip to content

feat: add faproulette.co email and username scan modules#419

Merged
kaifcodec merged 2 commits into
kaifcodec:mainfrom
brunolm:feat/add-faproulette-module
Jul 19, 2026
Merged

feat: add faproulette.co email and username scan modules#419
kaifcodec merged 2 commits into
kaifcodec:mainfrom
brunolm:feat/add-faproulette-module

Conversation

@brunolm

@brunolm brunolm commented Jul 18, 2026

Copy link
Copy Markdown
Contributor

What

Adds faproulette.co to both scan modes — an email module and a username module.

Email module (email_scan/adult/faproulette.py)

Uses the site's own signup-form endpoint POST /api/userCheckEmail (email + timeoutID; no CSRF/Turnstile needed for the check):

Response Result
{"success":1,...} Not Registered
{"success":0,"error":"Email address is already in use."} Registered
other success:0 / non-200 / 429 Error

Username module (user_scan/adult/faproulette.py)

Checks the public profile page GET /@{user} via generic_validate:

Response Result
200 + <link rel="canonical"> echoing /@{user} Found
404 Not Found
200 without a matching canonical Error: "Profile confirmation not found"
other status Error: "Unexpected status: {code}"

Canonical extraction isolates the <link rel="canonical"> tag before pulling href, so it is independent of HTML attribute order.

Notes

  • faproulette.co supports both lookups, so it appears in both scans (like other dual-capable sites). Registration is Turnstile-gated and password reset is non-enumerating, but userCheckEmail cleanly reveals email existence.
  • Error branches follow each category's majority convention (email_scan omits url= on errors; user_scan/adult includes it).

Testing

  • Verified live: brunolm7@gmail.com → Registered and brunolm → Found; throwaway email/username → Not Registered / Not Found; case-insensitive username match confirmed.
  • pytest tests/: all pass except 2 pre-existing Windows chmod(0) no-op tests, unrelated to this change.

Add email-based check via the api/userCheckEmail endpoint (email_scan/adult)
and a username profile check via the /@{user} page (user_scan/adult). The
username module confirms hits with an attribute-order-independent canonical
match; the email module maps the endpoint's success/error JSON to a result.
@kaifcodec

Copy link
Copy Markdown
Owner

@brunolm The email_scan modules you added are perfect. For the username scans, however, we also use the extra parameter of the Result class to capture the available metadata that platforms expose within their response payloads.

Could you review the username modules across your open PRs to see where we can extract these additional details?
For reference you can check the CONTRIBUTING.md or the user_scan/dev/github.py or other modules.

Let me know if you still need any clarification on this!

@kaifcodec kaifcodec added the need-extra-changes Some files or parts of the code may require additional edits or updates for it work properly. label Jul 19, 2026
Capture name, join date and roulette upload count via Result.taken(extra=...)
when a profile is found, matching the user_scan deep-data-extraction guidance.
@brunolm
brunolm force-pushed the feat/add-faproulette-module branch from 0c0451f to 4d9007e Compare July 19, 2026 12:30

@kaifcodec kaifcodec left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Highly impressive!

@kaifcodec
kaifcodec merged commit 4b5293f into kaifcodec:main Jul 19, 2026
2 checks passed
@kaifcodec kaifcodec added email module addition PRs or issues related to new email_scan module additions user module addition PRs or issues related to new user_scan module additions labels Jul 19, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

email module addition PRs or issues related to new email_scan module additions need-extra-changes Some files or parts of the code may require additional edits or updates for it work properly. user module addition PRs or issues related to new user_scan module additions

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants