openai/openai-go

Public

mirrored from https://github.com/openai/openai-goAvailable

CodeCommitsIssuesPull requestsActionsInsightsSecurity
next

Branches

Tags

  • No tags available.
0Branches0Tags
Go to file
Add file
Code

Clone

HTTPS

Download ZIP

auth/middleware.go

50lines · modecode

1package auth
2
3import (
4 "net/http"
5)
6
7func WorkloadIdentityMiddleware(
8 wia *WorkloadIdentityAuth,
9 httpClient HTTPDoer,
10 req *http.Request,
11 next func(*http.Request) (*http.Response, error),
12) (*http.Response, error) {
13 token, err := wia.GetToken(req.Context(), httpClient)
14 if err != nil {
15 return nil, err
16 }
17
18 req.Header.Set("Authorization", "Bearer "+token)
19
20 resp, err := next(req)
21 if err != nil || resp == nil || resp.StatusCode != http.StatusUnauthorized {
22 return resp, err
23 }
24
25 wia.invalidateToken()
26
27 if req.Body != nil && req.GetBody == nil {
28 return resp, nil
29 }
30
31 retryReq := req.Clone(req.Context())
32
33 token, err = wia.GetToken(req.Context(), httpClient)
34 if err != nil {
35 resp.Body.Close()
36 return nil, err
37 }
38 retryReq.Header.Set("Authorization", "Bearer "+token)
39
40 if req.GetBody != nil {
41 retryReq.Body, err = req.GetBody()
42 if err != nil {
43 resp.Body.Close()
44 return nil, err
45 }
46 }
47
48 resp.Body.Close()
49 return next(retryReq)
50}
51