{{define "title"}}CSP reports · MeshTender{{end}} {{define "header"}}
Administration

Content Security Policy Reports

{{end}} {{define "content"}} {{if .Flash}}{{end}}
{{.Stats.PageDistinct}}
Page violations
{{.Stats.ExtensionDistinct}}
Extension violations
{{.Stats.Hits}}
Total reports received
{{if .Stats.AtCapacity}} {{end}}

{{if .ShowAll}}All violations{{else if eq .Source "extension"}}Extension violations{{else}}Page violations{{end}}

{{if .CanClear}}
{{if not .ShowAll}}{{end}}
{{end}}
{{/* The extension note sits in its own card-body only when a table follows it — consecutive card-bodies get a divider, so folding it into the empty state instead avoids a rule across an otherwise empty card. No pb-0 here: Tabler zeroes the bottom margin of a card-body's last child, so trimming the padding too leaves the note butted against the table header. */}} {{if .Reports}} {{if eq .Source "extension"}}
{{template "csp-extension-note"}}
{{end}}
{{range .Reports}} {{end}}
Directive Blocked Page Reports Last seen
{{.Directive}} {{if eq .Disposition "report"}} report-only {{end}} {{if and $.ShowAll (eq .Source "extension")}} extension {{end}} {{.BlockedURI}} {{.Host}}{{.DocumentPath}}{{if .LineNumber}}:{{.LineNumber}}{{end}} {{/* Name the injector when the report identified one — it's the evidence for the “extension” label, and browsers report only the scheme (no extension ID), so there's nothing identifying to leak here. */}} {{if and .SourceFile (ne .Source "page")}}
injected by {{.SourceFile}}
{{end}} {{if .Sample}}
{{.Sample}}
{{end}}
{{.Hits}} {{ts .LastSeen "datetime"}}
first {{ts .FirstSeen "date"}}
{{else}}
{{if eq .Source "extension"}}{{template "csp-extension-note"}}{{end}}

{{if eq .Source "page"}} No violations reported. That's the result you want: it means nothing on the site is being blocked by the Content Security Policy. {{else}} Nothing recorded. {{end}}

{{end}}
{{template "icon-arrow-left" "me-1"}}Back to admin {{end}} {{/* csp-extension-note is defined once and rendered in two places (above the table, or inside the empty state), so the wording can't drift between them. */}} {{define "csp-extension-note"}}

Violations caused by browser extensions injecting into a visitor's page. Nothing here is a bug in MeshTender and none of it is fixable from our side — it's kept only so an extension can be recognized as the cause rather than mistaken for an app problem. Note that an extension injecting an inline script is indistinguishable from a genuine inline-script violation, so those are listed under “Page”.

{{end}}