|
|
|
@ -1,7 +1,13 @@
|
|
|
|
|
// test
|
|
|
|
|
package server
|
|
|
|
|
|
|
|
|
|
import "git.runcible.io/learning/ratchet/internal/validator"
|
|
|
|
|
import (
|
|
|
|
|
"errors"
|
|
|
|
|
"net/http"
|
|
|
|
|
|
|
|
|
|
"git.runcible.io/learning/ratchet/internal/validator"
|
|
|
|
|
"github.com/go-playground/form/v4"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
// Define a snippetCreateForm struct to represent the form data and validation
|
|
|
|
|
// errors for the form fields. Note that all the struct fields are deliberately
|
|
|
|
@ -25,3 +31,23 @@ type snippetCreateForm struct {
|
|
|
|
|
Expires int `form:"expires"`
|
|
|
|
|
validator.Validator `form:"-"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func decodePostForm(r *http.Request, fd *form.Decoder, dst any) error {
|
|
|
|
|
err := r.ParseForm()
|
|
|
|
|
if err != nil {
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
err = fd.Decode(dst, r.PostForm)
|
|
|
|
|
if err != nil {
|
|
|
|
|
var invalidDecoderError *form.InvalidDecoderError
|
|
|
|
|
|
|
|
|
|
if errors.As(err, &invalidDecoderError) {
|
|
|
|
|
// if called in the handler, recovery middleware
|
|
|
|
|
// will log and send 500 response back
|
|
|
|
|
panic(err)
|
|
|
|
|
}
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
return nil
|
|
|
|
|
}
|
|
|
|
|