datastar/site/routes_examples_csrf.go

40 lines
846 B
Go

package site
import (
"fmt"
"net/http"
"github.com/go-chi/chi/v5"
"github.com/gorilla/csrf"
datastar "github.com/starfederation/datastar/sdk/go"
)
func setupExamplesCSRF(examplesRouter chi.Router) error {
CSRF := csrf.Protect([]byte("32-byte-long-auth-key"))
examplesRouter.Route("/csrf/data", func(r chi.Router) {
r.Use(CSRF)
r.Get("/", func(w http.ResponseWriter, r *http.Request) {
token := csrf.Token(r)
sse := datastar.NewSSE(w, r)
sse.MergeFragmentTempl(CSRFDemo(token))
})
r.Post("/", func(w http.ResponseWriter, r *http.Request) {
token := csrf.Token(r)
sse := datastar.NewSSE(w, r)
sse.MergeFragmentTempl(CSRFDemoResponse(
fmt.Sprintf("POST request received with token: %s", token),
),
datastar.WithSelectorID("responses"),
datastar.WithMergeAppend(),
)
})
})
return nil
}