2020-02-25 20:51:07 +00:00
|
|
|
package middleware
|
|
|
|
|
|
|
|
import (
|
|
|
|
"net/http"
|
|
|
|
|
2022-12-29 16:57:16 +00:00
|
|
|
"github.com/ncarlier/webhookd/pkg/middleware/signature"
|
|
|
|
"github.com/ncarlier/webhookd/pkg/truststore"
|
2020-02-25 20:51:07 +00:00
|
|
|
)
|
|
|
|
|
2022-12-29 16:57:16 +00:00
|
|
|
// Signature is a middleware to checks HTTP request signature
|
|
|
|
func Signature(ts truststore.TrustStore) Middleware {
|
2020-02-29 08:15:12 +00:00
|
|
|
return func(next http.Handler) http.Handler {
|
|
|
|
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
2022-12-29 16:57:16 +00:00
|
|
|
handler := signature.HTTPSignatureHandler
|
|
|
|
if signature.IsEd25519SignatureRequest(r.Header) {
|
|
|
|
handler = signature.Ed25519SignatureHandler
|
2020-02-29 08:15:12 +00:00
|
|
|
}
|
2022-12-29 16:57:16 +00:00
|
|
|
if err := handler(r, ts); err != nil {
|
|
|
|
w.WriteHeader(401)
|
|
|
|
w.Write([]byte("401 Unauthorized: " + err.Error()))
|
2020-02-29 08:15:12 +00:00
|
|
|
return
|
|
|
|
}
|
|
|
|
next.ServeHTTP(w, r)
|
|
|
|
})
|
|
|
|
}
|
2020-02-25 20:51:07 +00:00
|
|
|
}
|