...
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
12
13
14
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
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
38
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