Go to Picture Account => workspace => Setting => APPS AND FEATURES => OAuth consumers => Add Customer. https://support.atlassian.com/bitbucket-cloud/docs/use-oauth-on-bitbucket-cloud/#Create-a-consumer
$ curl -X POST -u "client_id:secret" \
https://bitbucket.org/site/oauth2/access_token -d grant_type=password \
-d username={username} -d password={password}
/// <summary>
/// Generate token.
/// </summary>
/// <param name="refreshToken">The refresh token.</param>
/// <returns>The token.</returns>
private static async Task<Token> GetToken( string refreshToken)
{
using var httpClient = new HttpClient();
using var request = new HttpRequestMessage(new HttpMethod("POST"), "https://bitbucket.org/site/oauth2/access_token");
var base64authorization = Convert.ToBase64String(Encoding.ASCII.GetBytes("f6vHJv9Mwf2QECNAuY:tuBstxeBRYJbaPFL4hVKKjFupRm3WnFS"));// key:secret
request.Headers.TryAddWithoutValidation("Authorization", $"Basic {base64authorization}");
var contentList = !string.IsNullOrEmpty(refreshToken)
? new List<string>
{
"grant_type=refresh_token",
$"refresh_token={refreshToken}"
}
: new List<string>
{
"grant_type=password",
"username=mohammed_sajid",
"password=***************"
};
request.Content = new StringContent(string.Join("&", contentList));
request.Content.Headers.ContentType = MediaTypeHeaderValue.Parse("application/x-www-form-urlencoded");
var response = await httpClient.SendAsync(request);
var res = await response.Content.ReadAsStringAsync();
return JsonConvert.DeserializeObject<Token>(await response.Content.ReadAsStringAsync());
}
/// <summary>
/// Get repositories
/// </summary>
/// <param name="token">The token.</param>
/// <returns>The repositories name.</returns>
private static async Task<IList<string>> GetRepos(string token)
{
var request = WebRequest.Create("https://api.bitbucket.org/2.0/repositories/mohammed_sajid?role=admin") as HttpWebRequest;//mohammed_sajid => workspace id
request.Headers.Add("Authorization", $"Bearer {token}");
using var response = await request.GetResponseAsync().ConfigureAwait(false) as HttpWebResponse;
Stream stream = response.GetResponseStream();
string jsonRepo = new StreamReader(stream).ReadToEnd();
JObject obj = JObject.Parse(jsonRepo);
return obj.SelectToken("$.values").Select(o => o.SelectToken("slug").ToString()).ToList();
}
public class Token
{
[JsonProperty("access_token")]
public string AccesToken { get; set; }
[JsonProperty("refresh_token")]
public string RefreshToken { get; set; }
}
static async Task Main(string[] args)
{
try
{
// Get token from key/secret
Token token = await GetToken(null).ConfigureAwait(false);
// get repos
IList<string> repos = await GetRepos(token.AccesToken).ConfigureAwait(false);
Console.WriteLine(string.Join(", ", repos));
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}