summaryrefslogtreecommitdiffstats
path: root/internal/handler/submit.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/handler/submit.go')
-rw-r--r--internal/handler/submit.go14
1 files changed, 12 insertions, 2 deletions
diff --git a/internal/handler/submit.go b/internal/handler/submit.go
index 15251cf..2822488 100644
--- a/internal/handler/submit.go
+++ b/internal/handler/submit.go
@@ -2,15 +2,17 @@ package handler
import (
"net/http"
+ "nymdrop/internal/pow"
"nymdrop/internal/relay"
)
type Submit struct {
relay *relay.Relay
+ pow *pow.Verifier
}
-func NewSubmit(r *relay.Relay) *Submit {
- return &Submit{relay: r}
+func NewSubmit(r *relay.Relay, p *pow.Verifier) *Submit {
+ return &Submit{relay: r, pow: p}
}
func (s *Submit) ServeHTTP(w http.ResponseWriter, r *http.Request) {
@@ -19,6 +21,14 @@ func (s *Submit) ServeHTTP(w http.ResponseWriter, r *http.Request) {
return
}
+ // Proof-of-work computed client-side (X-Nymdrop-Pow: "<unix-ts>:<nonce>").
+ // Rejects unproven, expired, and replayed stamps before touching the relay.
+ if err := s.pow.Verify(r.Header.Get("X-Nymdrop-Pow")); err != nil {
+ // Generic error — don't reveal which check failed.
+ http.Error(w, "error", http.StatusBadRequest)
+ return
+ }
+
r.Body = http.MaxBytesReader(w, r.Body, 10*1024*1024)
defer r.Body.Close()