From ca9d6a543335e998963ac4f680cf5c47e597602b Mon Sep 17 00:00:00 2001 From: René 'Necoro' Neumann Date: Wed, 16 Oct 2024 22:18:06 +0200 Subject: Inline form package --- form/decode.go | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 form/decode.go (limited to 'form/decode.go') diff --git a/form/decode.go b/form/decode.go new file mode 100644 index 0000000..7ebdfc2 --- /dev/null +++ b/form/decode.go @@ -0,0 +1,29 @@ +package form + +import ( + "gosten/csrf" + "log" + "net/http" + + "github.com/gorilla/schema" +) + +var schemaDecoder *schema.Decoder + +func init() { + schemaDecoder = schema.NewDecoder() + schemaDecoder.IgnoreUnknownKeys(true) +} + +func Parse[T any](r *http.Request, data *T) { + if err := r.ParseForm(); err != nil { + log.Panic("Parsing form: ", err) + } + if err := schemaDecoder.Decode(data, r.PostForm); err != nil { + log.Panic("Decoding form: ", err) + } + + if withCsrf, ok := any(data).(csrf.Enabled); ok { + withCsrf.SetCsrfField(r) + } +} -- cgit v1.2.3-70-g09d2