Skip to content

Configuration settings

SAIF.Services.Web.Proxies reads configuration through exactly one mechanism, IEnvironmentService from SAIF.Framework.Core*, retrieving 7 plain-text keys across two constructor-injected wrappers (SimpleCertifiedMailServiceProxy, GoogleMapsApiServiceProxy) and reading IEnvironmentService.IsProduction once; it makes zero GetSecureConfigSetting calls, and three of the 7 keys carry credentials or secrets that are read with the non-secure method.

Configuration retrieval methods

Method Class / Interface Namespace Usage pattern
GetConfigSetting(string key) IEnvironmentService (SAIF.Framework.Core package, implementation outside this repository*) SAIF.Core.Services* Constructor-injected IEnvironmentService, called with string-literal keys in the SimpleCertifiedMailServiceProxy constructor and GetCertifiedLabel, and in the GoogleMapsApiServiceProxy constructor
IsProduction (property) IEnvironmentService SAIF.Core.Services* Read in SimpleCertifiedMailServiceProxy.GetModeOption when the caller does not supply IsProductionMode; selects ModeOptions.production or ModeOptions.preview (WP-BR-019)
Constructor parameter serviceUrl ActiveDirectoryServiceProxy, LoggingServiceProxy, WorkCalendarServiceProxy, Legacy.DbConnectionServiceProxy, DocumentServiceProxy, PdfServiceProxy, FaxServiceProxy SAIF.Services.Web.Proxies Not a configuration read in this library; the caller resolves the URL and passes it in, for example Services/SAIF.Services.Common/DbConnectionService.cs:21 and Services/SAIF.Services/Utilities/Documents/DocumentService.cs:35

GetSecureConfigSetting, ConfigurationManager.AppSettings, and ApplicationSettingsBase reads are not used anywhere in this library.

Environment API settings

Settings retrieved via IEnvironmentService (centralized environment configuration service).

Setting key Method Data type Purpose Consuming class Source
SimpleCertifiedMailService.Url GetConfigSetting string Certified-mail SOAP endpoint URL SimpleCertifiedMailServiceProxy (constructor) Services/SAIF.Services.Web.Proxies/SimpleCertifiedMailServiceProxy.cs
SimpleCertifiedMailService.UserName GetConfigSetting string Fallback account identifier for a label request when the caller does not supply one SimpleCertifiedMailServiceProxy.GetCertifiedLabel Services/SAIF.Services.Web.Proxies/SimpleCertifiedMailServiceProxy.cs
SimpleCertifiedMailService.Password ⚠ GetConfigSetting string Fallback third-party account password for a label request (see Secure settings) SimpleCertifiedMailServiceProxy.GetCertifiedLabel Services/SAIF.Services.Web.Proxies/SimpleCertifiedMailServiceProxy.cs
SimpleCertifiedMailService.ClientCode GetConfigSetting string Fallback third-party tenant/client identifier SimpleCertifiedMailServiceProxy.GetCertifiedLabel Services/SAIF.Services.Web.Proxies/SimpleCertifiedMailServiceProxy.cs
SimpleCertifiedMailService.PartnerKey ⚠ GetConfigSetting string Fallback vendor-issued integration key (see Secure settings) SimpleCertifiedMailServiceProxy.GetCertifiedLabel Services/SAIF.Services.Web.Proxies/SimpleCertifiedMailServiceProxy.cs
googlemaps.apibaseuri GetConfigSetting string Google Distance Matrix API base URI GoogleMapsApiServiceProxy (constructor) Services/SAIF.Services.Web.Proxies/GoogleMapsApiServiceProxy.cs
googlemaps.apikey ⚠ GetConfigSetting string Google Maps Platform API key (see Secure settings) GoogleMapsApiServiceProxy (constructor) Services/SAIF.Services.Web.Proxies/GoogleMapsApiServiceProxy.cs

The URL and Google Maps keys are read once, in the constructor. The four SimpleCertifiedMail credential keys are read on each label request, and only as a fallback: the ?? operator means a caller-supplied value always takes precedence — Services/SAIF.Services/Documents/DocumentDeferredService.cs lines 112–114 copy UserName, Password, and PartnerKey from documentLabelData onto certifiedLabelData before the request. Key-name casing is mixed (PascalCase SimpleCertifiedMailService.*, lowercase googlemaps.*); whether lookup is case-sensitive depends on the SAIF.Framework.Core IEnvironmentService implementation**.

AppSettings (Web.config)

Empty. Services/SAIF.Services.Web.Proxies/app.config has no <appSettings> element, and no .cs file in the library calls ConfigurationManager.AppSettings.

Database connection configuration

No database connections are consumed by this library. It makes no DbConnectionManager calls, and app.config has no <connectionStrings> element. Legacy.DbConnectionServiceProxy (Services/SAIF.Services.Web.Proxies/Legacy/DbConnectionsServiceProxy.cs) instead resolves Oracle and SQL Server connection strings remotely through the DbConnection SOAP proxy, taking its own endpoint from its serviceUrl constructor argument. The consumer that constructs it, SAIF.Services.Common.DbConnectionService, reads the endpoint from its own dbconnectionserviceurl configuration key rather than this library reading it directly.

Connection name Provider Retrieval method Purpose Source
(caller-defined) Oracle / SQL Server, resolved remotely by the connect-info SOAP service Consumer's dbconnectionserviceurl key (read outside this library) Passes the endpoint into new Legacy.DbConnectionServiceProxy(serviceUrl), which returns a connection string containing credentials Services/SAIF.Services.Common/DbConnectionService.cs

Secure settings

No secure settings exist. This is the primary configuration finding for this library: it has no secure handling for three secret-bearing keys. The library makes 0 GetSecureConfigSetting calls and 0 SystemHashUtil calls. The following keys carry credential or secret material but are read with the non-secure IEnvironmentService.GetConfigSetting and must be treated as sensitive settings requiring secure handling:

Setting key Nature of value Retrieval call used Expected secure form Consuming class Source
SimpleCertifiedMailService.Password ⚠ Third-party account password GetConfigSetting("SimpleCertifiedMailService.Password") GetSecureConfigSetting(key, systemHash) where systemHash is produced by SystemHashUtil* SimpleCertifiedMailServiceProxy.GetCertifiedLabel Services/SAIF.Services.Web.Proxies/SimpleCertifiedMailServiceProxy.cs
SimpleCertifiedMailService.PartnerKey ⚠ Third-party partner (API) key GetConfigSetting("SimpleCertifiedMailService.PartnerKey") GetSecureConfigSetting(key, systemHash) where systemHash is produced by SystemHashUtil* SimpleCertifiedMailServiceProxy.GetCertifiedLabel Services/SAIF.Services.Web.Proxies/SimpleCertifiedMailServiceProxy.cs
googlemaps.apikey ⚠ Google Maps Platform API key GetConfigSetting("googlemaps.apikey") GetSecureConfigSetting(key, systemHash) where systemHash is produced by SystemHashUtil* GoogleMapsApiServiceProxy (constructor) Services/SAIF.Services.Web.Proxies/GoogleMapsApiServiceProxy.cs

Implications: - Values are stored and returned in plain text. Plain GetConfigSetting values are presumably stored and returned unencrypted by the Environment API*; the exact storage and transport treatment depends on the SAIF.Framework.Core implementation and the environment-config service. - The SimpleCertifiedMail password and partner key travel in the SOAP message body over HTTPS, because the binding uses BasicHttpSecurityMode.Transport. - The Google Maps API key travels in the request query string (GoogleMapsApiServiceProxy.QueryGoogleApi), so it can appear in proxy and server logs - SimpleCertifiedMailService.UserName and SimpleCertifiedMailService.ClientCode are account identifiers rather than secrets; they are also read non-securely, at lower risk. - Callers can bypass configuration entirely by supplying credentials directly (DocumentDeferredService.cs lines 112–114); in that case the secret's protection depends on the caller's own data source, which is outside this library's scope**. - No setting value is reproduced in this documentation; values are held only in the environment-config service.

Transitive configuration (from dependencies)

Setting key Method Source dependency Dependency type Purpose
(none identified) — Core/SAIF.Core/SAIF.SAIFCode.Core.csproj Project Reference A scan of Core/SAIF.Core/**/*.cs found no IEnvironmentService, GetConfigSetting, GetSecureConfigSetting, or ConfigurationManager.AppSettings usage, so this project reference adds no transitive configuration
(unresolved) — SAIF.Framework.Core / SAIF.Framework.Common NuGet Any configuration their concrete IEnvironmentService/ILogService implementations need (for example, the Environment API endpoint) belongs to the hosting application's composition root, not to this library; the specific keys are not determinable from this repository*

Reverse direction: consumers of this library supply their own endpoint configuration for the caller-supplied wrappers, including dbconnectionserviceurl (Services/SAIF.Services.Common/DbConnectionService.cs:21) and documentGeneratorServiceUrl (Services/SAIF.Services/Utilities/Documents/DocumentService.cs:35); these keys belong to the consumers' own configuration catalogs, not to this one.

Configuration dependencies

Dependency Type Required at Impact if missing
IEnvironmentService implementation (composition root) Injected service Construction of SimpleCertifiedMailServiceProxy / GoogleMapsApiServiceProxy Constructor guard (Enforce) throws an argument exception if the service is not supplied
SimpleCertifiedMailService.Url Environment API key Construction of SimpleCertifiedMailServiceProxy The wrapper is built with a null/empty endpoint; the underlying SOAP call fails
googlemaps.apibaseuri / googlemaps.apikey Environment API keys Construction of GoogleMapsApiServiceProxy Distance queries are built against an invalid base URI or without a valid API key, and fail at request time

app.config declares an empty <configSections> (no custom section handlers) and <system.serviceModel> sections defining 10 basicHttpBinding, 5 customBinding, 1 wsDualHttpBinding, and 15 <client> endpoints, all of which are inert: every authored wrapper builds its own Binding and EndpointAddress(serviceUrl) in code, bypassing the <system.serviceModel><client> endpoints declared in app.config — this is documented as a design constraint in Architecture. A class library's app.config is also not loaded by consuming hosts*.

Note: Statements marked with * were inferred from code structure, naming conventions, or contextual evidence where direct confirmation was not available in source artifacts. Statements marked with ** could not be confirmed; treat as unknown until verified.

Note: Setting keys marked with ⚠ carry credential or secret material that is read with the non-secure GetConfigSetting call instead of GetSecureConfigSetting. See Secure settings for details.

Sources

  • Services/SAIF.Services.Web.Proxies/SimpleCertifiedMailServiceProxy.cs
  • Services/SAIF.Services.Web.Proxies/GoogleMapsApiServiceProxy.cs
  • Services/SAIF.Services.Web.Proxies/Legacy/DbConnectionsServiceProxy.cs
  • Services/SAIF.Services.Web.Proxies/app.config
  • Services/SAIF.Services.Web.Proxies/packages.config
  • Services/SAIF.Services.Web.Proxies/SAIF.Services.Web.Proxies.csproj
  • Services/SAIF.Services.Web.Proxies/Properties/Settings.Designer.cs
  • Services/SAIF.Services.Web.Proxies/Properties/Settings.settings
  • Services/SAIF.Services.Common/DbConnectionService.cs
  • Services/SAIF.Services/Utilities/Documents/DocumentService.cs
  • Services/SAIF.Services/Documents/DocumentDeferredService.cs
  • Services/SAIF.Services.WebApi/EnvironmentApi/App_Data/environments.xml
  • Core/SAIF.Core/SAIF.SAIFCode.Core.csproj