feat: add multi-profile support for family/household use - #15
Open
Kotobabi1 wants to merge 1 commit into
Open
Conversation
JustMaris
added a commit
to drumandbytes/eraser
that referenced
this pull request
Aug 21, 2026
Broker data corrections (not previously applied in this fork): - atlantic-fox-technologies: clear stale contact (upstream PR digisamroc#7) - xactus: update to current DSR contact doria.sutton@xactus.com (upstream PR digisamroc#9) - adadapted: clear stale billing contact (upstream issue digisamroc#12) Security/reliability fixes found during the review: - browser.go: tighten screenshot file/dir permissions to 0600/0700 (screenshots can capture personal data mid-form-fill) - job.go: fix data races on Job fields via GetStatus/finishedBefore/Pause, wire the previously-dead Cleanup() into an hourly ticker - server.go: unify daily-send-limit logic with the CLI (removed leftover SendGrid/Resend-era hardcoded limits), tighten CSP (drop CDN script-src, add object-src 'none'), stop discarding AddBrokerResponse/ UpdateBrokerResponseClassification/UpdateBrokerResponseBody errors - this silent failure is why the web UI's "Scan Complete!" summary could report matches while the Pipeline page stayed empty (upstream issue digisamroc#17, same root cause as the email_body column bug already fixed for issue digisamroc#3) - main.go: same fix for the monitor --watch callback - monitor.go: fix goroutine leak on ctx.Done() by draining idleDone - layout.html + static/js/tailwind-jit.js: self-host Tailwind/HTMX instead of loading from live CDNs (the file was mislabeled tailwind.min.css but is actually the Tailwind JIT compiler's JS - renamed accordingly) Dead code removed (confirmed zero-caller via deadcode + manual grep): broker.LoadFromDir, several unused browser/chromedp wrappers, unused inbox classifier/monitor/parser helpers, template.AvailableTemplates, web.SessionStore.Count New regression tests: sender_test.go (SMTP header injection, upstream issue digisamroc#6, already fixed - test just locks it in), history_test.go (email_body column round-trip, upstream issue digisamroc#3) Reviewed but intentionally not applied: - upstream PR digisamroc#8 (Andrews Wharton -> Stirista) would create a duplicate broker entry; andrews-wharton is already cleared/redirected and a correct standalone stirista entry already exists - upstream PR digisamroc#14 (Retry Failed button), PR digisamroc#15 (multi-profile support), issue digisamroc#21 (multi-email/multi-sender support) are real feature requests but need a design decision before implementing - issue digisamroc#16 (middle name) is already covered by the existing profile.name_variants config field
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Multi-Profile Support ("Family Plan")
Summary
Add support for multiple profiles in a single config file, enabling families or households to send data removal requests for all members from one Eraser installation.
Motivation
Currently Eraser supports only a single person per config file. Families wanting to protect multiple members need to maintain separate config files and run Eraser separately for each — or use a wrapper script. This PR adds native multi-profile support while maintaining full backward compatibility with existing single-profile configs.
Changes
internal/config/config.goProfiles []Profilefield toConfigstruct (optional,omitempty)GetProfiles()method: returnsprofilesif set, otherwise wraps the singleprofilein a sliceProfileID(p Profile)helper: generates a stable"firstname-lastname"identifier for history namespacingValidate()to validate all profiles when multiple are configuredinternal/history/history.goProfileIDfield toRecordstructprofile_idcolumn toremoval_requeststable (with migration for existing DBs)scanRecord,Add,GetLastRequestForBroker,GetRecentRequeststo includeprofile_idGetLastRequestForBrokerAndProfile()for per-profile broker trackingGetStatsForProfile()for per-profile statisticscmd/eraser/main.gorunSend()to iterate over all profiles, with per-profile progress output and rate-limit pauses between profiles--profileflag tosendcommand for targeting a specific person by namerunInit()to optionally set up multiple profiles interactivelypromptProfile()helper to avoid code duplicationconfig.example.yamlprofilessection showing multi-profile YAML syntax--profileflagBackward Compatibility
GetProfiles()falls back to the singleprofilefieldprofile_idcolumn defaults to""in the DB, so existing history records are preservedUsage
Future Work
statuscommand