Last active
February 17, 2020 09:45
-
-
Save ritasker/e6cfae59cc1d5fe3cd0e0bcb19db3121 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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