Example #1
0
        public async Task <IActionResult> UpdateNotification()
        {
            // `[FromBody] string body` doesn't work with System.Text.Json...
            var    reader  = new StreamReader(Request.Body);
            string request = await reader.ReadToEndAsync();

            _logger.LogInformation(request);

            if (!Request.Headers.TryGetValue(FitbitConstants.RequestSignatureHeader, out StringValues fitbitSignatureHeader) ||
                !_fitbitService.VerifyUpdateNotification(request, fitbitSignatureHeader[0]))
            {
                _logger.LogWarning($"Received invalid fitbit update notification: content={request}, signature={fitbitSignatureHeader.FirstOrDefault()}, IP address={HttpContext.Connection.RemoteIpAddress}.");
                return(NotFound());
            }

            await _fitbitService.ProcessUpdateNotificationAsync(
                JsonSerializer.Deserialize <IEnumerable <FitbitUpdateNotification> >(request));

            return(NoContent());
        }