15 Commits
Author SHA1 Message Date
mrhid6 f1a049823e fix: return announcement refusals as prepare-phase send errors, test the List-Unsubscribe pair on the wire 2026-09-14 09:37:01 +00:00
mrhid6 9832213967 test: let the fake SMTP server hand back the DATA it received 2026-09-14 09:37:01 +00:00
mrhid6 fbba9de256 feat: report which SMTP phase a send failed in 2026-09-11 14:12:36 +00:00
mrhid6 f65174a368 feat: announcement email with one-click unsubscribe headers 2026-09-11 13:34:14 +00:00
mrhid6 a901482e5d feat: per-message extra headers in the mail envelope 2026-09-11 13:33:12 +00:00
mrhid6 91d10a7650 fix: send the bare address as SMTP envelope sender so mailcow DKIM-signs 2026-09-11 11:00:40 +00:00
mrhid6 91841174dd fix: send email parts as quoted-printable so they are 7-bit clean and DKIM-signed 2026-09-11 09:57:40 +00:00
mrhid6 fbc9d4b9c4 fix: restore email says billing continues the paid period 2026-09-11 09:20:15 +00:00
mrhid6 50ab63ff13 feat: account dispute emails 2026-09-10 13:21:04 +00:00
mrhid6 e1ad2467d2 feat: Updated email templates 2026-09-10 12:06:29 +00:00
mrhid6 059949674d chore: replace em dashes with hyphens, add no-em-dash rule to CLAUDE.md 2026-09-10 09:18:58 +00:00
mrhid6 2e87d4c10d feat: Changes to self hosted purchase 2026-08-11 09:30:19 +01:00
mrhid6 18c2982acc feat: vulnerability scanning pipeline, matcher, scheduler and API
Completes tasks 10-15 and fixes what was outstanding:

- vulndb.Pull implemented with oras-go, streaming the ~50MB layer and
  staging both files before replacing either, so a failed pull leaves the
  previous database intact rather than a half-written one.
- db.go: Vulnerability.Severity is a string, not trivy Severity, so the
  int conversion did not compile. Severity now resolves vendor (highest
  when vendors disagree) then NVD then unknown, and CVSS is read too.
- findings.go: added sweepFixedFindings plus the fleet query, severity
  counts, rescan flag and accept/unaccept the API needs.
- vulnrules.go: added rule CRUD and the digest builder. ResolveTargets
  returns []models.Server, not []string, so filterByServers was wrong.
- api/vulnerabilities.go was an empty file while handlers.go registered
  twelve routes against it; written, grouped by CVE.
- shared/mail: added the missing sender. The templates were orphaned and
  the HTML one was a copy of the text one, defining "subject" (which
  html/template would escape) and emitting no markup. render.go parses
  every template in init(), so a bad one panics server, admin and sitesvc
  at boot — go build never runs init(), which is why nothing complained.
- notify: digests dispatch through their own path so SMTP gets the digest
  template rather than arriving dressed as a monitor alert.
2026-08-06 14:33:46 +01:00
mrhid6 b8b553c695 feat: Removed unused test units 2026-08-03 10:18:01 +01:00
mrhid6 dc0d6cb2d2 feat: Move mail system to shared 2026-07-28 09:50:46 +01:00