Как в go ограничить доступ к эндпоинтам для запросов от htmx?

Как можно создать middleware для запрета прямого доступа к конечной точке (endpoint) ssr/*, если запрос не является htmx-запросом?
  • 25 июня 2024 г. 6:32
Ответы на вопрос 2
Для ограничения доступа к эндпоинтам для запросов от htmx в Go можно использовать middleware. 

Пример реализации middleware для проверки, что запрос является htmx-запросом, и запрета прямого доступа к эндпоинту ssr/* без этого заголовка:

```go
package main

import (
	"net/http"
	"strings"
)

func HtmxMiddleware(next http.Handler) http.Handler {
	return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
		htmxHeader := r.Header.Get("HX-Request")
		if htmxHeader != "" {
			next.ServeHTTP(w, r)
		} else {
			http.Error(w, "Forbidden", http.StatusForbidden)
		}
	})
}

func handler(w http.ResponseWriter, r *http.Request) {
	w.Write([]byte("Access allowed"))
}

func main() {
	http.Handle("/ssr/", HtmxMiddleware(http.HandlerFunc(handler)))
	http.ListenAndServe(":8080", nil)
}
``` 

В данном примере middleware `HtmxMiddleware` проверяет наличие заголовка `HX-Request` в запросе. Если заголовок присутствует, то запрос передается следующему обработчику, иначе возвращается статус Forbidden.

При использовании данного middleware, эндпоинты, начинающиеся с `/ssr/`, будут доступны только для htmx-запросов.
В заголовках HX-Request always “true” https://htmx.org/docs/#requests
Похожие вопросы