1
1
package ec2metadata
2
2
3
3
import (
4
- request "github.com/aws/aws-sdk-go-v2/aws"
5
- "github.com/aws/aws-sdk-go-v2/aws/awserr"
6
- "github.com/aws/aws-sdk-go/aws/credentials"
7
4
"net/http"
8
5
"sync/atomic"
9
6
"time"
7
+
8
+ "github.com/aws/aws-sdk-go-v2/aws"
9
+ "github.com/aws/aws-sdk-go-v2/aws/awserr"
10
10
)
11
11
12
12
// A tokenProvider struct provides access to EC2Metadata client
@@ -24,7 +24,7 @@ type tokenProvider struct {
24
24
// A ec2Token struct helps use of token in EC2 Metadata service ops
25
25
type ec2Token struct {
26
26
token string
27
- credentials. Expiry
27
+ aws. Credentials
28
28
}
29
29
30
30
// newTokenProvider provides a pointer to a tokenProvider instance
@@ -33,24 +33,21 @@ func newTokenProvider(c *Client, duration time.Duration) *tokenProvider {
33
33
}
34
34
35
35
// fetchTokenHandler fetches token for EC2Metadata service client by default.
36
- func (t * tokenProvider ) fetchTokenHandler (r * request .Request ) {
36
+ func (t * tokenProvider ) fetchTokenHandler (r * aws .Request ) {
37
37
38
38
// short-circuits to insecure data flow if tokenProvider is disabled.
39
39
if v := atomic .LoadUint32 (& t .disabled ); v == 1 {
40
40
return
41
41
}
42
42
43
- if ec2Token , ok := t .token .Load ().(ec2Token ); ok && ! ec2Token .IsExpired () {
43
+ if ec2Token , ok := t .token .Load ().(ec2Token ); ok && ! ec2Token .Expired () {
44
44
r .HTTPRequest .Header .Set (tokenHeader , ec2Token .token )
45
45
return
46
46
}
47
47
48
48
output , err := t .client .getToken (t .configuredTTL )
49
-
50
49
if err != nil {
51
-
52
- // change the disabled flag on token provider to true,
53
- // when error is request timeout error.
50
+ // change the disabled flag on token provider to true, when error is request timeout error.
54
51
if requestFailureError , ok := err .(awserr.RequestFailure ); ok {
55
52
switch requestFailureError .StatusCode () {
56
53
case http .StatusForbidden , http .StatusNotFound , http .StatusMethodNotAllowed :
@@ -72,17 +69,17 @@ func (t *tokenProvider) fetchTokenHandler(r *request.Request) {
72
69
newToken := ec2Token {
73
70
token : output .Token ,
74
71
}
75
- newToken .SetExpiration (time .Now ().Add (output .TTL ), ttlExpirationWindow )
72
+ newToken .CanExpire = true
73
+ newToken .Expires = time .Now ().Add (output .TTL ).Add (- ttlExpirationWindow )
76
74
t .token .Store (newToken )
77
-
78
- // Inject token header to the request.
79
75
if ec2Token , ok := t .token .Load ().(ec2Token ); ok {
76
+ // Inject token header to the request.
80
77
r .HTTPRequest .Header .Set (tokenHeader , ec2Token .token )
81
78
}
82
79
}
83
80
84
81
// enableTokenProviderHandler enables the token provider
85
- func (t * tokenProvider ) enableTokenProviderHandler (r * request .Request ) {
82
+ func (t * tokenProvider ) enableTokenProviderHandler (r * aws .Request ) {
86
83
// If the error code status is 401, we enable the token provider
87
84
if e , ok := r .Error .(awserr.RequestFailure ); ok && e != nil &&
88
85
e .StatusCode () == http .StatusUnauthorized {
0 commit comments