@@ -40,45 +40,39 @@ const (
4040var errUnsupportedService = errors .New ("unsupported service" )
4141
4242type Store struct {
43- service string
44- baseURL string
45- telemetry bool
46- authType config.AuthMechanism
47- username string
48- password string
49- accessToken * atlasauth.Token
50- clientID string
51- clientSecret string
52- client * atlas.Client
43+ service string
44+ baseURL string
45+ telemetry bool
46+ httpClient * http.Client
47+ client * atlas.Client
5348 // Latest release of the autogenerated Atlas V2 API Client
5449 clientv2 * atlasv2.APIClient
5550 // Pinnned version to the most recent version that's working for clusters
5651 clientClusters * atlasClustersPinned.APIClient
5752 ctx context.Context
5853}
5954
60- func ( s * Store ) httpClient ( httpTransport http.RoundTripper ) (* http.Client , error ) {
61- switch s . authType {
55+ func HTTPClient ( c CredentialsGetter , httpTransport http.RoundTripper ) (* http.Client , error ) {
56+ switch c . AuthType () {
6257 case config .APIKeys :
63- t := transport .NewDigestTransport (s . username , s . password , httpTransport )
58+ t := transport .NewDigestTransport (c . PublicAPIKey (), c . PrivateAPIKey () , httpTransport )
6459 return t .Client ()
6560 case config .UserAccount :
66- tr , err := transport .NewAccessTokenTransport (s .accessToken , httpTransport , func (t * atlasauth.Token ) error {
61+ token , err := c .Token ()
62+ if err != nil {
63+ return nil , err
64+ }
65+ tr , err := transport .NewAccessTokenTransport (token , httpTransport , func (t * atlasauth.Token ) error {
6766 config .SetAccessToken (t .AccessToken )
6867 config .SetRefreshToken (t .RefreshToken )
6968 return config .Save ()
7069 })
7170 if err != nil {
7271 return nil , err
7372 }
74-
7573 return & http.Client {Transport : tr }, nil
7674 case config .ServiceAccount :
77- tr , err := transport .NewServiceAccountTransport (s .clientID , s .clientSecret , httpTransport )
78- if err != nil {
79- return nil , err
80- }
81- return & http.Client {Transport : tr }, nil
75+ return transport .NewServiceAccountClient (c .ClientID (), c .ClientSecret ()), nil
8276 default :
8377 return & http.Client {Transport : httpTransport }, nil
8478 }
@@ -149,23 +143,11 @@ type CredentialsGetter interface {
149143// WithAuthentication sets the store credentials.
150144func WithAuthentication (c CredentialsGetter ) Option {
151145 return func (s * Store ) error {
152- s .authType = c .AuthType ()
153- switch s .authType {
154- case config .APIKeys :
155- s .username = c .PublicAPIKey ()
156- s .password = c .PrivateAPIKey ()
157- case config .ServiceAccount :
158- s .clientID = c .ClientID ()
159- s .clientSecret = c .ClientSecret ()
160- case config .UserAccount :
161- fallthrough
162- default :
163- t , err := c .Token ()
164- if err != nil {
165- return err
166- }
167- s .accessToken = t
146+ client , err := HTTPClient (c , s .transport ())
147+ if err != nil {
148+ return err
168149 }
150+ s .httpClient = client
169151 return nil
170152 }
171153}
@@ -179,25 +161,25 @@ func WithContext(ctx context.Context) Option {
179161}
180162
181163// setAtlasClient sets the internal client to use an Atlas client and methods.
182- func (s * Store ) setAtlasClient (client * http. Client ) error {
164+ func (s * Store ) setAtlasClient () error {
183165 opts := []atlas.ClientOpt {atlas .SetUserAgent (config .UserAgent )}
184166 if s .baseURL != "" {
185167 opts = append (opts , atlas .SetBaseURL (s .baseURL ))
186168 }
187169 if log .IsDebugLevel () {
188170 opts = append (opts , atlas .SetWithRaw ())
189171 }
190- c , err := atlas .New (client , opts ... )
172+ c , err := atlas .New (s . httpClient , opts ... )
191173 if err != nil {
192174 return err
193175 }
194176
195- err = s .createV2Client (client )
177+ err = s .createV2Client (s . httpClient )
196178 if err != nil {
197179 return err
198180 }
199181
200- err = s .createClustersClient (client )
182+ err = s .createClustersClient (s . httpClient )
201183 if err != nil {
202184 return err
203185 }
@@ -318,11 +300,7 @@ func New(opts ...Option) (*Store, error) {
318300 }
319301 }
320302
321- client , err := store .httpClient (store .transport ())
322- if err != nil {
323- return nil , err
324- }
325- if err = store .setAtlasClient (client ); err != nil {
303+ if err := store .setAtlasClient (); err != nil {
326304 return nil , err
327305 }
328306
0 commit comments