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
GetConfigSettingcall instead ofGetSecureConfigSetting. See Secure settings for details.
Related documentation¶
Sources¶
Services/SAIF.Services.Web.Proxies/SimpleCertifiedMailServiceProxy.csServices/SAIF.Services.Web.Proxies/GoogleMapsApiServiceProxy.csServices/SAIF.Services.Web.Proxies/Legacy/DbConnectionsServiceProxy.csServices/SAIF.Services.Web.Proxies/app.configServices/SAIF.Services.Web.Proxies/packages.configServices/SAIF.Services.Web.Proxies/SAIF.Services.Web.Proxies.csprojServices/SAIF.Services.Web.Proxies/Properties/Settings.Designer.csServices/SAIF.Services.Web.Proxies/Properties/Settings.settingsServices/SAIF.Services.Common/DbConnectionService.csServices/SAIF.Services/Utilities/Documents/DocumentService.csServices/SAIF.Services/Documents/DocumentDeferredService.csServices/SAIF.Services.WebApi/EnvironmentApi/App_Data/environments.xmlCore/SAIF.Core/SAIF.SAIFCode.Core.csproj