Skip to content

AdminController

AdminController exposes three credential-inspection endpoints, one per database type. Each reads the secure credential directly from the SAIF Environment API and returns the user name, the plaintext password and the composed connection string in a JSON object. It performs no existence check, no connectivity probe, no caching and no audit logging. These endpoints return credential material and are flagged CRITICAL (see Authentication and authorization). Callers are not determined from source**.

Field Value
Controller AdminController
Base ControllerBase
[ApiController] Applied
Route template v1/Admin followed by the action name (the controller-name token resolves to Admin)
API version Literal route prefix v1 (no API versioning)
Source DBConnectionAPI/DBConnectionAPI/Controllers/AdminController.cs
Controller-level authorization [SecurityApiAuthorize("DBConnAPIRetrieveResource")]
Error handling Local bare try/catch around the credential split that swallows the exception (BR-DBC-024); other exceptions flow to opaque package middleware**
Endpoints 3

The protected helper GetConnectionInfo(string, string) is not an action and is not routable.


POST v1 Admin GetOracleConnectionInfo

Returns the decrypted credential parts and the composed connection string for an Oracle instance and user name.

Field Value
HTTP verb POST
Resolved route /v1/Admin/GetOracleConnectionInfo
Route composition Class-level [Route] template + bare [HttpPost], with the controller-name token resolved to Admin and the action token to GetOracleConnectionInfo
Action GetOracleConnectionInfo
Return type Dictionary<string, string>
Declared responses None
Authorization DBConnAPIRetrieveResource
Idempotent Yes (read-only; see side effects)
Operation OP-04 — see Operations and processes

Parameters (Oracle)

Name In Type Required Default Binding Purpose
instance Query string No* — Inferred by [ApiController] (simple type, no route token) Oracle instance used in the secure-setting key and template
userName Query string No* — Inferred by [ApiController] User name used in the secure-setting key

Both values bind from the query string even though the verb is POST. Nullable reference types are disabled, so no implicit required validation applies*; a missing value binds as null.

Response (Oracle)

Field Value
DTO None — Dictionary<string, string>
Media type application/json (JSON object; serializer decided by the opaque base**)
Key Type Nullable Purpose
credentials string Yes** Raw decrypted secure-setting value (user name and password joined by a pipe character)
user string No Text before the first pipe; empty when the split fails
pw string No Plaintext password — text after the first pipe; empty when the split fails
connectionString string No Template with the user and password substituted
Error string Present only on split failure Fixed message stating a pipe delimiter is expected

Status codes (Oracle)

Status Condition Body
200 OK Credential read and split, or split failed and was swallowed (BR-DBC-023, BR-DBC-024) JSON object above
Error status Trigger Produced by Body
401 Unauthorized / 403 Forbidden Caller lacks DBConnAPIRetrieveResource (BR-DBC-025); the exact status is not stated in package documentation** [SecurityApiAuthorize] via the opaque authorization pipeline † Not visible in source**
500 ** The secure setting does not exist: the action has no existence check, so the read fails Opaque package middleware** Not visible in source**

No status code is declared with [ProducesResponseType]; every non-200 status is undeclared.

Authorization (Oracle)

Requires resource DBConnAPIRetrieveResource, applied at controller level, with no [AllowAnonymous] override. This is the same resource that protects the retrieval endpoints, so there is no separate administrative requirement. See Authentication and authorization.

Side effects and idempotency (Oracle)

Aspect Finding
Records written None
Downstream calls SAIF Environment API through IEnvironmentClient (secure-setting read)
Files or messages produced None
Repeat-call behavior Same result each call: no cache is read or written and no probe runs (BR-DBC-023). Admin requests are not audit-logged

Example (Oracle)

POST /v1/Admin/GetOracleConnectionInfo?instance=<instance>&userName=<userName> HTTP/1.1
Host: <host>
Authorization: ******
HTTP/1.1 200 OK
Content-Type: application/json

{
  "credentials": "<user>|<password>",
  "user": "<user>",
  "pw": "<password>",
  "connectionString": "<composed connection string>"
}

POST v1 Admin GetPostgresConnectionInfo

Returns the decrypted credential parts and the composed connection string for a PostgreSQL server, instance and user name.

Field Value
HTTP verb POST
Resolved route /v1/Admin/GetPostgresConnectionInfo
Route composition Class-level [Route] template + bare [HttpPost], with the controller-name token resolved to Admin and the action token to GetPostgresConnectionInfo
Action GetPostgresConnectionInfo
Return type Dictionary<string, string>
Declared responses None
Authorization DBConnAPIRetrieveResource
Idempotent Yes (read-only)
Operation OP-05 — see Operations and processes

Parameters (PostgreSQL)

Name In Type Required Default Binding Purpose
server Query string No* — Inferred by [ApiController] Server substituted into the template
instance Query string No* — Inferred by [ApiController] Instance used in the secure-setting key and template
userName Query string No* — Inferred by [ApiController] User name used in the secure-setting key

The PostgreSQL secure-setting key has no server component, so one credential serves every server for an instance and user (BR-DBC-006).

Response (PostgreSQL)

Field Value
DTO None — Dictionary<string, string>
Media type application/json (serializer decided by the opaque base**)

The keys are identical to those on POST /v1/Admin/GetOracleConnectionInfo: credentials, user, pw, connectionString and, on split failure, Error.

Status codes (PostgreSQL)

Status Condition Body
200 OK Credential read and split, or split failed and was swallowed (BR-DBC-023, BR-DBC-024) JSON object
Error status Trigger Produced by Body
401 Unauthorized / 403 Forbidden Caller lacks DBConnAPIRetrieveResource (BR-DBC-025); exact status not stated in package documentation** [SecurityApiAuthorize] via the opaque authorization pipeline † Not visible in source**
500 ** The secure setting does not exist (no existence check) Opaque package middleware** Not visible in source**

Authorization (PostgreSQL)

Requires resource DBConnAPIRetrieveResource (controller level). See Authentication and authorization.

Side effects and idempotency (PostgreSQL)

Aspect Finding
Records written None
Downstream calls SAIF Environment API through IEnvironmentClient
Files or messages produced None
Repeat-call behavior Same result each call; no cache, no probe, no audit log

Example (PostgreSQL)

POST /v1/Admin/GetPostgresConnectionInfo?server=<server>&instance=<instance>&userName=<userName> HTTP/1.1
Host: <host>
Authorization: ******
HTTP/1.1 200 OK
Content-Type: application/json

{
  "credentials": "<user>|<password>",
  "user": "<user>",
  "pw": "<password>",
  "connectionString": "<composed connection string>"
}

POST v1 Admin GetSqlConnectionInfo

Returns the decrypted credential parts and the composed connection string for a SQL Server server, instance and user name.

Field Value
HTTP verb POST
Resolved route /v1/Admin/GetSqlConnectionInfo
Route composition Class-level [Route] template + bare [HttpPost], with the controller-name token resolved to Admin and the action token to GetSqlConnectionInfo
Action GetSqlConnectionInfo
Return type Dictionary<string, string>
Declared responses None
Authorization DBConnAPIRetrieveResource
Idempotent Yes (read-only)
Operation OP-06 — see Operations and processes

Parameters (SQL Server)

Name In Type Required Default Binding Purpose
server Query string No* — Inferred by [ApiController] Server used in the secure-setting key and template
instance Query string No* — Inferred by [ApiController] Instance used in the secure-setting key and template
userName Query string No* — Inferred by [ApiController] User name used in the secure-setting key

Response (SQL Server)

Field Value
DTO None — Dictionary<string, string>
Media type application/json (serializer decided by the opaque base**)

The keys are identical to those on POST /v1/Admin/GetOracleConnectionInfo.

Status codes (SQL Server)

Status Condition Body
200 OK Credential read and split, or split failed and was swallowed (BR-DBC-023, BR-DBC-024) JSON object
Error status Trigger Produced by Body
401 Unauthorized / 403 Forbidden Caller lacks DBConnAPIRetrieveResource (BR-DBC-025); exact status not stated in package documentation** [SecurityApiAuthorize] via the opaque authorization pipeline † Not visible in source**
500 ** The secure setting does not exist (no existence check) Opaque package middleware** Not visible in source**

Authorization (SQL Server)

Requires resource DBConnAPIRetrieveResource (controller level). See Authentication and authorization.

Side effects and idempotency (SQL Server)

Aspect Finding
Records written None
Downstream calls SAIF Environment API through IEnvironmentClient
Files or messages produced None
Repeat-call behavior Same result each call; no cache, no probe, no audit log

Example (SQL Server)

POST /v1/Admin/GetSqlConnectionInfo?server=<server>&instance=<instance>&userName=<userName> HTTP/1.1
Host: <host>
Authorization: ******
HTTP/1.1 200 OK
Content-Type: application/json

{
  "credentials": "<user>|<password>",
  "user": "<user>",
  "pw": "<password>",
  "connectionString": "<composed connection string>"
}

Note: Statements marked with † are derived from dependency library documentation via the Legends CLI. Statements marked with * were inferred from code structure or contextual evidence. Statements marked with ** could not be confirmed; treat as unknown until verified.

Sources

  • DBConnectionAPI/DBConnectionAPI/Controllers/AdminController.cs
  • DBConnectionAPI/DBConnectionAPI/Services/ConnectionManager.cs
  • DBConnectionAPI/DBConnectionAPI/Services/IConnectionManager.cs
  • DBConnectionAPI/DBConnectionAPI/EnvironmentKeys.cs