Help us shape the future of Go! Take the 2026 Go Developer Survey

unsubhttp

package
v1.130.5 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 6, 2026 License: Apache-2.0 Imports: 7 Imported by: 0

Documentation

Overview

Package unsubhttp serves the no-login unsubscribe endpoint linked from every notification email footer and named by the RFC 8058 List-Unsubscribe header.

It also mints and verifies the HMAC token that link carries, so the one place that decides a token is valid is the one place that acts on it. The opt-out it records is an ordinary preference write: delivery mode "off" for the address the token names.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func UnsubToken

func UnsubToken(key []byte, email string) string

UnsubToken returns the opaque token an email footer's unsubscribe link carries for recipient. The token binds the address with an HMAC so only a holder of the emailed link can opt that address out; it deliberately never expires, since a stale footer link that stops working strands exactly the recipient the link exists for. It grants nothing but the opt-out: prefs are keyed by bare email, so it works identically for account holders and recipients with no account (#1001).

func VerifyUnsubToken

func VerifyUnsubToken(key []byte, tok string) (email string, ok bool)

VerifyUnsubToken validates tok and returns the recipient address it was minted for. ok is false for a malformed token or a MAC mismatch.

Types

type UnsubscribeHandler

type UnsubscribeHandler struct {
	Prefs notification.PrefsStore
	// Key signs and verifies the footer tokens; see UnsubToken.
	Key []byte
	// BrandName heads the confirmation page.
	BrandName string
}

UnsubscribeHandler serves GET and POST on /portal/notifications/unsubscribe?tok=..., the no-login opt-out linked from every notification email footer and named by the List-Unsubscribe header. A valid token writes delivery mode "off" for the address it names; the share and comment enqueue paths already honor that mode, so the recipient receives no further notification emails. One-time view links are unaffected: those are transactional sends the recipient asks for, not notifications.

func (*UnsubscribeHandler) ServeHTTP

func (h *UnsubscribeHandler) ServeHTTP(w http.ResponseWriter, r *http.Request)

ServeHTTP routes the endpoint's three cases. GET renders a confirmation page and performs no mutation: corporate mail security layers (Safe Links, Proofpoint, and similar) prefetch URLs in message bodies, and the token is a bearer credential, so a mutating GET would let a recipient's own mail infrastructure silently opt them out (#1022). The opt-out records only on POST: either the RFC 8058 one-click body a mail provider sends on a real user action in its own UI, or the confirmation page's form submit.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL