From 0168058dcff4aab35d5c19157b70a1a9197d2cd3 Mon Sep 17 00:00:00 2001 From: Efstathios Chouliaris Date: Fri, 25 Oct 2024 09:06:39 -0500 Subject: [PATCH] Add Bearer Auth Helper Method In Connections --- azuredevops/connection.go | 18 +++++++++++++++++- azuredevops/v6/connection.go | 18 +++++++++++++++++- azuredevops/v7/connection.go | 18 +++++++++++++++++- 3 files changed, 51 insertions(+), 3 deletions(-) diff --git a/azuredevops/connection.go b/azuredevops/connection.go index eb76f53c..72a35233 100644 --- a/azuredevops/connection.go +++ b/azuredevops/connection.go @@ -7,6 +7,7 @@ import ( "context" "crypto/tls" "encoding/base64" + "fmt" "strings" "sync" "time" @@ -25,6 +26,17 @@ func NewPatConnection(organizationUrl string, personalAccessToken string) *Conne } } +// Creates a new Azure DevOps connection instance using a bearer access token generated by OAuth flows. +func NewBearerConnection(organizationUrl string, bearerAccessToken string) *Connection { + authorizationString := CreateBearerAuthHeaderValue(bearerAccessToken) + organizationUrl = normalizeUrl(organizationUrl) + return &Connection{ + AuthorizationString: authorizationString, + BaseUrl: organizationUrl, + SuppressFedAuthRedirect: true, + } +} + func NewAnonymousConnection(organizationUrl string) *Connection { organizationUrl = normalizeUrl(organizationUrl) return &Connection{ @@ -49,7 +61,11 @@ type Connection struct { func CreateBasicAuthHeaderValue(username, password string) string { auth := username + ":" + password - return "Basic " + base64.StdEncoding.EncodeToString([]byte(auth)) + return fmt.Sprintf("Basic %s", base64.StdEncoding.EncodeToString([]byte(auth))) +} + +func CreateBearerAuthHeaderValue(bearerToken string) string { + return fmt.Sprintf("Bearer %s", bearerToken) } func normalizeUrl(url string) string { diff --git a/azuredevops/v6/connection.go b/azuredevops/v6/connection.go index eb76f53c..72a35233 100644 --- a/azuredevops/v6/connection.go +++ b/azuredevops/v6/connection.go @@ -7,6 +7,7 @@ import ( "context" "crypto/tls" "encoding/base64" + "fmt" "strings" "sync" "time" @@ -25,6 +26,17 @@ func NewPatConnection(organizationUrl string, personalAccessToken string) *Conne } } +// Creates a new Azure DevOps connection instance using a bearer access token generated by OAuth flows. +func NewBearerConnection(organizationUrl string, bearerAccessToken string) *Connection { + authorizationString := CreateBearerAuthHeaderValue(bearerAccessToken) + organizationUrl = normalizeUrl(organizationUrl) + return &Connection{ + AuthorizationString: authorizationString, + BaseUrl: organizationUrl, + SuppressFedAuthRedirect: true, + } +} + func NewAnonymousConnection(organizationUrl string) *Connection { organizationUrl = normalizeUrl(organizationUrl) return &Connection{ @@ -49,7 +61,11 @@ type Connection struct { func CreateBasicAuthHeaderValue(username, password string) string { auth := username + ":" + password - return "Basic " + base64.StdEncoding.EncodeToString([]byte(auth)) + return fmt.Sprintf("Basic %s", base64.StdEncoding.EncodeToString([]byte(auth))) +} + +func CreateBearerAuthHeaderValue(bearerToken string) string { + return fmt.Sprintf("Bearer %s", bearerToken) } func normalizeUrl(url string) string { diff --git a/azuredevops/v7/connection.go b/azuredevops/v7/connection.go index eb76f53c..72a35233 100644 --- a/azuredevops/v7/connection.go +++ b/azuredevops/v7/connection.go @@ -7,6 +7,7 @@ import ( "context" "crypto/tls" "encoding/base64" + "fmt" "strings" "sync" "time" @@ -25,6 +26,17 @@ func NewPatConnection(organizationUrl string, personalAccessToken string) *Conne } } +// Creates a new Azure DevOps connection instance using a bearer access token generated by OAuth flows. +func NewBearerConnection(organizationUrl string, bearerAccessToken string) *Connection { + authorizationString := CreateBearerAuthHeaderValue(bearerAccessToken) + organizationUrl = normalizeUrl(organizationUrl) + return &Connection{ + AuthorizationString: authorizationString, + BaseUrl: organizationUrl, + SuppressFedAuthRedirect: true, + } +} + func NewAnonymousConnection(organizationUrl string) *Connection { organizationUrl = normalizeUrl(organizationUrl) return &Connection{ @@ -49,7 +61,11 @@ type Connection struct { func CreateBasicAuthHeaderValue(username, password string) string { auth := username + ":" + password - return "Basic " + base64.StdEncoding.EncodeToString([]byte(auth)) + return fmt.Sprintf("Basic %s", base64.StdEncoding.EncodeToString([]byte(auth))) +} + +func CreateBearerAuthHeaderValue(bearerToken string) string { + return fmt.Sprintf("Bearer %s", bearerToken) } func normalizeUrl(url string) string {