func()

in proxy/lib/proxy/proxy.go [197:227]


func (s *Service) proxy(w http.ResponseWriter, r *http.Request) {
	cloned := r.Clone(r.Context())

	if err := s.verifyClientCredentials(r); err != nil {
		httputils.WriteError(w, err)
		return
	}

	if err := s.verifyRequestPath(r); err != nil {
		httputils.WriteError(w, err)
		return
	}

	a, err := auth.FromContext(r.Context())
	if err != nil {
		httputils.WriteError(w, status.Errorf(status.Code(err), "read identity failed: %v", err))
		return
	}

	tok, err := s.getAccessTokenForSA(r.Context())
	if err != nil {
		httputils.WriteError(w, status.Errorf(codes.Unavailable, "getAccessTokenForSA() failed: %v", err))
		return
	}

	cloned.Header.Set("Authorization", "Bearer "+tok)

	idToFhirHeader(a.ID, s.opts.RemoveScopes, cloned)

	s.fhirProxy.ServeHTTP(w, cloned)
}