/// <summary> /// Configure the feature /// </summary> public void Configure(SanteDBConfiguration configuration, IDictionary <string, string> settings) { if (configuration.GetSection <FileMatchConfigurationSection>() == null) // Add configuration for file matching { configuration.AddSection(DockerFeatureUtils.LoadConfigurationResource <FileMatchConfigurationSection>("SanteDB.Matcher.Docker.MatchingFeature.xml")); } // Add the file match configuration service var serviceConfiguration = configuration.GetSection <ApplicationServiceContextConfigurationSection>().ServiceProviders; if (!serviceConfiguration.Any(s => s.Type == typeof(FileMatchConfigurationProvider))) { serviceConfiguration.Add(new TypeReferenceConfiguration(typeof(FileMatchConfigurationProvider))); } // Did the hoster specify a matcher they want to use? if (settings.TryGetValue(ModeSetting, out string matcher)) { switch (matcher) { case SimpleMode: serviceConfiguration.Add(new TypeReferenceConfiguration(typeof(SimpleRecordMatchingService))); break; case WeightedMode: serviceConfiguration.Add(new TypeReferenceConfiguration(typeof(WeightedRecordMatchingService))); break; default: throw new ConfigurationException($"{matcher} is not a valid valud for SDB_MATCHING_MODE. Use either SIMPLE or WEIGHTED", configuration); } } else { serviceConfiguration.Add(new TypeReferenceConfiguration(typeof(WeightedRecordMatchingService))); } }
/// <summary> /// Configure /// </summary> /// <param name="configuration"></param> /// <param name="settings"></param> public void Configure(SanteDBConfiguration configuration, IDictionary <string, string> settings) { var oauthConf = configuration.GetSection <OAuthConfigurationSection>(); if (oauthConf == null) { oauthConf = DockerFeatureUtils.LoadConfigurationResource <OAuthConfigurationSection>("SanteDB.Authentication.OAuth2.Docker.OauthFeature.xml"); configuration.AddSection(oauthConf); } var restConfiguration = configuration.GetSection <SanteDB.Rest.Common.Configuration.RestConfigurationSection>(); if (restConfiguration == null) { throw new ConfigurationException("Error retrieving REST configuration", configuration); } var oauthRestConfiguration = restConfiguration.Services.FirstOrDefault(o => o.ServiceType == typeof(IOAuthTokenContract)); if (oauthRestConfiguration == null) // add fhir rest config { oauthRestConfiguration = new RestServiceConfiguration() { Name = "OAuth2", Endpoints = new List <RestEndpointConfiguration>() { new RestEndpointConfiguration() { Address = "http://0.0.0.0:8080/auth", ContractXml = typeof(IOAuthTokenContract).AssemblyQualifiedName, } } }; restConfiguration.Services.Add(oauthRestConfiguration); } if (settings.TryGetValue(ListenSetting, out string listenStr)) { if (!Uri.TryCreate(listenStr, UriKind.Absolute, out Uri listenUri)) { throw new ArgumentException($"{listenStr} is not a valid URI"); } oauthRestConfiguration.Endpoints.ForEach(ep => ep.Address = listenStr); } // Client claims? if (settings.TryGetValue(ClientClaimSetting, out String claim)) { oauthConf.AllowedClientClaims = claim.Split(';').ToList(); } // Token type? if (settings.TryGetValue(TokenTypeSetting, out String tokenType)) { oauthConf.TokenType = tokenType; } // Allow insecure authentication? if (settings.TryGetValue(NodelessClientAuthSetting, out string insecureSetting)) { if (!bool.TryParse(insecureSetting, out bool insecureBool)) { throw new ArgumentOutOfRangeException($"{insecureSetting} is not a valid boolean value"); } oauthConf.AllowClientOnlyGrant = insecureBool; } // Issuer (used for client claims auth and oauth) if (settings.TryGetValue(IssuerIdSetting, out String issuer)) { oauthConf.IssuerName = issuer; } if (settings.TryGetValue(JwtSigningKey, out String jwtSinging)) { oauthConf.JwtSigningKey = jwtSinging; } // Add services var serviceConfiguration = configuration.GetSection <ApplicationServiceContextConfigurationSection>().ServiceProviders; if (!serviceConfiguration.Any(s => s.Type == typeof(OAuthMessageHandler))) { serviceConfiguration.Add(new TypeReferenceConfiguration(typeof(OAuthMessageHandler))); } }
/// <summary> /// Configure the message handler /// </summary> public void Configure(SanteDBConfiguration configuration, IDictionary <string, string> settings) { var hl7Configuration = configuration.GetSection <Hl7ConfigurationSection>(); if (hl7Configuration == null) { hl7Configuration = DockerFeatureUtils.LoadConfigurationResource <Hl7ConfigurationSection>("SanteDB.Messaging.HL7.Docker.Hl7Feature.xml"); configuration.AddSection(hl7Configuration); } // first the security if (settings.TryGetValue(AuthenticationSetting, out string auth)) { if (!Enum.TryParse <AuthenticationMethod>(auth, true, out AuthenticationMethod authResult)) { this.m_tracer.TraceError($"Couldn't understand {auth}, valid values are NONE, MSH8, or SFT4"); throw new ArgumentOutOfRangeException($"{auth} not valid setting - valid values are NONE, MSH8, or SFT4"); } hl7Configuration.Security = authResult; } // Next, local domain if (settings.TryGetValue(LocalAuthoritySetting, out string localAuth)) { hl7Configuration.LocalAuthority = new Core.Model.DataTypes.AssigningAuthority(localAuth, localAuth, null); } // Next the SSN domain if (settings.TryGetValue(SsnAuthoritySetting, out string ssnAuth)) { hl7Configuration.SsnAuthority = new Core.Model.DataTypes.AssigningAuthority(ssnAuth, ssnAuth, null); } // Next listen address if (settings.TryGetValue(ListenUriSetting, out string listenStr)) { if (!Uri.TryCreate(listenStr, UriKind.Absolute, out Uri listenUri)) { throw new ArgumentOutOfRangeException($"{listenStr} is not a valid URL"); } hl7Configuration.Services.ForEach(o => o.AddressXml = listenStr); } // Timeouts if (settings.TryGetValue(TimeoutSetting, out string timeoutStr)) { if (!Int32.TryParse(timeoutStr, out int timeout)) { this.m_tracer.TraceError("Invalid timeout"); throw new ArgumentOutOfRangeException($"{timeoutStr} is not a valid timeout"); } hl7Configuration.Services.ForEach(o => o.ReceiveTimeout = timeout); } // Service certificates if (settings.TryGetValue(ServerCertificateSetting, out String serverCertificate)) { hl7Configuration.Services.ForEach(svc => svc.Configuration = new SllpTransport.SllpConfigurationObject() { CheckCrl = true, ServerCertificate = new X509ConfigurationElement() { FindType = System.Security.Cryptography.X509Certificates.X509FindType.FindByThumbprint, FindValue = serverCertificate, StoreLocation = System.Security.Cryptography.X509Certificates.StoreLocation.LocalMachine, StoreName = System.Security.Cryptography.X509Certificates.StoreName.My }, EnableClientCertNegotiation = settings.TryGetValue(ClientCertificateSetting, out string clientCert), ClientCaCertificate = new X509ConfigurationElement() { FindType = System.Security.Cryptography.X509Certificates.X509FindType.FindByThumbprint, FindValue = clientCert, StoreLocation = System.Security.Cryptography.X509Certificates.StoreLocation.LocalMachine, StoreName = System.Security.Cryptography.X509Certificates.StoreName.My } });