@@ -23,8 +23,25 @@ import (
2323const (
2424 defaultEndpointPort = "9440"
2525 authorizationHeader = "Authorization"
26+ ntnxAPIKeyHeaderKey = "X-ntnx-api-key"
2627)
2728
29+ // apiClient is an interface that defines methods for adding default headers to the API client.
30+ type apiClient interface {
31+ AddDefaultHeader (key , value string )
32+ }
33+
34+ // setAuthHeader sets the authentication header for the API client based on the provided credentials.
35+ func setAuthHeader (apiClient apiClient , credentials prismgoclient.Credentials ) {
36+ if credentials .APIKey != "" {
37+ apiClient .AddDefaultHeader (ntnxAPIKeyHeaderKey , credentials .APIKey )
38+ } else {
39+ apiClient .AddDefaultHeader (
40+ authorizationHeader ,
41+ fmt .Sprintf ("Basic %s" , base64 .StdEncoding .EncodeToString ([]byte (fmt .Sprintf ("%s:%s" , credentials .Username , credentials .Password )))))
42+ }
43+ }
44+
2845// Client manages the V4 API
2946type Client struct {
3047 CategoriesApiInstance * prismApi.CategoriesApi
@@ -48,8 +65,14 @@ type ClientOption func(*Client) error
4865
4966// NewV4Client return an internal to operate V4 resources
5067func NewV4Client (credentials prismgoclient.Credentials , opts ... ClientOption ) (* Client , error ) {
51- if credentials .Username == "" || credentials .Password == "" || credentials .Endpoint == "" {
52- return nil , fmt .Errorf ("username, password and endpoint are required" )
68+ if credentials .APIKey != "" {
69+ if credentials .Endpoint == "" {
70+ return nil , fmt .Errorf ("endpoint is required for api key auth" )
71+ }
72+ } else {
73+ if credentials .Username == "" || credentials .Password == "" || credentials .Endpoint == "" {
74+ return nil , fmt .Errorf ("username, password and endpoint are required for basic auth" )
75+ }
5376 }
5477
5578 v4Client := & Client {}
@@ -90,8 +113,7 @@ func initVmApiInstance(v4Client *Client, credentials prismgoclient.Credentials)
90113 apiClientInstance .VerifySSL = ! credentials .Insecure
91114 apiClientInstance .Host = ep .host
92115 apiClientInstance .Port = ep .port
93- apiClientInstance .AddDefaultHeader (
94- authorizationHeader , fmt .Sprintf ("Basic %s" , base64 .StdEncoding .EncodeToString ([]byte (fmt .Sprintf ("%s:%s" , credentials .Username , credentials .Password )))))
116+ setAuthHeader (apiClientInstance , credentials )
95117 v4Client .VmApiInstance = vmApi .NewVmApi (apiClientInstance )
96118 v4Client .ImagesApiInstance = vmApi .NewImagesApi (apiClientInstance )
97119 return nil
@@ -106,8 +128,7 @@ func initClusterApiInstance(v4Client *Client, credentials prismgoclient.Credenti
106128 apiClientInstance .VerifySSL = ! credentials .Insecure
107129 apiClientInstance .Host = ep .host
108130 apiClientInstance .Port = ep .port
109- apiClientInstance .AddDefaultHeader (
110- authorizationHeader , fmt .Sprintf ("Basic %s" , base64 .StdEncoding .EncodeToString ([]byte (fmt .Sprintf ("%s:%s" , credentials .Username , credentials .Password )))))
131+ setAuthHeader (apiClientInstance , credentials )
111132 v4Client .ClustersApiInstance = clusterApi .NewClustersApi (apiClientInstance )
112133 return nil
113134}
@@ -121,8 +142,7 @@ func initPrismApiInstance(v4Client *Client, credentials prismgoclient.Credential
121142 apiClientInstance .VerifySSL = ! credentials .Insecure
122143 apiClientInstance .Host = ep .host
123144 apiClientInstance .Port = ep .port
124- apiClientInstance .AddDefaultHeader (
125- authorizationHeader , fmt .Sprintf ("Basic %s" , base64 .StdEncoding .EncodeToString ([]byte (fmt .Sprintf ("%s:%s" , credentials .Username , credentials .Password )))))
145+ setAuthHeader (apiClientInstance , credentials )
126146 v4Client .TasksApiInstance = prismApi .NewTasksApi (apiClientInstance )
127147 v4Client .CategoriesApiInstance = prismApi .NewCategoriesApi (apiClientInstance )
128148 return nil
@@ -137,8 +157,7 @@ func initSubnetApiInstance(v4Client *Client, credentials prismgoclient.Credentia
137157 apiClientInstance .SetVerifySSL (! credentials .Insecure )
138158 apiClientInstance .Host = ep .host
139159 apiClientInstance .Port = ep .port
140- apiClientInstance .AddDefaultHeader (
141- authorizationHeader , fmt .Sprintf ("Basic %s" , base64 .StdEncoding .EncodeToString ([]byte (fmt .Sprintf ("%s:%s" , credentials .Username , credentials .Password )))))
160+ setAuthHeader (apiClientInstance , credentials )
142161 v4Client .SubnetsApiInstance = networkingApi .NewSubnetsApi (apiClientInstance )
143162 v4Client .SubnetIPReservationApi = networkingApi .NewSubnetIPReservationApi (apiClientInstance )
144163 return nil
@@ -153,8 +172,7 @@ func initStorageApiInstance(v4Client *Client, credentials prismgoclient.Credenti
153172 apiClientInstance .SetVerifySSL (! credentials .Insecure )
154173 apiClientInstance .Host = ep .host
155174 apiClientInstance .Port = ep .port
156- apiClientInstance .AddDefaultHeader (
157- authorizationHeader , fmt .Sprintf ("Basic %s" , base64 .StdEncoding .EncodeToString ([]byte (fmt .Sprintf ("%s:%s" , credentials .Username , credentials .Password )))))
175+ setAuthHeader (apiClientInstance , credentials )
158176 v4Client .StorageContainerAPI = clusterApi .NewStorageContainersApi (apiClientInstance )
159177 return nil
160178}
@@ -168,8 +186,7 @@ func initVolumesApiInstance(v4Client *Client, credentials prismgoclient.Credenti
168186 apiClientInstance .SetVerifySSL (! credentials .Insecure )
169187 apiClientInstance .Host = ep .host
170188 apiClientInstance .Port = ep .port
171- apiClientInstance .AddDefaultHeader (
172- authorizationHeader , fmt .Sprintf ("Basic %s" , base64 .StdEncoding .EncodeToString ([]byte (fmt .Sprintf ("%s:%s" , credentials .Username , credentials .Password )))))
189+ setAuthHeader (apiClientInstance , credentials )
173190 v4Client .VolumeGroupsApiInstance = volumesApi .NewVolumeGroupsApi (apiClientInstance )
174191 return nil
175192}
0 commit comments