---
title: Configuration settings
summary: Configuration keys consumed by this library, retrieval methods, and runtime dependencies.
status: draft
owner: SAIF.Core Documentation Team
last_reviewed: 2026-09-24
library: SAIF.Services.Web.Proxies
reference_type: package
---

# 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](business-rules.md#wp-br-019-label-mode-follows-the-caller-flag-or-isproduction)) |
| 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](#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](#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](#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](architecture.md#design-constraints). 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](#secure-settings) for details.

## Related documentation
- [Index](index.md)
- [Overview](overview.md)
- [Architecture](architecture.md)
- [Dependencies](dependencies.md)
- [Operations and processes](operations-processes.md)
- [Business rules](business-rules.md)
- [API reference](api/index.md)

## 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`
