Skip to content

Commit c5909ca

Browse files
authored
Merge pull request #164 from swlodarski-sumoheavy/6.0.x
SP-1028 Add X-BitPay-Platform-Info header
2 parents 5060ff7 + c0fa22a commit c5909ca

File tree

3 files changed

+82
-34
lines changed

3 files changed

+82
-34
lines changed

BitPay/Client.cs

+15-11
Original file line numberDiff line numberDiff line change
@@ -34,26 +34,28 @@ public class Client
3434
/// Create Client class for POS.
3535
/// </summary>
3636
/// <param name="token">Pos token VO.</param>
37-
public Client(PosToken token)
37+
/// <param name="platformInfo">Platform info.</param>
38+
public Client(PosToken token, string? platformInfo = null)
3839
{
3940
if (token == null) throw new ArgumentNullException(nameof(token));
4041

4142
_accessTokens = GetAccessTokens(token);
42-
_bitPayClient = GetDefaultBitPayClient(Environment.Prod);
43+
_bitPayClient = GetDefaultBitPayClient(Environment.Prod, platformInfo);
4344
}
4445

4546
/// <summary>
4647
/// Create Client class for POS.
4748
/// </summary>
4849
/// <param name="token">Pos token VO.</param>
4950
/// <param name="environment">Environment</param>
50-
public Client(PosToken token, Environment environment)
51+
/// <param name="platformInfo">Platform info.</param>
52+
public Client(PosToken token, Environment environment, string? platformInfo = null)
5153
{
5254
if (token == null)
5355
throw new ArgumentNullException(nameof(token));
5456

5557
_accessTokens = GetAccessTokens(token);
56-
_bitPayClient = GetDefaultBitPayClient(environment);
58+
_bitPayClient = GetDefaultBitPayClient(environment, platformInfo);
5759
}
5860

5961
/// <summary>
@@ -62,7 +64,8 @@ public Client(PosToken token, Environment environment)
6264
/// <param name="environment">Environment</param>
6365
/// <param name="privateKey"></param>
6466
/// <param name="accessTokens"></param>
65-
public Client(PrivateKey privateKey, AccessTokens accessTokens, Environment environment = Environment.Prod)
67+
/// <param name="platformInfo">Platform info.</param>
68+
public Client(PrivateKey privateKey, AccessTokens accessTokens, Environment environment = Environment.Prod, string? platformInfo = null)
6669
{
6770
if (privateKey == null)
6871
{
@@ -79,7 +82,7 @@ public Client(PrivateKey privateKey, AccessTokens accessTokens, Environment envi
7982
var httpClient = GetHttpClient(baseUrl);
8083

8184
_accessTokens = accessTokens;
82-
_bitPayClient = new BitPayClient(httpClient, baseUrl, ecKey);
85+
_bitPayClient = new BitPayClient(httpClient, baseUrl, ecKey, platformInfo);
8386
CreateIdentity(ecKey);
8487
}
8588

@@ -88,7 +91,8 @@ public Client(PrivateKey privateKey, AccessTokens accessTokens, Environment envi
8891
/// </summary>
8992
/// <param name="configFilePath">Config File Path</param>
9093
/// <param name="environment">Environment</param>
91-
public Client(ConfigFilePath configFilePath, Environment environment = Environment.Prod)
94+
/// <param name="platformInfo">Platform info.</param>
95+
public Client(ConfigFilePath configFilePath, Environment environment = Environment.Prod, string? platformInfo = null)
9296
{
9397
if (configFilePath == null)
9498
{
@@ -102,7 +106,7 @@ public Client(ConfigFilePath configFilePath, Environment environment = Environme
102106
var baseUrl = GetBaseUrl(environment);
103107
var httpClient = GetHttpClient(baseUrl);
104108

105-
_bitPayClient = new BitPayClient(httpClient, baseUrl, ecKey);
109+
_bitPayClient = new BitPayClient(httpClient, baseUrl, ecKey, platformInfo);
106110
CreateIdentity(ecKey);
107111
}
108112

@@ -948,11 +952,11 @@ private AccessTokens GetAccessTokens(PosToken token)
948952
return accessTokens;
949953
}
950954

951-
private IBitPayClient GetDefaultBitPayClient(Environment environment)
955+
private IBitPayClient GetDefaultBitPayClient(Environment environment, string? platformInfo)
952956
{
953957
var baseUrl = GetBaseUrl(environment);
954958
var httpClient = GetHttpClient(baseUrl);
955-
return new BitPayClient(httpClient, baseUrl, null);
959+
return new BitPayClient(httpClient, baseUrl, null, platformInfo);
956960
}
957961

958962
private static HttpClient GetHttpClient(string baseUrl)
@@ -977,4 +981,4 @@ private EcKey GetEcKey(IConfiguration config, string env)
977981
.GetSection("BitPayConfiguration:EnvConfig:" + env + ":PrivateKey").Value);
978982
}
979983
}
980-
}
984+
}

BitPay/Clients/BitPayClient.cs

+23-22
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,14 @@ public class BitPayClient : IBitPayClient
1818
private readonly HttpClient _httpClient;
1919
private readonly string _baseUrl;
2020
private readonly EcKey? _ecKey;
21+
private readonly string? _platformInfo;
2122

22-
public BitPayClient(HttpClient httpClient, string baseUrl, EcKey? ecKey)
23+
public BitPayClient(HttpClient httpClient, string baseUrl, EcKey? ecKey, string? platformInfo = null)
2324
{
2425
this._httpClient = httpClient;
2526
this._baseUrl = baseUrl;
2627
this._ecKey = ecKey;
28+
this._platformInfo = platformInfo;
2729
}
2830

2931
/// <summary>
@@ -39,11 +41,9 @@ public async Task<HttpResponseMessage> Get(string uri, Dictionary<string, dynami
3941
bool signatureRequired = true)
4042
{
4143
var fullUrl = _baseUrl + uri;
42-
_httpClient.DefaultRequestHeaders.Clear();
43-
_httpClient.DefaultRequestHeaders.Add("x-accept-version", Config.BitPayApiVersion);
44-
_httpClient.DefaultRequestHeaders.Add("x-bitpay-plugin-info", Config.BitPayPluginInfo);
45-
_httpClient.DefaultRequestHeaders.Add("x-bitpay-api-frame", Config.BitPayApiFrame);
46-
_httpClient.DefaultRequestHeaders.Add("x-bitpay-api-frame-version", Config.BitPayApiFrameVersion);
44+
45+
AddDefaultHeaders();
46+
4747
if (parameters != null)
4848
{
4949
fullUrl += "?";
@@ -84,11 +84,7 @@ public async Task<HttpResponseMessage> Get(string uri, Dictionary<string, dynami
8484
public async Task<HttpResponseMessage> Delete(string uri, Dictionary<string, dynamic?>? parameters = null)
8585
{
8686
var fullUrl = _baseUrl + uri;
87-
_httpClient.DefaultRequestHeaders.Clear();
88-
_httpClient.DefaultRequestHeaders.Add("x-accept-version", Config.BitPayApiVersion);
89-
_httpClient.DefaultRequestHeaders.Add("x-bitpay-plugin-info", Config.BitPayPluginInfo);
90-
_httpClient.DefaultRequestHeaders.Add("x-bitpay-api-frame", Config.BitPayApiFrame);
91-
_httpClient.DefaultRequestHeaders.Add("x-bitpay-api-frame-version", Config.BitPayApiFrameVersion);
87+
AddDefaultHeaders();
9288

9389
if (parameters != null)
9490
{
@@ -121,11 +117,7 @@ public async Task<HttpResponseMessage> Post(string uri, string json, bool signat
121117
{
122118
using var bodyContent = new StringContent(UnicodeToAscii(json));
123119

124-
_httpClient.DefaultRequestHeaders.Clear();
125-
_httpClient.DefaultRequestHeaders.Add("x-accept-version", Config.BitPayApiVersion);
126-
_httpClient.DefaultRequestHeaders.Add("x-bitpay-plugin-info", Config.BitPayPluginInfo);
127-
_httpClient.DefaultRequestHeaders.Add("x-bitpay-api-frame", Config.BitPayApiFrame);
128-
_httpClient.DefaultRequestHeaders.Add("x-bitpay-api-frame-version", Config.BitPayApiFrameVersion);
120+
AddDefaultHeaders();
129121
bodyContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");
130122
if (signatureRequired)
131123
{
@@ -156,11 +148,7 @@ public async Task<HttpResponseMessage> Put(string uri, string json)
156148
{
157149
using var bodyContent = new StringContent(UnicodeToAscii(json));
158150

159-
_httpClient.DefaultRequestHeaders.Clear();
160-
_httpClient.DefaultRequestHeaders.Add("x-accept-version", Config.BitPayApiVersion);
161-
_httpClient.DefaultRequestHeaders.Add("x-bitpay-plugin-info", Config.BitPayPluginInfo);
162-
_httpClient.DefaultRequestHeaders.Add("x-bitpay-api-frame", Config.BitPayApiFrame);
163-
_httpClient.DefaultRequestHeaders.Add("x-bitpay-api-frame-version", Config.BitPayApiFrameVersion);
151+
AddDefaultHeaders();
164152
bodyContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");
165153

166154
var signature = KeyUtils.Sign(_ecKey, _baseUrl + uri + json);
@@ -193,5 +181,18 @@ private string UnicodeToAscii(string json)
193181
Encoding.ASCII.GetChars(asciiBytes, 0, asciiBytes.Length, asciiChars, 0);
194182
return new string(asciiChars);
195183
}
184+
185+
private void AddDefaultHeaders()
186+
{
187+
_httpClient.DefaultRequestHeaders.Clear();
188+
_httpClient.DefaultRequestHeaders.Add("x-accept-version", Config.BitPayApiVersion);
189+
_httpClient.DefaultRequestHeaders.Add("x-bitpay-plugin-info", Config.BitPayPluginInfo);
190+
_httpClient.DefaultRequestHeaders.Add("x-bitpay-api-frame", Config.BitPayApiFrame);
191+
_httpClient.DefaultRequestHeaders.Add("x-bitpay-api-frame-version", Config.BitPayApiFrameVersion);
192+
193+
if (!string.IsNullOrEmpty(this._platformInfo)) {
194+
_httpClient.DefaultRequestHeaders.Add("x-bitPay-platform-info", this._platformInfo);
195+
}
196+
}
196197
}
197-
}
198+
}

BitPayUnitTest/ClientTest.cs

+44-1
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,17 @@ public void it_should_provide_pos_client()
4848
Assert.Equal(posToken, client.GetAccessToken("pos"));
4949
}
5050

51+
[Fact]
52+
public void it_should_provide_pos_client_with_platform_info_header()
53+
{
54+
string posToken = "posToken";
55+
56+
var client = new Client(new PosToken(posToken), "MyPlatform_v1.0.0");
57+
58+
Assert.IsType<Client>(client);
59+
Assert.Equal(posToken, client.GetAccessToken("pos"));
60+
}
61+
5162
[Fact]
5263
public void it_should_provide_client_by_key()
5364
{
@@ -65,6 +76,23 @@ public void it_should_provide_client_by_key()
6576
Assert.Equal(merchantToken, client.GetAccessToken(Facade.Merchant));
6677
}
6778

79+
[Fact]
80+
public void it_should_provide_client_by_key_with_platform_info_header()
81+
{
82+
// given
83+
String privateKey =
84+
"75371435315047800683080420474719166774492308988314944856528163960396135344086";
85+
String merchantToken = "merchantToken";
86+
AccessTokens tokens = new AccessTokens();
87+
tokens.AddMerchant(merchantToken);
88+
89+
// when
90+
Client client = new Client(new PrivateKey(privateKey), tokens, Environment.Test, "MyPlatform_v1.0.0");
91+
92+
// then
93+
Assert.Equal(merchantToken, client.GetAccessToken(Facade.Merchant));
94+
}
95+
6896
[Fact]
6997
public void it_should_provide_client_by_config_file()
7098
{
@@ -79,6 +107,21 @@ public void it_should_provide_client_by_config_file()
79107
Assert.Equal("payoutToken", bitpay.GetAccessToken(Facade.Payout));
80108
}
81109

110+
111+
[Fact]
112+
public void it_should_provide_client_by_config_file_with_platform_info_header()
113+
{
114+
// given
115+
string path = GetBitPayUnitTestPath() + Path.DirectorySeparatorChar + "BitPay.config.json";
116+
117+
// when
118+
Client bitpay = new Client(new ConfigFilePath(path), Environment.Test, "MyPlatform_v1.0.0");
119+
120+
// then
121+
Assert.Equal("merchantToken", bitpay.GetAccessToken(Facade.Merchant));
122+
Assert.Equal("payoutToken", bitpay.GetAccessToken(Facade.Payout));
123+
}
124+
82125
[Fact]
83126
public void TestShouldThrowsBitPayExceptionForInvalidPrivateKey()
84127
{
@@ -2073,4 +2116,4 @@ private Client GetTestedClassAsPayout()
20732116
);
20742117
}
20752118
}
2076-
}
2119+
}

0 commit comments

Comments
 (0)