@@ -14,6 +14,7 @@ import (
14
14
url2 "net/url"
15
15
"time"
16
16
17
+ "github.com/rancher/rancherd/pkg/tpm"
17
18
"github.com/rancher/wrangler/pkg/randomtoken"
18
19
)
19
20
@@ -42,18 +43,33 @@ func get(server, token, path string, clusterToken bool) ([]byte, string, error)
42
43
}
43
44
u .Path = path
44
45
45
- req , err := http .NewRequest (http .MethodGet , u .String (), nil )
46
+ var (
47
+ isTPM bool
48
+ )
49
+ if ! clusterToken {
50
+ isTPM , token , err = tpm .ResolveToken (token )
51
+ if err != nil {
52
+ return nil , "" , err
53
+ }
54
+ }
55
+
56
+ cacert , caChecksum , err := CACerts (server , token , clusterToken )
46
57
if err != nil {
47
58
return nil , "" , err
48
59
}
49
- if ! clusterToken {
50
- req .Header .Set ("Authorization" , "Bearer " + base64 .StdEncoding .EncodeToString ([]byte (token )))
60
+
61
+ if isTPM {
62
+ data , err := tpm .Get (cacert , u .String (), nil )
63
+ return data , caChecksum , err
51
64
}
52
65
53
- cacert , caChecksum , err := CACerts ( server , token , clusterToken )
66
+ req , err := http . NewRequest ( http . MethodGet , u . String (), nil )
54
67
if err != nil {
55
68
return nil , "" , err
56
69
}
70
+ if ! clusterToken {
71
+ req .Header .Set ("Authorization" , "Bearer " + base64 .StdEncoding .EncodeToString ([]byte (token )))
72
+ }
57
73
58
74
var resp * http.Response
59
75
if len (cacert ) == 0 {
@@ -103,6 +119,13 @@ func CACerts(server, token string, clusterToken bool) ([]byte, string, error) {
103
119
if ! clusterToken {
104
120
requestURL = fmt .Sprintf ("https://%s/v1-rancheros/cacerts" , url .Host )
105
121
}
122
+
123
+ if resp , err := http .Get (requestURL ); err == nil {
124
+ _ , _ = ioutil .ReadAll (resp .Body )
125
+ resp .Body .Close ()
126
+ return nil , "" , nil
127
+ }
128
+
106
129
req , err := http .NewRequest (http .MethodGet , requestURL , nil )
107
130
if err != nil {
108
131
return nil , "" , err
@@ -121,6 +144,10 @@ func CACerts(server, token string, clusterToken bool) ([]byte, string, error) {
121
144
return nil , "" , err
122
145
}
123
146
147
+ if resp .StatusCode != http .StatusOK {
148
+ return nil , "" , fmt .Errorf ("response %d: %s getting cacerts: %s" , resp .StatusCode , resp .Status , data )
149
+ }
150
+
124
151
if resp .Header .Get ("X-Cattle-Hash" ) != hash (token , nonce , data ) {
125
152
return nil , "" , fmt .Errorf ("response hash (%s) does not match (%s)" ,
126
153
resp .Header .Get ("X-Cattle-Hash" ),
0 commit comments