signature.go 708 B

1234567891011121314151617181920212223242526
  1. package middleware
  2. import (
  3. "net/http"
  4. "github.com/ncarlier/webhookd/pkg/middleware/signature"
  5. "github.com/ncarlier/webhookd/pkg/truststore"
  6. )
  7. // Signature is a middleware to checks HTTP request signature
  8. func Signature(ts truststore.TrustStore) Middleware {
  9. return func(next http.Handler) http.Handler {
  10. return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
  11. handler := signature.HTTPSignatureHandler
  12. if signature.IsEd25519SignatureRequest(r.Header) {
  13. handler = signature.Ed25519SignatureHandler
  14. }
  15. if err := handler(r, ts); err != nil {
  16. w.WriteHeader(401)
  17. w.Write([]byte("401 Unauthorized: " + err.Error()))
  18. return
  19. }
  20. next.ServeHTTP(w, r)
  21. })
  22. }
  23. }