Exemplo n.º 1
0
        public SspProxyRequestMiddlewareTests()
        {
            var sspApiSettingsMock = new Mock <IOptionsSnapshot <ApiSetting> >();

            sspApiSettingsMock.Setup(op => op.Get(It.IsAny <string>())).Returns(AppSettings.SspApiSettings);

            var responseContent = FhirBinaries.Html.AsJsonString();
            var response        = new CommandResponse
            {
                StatusCode = 200,
                Headers    = new Dictionary <string, IEnumerable <string> >
                {
                    { HeaderNames.ContentType, new StringValues(new string[] { "application/fhir+json" }) },
                    { HeaderNames.ContentLength, new StringValues(new string[] { "80" }) }
                },
                Content = Encoding.UTF8.GetBytes(responseContent)
            };

            var sspServiceMock = new Mock <ISspProxyService>();

            sspServiceMock.Setup(op => op.ForwardRequest(It.IsAny <CommandRequest>())).Returns(Task.FromResult(response));


            _sspProxyService = sspServiceMock.Object;
            _sspApiSettings  = sspApiSettingsMock.Object;
        }
Exemplo n.º 2
0
 public void Dispose()
 {
     _sspApiSettings  = null;
     _sspProxyService = null;
 }
        public async SystemTasks.Task Invoke(HttpContext context, IOptionsSnapshot <ApiSetting> apiSettings, ISspProxyService _sspProxyService)
        {
            _sspApiSettings = apiSettings.Get("SspApiSetting");

            var request = new CommandRequest();

            var forwardingUrl = context.Request.Path.Value.Replace($"{_sspApiSettings.BasePath}/", "");

            request.Headers    = context.Request.Headers.Select(h => KeyValuePair.Create(h.Key, string.Join("; ", (h.Value.ToList()))));
            request.Method     = HttpMethod.Get; //could be more types in future, so fetch from context
            request.ForwardUrl = new Uri(WebUtility.UrlDecode(forwardingUrl));
            request.Forwarded  = new Forwarded
            {
                By       = context.Connection.LocalIpAddress.ToString(),
                For      = context.Connection.RemoteIpAddress.ToString(),
                Host     = request.ForwardUrl.Host,
                Protocol = _sspApiSettings.Secure ? "https" : "http"
            };

            var result = await _sspProxyService.ForwardRequest(request);

            context.Response.StatusCode = result.StatusCode;

            foreach (var resHeader in result.Headers)
            {
                context.Response.Headers.Add(resHeader.Key, new StringValues(resHeader.Value.ToArray()));
            }

            await context.Response.Body.WriteAsync(result.Content, 0, result.Content.Length);
        }