private DaikinUniversityApiSignature GenerateRequestAPISessionSignature(HttpMethod method, string apiRelativeUrl, HttpRequestHeaders headers) { StringBuilder sbToSign = new StringBuilder(); // Get all the x-csod headers that we must include in signature except the signature itself var csodHeaders = headers.Where(w => w.Key.StartsWith("x-csod-") && w.Key != "x-csod-signature") .Select(sm => new { Key = sm.Key, Value = sm.Value.Aggregate(string.Empty, (a, l) => a.Trim() + l.Trim()) }) .Distinct() .OrderBy(o => o.Key); sbToSign.Append(method); foreach (var csodHeader in csodHeaders) { sbToSign.AppendFormat("\n{0}:{1}", csodHeader.Key, csodHeader.Value); } sbToSign.Append("\n").Append(apiRelativeUrl); var signature = new DaikinUniversityApiSignature() { ApiSecret = SessionToken != null ? SessionToken.Secret : ConfigApiSecret, RequestedSignature = sbToSign.ToString() }; byte[] secretKeyBytes = Convert.FromBase64String(signature.ApiSecret); byte[] inputBytes = Encoding.UTF8.GetBytes(sbToSign.ToString()); using (var hmac = new HMACSHA512(secretKeyBytes)) { byte[] hashValue = hmac.ComputeHash(inputBytes); signature.Signature = Convert.ToBase64String(hashValue); } return(signature); }
private HttpRequestMessage GenerateRequestApplyAPISignature(HttpRequestMessage reqMsg, DaikinUniversityApiSignature signature) { reqMsg.Headers.Add("x-csod-signature", signature.Signature); return(reqMsg); }