35 lines
849 B
Go
35 lines
849 B
Go
// Copyright 2023 the Pinniped contributors. All Rights Reserved.
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
package impersonator
|
|
|
|
import (
|
|
"fmt"
|
|
"net/http"
|
|
|
|
utilnet "k8s.io/apimachinery/pkg/util/net"
|
|
|
|
"go.pinniped.dev/internal/tokenclient"
|
|
)
|
|
|
|
type authorizationRoundTripper struct {
|
|
cache tokenclient.ExpiringSingletonTokenCacheGet
|
|
base http.RoundTripper
|
|
}
|
|
|
|
var _ utilnet.RoundTripperWrapper = (*authorizationRoundTripper)(nil)
|
|
|
|
func (rt *authorizationRoundTripper) WrappedRoundTripper() http.RoundTripper {
|
|
return rt.base
|
|
}
|
|
|
|
func (rt *authorizationRoundTripper) RoundTrip(req *http.Request) (*http.Response, error) {
|
|
req = utilnet.CloneRequest(req)
|
|
token := rt.cache.Get()
|
|
if token == "" {
|
|
return nil, fmt.Errorf("no token available")
|
|
}
|
|
req.Header.Set("Authorization", fmt.Sprintf("Bearer %s", token))
|
|
return rt.base.RoundTrip(req)
|
|
}
|