All notable changes to this project will be documented here
1.4.1 - 2026-05-26
- Version bump - (b68a00a)
- Phlare: emit periodic progress logs during paginated searches
FlareEventsGlobalSearchByDomain, FlareSearchCookiesByDomain, and FlareSearchCredentialsByDomainASTP can run for many minutes against large tenants. Until now they produced no output during pagination, leaving the user unable to tell whether the SDK was still working or stuck.
Spin up a 30s ticker goroutine in each function that logs the running count of accumulated items. Use sync/atomic.Int64 so the ticker can safely read the count without racing the main loop's append. defer close(progressDone) guarantees the goroutine exits on every return path. - (1f414bc)
- Version pin actions to hashes and bump go version and deps in go.mod - (137d438)
1.4.0 - 2026-05-18
- Update changelog - (2043c2b)
- Resolved linter issues and version bump - (6bc1265)
- Merge pull request #7 from cham423/fix/credentials-search-timeout-and-logerror-masking
Fix Flare gateway timeouts and three layers of error masking - (978c67c)
- Phlare: don't JSON-decode error response bodies in DoReq
DoReq returned (statusCode, DecodeResponse(resp, target)) regardless
of HTTP status. When the API returned a non-2xx with a non-JSON body
(e.g. Flare's gateway returning the plain text "upstream request
timeout" on a 504), the JSON decoder errored on the first byte with
"invalid character 'u' looking for beginning of value" — and callers
that check err before statusCode saw only the decoder failure,
never the real HTTP status.
Skip the decode entirely on non-2xx responses. Drain the body so the
connection can be reused and return (statusCode, nil); the caller's
existing if statusCode != 200 branch then handles it cleanly.
Combined with the new 502/503/504 retry path, this means transient Flare gateway timeouts now surface as a clean retry+success rather than a confusing JSON parse error. - (abc84fe)
- Utils: LogError no longer masks the caller's original error
LogError opens a dated log file (gophlare-error-log-.json) in
the CWD on every call. When that open fails — most commonly because
the filesystem is read-only (CI runners, hardened containers,
os.Chroot'd processes) — it returned the filesystem error in place
of the caller's original err:
f, openFileErr := os.OpenFile(fname, ...)
if openFileErr != nil {
return openFileErr // <-- masks the caller's err
}
Every API failure surfaced as "open gophlare-error-log-...: read-only file system" instead of the real cause (504s, 429s, JSON decode errors, etc.). The actual error became unreachable from outside gophlare.
File write is now best-effort: on open failure we skip the file tee,
still log via gologger to stderr, and always return the caller's
original err. The public contract is unchanged — LogError still
returns an error, it's just now the real one. - (4e4548d)
- Phlare: make credentials search resilient to Flare gateway timeouts
Two related fixes for FlareSearchCredentialsByDomainASTP — the hardcoded page size was overshooting Flare's gateway timeout, and the endpoint had no retry path for the resulting 5xx responses.
-
Lower hardcoded
sizefrom "10000" to "100"Flare's gateway returns HTTP 504 "upstream request timeout" when the backend can't materialize a page within ~30 seconds. The
astp/v2/credentials/_searchlatency scales roughly linearly withsize(measured against a single tenant, slow-day conditions):size=10 ~3.9s size=100 ~8.0s size=300 ~24s size=50 ~6.3s size=200 ~13.2s size=500 504 at 30.2s
Size=10000 was always going to 504 on any non-trivial corpus. Size=100 leaves >20s of headroom on slow days; pagination via the existing Next cursor loop handles arbitrary total result sizes, so per-domain ceiling is unchanged.
-
Retry on 502/503/504 (mirrors the existing 429 handling)
Flare gateway timeouts are transient under load. Without retry, a single 504 fails the entire per-domain pull even if the next call would have succeeded. Added 502/503/504 → sleep+continue alongside the existing 429 case in all three pagination loops (credentials/leaksdb, cookies, credentials/astp). Bounded by the outer http.Client timeout (default 10 minutes). - (5d581cb)
1.3.9 - 2026-03-11
- Add ReadFileLines to ConfigureFlagOpts and simplify scope.go
Port ReadFileLines from goreconasoutsider to read file contents as []string directly in ConfigureFlagOpts, eliminating redundant file-reading in scope.go. Fix comma-separated values not being split when IsFilePath is true and the value is not an existing file. Simplify scope.go from ~170 lines to ~35 lines using a resolveToSlice() type-switch helper.
Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com - (18d6a9c)
- Update changelog - (6cc4810)
- Version bump - (fd58483)
1.3.8 - 2026-01-17
- Fix more time.Time to FlareTime - (c6c92ee)
- Update changelog - (67ecc2a)
1.3.7 - 2026-01-15
- Add support for ISO 8601 date time format - (264daa2)
- Update changelog - (6e4fb96)
1.3.6 - 2025-12-11
- Optimize cred stuffing files - (b86f914)
- Update changelog - (8b57521)
- Version bump - (90abb38)
1.3.5 - 2025-12-02
- Bump deps - (39aee3a)
- Update changelog - (9015b9d)
- Resolve code scanning alerts - (a02f792)
1.3.4 - 2025-11-26
- Fix ConfigureFlagOpts - (d58b98c)
- Update changelog - (5338d28)
1.3.3 - 2025-11-25
- Fixed options parser - (d4bd76c)
- Update changelog - (0a6651b)
1.3.2 - 2025-11-25
- Git-cliff buggin out - (6835989)
- Optimized flags parser - (9b62902)
1.3.1 - 2025-11-17
- Add sqlite integration - (358cb2b)
- Stealer log db integration working poc - (e05765a)
- Stealer log db integration checkpoint - (6093607)
- Update changelog - (214b73a)
1.3.0 - 2025-09-19
1.2.9 - 2025-08-20
1.2.8 - 2025-08-01
- Add wildcard host global event search option - (cb36a65)
- Update docs - (4144d53)
- Update changelog - (1cf8ca2)
1.2.7 - 2025-07-02
- Fixed missing cmd loader for custom query 🐛 - (36183be)
- Docs update - (037483d)
- Update changelog - (d19d4b0)
1.2.6 - 2025-06-14
- Added 🐇 additional leak data ingestors 4 bloodhound - (2f4a6fa)
- Docs update - (d83b278)
- Update changelog - (0cb90ce)
1.2.5 - 2025-06-11
- Add Autofills.txt to stealerlog downloaded files - (7d5720b)
- Update changelog - (81f0094)
1.2.4 - 2025-05-23
- Docs update readme - (c7502a5)
- Update readme - (7ae3e4a)
1.2.3 - 2025-05-23
- Version bump - (c43e923)
- Merge pull request #1 from mr-pmillz/bloodhound
Draft: Bloodhound integration - (7a1bc94)
- Removed unused code and cleanup - (1dff448)
- Bloodhound integration PoC shortest paths from breached credentials - (a9c8ac5)
- Resolved linter warnings - (7034a62)
- 🌀 Completed Phase 2 🔮 - (abcfa97)
- Initial bloodhound integration testing - (afca637)
- Update changelog - (0198c65)
1.2.2 - 2025-04-25
- Optimized cred parser to support redline format. various other improvements - (5101242)
- Update changelog - (d61fbda)
1.2.1 - 2025-04-22
- Added token refresh capabilities, updated lint config - (58827c8)
- Docs update - (ed832d8)
- Deps update - (b719910)
- Update changelog - (fa667c5)
1.2.0 - 2025-04-17
- Write individual cookie bro and events json to files. resolved linter warnings - (58dc8a0)
- Fixed bufio.Scanner: token too long bug 🐛 - (0e0a172)
- Fixed flare events time.Time type unmarshalling bug 🐛 - (4a5ce83)
- Optimized warning log msg fmt - (ffbc4d6)
- Update changelog - (686853f)
1.1.9 - 2025-04-17
- Optimized. log warning instead of err to continue downloading results - (0c0e24a)
- Update changelog - (e856eac)
1.1.8 - 2025-04-09
- Updated goreleaser dockerfile and docs - (21ff4a1)
1.1.7 - 2025-03-12
- Update cicd permissions in ci.yml - (e3f1b86)
1.1.6 - 2025-03-12
- Add GITHUB_TOKEN to .goreleaser env for ghcr push - (4a2dcf8)
1.1.5 - 2025-03-12
- Testing goreleaser docker build/push to ghcr.io - (1b7c003)
1.1.4 - 2025-03-12
- Map has no entry for key "Arch", i knew it! - (ebb2393)
1.1.3 - 2025-03-12
- Added Dockerfile & updated goreleaser to push image to ghcr.io - (b4428d1)
1.1.2 - 2025-03-10
- Update changelog - (78496b6)
- Changelog generation handled by cicd... - (86e1ef6)
1.1.1 - 2025-03-10
- Added NewConfig helper, updated NewScope, version bump - (5705ddd)
- Update README.md added badges - (04d8c7a)
- Update changelog - (3f49bfc)
1.1.0 - 2025-02-20
- Added from, to, severity, eventsFilterTypes opts
- refactored search command
- updated docs - (52e632e)
- Update changelog - (6a59d0a)
1.0.9 - 2025-02-19
- Fixed 🐛 in --search-emails-in-bulk - (0925622)
- Update changelog - (c1200d4)
1.0.8 - 2025-02-17
- Update readme - (b0d22b8)
1.0.7 - 2025-02-16
- Fix typo in options.go for user-id-format flag - (69a541b)
1.0.6 - 2025-02-16
- Fix goreleaser 🐛 dirty state update .gitignore job version bump - (44e4f48)
1.0.5 - 2025-02-16
- Update cicd goreleaser job version bump - (7754301)
- Update changelog - (844e9bf)
1.0.4 - 2025-02-16
- Update cicd goreleaser job version bump - (788e8f2)
1.0.3 - 2025-02-16
- Update go.mod - (47d29b3)
1.0.2 - 2025-02-16
- Update pre-commit-config.yaml - (11c5a7e)
- Update cicd goreleaser job version bump - (d1b5e6b)
- Update cliff.toml - (fa8648b)
- Update changelog - (a45ff4f)
1.0.1 - 2025-02-16
- Added cookies/_search api and optimized thangs 🍪 - (d3aecf2)
- Add git-cliff changelog and ci job - (2a8464a)
- First commit - (322f252)
- Initial poc rough draft.. ToDo: cookie logic code-review - (d8acda9)