@@ -11,6 +11,7 @@ import (
1111 "time"
1212
1313 "github.com/stackitcloud/stackit-sdk-go/core/clients"
14+ "github.com/stackitcloud/stackit-sdk-go/core/utils"
1415)
1516
1617const (
@@ -75,25 +76,24 @@ type Middleware func(http.RoundTripper) http.RoundTripper
7576
7677// Configuration stores the configuration of the API client
7778type Configuration struct {
78- Host string `json:"host,omitempty"`
79- Scheme string `json:"scheme,omitempty"`
80- DefaultHeader map [string ]string `json:"defaultHeader,omitempty"`
81- UserAgent string `json:"userAgent,omitempty"`
82- Debug bool `json:"debug,omitempty"`
83- NoAuth bool `json:"noAuth,omitempty"`
84- WorkloadIdentityFederation bool `json:"workloadIdentityFederation,omitempty"`
85- ServiceAccountFederatedTokenExpiration string `json:"serviceAccountFederatedTokenExpiration,omitempty"`
86- ServiceAccountFederatedToken string `json:"serviceAccountFederatedToken,omitempty"`
87- ServiceAccountFederatedTokenPath string `json:"serviceAccountFederatedTokenPath,omitempty"`
88- ServiceAccountEmail string `json:"serviceAccountEmail,omitempty"`
89- Token string `json:"token,omitempty"`
90- ServiceAccountKey string `json:"serviceAccountKey,omitempty"`
91- PrivateKey string `json:"privateKey,omitempty"`
92- ServiceAccountKeyPath string `json:"serviceAccountKeyPath,omitempty"`
93- PrivateKeyPath string `json:"privateKeyPath,omitempty"`
94- CredentialsFilePath string `json:"credentialsFilePath,omitempty"`
95- TokenCustomUrl string `json:"tokenCustomUrl,omitempty"`
96- Region string `json:"region,omitempty"`
79+ Host string `json:"host,omitempty"`
80+ Scheme string `json:"scheme,omitempty"`
81+ DefaultHeader map [string ]string `json:"defaultHeader,omitempty"`
82+ UserAgent string `json:"userAgent,omitempty"`
83+ Debug bool `json:"debug,omitempty"`
84+ NoAuth bool `json:"noAuth,omitempty"`
85+ WorkloadIdentityFederation bool `json:"workloadIdentityFederation,omitempty"`
86+ ServiceAccountFederatedTokenExpiration string `json:"serviceAccountFederatedTokenExpiration,omitempty"`
87+ ServiceAccountFederatedTokenFunc func () (string , error ) `json:"serviceAccountFederatedTokenFunc,omitempty"`
88+ ServiceAccountEmail string `json:"serviceAccountEmail,omitempty"`
89+ Token string `json:"token,omitempty"`
90+ ServiceAccountKey string `json:"serviceAccountKey,omitempty"`
91+ PrivateKey string `json:"privateKey,omitempty"`
92+ ServiceAccountKeyPath string `json:"serviceAccountKeyPath,omitempty"`
93+ PrivateKeyPath string `json:"privateKeyPath,omitempty"`
94+ CredentialsFilePath string `json:"credentialsFilePath,omitempty"`
95+ TokenCustomUrl string `json:"tokenCustomUrl,omitempty"`
96+ Region string `json:"region,omitempty"`
9797 CustomAuth http.RoundTripper
9898 Servers ServerConfigurations
9999 OperationServers map [string ]ServerConfigurations
@@ -247,10 +247,30 @@ func WithWorkloadIdentityFederationAuth() ConfigurationOption {
247247 }
248248}
249249
250- // WithWorkloadIdentityFederation returns a ConfigurationOption that sets workload identity flow to be used for authentication in API calls
251- func WithWorkloadIdentityFederationTokenPath ( path string ) ConfigurationOption {
250+ // WithWorkloadIdentityFederationFunc returns a ConfigurationOption that sets the function to get the federated token for workload identity federation flow
251+ func WithWorkloadIdentityFederationFunc ( function func () ( string , error ) ) ConfigurationOption {
252252 return func (config * Configuration ) error {
253- config .ServiceAccountFederatedTokenPath = path
253+ config .ServiceAccountFederatedTokenFunc = function
254+ return nil
255+ }
256+ }
257+
258+ // WithWorkloadIdentityFederationPath returns a ConfigurationOption that sets the custom path to the federated token file for workload identity federation flow
259+ func WithWorkloadIdentityFederationPath (path string ) ConfigurationOption {
260+ return func (config * Configuration ) error {
261+ config .ServiceAccountFederatedTokenFunc = func () (string , error ) {
262+ return utils .ReadJWTFromFileSystem (path )
263+ }
264+ return nil
265+ }
266+ }
267+
268+ // WithWorkloadIdentityFederationFunc returns a ConfigurationOption that sets the id token for workload identity federation flow
269+ func WithWorkloadIdentityFederationToken (token string ) ConfigurationOption {
270+ return func (config * Configuration ) error {
271+ config .ServiceAccountFederatedTokenFunc = func () (string , error ) {
272+ return token , nil
273+ }
254274 return nil
255275 }
256276}
0 commit comments