...

Source file src/edge-infra.dev/pkg/sds/emergencyaccess/client/transport.go

Documentation: edge-infra.dev/pkg/sds/emergencyaccess/client

     1  package client
     2  
     3  import (
     4  	"net/http"
     5  
     6  	"edge-infra.dev/pkg/sds/emergencyaccess/eaconst"
     7  	"edge-infra.dev/pkg/sds/emergencyaccess/middleware"
     8  	"edge-infra.dev/pkg/sds/emergencyaccess/types"
     9  )
    10  
    11  // HTransport is an [http.RoundTripper] which extracts users authentication
    12  // details from the outgoing requests context, and adds the values into the
    13  // outgoing requests headers. Additionally extract the correlation ID from the
    14  // requests context and adds it to the outgoing requests headers
    15  type HTransport struct {
    16  	T http.RoundTripper
    17  }
    18  
    19  func (t *HTransport) RoundTrip(req *http.Request) (*http.Response, error) {
    20  	ctx := req.Context()
    21  
    22  	// TODO: Don't modify the request
    23  
    24  	user, ok := types.UserFromContext(ctx)
    25  	if ok {
    26  		addAuthHeaders(req, user)
    27  	}
    28  
    29  	correlationID := middleware.GetCorrelationID(ctx)
    30  	if correlationID != "" {
    31  		req.Header.Set(middleware.CorrelationIDKey, correlationID)
    32  	}
    33  
    34  	return t.T.RoundTrip(req)
    35  }
    36  
    37  // Modifies the request by adding the appropriate Auth headers. Overwrites any
    38  // existing auth headers
    39  func addAuthHeaders(req *http.Request, user types.User) {
    40  	req.Header.Set(eaconst.HeaderAuthKeyUsername, user.Username)
    41  	req.Header.Set(eaconst.HeaderAuthKeyEmail, user.Email)
    42  	req.Header.Del(eaconst.HeaderAuthKeyRoles)
    43  	req.Header.Del(eaconst.HeaderAuthKeyBanners)
    44  	for _, role := range user.Roles {
    45  		req.Header.Add(eaconst.HeaderAuthKeyRoles, role)
    46  	}
    47  	for _, banner := range user.Banners {
    48  		req.Header.Add(eaconst.HeaderAuthKeyBanners, banner)
    49  	}
    50  }
    51  

View as plain text