polycule-connect/polyculeconnect/internal/middlewares/test.go
Melora Hugues a0849388a7
Some checks failed
/ docker-build-only (push) Failing after 37s
/ go-test (push) Failing after 1m28s
Add login workflow until callback (#48)
2024-10-06 22:11:58 +02:00

45 lines
1,000 B
Go

package middlewares
import (
"context"
"net/http"
)
const (
backendNameQueryParam = "connector_id"
backendCtxKeyName = "backendName"
)
type BackendFromRequestMiddleware struct {
h http.Handler
}
func (m *BackendFromRequestMiddleware) ServeHTTP(w http.ResponseWriter, r *http.Request) {
if r.URL.Path != "/authorize" {
m.h.ServeHTTP(w, r)
return
}
if err := r.ParseForm(); err != nil {
// TODO: handle this better
w.WriteHeader(http.StatusBadRequest)
return
}
backendName := r.Form.Get(backendNameQueryParam)
// TODO this should be explicitly handled
if backendName == "" {
w.WriteHeader(http.StatusBadRequest)
w.Write([]byte("no backend id provided"))
return
}
// TODO we should test that this backend actually exists here
ctx := context.WithValue(r.Context(), backendCtxKeyName, backendName)
m.h.ServeHTTP(w, r.WithContext(ctx))
}
func WithBackendFromRequestMiddleware(input http.Handler) http.Handler {
return &BackendFromRequestMiddleware{h: input}
}