Archived
52 lines
1.6 KiB
Go
52 lines
1.6 KiB
Go
package httpapi
|
|
|
|
import (
|
|
"errors"
|
|
"net/http"
|
|
|
|
"github.com/go-chi/chi/v5"
|
|
"go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp"
|
|
"go.opentelemetry.io/otel/metric"
|
|
"go.opentelemetry.io/otel/propagation"
|
|
"go.opentelemetry.io/otel/trace"
|
|
)
|
|
|
|
type Endpoints struct {
|
|
Metadata http.Handler
|
|
Token http.Handler
|
|
JWKS http.Handler
|
|
Health http.Handler
|
|
Ready http.Handler
|
|
}
|
|
|
|
type Telemetry struct {
|
|
TracerProvider trace.TracerProvider
|
|
MeterProvider metric.MeterProvider
|
|
Propagators propagation.TextMapPropagator
|
|
}
|
|
|
|
func NewRouter(endpoints Endpoints, telemetry Telemetry) (http.Handler, error) {
|
|
if endpoints.Metadata == nil || endpoints.Token == nil || endpoints.JWKS == nil || endpoints.Health == nil || endpoints.Ready == nil {
|
|
return nil, errors.New("all HTTP endpoints are required")
|
|
}
|
|
|
|
router := chi.NewRouter()
|
|
router.Get("/.well-known/oauth-authorization-server", endpoints.Metadata.ServeHTTP)
|
|
router.Post("/oauth2/token", endpoints.Token.ServeHTTP)
|
|
router.Get("/oauth2/jwks", endpoints.JWKS.ServeHTTP)
|
|
router.Get("/healthz", endpoints.Health.ServeHTTP)
|
|
router.Get("/readyz", endpoints.Ready.ServeHTTP)
|
|
|
|
options := make([]otelhttp.Option, 0, 3)
|
|
if telemetry.TracerProvider != nil {
|
|
options = append(options, otelhttp.WithTracerProvider(telemetry.TracerProvider))
|
|
}
|
|
if telemetry.MeterProvider != nil {
|
|
options = append(options, otelhttp.WithMeterProvider(telemetry.MeterProvider))
|
|
}
|
|
if telemetry.Propagators != nil {
|
|
options = append(options, otelhttp.WithPropagators(telemetry.Propagators))
|
|
}
|
|
return otelhttp.NewHandler(router, "workload-sts.http", options...), nil
|
|
}
|