Skip to content

Release V-01.05 hardening and package docs#5

Merged
AtlasLabs797 merged 3 commits intomainfrom
V-01.05
May 2, 2026
Merged

Release V-01.05 hardening and package docs#5
AtlasLabs797 merged 3 commits intomainfrom
V-01.05

Conversation

@AtlasLabs797
Copy link
Copy Markdown
Owner

No description provided.

Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: c0a019dccd

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +9 to +11
POSTGRES_PASSWORD: ${ATLAS_BALANCE_POSTGRES_OWNER_PASSWORD:?Set ATLAS_BALANCE_POSTGRES_OWNER_PASSWORD in a local .env file or environment variable}
ATLAS_BALANCE_POSTGRES_OWNER_PASSWORD: ${ATLAS_BALANCE_POSTGRES_OWNER_PASSWORD:?Set ATLAS_BALANCE_POSTGRES_OWNER_PASSWORD in a local .env file or environment variable}
ATLAS_BALANCE_POSTGRES_APP_PASSWORD: ${ATLAS_BALANCE_POSTGRES_APP_PASSWORD:?Set ATLAS_BALANCE_POSTGRES_APP_PASSWORD in a local .env file or environment variable}
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Keep Docker DB env vars backward compatible

This change makes docker compose up fail hard unless ATLAS_BALANCE_POSTGRES_OWNER_PASSWORD and ATLAS_BALANCE_POSTGRES_APP_PASSWORD are both defined, because all three password entries now use the :? required-variable form. Environments that were previously valid with the single DB password variable (the current repo example still uses that shape) will now stop booting immediately after upgrading, so local/dev startup and automation break until every caller is manually migrated.

Useful? React with 👍 / 👎.

Comment on lines +536 to +539
if (string.IsNullOrWhiteSpace(healthUrl))
{
healthUrl = "https://localhost/api/health";
}
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Make watchdog fallback health URL port-aware

When WatchdogSettings:ApiHealthUrl is not set, the fallback probes https://localhost/api/health, which implicitly assumes port 443. With health checks now enabled by default in this release flow, installations running the API on another HTTPS port will repeatedly mark updates as failed and trigger rollback even when binaries are healthy, because the probe never reaches the service.

Useful? React with 👍 / 👎.

@AtlasLabs797 AtlasLabs797 merged commit 503b589 into main May 2, 2026
6 checks passed
@AtlasLabs797 AtlasLabs797 deleted the V-01.05 branch May 2, 2026 11:12
@AtlasLabs797
Copy link
Copy Markdown
Owner Author

Version 1.5

Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 838a76b5a1

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +498 to +503
var dbUser = _configuration["WatchdogSettings:DbUser"] ?? "app_user";

var result = await RunProcessAsync(
executable,
["-h", dbHost, "-p", dbPort.ToString(), "-U", dbUser, "-F", "c", "-b", "-f", backupPath, dbName],
dbPassword,
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Run pre-update pg_dump with owner credentials

The new pre-update backup path now shells out to pg_dump using WatchdogSettings:DbUser/DbPassword, which is the runtime app role in hardened installs. In this same release, startup provisioning revokes access to security metadata tables from that role, so pg_dump can fail with permission errors and abort every update when RequireDatabaseBackupBeforeUpdate is enabled (it is true in the new templates). This blocks updates in the split owner/app-role setup introduced by this commit unless the dump is executed with owner credentials (or equivalent privileges).

Useful? React with 👍 / 👎.

Comment on lines +626 to +629
var secret = setupRequired
? TotpService.GenerateSecret()
: _secretProtector.UnprotectFromStorage(usuario.MfaSecret) ?? string.Empty;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Handle MFA secret decrypt errors by forcing MFA setup

When an MFA-enabled user logs in, CreateMfaChallenge directly decrypts usuario.MfaSecret; if Data Protection keys changed or are unavailable, this throws and bubbles as a 500 instead of a recoverable auth flow. Because this code already has a fallback path for missing/blank secrets, this uncaught decrypt failure effectively locks out affected users rather than prompting re-enrollment. Catching decrypt failures here and switching to setup-required would avoid production lockouts after key-store issues or restores.

Useful? React with 👍 / 👎.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant