Skip to content

Commit bba1e78

Browse files
committed
bitbucket: allow OAuth params to be overridden at runtime
Allow the OAuth client ID, secret, and redirect URI to be overridden at runtime using environment variables or config.
1 parent 80d55bc commit bba1e78

File tree

3 files changed

+65
-6
lines changed

3 files changed

+65
-6
lines changed

src/shared/Atlassian.Bitbucket/BitbucketAuthentication.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ public async Task<bool> ShowOAuthRequiredPromptAsync()
123123

124124
public async Task<OAuth2TokenResult> CreateOAuthCredentialsAsync(Uri targetUri)
125125
{
126-
var oauthClient = new BitbucketOAuth2Client(HttpClient);
126+
var oauthClient = new BitbucketOAuth2Client(HttpClient, Context.Settings);
127127

128128
var browserOptions = new OAuth2WebBrowserOptions
129129
{
@@ -139,7 +139,7 @@ public async Task<OAuth2TokenResult> CreateOAuthCredentialsAsync(Uri targetUri)
139139

140140
public async Task<OAuth2TokenResult> RefreshOAuthCredentialsAsync(string refreshToken)
141141
{
142-
var oauthClient = new BitbucketOAuth2Client(HttpClient);
142+
var oauthClient = new BitbucketOAuth2Client(HttpClient, Context.Settings);
143143

144144
return await oauthClient.GetTokenByRefreshTokenAsync(refreshToken, CancellationToken.None);
145145
}

src/shared/Atlassian.Bitbucket/BitbucketConstants.cs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,5 +21,22 @@ public static class OAuthScopes
2121
public const string RepositoryWrite = "repository:write";
2222
public const string Account = "account";
2323
}
24+
25+
public static class EnvironmentVariables
26+
{
27+
public const string DevOAuthClientId = "GCM_DEV_BITBUCKET_CLIENTID";
28+
public const string DevOAuthClientSecret = "GCM_DEV_BITBUCKET_CLIENTSECRET";
29+
public const string DevOAuthRedirectUri = "GCM_DEV_BITBUCKET_REDIRECTURI";
30+
}
31+
32+
public static class GitConfiguration
33+
{
34+
public static class Credential
35+
{
36+
public const string DevOAuthClientId = "bitbucketDevClientId";
37+
public const string DevOAuthClientSecret = "bitbucketDevClientSecret";
38+
public const string DevOAuthRedirectUri = "bitbucketDevRedirectUri";
39+
}
40+
}
2441
}
2542
}

src/shared/Atlassian.Bitbucket/BitbucketOAuth2Client.cs

Lines changed: 46 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
// Copyright (c) Microsoft Corporation. All rights reserved.
22
// Licensed under the MIT license.
3+
using System;
34
using System.Net.Http;
5+
using Microsoft.Git.CredentialManager;
46
using Microsoft.Git.CredentialManager.Authentication.OAuth;
57
using Microsoft.Git.CredentialManager.Authentication.OAuth.Json;
68
using Newtonsoft.Json;
@@ -13,14 +15,54 @@ public class BitbucketOAuth2Client : OAuth2Client
1315
BitbucketConstants.OAuth2AuthorizationEndpoint,
1416
BitbucketConstants.OAuth2TokenEndpoint);
1517

16-
public BitbucketOAuth2Client(HttpClient httpClient)
18+
public BitbucketOAuth2Client(HttpClient httpClient, ISettings settings)
1719
: base(httpClient, Endpoints,
18-
BitbucketConstants.OAuth2ClientId,
19-
BitbucketConstants.OAuth2RedirectUri,
20-
BitbucketConstants.OAuth2ClientSecret)
20+
GetClientId(settings), GetRedirectUri(settings), GetClientSecret(settings))
2121
{
2222
}
2323

24+
private static string GetClientId(ISettings settings)
25+
{
26+
// Check for developer override value
27+
if (settings.TryGetSetting(
28+
BitbucketConstants.EnvironmentVariables.DevOAuthClientId,
29+
Constants.GitConfiguration.Credential.SectionName, BitbucketConstants.GitConfiguration.Credential.DevOAuthClientId,
30+
out string clientId))
31+
{
32+
return clientId;
33+
}
34+
35+
return BitbucketConstants.OAuth2ClientId;
36+
}
37+
38+
private static Uri GetRedirectUri(ISettings settings)
39+
{
40+
// Check for developer override value
41+
if (settings.TryGetSetting(
42+
BitbucketConstants.EnvironmentVariables.DevOAuthRedirectUri,
43+
Constants.GitConfiguration.Credential.SectionName, BitbucketConstants.GitConfiguration.Credential.DevOAuthRedirectUri,
44+
out string redirectUriStr) && Uri.TryCreate(redirectUriStr, UriKind.Absolute, out Uri redirectUri))
45+
{
46+
return redirectUri;
47+
}
48+
49+
return BitbucketConstants.OAuth2RedirectUri;
50+
}
51+
52+
private static string GetClientSecret(ISettings settings)
53+
{
54+
// Check for developer override value
55+
if (settings.TryGetSetting(
56+
BitbucketConstants.EnvironmentVariables.DevOAuthClientSecret,
57+
Constants.GitConfiguration.Credential.SectionName, BitbucketConstants.GitConfiguration.Credential.DevOAuthClientSecret,
58+
out string clientId))
59+
{
60+
return clientId;
61+
}
62+
63+
return BitbucketConstants.OAuth2ClientSecret;
64+
}
65+
2466
protected override bool TryCreateTokenEndpointResult(string json, out OAuth2TokenResult result)
2567
{
2668
// We override the token endpoint response parsing because the Bitbucket authority returns

0 commit comments

Comments
 (0)