Exemplo n.º 1
0
        /// <summary>
        /// Actual validation process
        /// </summary>
        /// <param name="payload"></param>
        /// <returns></returns>
        private async Task <EtnPayload> ValidatePayload(EtnPayload payload)
        {
            bool isTesting = Request.Headers.ContainsKey("X-ETN-TESTING");

            if (isTesting)
            {
                if ((string)Request.Headers["X-ETN-TESTING"] != GetEtnXTestingSig())
                {
                    throw new Exception($"Invalid testing signature");
                }
            }
            var userAgent = GetHeaderOrThrow("User-Agent");
            var signature = GetHeaderOrThrow(EtnConstants.EtnSignatureRequestHeader);

            _logger.LogTrace("Validating payload {0} ", payload);

            if (isTesting)
            {
                userAgent = "Electroneum";
            }

            var payloadResult = await _webhookValidator.ValidateEtnWebHookPayloadAsync(userAgent, payload, signature);

            if (payloadResult != null)
            {
                // success result
                // log and store in database table somewhere
                _logger.LogInformation($"[Test:{isTesting}] Payment Received: timestamp:{payloadResult.TimeStamp} id:{payloadResult.PaymentId} amt:{payloadResult.Amount} customer:{payloadResult.Customer} ref:{payloadResult.Ref} ");
                // handle fulfulment process
            }
            return(payloadResult);
        }
        public async Task TestGetPayload()
        {
            var webHook = new EtnWebhookValidator(_mock.EtnVendorApiKey, _mock.EtnVendorApiSecretKey);
            var sample  = await _mock.CreateFreshPayLoadAndSigAsync();

            var userAgent = "Electroneum/0.1.0 (+https://electroneum.com/instant-payments)";
            var payLoad   = await webHook.ValidateEtnWebHookPayloadAsync(userAgent, sample.json, sample.signature);

            _out.WriteLine(JsonConvert.SerializeObject(payLoad, Formatting.Indented));
        }