public async Task <IActionResult> Process([FromQuery] string data, CancellationToken cancellationToken)
        {
            // Nothing to see here
            if (!IPAddress.IsLoopback(Request.HttpContext.Connection.RemoteIpAddress))
            {
                return(NotFound());
            }

            BridgeParameters request;

            try
            {
                request = JsonConvert.DeserializeObject <BridgeParameters>(data, DMApiConstants.SerializerSettings);
            }
            catch
            {
                logger.LogWarning("Error deserializing bridge request: {0}", data);
                return(BadRequest());
            }

            logger.LogTrace("Bridge Request: {0}", data);

            var response = await bridgeDispatcher.ProcessBridgeRequest(request, cancellationToken).ConfigureAwait(false);

            if (response == null)
            {
                Forbid();
            }

            var responseJson = JsonConvert.SerializeObject(response, DMApiConstants.SerializerSettings);

            logger.LogTrace("Bridge Response: {0}", responseJson);
            return(Content(responseJson, ApiHeaders.ApplicationJson));
        }
예제 #2
0
        public async Task <IActionResult> Process([FromQuery] string data, CancellationToken cancellationToken)
        {
            // Nothing to see here
            var remoteIP = Request.HttpContext.Connection.RemoteIpAddress;

            if (!IPAddress.IsLoopback(remoteIP))
            {
                logger.LogTrace("Ignoring remote bridge request from {0}", remoteIP);
                return(NotFound());
            }

            using (LogContext.PushProperty("Bridge", Interlocked.Increment(ref requestsProcessed)))
            {
                BridgeParameters request;
                try
                {
                    request = JsonConvert.DeserializeObject <BridgeParameters>(data, DMApiConstants.SerializerSettings);
                }
                catch (Exception ex)
                {
                    logger.LogWarning(ex, "Error deserializing bridge request: {0}", data);
                    return(BadRequest());
                }

                logger.LogTrace("Bridge Request: {0}", data);

                var response = await bridgeDispatcher.ProcessBridgeRequest(request, cancellationToken).ConfigureAwait(false);

                if (response == null)
                {
                    Forbid();
                }

                var responseJson = JsonConvert.SerializeObject(response, DMApiConstants.SerializerSettings);
                logger.LogTrace("Bridge Response: {0}", responseJson);
                return(Content(responseJson, MediaTypeNames.Application.Json));
            }
        }