Skip to content

Instantly share code, notes, and snippets.

@ritasker
Last active February 17, 2020 09:45
Show Gist options
  • Save ritasker/e6cfae59cc1d5fe3cd0e0bcb19db3121 to your computer and use it in GitHub Desktop.
Save ritasker/e6cfae59cc1d5fe3cd0e0bcb19db3121 to your computer and use it in GitHub Desktop.
public Task<KrakenFuturesTransfersResponse> FetchTransfers(DateTime? lastTransferTime = null)
{
var queryParams = new Dictionary<string, string>();
if(lastTransferTime != null)
{
queryParams.Add("lastTransferTime", lastTransferTime?.ToString("O"));
}
var webRequest = CreateAuthenticatedRequest(endpoint, queryParams)
var response = await this.client.SendAsync(webRequest)
.... // removed for brevity
}
private HttpRequestMessage CreateAuthenticatedRequest(string endpoint, IDictionary<string,string> payload)
{
var uriBuilder = new UriBuilder(this.client.BaseAddress)
{
Path = endpoint
};
string query = null;
if (payload != null)
{
var queryString = HttpUtility.ParseQueryString(string.Empty);
foreach (var (key, value) in payload)
{
queryString.AddOptional(key, value);
}
query = queryString.ToString();
if (!string.IsNullOrWhiteSpace(query))
{
uriBuilder.Query = query;
}
}
var nonce = dateTimeProvider.OffsetUtcNow.ToUnixTimeMillisecondsString();
var authent = GenerateAuthent(query, nonce, endpoint);
var request = new HttpRequestMessage
{
RequestUri = uriBuilder.Uri,
Method = HttpMethod.Get,
};
request.Headers.Add("APIKey", settings.ApiKey);
request.Headers.Add("Authent", authent);
request.Headers.Add("Nonce", nonce);
return request;
}
private string GenerateAuthent(string postData, string nonce, string endpoint)
{
using (var sha256 = SHA256.Create())
{
var payloadHash = sha256.ComputeHash(Encoding.UTF8.GetBytes($"{postData}{nonce}{endpoint}"));
var apiSecret = Convert.FromBase64String(this.settings.ApiSecret);
using (var hmacsha512 = new HMACSHA512(apiSecret))
{
var generateHashedSignature = hmacsha512.ComputeHash(payloadHash);
return Convert.ToBase64String(generateHashedSignature);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment