Skip to content

Configuration settings

SAIF.Services reads all of its own configuration through IEnvironmentService.GetConfigSetting/IsProduction (SAIF.Framework.Core) plus one typed ApplicationSettingsBase property generated for the CleanAddress SOAP proxy; it consumes 23 unique setting keys directly (21 literal Environment API keys after merging two case-variant pairs, 1 caller-supplied/dynamic Environment API key, and 1 applicationSettings key), makes zero calls to GetSecureConfigSetting, ConfigurationManager.AppSettings, or DbConnectionManager, and pulls in 17 additional transitive configuration keys required at run time by its SAIF.Data, SAIF.Data.Guidewire, and SAIF.Services.Web.Proxies dependencies (3 of which are secure/credential-bearing). IsProduction is checked 15 times across 12 classes to select production/non-production behavior.

Configuration retrieval methods

Method Class / Interface Namespace Usage pattern
GetConfigSetting(string key) IEnvironmentService SAIF.Core.Services (package SAIF.Framework.Core) Constructor-injected IEnvironmentService in 17 compiled service classes; keys are string literals or private const string fields, read either in constructors (TaskService, LegalTaskService, TemplateSearchService, AutoImportHelperService) or at call time in batch/email methods.
GetConfigSetting(string key) with a caller-supplied key IEnvironmentService SAIF.Core.Services McoImageExporter.ExportActiveEnrollmentDocuments/ExportNewEnrollmentDocuments accept docListEnvironmentServiceKey and read a JSON document-type list under that key (Services/SAIF.Services/Imaging/McoImageExporter.cs:85,121).
IsProduction (property) IEnvironmentService SAIF.Core.Services Boolean environment flag used for 15 behavioral branches in 12 classes (see Environment variance assessment).
new WindowsEnvironmentService() WindowsEnvironmentService Framework package (SAIF.Framework.Core)* Instantiated as a protected field in PharmacyEligibilityService (Services/SAIF.Services/Claims/PharmacyElilgbility/PharmacyEligibilityService.cs:28) but never read in the class — a dead configuration dependency.
Settings.Default.<property> SAIF.Services.Properties.Settings : ApplicationSettingsBase SAIF.Services.Properties Generated web-reference URL setting read by the CleanAddress SOAP proxy constructor (Services/SAIF.Services/Web References/CleanAddressSvc/Reference.cs:46).
Host-injected constructor strings BillPaymentService, SubpoenaPaymentService SAIF.Services.Legal.* Both take a string developerEmails constructor argument that the DI host must supply (Services/SAIF.Services/Legal/Bills/BillPaymentService.cs:77,100; Services/SAIF.Services/Legal/Subpoenas/SubpoenaPaymentService.cs:79,100); source not traced — registered outside this library**.

Not found in compiled source: GetSecureConfigSetting, GetGlobalConfigSetting, SystemHashUtil, ConfigurationManager.AppSettings, ConfigurationManager.ConnectionStrings, WebConfigurationManager, DbConnectionManager, EnvironmentConfigKeys, and Properties.xml loaders.

Environment API settings

Settings retrieved via IEnvironmentService. All rows use GetConfigSetting; none is secure.

Setting key Method Data type Purpose Consuming class Source
Noreplyemailsenderaddress GetConfigSetting string No-reply sender address for notification emails MissingTimeLossService, BillPaymentService, SubpoenaPaymentService, ZeroPaySubpoenaProcess, SubpoenaLabelService Services/SAIF.Services/Claims/Information/MissingTimeLossService.cs:82
noreplyemailsenderaddress (lower-case spelling of the key above) GetConfigSetting string Same as above SubpoenaDocumentService.EmailSubpoenaToProcessServer Services/SAIF.Services/Legal/Subpoenas/SubpoenaDocumentService.cs:217
manage_claim_activity.missing_tax_id_lookback_days GetConfigSetting int (parsed via int.Parse) Lookback window for missing-tax-id task generation ClaimTaskGenerationService.GenerateMissingTaxIdActivities Services/SAIF.Services/Claims/Tasks/ClaimTaskGenerationService.cs:64
manage_claim_activity.request_tax_id_30 GetConfigSetting string 30-day task text ClaimTaskGenerationService.GenerateMissingTaxIdActivities Services/SAIF.Services/Claims/Tasks/ClaimTaskGenerationService.cs:65
manage_claim_activity.request_tax_id_60 GetConfigSetting string 60-day task text ClaimTaskGenerationService.GenerateMissingTaxIdActivities Services/SAIF.Services/Claims/Tasks/ClaimTaskGenerationService.cs:66
ClaimActivities.ValidGroups GetConfigSetting string (comma-split) Valid claim-activity group list TaskService constructor Services/SAIF.Services/Claims/Tasks/TaskService.cs:134
ImagingApi.OnBaseCustomQueryId GetConfigSetting string OnBase custom query identifier TaskService.GetOnBaseEncodedString Services/SAIF.Services/Claims/Tasks/TaskService.cs:398
LegalActivities.ValidGroups GetConfigSetting string (comma-split) Valid legal-activity group list LegalTaskService constructor Services/SAIF.Services/Legal/Tasks/LegalTaskService.cs:142
ImagingApi.onbaseclaimcustomqueryparms GetConfigSetting string OnBase claim custom-query parameters LegalTaskService.GetClaimDocumentURL Services/SAIF.Services/Legal/Tasks/LegalTaskService.cs:473
ImagingApi.onbaselegalcustomqueryparms GetConfigSetting string OnBase legal custom-query parameters LegalTaskService.GetCaseDocumentURL Services/SAIF.Services/Legal/Tasks/LegalTaskService.cs:487
idmfilepath GetConfigSetting string (path) IDM auto-import output directory AutoImportHelperService constructor Services/SAIF.Services/Imaging/AutoImportHelperService.cs:48
xpressionsoutputdocumentspath GetConfigSetting string (path) xPressions output-documents directory DocumentDeferredService.SheetCount, WitnessSubpoenaProcess.GenerateWitnessCashDisbursementRequest Services/SAIF.Services/Documents/DocumentDeferredService.cs:45
Xpressionsoutputdocumentspath (capitalized spelling of the key above) GetConfigSetting string (path) xPressions checks output path (\Checks appended) ZeroPaySubpoenaProcess.GenerateZeroPayDocuments Services/SAIF.Services/Legal/Subpoenas/ZeroPaySubpoenaProcess.cs:68-69
Xpressionsoutputcheckspath GetConfigSetting string (path) xPressions checks output path OpposingCounselService.GenerateOpposingCounselDocuments, WitnessSubpoenaProcess.GenerateWitnessDocuments Services/SAIF.Services/Legal/Subpoenas/OpposingCounselService.cs:25,49
Xpressionsxmlpath GetConfigSetting string (path) xPressions XML batch-file path OpposingCounselService.GenerateOpposingCounselDocuments, WitnessSubpoenaProcess, ZeroPaySubpoenaProcess.GenerateZeroPayDocuments Services/SAIF.Services/Legal/Subpoenas/OpposingCounselService.cs:23,50
imagingapiurl GetConfigSetting string (URL) OnBase Imaging API base URL TemplateSearchService constructor (new ImagingClient(url)) Services/SAIF.Services/Documents/TemplateSearchService.cs:45
internalwebhost GetConfigSetting string (URL) Host root for links in notification emails BillPaymentService.RejectBillForAddressCorrection, SubpoenaPaymentService.RejectSubpoenaForAddressCorrection, SubpoenaService.GetApprovalEmail Services/SAIF.Services/Legal/Bills/BillPaymentService.cs:686
corporate800number GetConfigSetting string Corporate 800 number in notification content SubpoenaDocumentService.EmailSubpoenaToProcessServer Services/SAIF.Services/Legal/Subpoenas/SubpoenaDocumentService.cs:218
k2attachmentlocation GetConfigSetting string (path) File-share path for label images SubpoenaLabelService.GenerateRecipientLabels Services/SAIF.Services/Legal/Subpoenas/SubpoenaLabelService.cs:26,101,129
casemanagement.supportemaillist GetConfigSetting string Developer/support recipient list SubpoenaLabelService.FormatEmailForInvalidAddress Services/SAIF.Services/Legal/Subpoenas/SubpoenaLabelService.cs:28,174
casemanagement.mailroomsupportemails GetConfigSetting string Mailroom support recipient list SubpoenaLabelService.FormatEmailForInvalidAddress Services/SAIF.Services/Legal/Subpoenas/SubpoenaLabelService.cs:29,175
casemanagement.providersupportemail GetConfigSetting string Provider support recipient SubpoenaLabelService.FormatEmailForInvalidAddress Services/SAIF.Services/Legal/Subpoenas/SubpoenaLabelService.cs:30,176
pdfDataDirectory GetConfigSetting string (path) Root of PDF tracking folders PdfTrackingService.PurgeFolders Services/SAIF.Services/Utilities/Pdf/PdfTrackingService.cs:222
caller-supplied docListEnvironmentServiceKey GetConfigSetting string (dynamic key name; value is JSON) Enrollment document-type list, deserialized to List<DocumentTypeSubTypeCombo> McoImageExporter.ExportActiveEnrollmentDocuments/ExportNewEnrollmentDocuments (inherited by MajorisImageExporter) Services/SAIF.Services/Imaging/McoImageExporter.cs:85,121,205-208

Notes: - Case-variant keys. Noreplyemailsenderaddress/noreplyemailsenderaddress and xpressionsoutputdocumentspath/Xpressionsoutputdocumentspath are the same logical setting requested with different casing. The in-repo Environment API lower-cases track and key before lookup (Services/SAIF.Services.WebApi/EnvironmentApi/Classes/EnvironmentSettings.cs:84,123); whether the production IEnvironmentService implementation is also case-insensitive is not visible from this repository. - Declared but unused key constants. OpposingCounselService.OutputPathEnvironmentVariable = "xPressionsOutputDocumentsPath" and SubpoenaLabelService.XmlPathEnvironmentVariable = "Xpressionsoutputdocumentspath" are never passed to GetConfigSetting — not active configuration. - Dynamic key. No production caller of the docListEnvironmentServiceKey overloads exists in this repository; the only caller is a unit test passing "test". The real key name is supplied by an external host. - Parsing risk. manage_claim_activity.missing_tax_id_lookback_days is parsed with int.Parse without a guard, so a missing or non-numeric value throws at run time. The two *.ValidGroups keys are .Split(',') directly, so a missing value throws NullReferenceException in the constructor.

AppSettings (Web.config)

None. Services/SAIF.Services/app.config has no <appSettings> section and no compiled source calls ConfigurationManager.AppSettings.

Database connection configuration

None resolved. There is no DbConnectionManager, EnvironmentConfigKeys.OracleDatabase, or <connectionStrings> usage in this library — data access goes through IUnitOfWork/IRepositoryFactory supplied by SAIF.Data.NHibernate and the SAIF.Framework.Data.NHibernate package, whose connection is configured by the host*.

Connection name Provider Retrieval method Purpose Source
N/A (provider registration only) ODP.NET managed (Oracle.ManagedDataAccess.Client.OracleClientFactory, v4.122.21.1) <system.data><DbProviderFactories> registration Registers the Oracle managed provider factory; a class library's app.config is not loaded by the hosting process at run time* Services/SAIF.Services/app.config

Secure settings

None. No compiled source in SAIF.Services calls GetSecureConfigSetting or SystemHashUtil. Secure settings reached indirectly through dependencies are listed in Transitive configuration below.

Custom configuration sections

Declared in Services/SAIF.Services/app.config:3-8:

Section name Handler type Purpose
applicationSettings / SAIF.Services.Properties.Settings System.Configuration.ApplicationSettingsGroup / System.Configuration.ClientSettingsSection Holds the typed Settings values generated for the CleanAddress web reference
oracle.manageddataaccess.client OracleInternal.Common.ODPMSectionHandler, Oracle.ManagedDataAccess, Version=4.122.21.1 ODP.NET managed-driver section; declared but no element body present, so it carries no settings

<system.serviceModel> is present with empty <bindings /> and <client /> (Services/SAIF.Services/app.config:120-123); the CleanAddress proxy is an ASMX SoapHttpClientProtocol and does not use WCF bindings.

ApplicationSettingsBase settings

Class Property Type Default value Source
SAIF.Services.Properties.Settings (internal sealed) SAIF_Services_CleanAddressSvc_clsCAServices string, application-scoped, SpecialSetting.WebServiceUrl http://correctaddress/wsCorrectAddress/clsCAServices.asmx Services/SAIF.Services/Properties/Settings.Designer.cs:26-34

The web reference is declared with UrlBehavior=Dynamic (Services/SAIF.Services/SAIF.Services.csproj:531-541), so the proxy constructor reads Settings.Default.SAIF_Services_CleanAddressSvc_clsCAServices (Services/SAIF.Services/Web References/CleanAddressSvc/Reference.cs:46). A host can override the value by adding an applicationSettings/SAIF.Services.Properties.Settings section to its own Web.config; otherwise the compiled DefaultSettingValueAttribute URL is used*. This is the only configuration value in SAIF.Services that does not come from the Environment API.

Transitive configuration (from dependencies)

SAIF.Services has project references to SAIF.SAIFCode.Core, SAIF.Data, SAIF.Data.Guidewire, SAIF.Data.NHibernate, SAIF.Domain, and SAIF.Services.Web.Proxies. The keys below are required at run time when SAIF.Services code resolves or calls the listed dependency types. SAIF.Domain and SAIF.Data.NHibernate contain no GetConfigSetting, GetSecureConfigSetting, ConfigurationManager, or DbConnectionManager calls.

Setting key Method Source dependency Dependency type Purpose
cc.ccclaimdataapiurl GetConfigSetting SAIF.Data (CCClaimApiService) Project Reference Guidewire ClaimCenter claim-data API base URL, used via ICCClaimApiService in 25 compiled files (BillService, EbillingService, ClaimInformationService, LegalService, SubpoenaService, and others)
cc.medicalbillingapiurl GetConfigSetting SAIF.Data (MedicalBillingApiService) Project Reference Medical billing API base URL, used via IMedicalBillingApiService in EbillingService
medicalbillingapi.creds GetSecureConfigSetting SAIF.Data (MedicalBillingApiService) Project Reference Medical billing API credentials (secure), used via IMedicalBillingApiService in EbillingService
cc.claimdata.api.url.v1 GetConfigSetting SAIF.Data.Guidewire (ClaimDataApiClient) Project Reference Claim data API v1 base URL, used via IClaimDataApiClient in 20 compiled files (BillQueryService, TaskService, LegalTaskService, McoImageExporter, and others)
cc.activitydata.api.url.v1 GetConfigSetting SAIF.Data.Guidewire (ActivityDataApiClient) Project Reference Activity data API base URL, used via IActivityDataApiClient in SeverityModelActivityService, BillPaymentService
cc.financial.api.url.v1 GetConfigSetting SAIF.Data.Guidewire (FinancialDataApiClient) Project Reference Financial transaction API base URL, used via IFinancialDataApiClient in BillQueryService, EbillingService, FinancialTransactionService, BillPaymentService, SubpoenaPaymentService
cc.workerdata.api.url.v1 GetConfigSetting SAIF.Data.Guidewire (WorkerDataApiClient) Project Reference Worker data API base URL, used via IWorkerDataApiClient in CollectionsService, SoilService, FraudInvestigationService
ab.providerdata.api.url.v1 GetConfigSetting SAIF.Data.Guidewire (ProviderDataApiClient) Project Reference Provider data API base URL, used via IProviderDataApiClient in AddressVerificationService
cc.gwcreds GetSecureConfigSetting SAIF.Data.Guidewire (HttpClientBase) Project Reference Guidewire API credentials (secure), shared by claim/activity/financial/worker clients above
cc.providerdataapi.gwcreds GetSecureConfigSetting SAIF.Data.Guidewire (HttpClientBase) Project Reference Provider-data API credentials (secure), used via IProviderDataApiClient in AddressVerificationService
googlemaps.apibaseuri GetConfigSetting SAIF.Services.Web.Proxies (GoogleMapsApiServiceProxy) Project Reference Google Maps API base URI, used in SubpoenaService
googlemaps.apikey GetConfigSetting (plain-text — API key is credential-bearing) SAIF.Services.Web.Proxies (GoogleMapsApiServiceProxy) Project Reference Google Maps API key, used in SubpoenaService
SimpleCertifiedMailService.Url GetConfigSetting SAIF.Services.Web.Proxies (SimpleCertifiedMailServiceProxy) Project Reference Certified mail service base URL, used in DocumentDeferredService, SubpoenaLabelService
SimpleCertifiedMailService.UserName, .Password, .ClientCode, .PartnerKey GetConfigSetting (plain-text — credentials read through the non-secure method) SAIF.Services.Web.Proxies (SimpleCertifiedMailServiceProxy) Project Reference Certified mail service credentials, used only when the request DTO leaves the field null

The Google Maps API key and the Simple Certified Mail password are credential-bearing values read with GetConfigSetting rather than GetSecureConfigSetting; this is a security-relevant finding attributable to the SAIF.Services.Web.Proxies library, not to SAIF.Services itself. The consumer file lists above were derived by a text search for the dependency interface names in compiled SAIF.Services files*.

Configuration dependencies

Dependency Type Required at Impact if missing
IEnvironmentService Constructor-injected service Startup (constructor) / Request Constructor throws or later calls fail if not registered by the host
docListEnvironmentServiceKey caller input Method parameter Request McoImageExporter export methods fail if the caller does not supply a valid key name
developerEmails constructor string Constructor parameter Startup (constructor) BillPaymentService/SubpoenaPaymentService construction fails if the host does not supply a value
applicationSettings/SAIF.Services.Properties.Settings (host Web.config) Optional config section Startup (proxy construction) Falls back to the compiled default CleanAddress URL if absent*

Sources

  • Services/SAIF.Services/app.config
  • Services/SAIF.Services/Properties/Settings.Designer.cs
  • Services/SAIF.Services/Properties/Settings.settings
  • Services/SAIF.Services.WebApi/EnvironmentApi/App_Data/environments.xml
  • Services/SAIF.Services.WebApi/EnvironmentApi/Classes/EnvironmentSettings.cs
  • Services/SAIF.Services/Claims/Information/MissingTimeLossService.cs
  • Services/SAIF.Services/Claims/Tasks/ClaimTaskGenerationService.cs
  • Services/SAIF.Services/Claims/Tasks/TaskService.cs
  • Services/SAIF.Services/Legal/Tasks/LegalTaskService.cs
  • Services/SAIF.Services/Imaging/AutoImportHelperService.cs
  • Services/SAIF.Services/Imaging/McoImageExporter.cs
  • Services/SAIF.Services/Documents/DocumentDeferredService.cs
  • Services/SAIF.Services/Documents/TemplateSearchService.cs
  • Services/SAIF.Services/Legal/Subpoenas/
  • Services/SAIF.Services/Legal/Bills/BillPaymentService.cs
  • Services/SAIF.Services/Utilities/Pdf/PdfTrackingService.cs
  • Services/SAIF.Services/Claims/PharmacyElilgbility/PharmacyEligibilityService.cs
  • Data/SAIF.Data/Queries/Claims/CCClaimApiService.cs
  • Data/SAIF.Data/Clients/MedicalBillingApiService.cs
  • Data/SAIF.Data.Guidewire/Clients/
  • Services/SAIF.Services.Web.Proxies/GoogleMapsApiServiceProxy.cs
  • Services/SAIF.Services.Web.Proxies/SimpleCertifiedMailServiceProxy.cs