Example #1
0
        public void TestCreateNewGuid()
        {
            var requestHeaderDictionary  = new HeaderDictionary();
            var responseHeaderDictionary = new HeaderDictionary();

            var httpRequestMoq = new Mock <HttpRequest>();

            httpRequestMoq.SetupGet(hrm => hrm.Headers).Returns(requestHeaderDictionary);

            var httpResponseMoq = new Mock <HttpResponse>();

            httpResponseMoq.SetupGet(hrm => hrm.Headers).Returns(responseHeaderDictionary);

            var httpContextMoq = new Mock <HttpContext>();

            httpContextMoq.SetupGet(hcm => hcm.Request).Returns(httpRequestMoq.Object);
            httpContextMoq.SetupGet(hcm => hcm.Response).Returns(httpResponseMoq.Object);

            var httpContextAccessorMoq = new Mock <IHttpContextAccessor>();

            httpContextAccessorMoq.SetupGet(hcam => hcam.HttpContext).Returns(httpContextMoq.Object);

            var provider = new CorrelationIdProvider(httpContextAccessorMoq.Object);

            Assert.NotEqual(Guid.Empty, provider.GetCorrelationId());
        }
Example #2
0
        public void TestGetFromResponseHeaders()
        {
            var guid = Guid.NewGuid();
            var requestHeaderDictionary  = new HeaderDictionary();
            var responseHeaderDictionary = new HeaderDictionary();

            responseHeaderDictionary.Add("Nar-Correlation-Id", guid.ToString());

            var httpRequestMoq = new Mock <HttpRequest>();

            httpRequestMoq.SetupGet(hrm => hrm.Headers).Returns(requestHeaderDictionary);

            var httpResponseMoq = new Mock <HttpResponse>();

            httpResponseMoq.SetupGet(hrm => hrm.Headers).Returns(responseHeaderDictionary);

            var httpContextMoq = new Mock <HttpContext>();

            httpContextMoq.SetupGet(hcm => hcm.Request).Returns(httpRequestMoq.Object);
            httpContextMoq.SetupGet(hcm => hcm.Response).Returns(httpResponseMoq.Object);

            var httpContextAccessorMoq = new Mock <IHttpContextAccessor>();

            httpContextAccessorMoq.SetupGet(hcam => hcam.HttpContext).Returns(httpContextMoq.Object);

            var provider = new CorrelationIdProvider(httpContextAccessorMoq.Object);

            Assert.Equal(guid, provider.GetCorrelationId());
        }
Example #3
0
        public Task InvokeAsync(HttpContext context, CorrelationIdProvider scopedCorrelationIdProvider)
        {
            _logger.LogInformation("Static correlation ID: {CorrelationId}", _staticCorrelationIdMiddleware.CorrelationId);
            context.Request.Headers.Add("correlation-id", $"{scopedCorrelationIdProvider.CorrelationId}");

            return(_next.Invoke(context));
        }
        protected virtual void AddHeaders(IAbpMethodInvocation invocation, ActionApiDescriptionModel action, HttpRequestMessage requestMessage, ApiVersionInfo apiVersion)
        {
            //API Version
            if (!apiVersion.Version.IsNullOrEmpty())
            {
                //TODO: What about other media types?
                requestMessage.Headers.Add("accept", $"{MimeTypes.Text.Plain}; v={apiVersion.Version}");
                requestMessage.Headers.Add("accept", $"{MimeTypes.Application.Json}; v={apiVersion.Version}");
                requestMessage.Headers.Add("api-version", apiVersion.Version);
            }

            //Header parameters
            var headers = action.Parameters.Where(p => p.BindingSourceId == ParameterBindingSources.Header).ToArray();

            foreach (var headerParameter in headers)
            {
                var value = HttpActionParameterHelper.FindParameterValue(invocation.ArgumentsDictionary, headerParameter);
                if (value != null)
                {
                    requestMessage.Headers.Add(headerParameter.Name, value.ToString());
                }
            }

            //CorrelationId
            requestMessage.Headers.Add(CorrelationIdOptions.HttpHeaderName, CorrelationIdProvider.Get());
        }
        public TargetClient(IHttpClientFactory httpClientFactory, CorrelationIdProvider correlationIdProvider, IOptions <BaseUrls> options)
        {
            _options = options.Value ?? throw new ArgumentNullException(nameof(options));
            var correlationId = correlationIdProvider.Invoke();

            _httpClient             = httpClientFactory.CreateClient("MyClient");
            _httpClient.BaseAddress = new System.Uri(_options.TargetClient);
        }
Example #6
0
        static void Main(string[] args)
        {
            Serilog.ILogger logger = new LoggerConfiguration()
                                     .WriteTo.Console()
                                     .CreateLogger();

            IFeatureToggle featureToggle = new FeatureToggles();

            //string specificationId = "a1fe8998-406b-44b8-92c7-502a560e7b6e";
            ////string providerId = "10027545";
            //string providerId = "10004758";

            string specificationId = "b1952bc1-4ed9-4ae1-b29d-c72d8d22e830";
            //string providerId = "10027545";
            string providerId = "10063088";

            IConfigurationRoot config = ConfigHelper.AddConfig();

            EngineSettings engineSettings = new EngineSettings();

            CosmosDbSettings dbSettings = new CosmosDbSettings();

            config.Bind("CosmosDbSettings", dbSettings);
            dbSettings.CollectionName = "providerdatasets";
            CosmosRepository calcsCosmosRepostory = new CosmosRepository(dbSettings);
            IProviderSourceDatasetsRepository providerSourceDatasetsRepository = new ProviderSourceDatasetsRepository(calcsCosmosRepostory, engineSettings);


            RedisSettings redisSettings = new RedisSettings();

            config.Bind("redisSettings", redisSettings);
            ICacheProvider cacheProvider = new StackExchangeRedisClientCacheProvider(redisSettings);

            ApiOptions apiOptions = new ApiOptions();

            config.Bind("resultsClient", apiOptions);

            ICorrelationIdProvider correlationIdProvider = new CorrelationIdProvider();

            IResultsApiClientProxy resultsApi = new ResultsApiProxy(apiOptions, logger, correlationIdProvider);

            IMapper mapper = new MapperConfiguration(c =>
            {
                c.AddProfile <ProviderMappingProfile>();
            }).CreateMapper();

            ProviderService providerService = new ProviderService(cacheProvider, resultsApi, mapper);

            FilesystemCacheProviderService filesystemCacheProviderService = new FilesystemCacheProviderService(providerService);

            AllocationModelDebugRunner debugger = new AllocationModelDebugRunner(logger, featureToggle, providerSourceDatasetsRepository, filesystemCacheProviderService);

            (IEnumerable <Models.Results.CalculationResult> calculationResults, long ms) = debugger.Execute(specificationId, providerId).Result;

            CalculationRunSummaryGenerator summaryGenerator = new CalculationRunSummaryGenerator();

            summaryGenerator.GenerateSummary(calculationResults, ms, specificationId, providerId);
        }
Example #7
0
 public CorrelationIdMiddleware(
     RequestDelegate next,
     CorrelationIdProvider staticCorrelationIdMiddleware,
     ILogger <CorrelationIdMiddleware> logger)
 {
     _next = next;
     _staticCorrelationIdMiddleware = staticCorrelationIdMiddleware;
     _logger = logger;
 }
Example #8
0
        public void TestExceptionThrownWhenNotInHttpContext()
        {
            var httpContextAccessorMoq = new Mock <IHttpContextAccessor>();

            var provider = new CorrelationIdProvider(httpContextAccessorMoq.Object);

            var ex = Assert.Throws <Exception>(() => provider.GetCorrelationId());

            Assert.Equal("Correlation Id was asked when not in a request context", ex.Message);
        }
        public void GetCorrelationId_return_correlationId_from_request_header()
        {
            var correlationId = Guid.NewGuid().ToString("D");
            var configuration = Substitute.For <IConfiguration>();

            configuration["CorrelationId"].Returns("CorrelationIdKey");

            var httpContextAccessor = Substitute.For <IHttpContextAccessor>();

            httpContextAccessor.HttpContext.Returns(new DefaultHttpContext());
            httpContextAccessor.HttpContext.Request.Headers["CorrelationIdKey"] = correlationId;

            var correlationIdProvider = new CorrelationIdProvider(configuration, httpContextAccessor);

            correlationIdProvider.GetCorrelationId().Should().Be(correlationId);
        }
        public void AddCorrelationId_without_existing_correlationId_set_correlationId()
        {
            var correlationId = Guid.NewGuid().ToString("D");
            var configuration = Substitute.For <IConfiguration>();

            configuration["CorrelationId"].Returns("CorrelationIdKey");

            var httpContextAccessor = Substitute.For <IHttpContextAccessor>();

            httpContextAccessor.HttpContext.Returns(new DefaultHttpContext());

            var correlationIdProvider = new CorrelationIdProvider(configuration, httpContextAccessor);

            correlationIdProvider.AddCorrelationId();

            httpContextAccessor.HttpContext.Request.Headers["CorrelationIdKey"].Should().NotBeNullOrEmpty();
        }
        protected virtual void AddHeaders(IAbpMethodInvocation invocation, ActionApiDescriptionModel action, HttpRequestMessage requestMessage, ApiVersionInfo apiVersion)
        {
            //API Version
            if (!apiVersion.Version.IsNullOrEmpty())
            {
                //TODO: What about other media types?
                requestMessage.Headers.Add("accept", $"{MimeTypes.Text.Plain}; v={apiVersion.Version}");
                requestMessage.Headers.Add("accept", $"{MimeTypes.Application.Json}; v={apiVersion.Version}");
                requestMessage.Headers.Add("api-version", apiVersion.Version);
            }

            //Header parameters
            var headers = action.Parameters.Where(p => p.BindingSourceId == ParameterBindingSources.Header).ToArray();

            foreach (var headerParameter in headers)
            {
                var value = HttpActionParameterHelper.FindParameterValue(invocation.ArgumentsDictionary, headerParameter);
                if (value != null)
                {
                    requestMessage.Headers.Add(headerParameter.Name, value.ToString());
                }
            }

            //CorrelationId
            requestMessage.Headers.Add(AbpCorrelationIdOptions.HttpHeaderName, CorrelationIdProvider.Get());

            //TenantId
            if (CurrentTenant.Id.HasValue)
            {
                //TODO: Use AbpAspNetCoreMultiTenancyOptions to get the key
                requestMessage.Headers.Add(TenantResolverConsts.DefaultTenantKey, CurrentTenant.Id.Value.ToString());
            }

            //Culture
            //TODO: Is that the way we want? Couldn't send the culture (not ui culture)
            var currentCulture = CultureInfo.CurrentUICulture.Name ?? CultureInfo.CurrentCulture.Name;

            if (!currentCulture.IsNullOrEmpty())
            {
                requestMessage.Headers.AcceptLanguage.Add(new StringWithQualityHeaderValue(currentCulture));
            }

            //X-Requested-With
            requestMessage.Headers.Add("X-Requested-With", "XMLHttpRequest");
        }
Example #12
0
        /// <summary>
        /// 创建
        /// </summary>
        protected override async Task <SecurityLogInfo> CreateAsync()
        {
            var securityLogInfo = await base.CreateAsync();

            securityLogInfo.CreationTime = DateTime.Now;

            securityLogInfo.UserId   = CurrentUser.UserId;
            securityLogInfo.UserName = CurrentUser.UserName;

            securityLogInfo.ClientId = CurrentClient.Id;

            securityLogInfo.CorrelationId = CorrelationIdProvider.Get();

            securityLogInfo.ClientIpAddress = WebClientInfoProvider.ClientIpAddress;
            securityLogInfo.BrowserInfo     = WebClientInfoProvider.BrowserInfo;

            return(securityLogInfo);
        }
        public void AddCorrelationId_with_correlationId_set_does_change_correlationId()
        {
            var correlationId = Guid.NewGuid().ToString("D");
            var configuration = Substitute.For <IConfiguration>();

            configuration["CorrelationId"].Returns("CorrelationIdKey");

            var httpContextAccessor = Substitute.For <IHttpContextAccessor>();

            httpContextAccessor.HttpContext.Returns(new DefaultHttpContext());
            httpContextAccessor.HttpContext.Request.Headers["CorrelationIdKey"] = correlationId;

            var correlationIdProvider = new CorrelationIdProvider(configuration, httpContextAccessor);

            correlationIdProvider.AddCorrelationId();

            httpContextAccessor.HttpContext.Request.Headers["CorrelationIdKey"].Should().BeEquivalentTo(correlationId);
        }
Example #14
0
        public BaseExceptionMiddleware(
            RequestDelegate next,
            ILogger <BaseExceptionMiddleware> logger,
            IFhirRequestContextAccessor fhirRequestContextAccessor,
            CorrelationIdProvider correlationIdProvider,
            IContentTypeService contentTypeService)
        {
            EnsureArg.IsNotNull(next, nameof(next));
            EnsureArg.IsNotNull(logger, nameof(logger));
            EnsureArg.IsNotNull(fhirRequestContextAccessor, nameof(fhirRequestContextAccessor));
            EnsureArg.IsNotNull(correlationIdProvider, nameof(correlationIdProvider));
            EnsureArg.IsNotNull(contentTypeService, nameof(contentTypeService));

            _next   = next;
            _logger = logger;
            _fhirRequestContextAccessor = fhirRequestContextAccessor;
            _correlationIdProvider      = correlationIdProvider;
            _contentTypeService         = contentTypeService;
        }
Example #15
0
        /// <summary>
        /// Create a search service client from the specified base uri and credentials.
        /// </summary>
        /// <param name="baseUri">The URL to the root of the service</param>
        /// <param name="resourceType">Resource type to query against</param>
        /// <param name="credentials">The credentials to connect to the service with</param>
        /// <param name="healthIndicatorStore">Health indicator store</param>
        /// <param name="handlers">Handlers to apply to the request in order from first to last</param>
        public SearchClient(Uri baseUri, string resourceType, ICredentials credentials, IEndpointHealthIndicatorStore healthIndicatorStore, params DelegatingHandler[] handlers)
        {
            _resourceType = resourceType;

            // Link the handlers
            HttpMessageHandler handler = new HttpClientHandler()
            {
                Credentials           = credentials,
                AllowAutoRedirect     = true,
                UseDefaultCredentials = credentials == null
            };

            foreach (var providedHandler in handlers.Reverse())
            {
                providedHandler.InnerHandler = handler;
                handler = providedHandler;
            }

            _httpClient = new HttpClient(handler, disposeHandler: true);

            _retryingHttpClientWrapper = new RetryingHttpClientWrapper(_httpClient, healthIndicatorStore);
            _discoveryClient           = new ServiceDiscoveryClient(_httpClient, baseUri);
            CorrelationIdProvider      = new CorrelationIdProvider();
        }
Example #16
0
    protected virtual void AddHeaders(HttpRequestMessage requestMessage)
    {
        //CorrelationId
        requestMessage.Headers.Add(AbpCorrelationIdOptions.HttpHeaderName, CorrelationIdProvider.Get());

        //TenantId
        if (CurrentTenant.Id.HasValue)
        {
            //TODO: Use AbpAspNetCoreMultiTenancyOptions to get the key
            requestMessage.Headers.Add(TenantResolverConsts.DefaultTenantKey, CurrentTenant.Id.Value.ToString());
        }

        //Culture
        //TODO: Is that the way we want? Couldn't send the culture (not ui culture)
        var currentCulture = CultureInfo.CurrentUICulture.Name ?? CultureInfo.CurrentCulture.Name;

        if (!currentCulture.IsNullOrEmpty())
        {
            requestMessage.Headers.AcceptLanguage.Add(new StringWithQualityHeaderValue(currentCulture));
        }

        //X-Requested-With
        requestMessage.Headers.Add("X-Requested-With", "XMLHttpRequest");
    }
Example #17
0
        public Task Invoke(HttpContext context, IFhirRequestContextAccessor fhirRequestContextAccessor, CorrelationIdProvider correlationIdProvider)
        {
            HttpRequest request = context.Request;

            string baseUriInString = UriHelper.BuildAbsolute(
                request.Scheme,
                request.Host,
                request.PathBase);

            string uriInString = UriHelper.BuildAbsolute(
                request.Scheme,
                request.Host,
                request.PathBase,
                request.Path,
                request.QueryString);

            string correlationId = correlationIdProvider.Invoke();

            object resourceType = null;

            RouteData routeData = context.GetRouteData();

            if (routeData != null && routeData.Values != null)
            {
                routeData.Values.TryGetValue(KnownActionParameterNames.ResourceType, out resourceType);
            }

            var fhirRequestContext = new FhirRequestContext(
                method: request.Method,
                uriString: uriInString,
                baseUriString: baseUriInString,
                correlationId: correlationId,
                requestHeaders: context.Request.Headers,
                responseHeaders: context.Response.Headers,
                resourceType: resourceType?.ToString());

            context.Response.Headers[RequestIdHeaderName] = correlationId;

            // Note that if this is executed before authentication occurs, the user will not contain any claims.
            if (context.User != null)
            {
                fhirRequestContext.Principal = context.User;
            }

            fhirRequestContextAccessor.FhirRequestContext = fhirRequestContext;

            // Call the next delegate/middleware in the pipeline
            return(_next(context));
        }
Example #18
0
        public async Task Invoke(HttpContext context, IFhirRequestContextAccessor fhirRequestContextAccessor, CorrelationIdProvider correlationIdProvider)
        {
            HttpRequest request = context.Request;

            string baseUriInString = UriHelper.BuildAbsolute(
                request.Scheme,
                request.Host,
                request.PathBase);

            string uriInString = UriHelper.BuildAbsolute(
                request.Scheme,
                request.Host,
                request.PathBase,
                request.Path,
                request.QueryString);

            string correlationId = correlationIdProvider.Invoke();

            var fhirRequestContext = new FhirRequestContext(
                method: request.Method,
                uriString: uriInString,
                baseUriString: baseUriInString,
                correlationId: correlationId,
                requestHeaders: context.Request.Headers,
                responseHeaders: context.Response.Headers);

            context.Response.Headers[RequestIdHeaderName] = correlationId;

            fhirRequestContextAccessor.FhirRequestContext = fhirRequestContext;

            // Call the next delegate/middleware in the pipeline
            await _next(context);
        }
 public CorrelationMiddleware(ILoggerScope loggerScope, CorrelationIdProvider correlationIdProvider, RequestDelegate next)
 {
     this._loggerScope      = loggerScope;
     _correlationIdProvider = correlationIdProvider;
     this._next             = next;
 }
Example #20
0
        public Task Invoke(HttpContext context, IFhirRequestContextAccessor fhirRequestContextAccessor, CorrelationIdProvider correlationIdProvider)
        {
            HttpRequest request = context.Request;

            string baseUriInString = UriHelper.BuildAbsolute(
                request.Scheme,
                request.Host,
                request.PathBase);

            string uriInString = UriHelper.BuildAbsolute(
                request.Scheme,
                request.Host,
                request.PathBase,
                request.Path,
                request.QueryString);

            string correlationId = correlationIdProvider.Invoke();

            var fhirRequestContext = new FhirRequestContext(
                method: request.Method,
                uriString: uriInString,
                baseUriString: baseUriInString,
                requestType: new CodingInfo(AuditEventType.System, AuditEventType.RestFulOperationCode),
                correlationId: correlationId,
                requestHeaders: context.Request.Headers,
                responseHeaders: context.Response.Headers);

            context.Response.Headers[RequestIdHeaderName] = correlationId;

            // Note that if this is executed before authentication occurs, the user will not contain any claims.
            if (context.User != null)
            {
                fhirRequestContext.Principal = context.User;
            }

            fhirRequestContextAccessor.FhirRequestContext = fhirRequestContext;

            // Call the next delegate/middleware in the pipeline
            return(_next(context));
        }
Example #21
0
        public Task Invoke(HttpContext context, IFhirRequestContextAccessor fhirRequestContextAccessor, CorrelationIdProvider correlationIdProvider)
        {
            HttpRequest request = context.Request;

            string baseUriInString = UriHelper.BuildAbsolute(
                request.Scheme,
                request.Host,
                request.PathBase);

            string uriInString = UriHelper.BuildAbsolute(
                request.Scheme,
                request.Host,
                request.PathBase,
                request.Path,
                request.QueryString);

            var fhirRequestContext = new FhirRequestContext(
                method: request.Method,
                uriString: uriInString,
                baseUriString: baseUriInString,
                requestType: ValueSets.AuditEventType.RestFulOperation,
                correlationId: correlationIdProvider.Invoke(),
                requestHeaders: context.Request.Headers,
                responseHeaders: context.Response.Headers);

            if (context.User != null)
            {
                fhirRequestContext.Principal = context.User;
            }

            fhirRequestContextAccessor.FhirRequestContext = fhirRequestContext;

            // Call the next delegate/middleware in the pipeline
            return(_next(context));
        }
Example #22
0
 public DefaultHttpRequestMessageHandlerNonWeb(CorrelationIdProvider correlationIdProvider)
 {
     _correlationIdProvider = correlationIdProvider;
 }
        public async Task Invoke(HttpContext context, RequestContextAccessor <IFhirRequestContext> fhirRequestContextAccessor, CorrelationIdProvider correlationIdProvider)
        {
            HttpRequest request = context.Request;

            string baseUriInString = UriHelper.BuildAbsolute(
                request.Scheme,
                request.Host,
                request.PathBase);

            string uriInString = UriHelper.BuildAbsolute(
                request.Scheme,
                request.Host,
                request.PathBase,
                request.Path,
                request.QueryString);

            string correlationId = correlationIdProvider.Invoke();

            // https://www.hl7.org/fhir/http.html#custom
            // If X-Request-Id header is present, then put it value into X-Correlation-Id header for response.
            if (context.Request.Headers.TryGetValue(KnownHeaders.RequestId, out var requestId) && !string.IsNullOrEmpty(requestId))
            {
                context.Response.Headers[KnownHeaders.CorrelationId] = requestId;
            }

            var fhirRequestContext = new FhirRequestContext(
                method: request.Method,
                uriString: uriInString,
                baseUriString: baseUriInString,
                correlationId: correlationId,
                requestHeaders: context.Request.Headers,
                responseHeaders: context.Response.Headers);

            context.Response.Headers[KnownHeaders.RequestId] = correlationId;

            fhirRequestContextAccessor.RequestContext = fhirRequestContext;

            // Call the next delegate/middleware in the pipeline
            await _next(context);
        }