infra

package
v1.500.0 Latest Latest
Warning

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

Go to latest
Published: Jul 3, 2026 License: MIT Imports: 13 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var ErrTimestampExpired = errors.New("slack request timestamp expired (possible replay attack)")

ErrTimestampExpired is returned when the Slack request timestamp is too old

Functions

This section is empty.

Types

type GoTemplateEvaluator

type GoTemplateEvaluator struct{}

GoTemplateEvaluator evaluates Go template expressions against JSON payloads

func NewGoTemplateEvaluator

func NewGoTemplateEvaluator() *GoTemplateEvaluator

NewGoTemplateEvaluator creates a new GoTemplateEvaluator

func (*GoTemplateEvaluator) Evaluate

func (e *GoTemplateEvaluator) Evaluate(payload map[string]interface{}, templateStr string) (bool, error)

Evaluate evaluates a Go template expression against a payload The template should return "true" or "false" as a string Returns true if the template evaluates to "true", false otherwise

func (*GoTemplateEvaluator) FuncMap

func (e *GoTemplateEvaluator) FuncMap() template.FuncMap

FuncMap returns custom template functions

type SignatureConfig

type SignatureConfig struct {
	// HeaderName is the name of the HTTP header containing the signature
	// Examples: "X-Hub-Signature-256", "X-Signature"
	HeaderName string

	// Secret is the shared secret used for HMAC computation
	Secret string

	// Algorithm specifies the hash algorithm to use
	// Supported values: "sha256", "sha1", "sha512"
	Algorithm string

	// Prefix specifies the exact prefix to strip from the header value before comparing.
	// When empty, auto-detection is used: if the header value contains "=",
	// the part before and including "=" is stripped (e.g., "sha256=<hex>" → "<hex>").
	// When set to a non-empty string, that exact prefix is stripped.
	// Use this for services that send plain hex digests without any prefix (e.g., Sentry).
	// Example: "" (auto-detect), "sha256=" (GitHub-style), "v0=" (Slack-style)
	Prefix string
}

SignatureConfig contains configuration for signature verification

type SignatureVerifier

type SignatureVerifier struct{}

SignatureVerifier provides HMAC signature verification for webhooks

func NewSignatureVerifier

func NewSignatureVerifier() *SignatureVerifier

NewSignatureVerifier creates a new SignatureVerifier

func (*SignatureVerifier) Verify

func (v *SignatureVerifier) Verify(payload []byte, signatureHeader string, config SignatureConfig) bool

Verify verifies an HMAC signature against a payload Returns true if the signature is valid, false otherwise

func (*SignatureVerifier) VerifyGitHubSignature

func (v *SignatureVerifier) VerifyGitHubSignature(payload []byte, signatureHeader, secret string) bool

VerifyGitHubSignature is a convenience method for verifying GitHub webhook signatures It handles both X-Hub-Signature (SHA1) and X-Hub-Signature-256 (SHA256)

type SlackSignatureVerifier

type SlackSignatureVerifier struct {
	// contains filtered or unexported fields
}

SlackSignatureVerifier verifies Slack's v0 HMAC-SHA256 webhook signatures.

Slack signature format:

  • Header X-Slack-Signature: v0=<hex>
  • Header X-Slack-Request-Timestamp: <unix timestamp>
  • Base string: "v0:" + timestamp + ":" + body
  • Signature: "v0=" + HMAC-SHA256(signingSecret, baseString)

func NewSlackSignatureVerifier

func NewSlackSignatureVerifier() *SlackSignatureVerifier

NewSlackSignatureVerifier creates a new SlackSignatureVerifier

func (*SlackSignatureVerifier) Verify

func (v *SlackSignatureVerifier) Verify(
	body []byte,
	timestamp string,
	signature string,
	signingSecret string,
) (bool, error)

Verify verifies a Slack webhook signature. Returns (true, nil) on success. Returns (false, ErrTimestampExpired) if the timestamp is too old. Returns (false, nil) if the signature does not match.

Jump to

Keyboard shortcuts

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