Example #1
0
 public FhirClientFactory(
     IAuthenticationService authenticationService,
     IOptions <FhirClientSettings> fhirClientSettings)
 {
     _authenticationService = authenticationService;
     _fhirClientSettings    = fhirClientSettings.Value;
 }
        public void Initialize()
        {
            _logger.LogDebug(nameof(Initialize));
            var defSettings = new FhirClientSettings
            {
                UseFormatParameter = true,
                PreferredFormat    = ResourceFormat.Json,
                PreferredReturn    = Prefer.ReturnRepresentation,
                Timeout            = 10000 // 10 seconds
            };

            Endpoint = _fhirOptions.Endpoint;

            if (string.IsNullOrWhiteSpace(_fhirOptions.BearerToken))
            {
                Client = new FhirClient(Endpoint, defSettings);
            }
            else
            {
                var messageHandler = new AuthenticationMessageHandler
                {
                    Authorization = new AuthenticationHeaderValue("Bearer", _fhirOptions.BearerToken)
                };
                Client = new FhirClient(Endpoint, defSettings, messageHandler);
            }
        }
Example #3
0
        public GoogleFhirClient(Uri endpoint, FhirClientSettings settings = null, HttpMessageHandler messageHandler = null, IStructureDefinitionSummaryProvider provider = null) : base(endpoint, settings, messageHandler, provider)
        {
            var creds = GoogleCredential.GetApplicationDefault().CreateScoped("https://www.googleapis.com/auth/cloud-platform");
            var toks  = creds.UnderlyingCredential.GetAccessTokenForRequestAsync("https://oauth2.googleapis.com/token");

            RequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", toks.GetAwaiter().GetResult());
            Settings.PreferredFormat     = ResourceFormat.Json;
        }
 public ClientCredentialsAuthenticationService(
     HttpClient httpClient,
     IMemoryCache cache,
     IOptions <FhirClientSettings> fhirClientSettings)
 {
     _httpClient         = httpClient;
     _cache              = cache;
     _fhirClientSettings = fhirClientSettings.Value;
 }
Example #5
0
        public ActionResult <Bundle> GetPatients()
        {
            var settings = new FhirClientSettings
            {
                Timeout           = 10,
                PreferredFormat   = ResourceFormat.Json,
                VerifyFhirVersion = true,
                PreferredReturn   = Prefer.ReturnMinimal
            };

            var    client  = new FhirClient("http://fhir.healthintersections.com.au/open", settings);
            Bundle results = client.Search <Patient>(new string[] { "family:exact=Eve" });

            return(results);
        }
Example #6
0
        private async Task ValidateFhirClientUrl(string url, bool expectedIsValid)
        {
            var fhirClientSettings = new FhirClientSettings
            {
                PreferredFormat = ResourceFormat.Json,
            };

            var fhirClient = new FhirClient(new Uri(url), fhirClientSettings.PreferredFormat);

            var logger = Substitute.For <ITelemetryLogger>();

            bool actualIsValid = await fhirClient.ValidateFhirClientAsync(logger);

            Assert.Equal(expectedIsValid, actualIsValid);
        }
        private static FhirClient CreateClient(IAuthService authService)
        {
            var url = System.Environment.GetEnvironmentVariable("FhirService:Url");

            EnsureArg.IsNotNullOrEmpty(url, nameof(url));

            EnsureArg.IsNotNull(authService, nameof(authService));

            var fhirClientSettings = new FhirClientSettings
            {
                PreferredFormat = ResourceFormat.Json,
            };

            var client = new FhirClient(url, fhirClientSettings, new BearerTokenAuthorizationMessageHandler(authService));

            return(client);
        }
Example #8
0
        private static FhirClient CreateClient(TokenCredential tokenCredential, ITelemetryLogger logger)
        {
            var url = Environment.GetEnvironmentVariable("FhirService:Url");

            EnsureArg.IsNotNullOrEmpty(url, nameof(url));
            var uri = new Uri(url);

            EnsureArg.IsNotNull(tokenCredential, nameof(tokenCredential));

            var fhirClientSettings = new FhirClientSettings
            {
                PreferredFormat = ResourceFormat.Json,
            };

            var client = new FhirClient(url, fhirClientSettings, new BearerTokenAuthorizationMessageHandler(uri, tokenCredential, logger));

            return(client);
        }
Example #9
0
        internal FhirClientWrapper(string endpoint, ILogger logger, FhirVersion?fhirVersion = null, string accessToken = null)
        {
            Endpoint     = endpoint;
            _logger      = logger;
            _accessToken = accessToken;

            if (fhirVersion == FhirVersion.None)
            {
                var r3Handler = new R3Rest.HttpClientEventHandler();
                r3Handler.OnBeforeRequest += R3Client_OnBeforeRequest;
                r3Handler.OnAfterResponse += R3Client_OnAfterRequest;
                R3Client = new R3Rest.FhirClient(endpoint, FhirClientSettings.CreateDefault(), r3Handler);

                var meta = R3Client.CapabilityStatement(SummaryType.Text);
                fhirVersion = FhirVersionUtils.MapStringToFhirVersion(meta.FhirVersion);
            }

            if (fhirVersion == null)
            {
                throw new Exception("Unable to determine FhirVersion used by server. Please specify fhir version");
            }

            FhirVersion = fhirVersion.Value;
            switch (FhirVersion)
            {
            case FhirVersion.R4:
                var r4Handler = new R4Rest.HttpClientEventHandler();
                r4Handler.OnBeforeRequest += R4Client_OnBeforeRequest;
                r4Handler.OnAfterResponse += R4Client_OnAfterRequest;
                R4Client = new R4Rest.FhirClient(endpoint, FhirClientSettings.CreateDefault(), r4Handler);
                break;

            case FhirVersion.R3:
                var r3Handler = new R3Rest.HttpClientEventHandler();
                r3Handler.OnBeforeRequest += R3Client_OnBeforeRequest;
                r3Handler.OnAfterResponse += R3Client_OnAfterRequest;
                R3Client = new R3Rest.FhirClient(endpoint, FhirClientSettings.CreateDefault(), r3Handler);
                break;
            }
        }
Example #10
0
        public override async Tasks.Task <OperationResultEnum> Execute()
        {
            IEnumerable <Resource> resources = null;

            _logger.LogInformation($"Uploading resources to endpoint: '{_arguments.FhirBaseUrl}'");

            var clientMessageHandler = new HttpClientEventHandler();

            clientMessageHandler.OnBeforeRequest += fhirClient_BeforeRequest;
            FhirClient fhirClient = new FhirClient(_arguments.FhirBaseUrl.Uri, FhirClientSettings.CreateDefault(), clientMessageHandler);

            foreach (Resource resource in resources)
            {
                Resource resource2;
                if (resource is Questionnaire && !string.IsNullOrWhiteSpace(resource.Id))
                {
                    Questionnaire questionnaire = resource as Questionnaire;
                    questionnaire.Url = $"{_arguments.ProxyBaseUrl}Questionnaire/{resource.Id}";
                }
                if (string.IsNullOrWhiteSpace(resource.Id))
                {
                    _logger.LogInformation($"Creating new resource of type: '{resource.TypeName}'");
                    resource2 = fhirClient.Create(resource);
                }
                else
                {
                    _logger.LogInformation($"Updating resource with Id: '{resource.Id}' of type: '{resource.TypeName}'");
                    resource2 = fhirClient.Update(resource);
                }

                _logger.LogInformation($"Resource was assigned the Id: '{resource2.Id}'");
                _logger.LogInformation($"Resource can be accessed at: '{fhirClient.Endpoint.AbsoluteUri}{ResourceType.Questionnaire.GetLiteral()}/{resource2.Id}'");
            }

            _logger.LogInformation($"Successfully uploaded resources to endpoint: {_arguments.FhirBaseUrl}");

            return(await Tasks.Task.FromResult(_issues.Any(issue => issue.Severity == IssueSeverityEnum.Error)
                                               ?OperationResultEnum.Failed
                                               : OperationResultEnum.Succeeded));
        }
Example #11
0
 public static FhirClient CreateMockFhirClient(HttpMessageHandler messageHandler = null)
 {
     return(Substitute.For <FhirClient>("https://localhost", FhirClientSettings.CreateDefault(), messageHandler ?? CreateMockMessageHandler(), null));
 }