Skip to content

Commit 8594f70

Browse files
Dynamic Credential Support
1 parent c9e5fa0 commit 8594f70

File tree

2 files changed

+21
-5
lines changed

2 files changed

+21
-5
lines changed

azuredevops/v7/client.go

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ func NewClientWithOptions(connection *Connection, baseUrl string, options ...Cli
8484
type Client struct {
8585
baseUrl string
8686
client *http.Client
87-
authorization string
87+
authorization func() (string, error)
8888
suppressFedAuthRedirect bool
8989
forceMsaPassThrough bool
9090
userAgent string
@@ -169,8 +169,12 @@ func (client *Client) CreateRequestMessage(ctx context.Context,
169169
req = req.WithContext(ctx)
170170
}
171171

172-
if client.authorization != "" {
173-
req.Header.Add(headerKeyAuthorization, client.authorization)
172+
if client.authorization != nil {
173+
authorizationHeader, err := client.authorization()
174+
if err != nil {
175+
return nil, err
176+
}
177+
req.Header.Add(headerKeyAuthorization, authorizationHeader)
174178
}
175179
accept := acceptMediaType
176180
if apiVersion != "" {

azuredevops/v7/connection.go

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,19 @@ func NewPatConnection(organizationUrl string, personalAccessToken string) *Conne
1919
authorizationString := CreateBasicAuthHeaderValue("", personalAccessToken)
2020
organizationUrl = normalizeUrl(organizationUrl)
2121
return &Connection{
22-
AuthorizationString: authorizationString,
22+
AuthorizationString: func() (string, error) {
23+
return authorizationString, nil
24+
},
25+
BaseUrl: organizationUrl,
26+
SuppressFedAuthRedirect: true,
27+
}
28+
}
29+
30+
// Creates a new Azure DevOps connection instance using a function that returns an authorization header string.
31+
func NewDynamicAuthorizationConnection(organizationUrl string, authProvider func() (string, error)) *Connection {
32+
organizationUrl = normalizeUrl(organizationUrl)
33+
return &Connection{
34+
AuthorizationString: authProvider,
2335
BaseUrl: organizationUrl,
2436
SuppressFedAuthRedirect: true,
2537
}
@@ -34,7 +46,7 @@ func NewAnonymousConnection(organizationUrl string) *Connection {
3446
}
3547

3648
type Connection struct {
37-
AuthorizationString string
49+
AuthorizationString func() (string, error)
3850
BaseUrl string
3951
UserAgent string
4052
SuppressFedAuthRedirect bool

0 commit comments

Comments
 (0)