Skip to content

feat: add proxy header authentication#2397

Merged
yohamta0 merged 15 commits into
mainfrom
feat/proxy-auth
Jul 21, 2026
Merged

feat: add proxy header authentication#2397
yohamta0 merged 15 commits into
mainfrom
feat/proxy-auth

Conversation

@yohamta0

@yohamta0 yohamta0 commented Jul 20, 2026

Copy link
Copy Markdown
Collaborator

Summary

  • add reverse-proxy header authentication as an optional login method under auth.mode: builtin
  • provision proxy users with safe defaults, group/workspace mapping, optional signup, and configurable authorization synchronization
  • scope identity-header handling to the exact /proxy-login browser endpoint, with strict parsing, redacted request logs, setup/license checks, and route-boundary security coverage
  • expose the feature through the login UI, OpenAPI user metadata, configuration schema/environment variables, and the Helm chart

Changes

  • Added exact-route proxy header authentication and bounded header parsing.
  • Added proxy user provisioning with role/workspace mappings and atomic authorization synchronization.
  • Added UI, API, schema, environment, and Helm integration.
  • Added route-isolation, provisioning, persistence, mapping, and frontend coverage.

Configuration

auth:
  mode: builtin
  proxy:
    enabled: true
    button_label: Continue with SSO
    headers:
      user: X-Auth-Request-User
      groups: X-Auth-Request-Groups
    auto_signup: true
    role_mapping:
      default_role: viewer
      default_workspace_access: none
      require_mapping: false
      skip_org_role_sync: false

source is optional. Unmatched users are allowed by default with no named-workspace grants; set require_mapping: true to reject them. Existing proxy users are synchronized on login unless skip_org_role_sync: true is configured.

Security

  • proxy identity headers never authenticate REST, SSE, webhook, metrics, health, or OIDC routes
  • the user header must contain exactly one bounded, valid identity value
  • group CSV parsing is bounded and rejects malformed or unsafe input
  • proxy login cannot create the first administrator
  • Helm requires a single UI replica and documents the network trust boundary

Validation

  • make api
  • focused Go tests for proxy provisioning, auth mapping, persistence, configuration, handlers, and route isolation
  • focused frontend login/auth-session tests

Related Issues

N/A

Checklist

  • Code follows the project style guidelines
  • Self-review of the code has been performed
  • Tests have been added or updated as needed
  • Documentation has been updated as needed
  • Changes have been tested locally with focused test targets

Summary by cubic

Adds reverse-proxy header authentication as an optional built-in login with strict route scoping. Also aligns OIDC authorization sync semantics with the proxy flow using atomic updates; updates UI, API wording, Helm, and docs; adds managed-provider reporting; and redacts proxy headers in logs.

  • New Features

    • Optional proxy login via GET /proxy-login only; all other routes ignore proxy headers.
    • Configurable under auth.mode: builtin via auth.proxy.* (headers, button label, optional source, auto-signup, group→role/workspace mapping, strict matching).
    • Provision users from proxy identity; shared auth-mapping is used by both Proxy and OIDC; external authorization sync is atomic and OIDC semantics are aligned.
    • UI: proxy login button; hide password actions for externally authenticated users; Users list reports managed providers for roles and workspace access; API/OpenAPI clarify passwords apply to builtin users only; request logs redact proxy headers.
    • Helm: schema/values validations, single-UI-replica enforcement with Recreate strategy and config checksum, NOTES guidance, NetworkPolicy example, and docs (PROXY_AUTH.md).
  • Migration

    • Prereqs: builtin auth initialized with a local admin, SSO license, exactly one UI replica, and the built-in tunnel disabled.
    • Configure the authenticating proxy to set identity headers (defaults: X-Auth-Request-User, X-Auth-Request-Groups) and enable auth.proxy.enabled: true.
    • Default: unmatched proxy users may sign in, receive global viewer, and no named-workspace grants; set auth.proxy.roleMapping.requireMapping: true to enforce mappings.
    • Existing proxy users sync authorization on login unless auth.proxy.roleMapping.skipOrgRoleSync: true is set.
    • Security boundary: route all UI traffic through the authenticating proxy only; proxy headers never authenticate APIs, webhooks, metrics, health, or OIDC routes.

Written for commit ed43d44. Summary will update on new commits.

Review in cubic

Summary by CodeRabbit

  • New Features

    • Added trusted-proxy (reverse proxy) authentication with a dedicated GET-only /proxy-login flow, including identity header parsing, optional auto-signup, and group-to-role/workspace mapping.
    • Extended the API/UI with proxy as a supported auth provider and introduced “managed by Proxy/SSO” user handling via managedAuthorizationProviders (read-only role/workspace for managed users).
  • Bug Fixes

    • Restricted password change/reset to locally authenticated builtin users (proxy-managed users excluded).
    • Hardened routing so forged proxy headers can’t authenticate outside the proxy login flow; proxy header values are redacted in logs.
  • Documentation

    • Expanded proxy authentication setup, security validation, and rollback guidance.
  • Chores

    • Updated Helm chart version to 1.0.11.

@coderabbitai

coderabbitai Bot commented Jul 20, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

This PR adds trusted-proxy authentication with validated configuration, proxy identity parsing, user provisioning, authorization synchronization, frontend login routing, API contracts, Helm support, and UI handling for externally managed users.

Changes

Trusted proxy authentication

Layer / File(s) Summary
Contracts and configuration
api/v1/*, internal/cmn/config/*, internal/cmn/schema/*, charts/dagu/*
Adds the proxy provider, configuration schemas, validation, environment loading, Helm constraints, network policy example, and operational documentation.
Persistence and authorization synchronization
internal/auth/*, internal/persis/store/*, internal/service/authmapping/*, internal/service/trustedproxyprovision/*, internal/service/oidcprovision/*
Stores trusted-proxy identities, indexes them, provisions users, maps groups to roles/workspaces, and synchronizes authorization atomically.
Frontend proxy login flow
internal/service/frontend/auth/*, internal/service/frontend/server.go, internal/service/frontend/templates*
Adds header parsing, proxy-login routing, setup/license gates, token redirects, base-path validation, log redaction, and template configuration.
API and user interface integration
internal/service/frontend/api/v1/*, ui/*
Reports managed providers, rejects external password management, adds proxy SSO login, and renders provider-specific user-management controls.

Estimated code review effort: 5 (Critical) | ~120 minutes

Sequence Diagram(s)

sequenceDiagram
  participant Proxy
  participant TrustedProxyLoginHandler
  participant TrustedProxyProvisionService
  participant UserStore
  participant AuthService
  Proxy->>TrustedProxyLoginHandler: GET /proxy-login with identity headers
  TrustedProxyLoginHandler->>TrustedProxyProvisionService: ProcessLogin(identity, groups)
  TrustedProxyProvisionService->>UserStore: Lookup or create and synchronize user
  TrustedProxyProvisionService-->>TrustedProxyLoginHandler: Provisioned user
  TrustedProxyLoginHandler->>AuthService: GenerateToken(user)
  AuthService-->>TrustedProxyLoginHandler: Session token
  TrustedProxyLoginHandler-->>Proxy: Redirect to login with token
Loading

Possibly related PRs

  • dagucloud/dagu#2000: Both changes modify frontend SSO/license gating that controls external login availability.
  • dagucloud/dagu#2019: Both changes modify workspace-access comparison and authorization state handling.
  • dagucloud/dagu#2395: Both changes modify the users listing authorization-sync surface and managed-provider reporting.
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 8.97% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Title check ✅ Passed The title is concise and accurately summarizes the main change: adding proxy header authentication.
Description check ✅ Passed The description follows the repository template and covers summary, changes, related issues, checklist, validation, and security details.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/proxy-auth

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🧹 Nitpick comments (2)
internal/service/frontend/server.go (1)

585-590: 🩺 Stability & Availability | 🔵 Trivial | 💤 Low value

Nil-guard asymmetry on srv.trustedProxyCfg.

Line 580 guards srv.trustedProxyCfg != nil before mutating it, but Line 588 dereferences srv.trustedProxyCfg.Enabled unguarded. It's non-nil in all current construction paths, so not reachable today, but the inconsistency is a latent panic risk if a future ServerOption sets it nil. Consider guarding Line 588 the same way.

🛡️ Defensive guard
-	if srv.licenseManager != nil && srv.trustedProxyCfg.Enabled && !srv.licenseManager.Checker().IsFeatureEnabled(license.FeatureSSO) {
+	if srv.licenseManager != nil && srv.trustedProxyCfg != nil && srv.trustedProxyCfg.Enabled && !srv.licenseManager.Checker().IsFeatureEnabled(license.FeatureSSO) {
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@internal/service/frontend/server.go` around lines 585 - 590, Update the
trusted-proxy license warning condition to verify srv.trustedProxyCfg is non-nil
before accessing Enabled, matching the existing guard used when mutating
trustedProxyCfg. Preserve the current warning behavior when the configuration
exists, is enabled, and SSO is not licensed.
internal/service/authmapping/mapper.go (1)

34-40: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick win

Validate DefaultRole in New() like every other role in this constructor.

New() validates every GroupMappings role and every WorkspaceMappings role (including rejecting admin as workspace-scoped), but never checks config.DefaultRole. Both Map() (line 183) and MapRole() (line 201) return m.defaultRole directly on the non-strict fallback path, so an unset or malformed DefaultRole would silently propagate an invalid auth.Role into a provisioned user's record instead of failing fast at construction, the way every other bad role value in this file does.

🛠️ Proposed fix
 func New(config Config) (*Mapper, error) {
+	if !config.DefaultRole.Valid() {
+		return nil, fmt.Errorf("invalid default role %q", config.DefaultRole)
+	}
 	defaultWorkspaceAccess := config.DefaultWorkspaceAccess

Also applies to: 59-88, 183-183, 201-201

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@internal/service/authmapping/mapper.go` around lines 34 - 40, Update New() to
validate config.DefaultRole using the same role-validation rules and error
behavior applied to GroupMappings and WorkspaceMappings, while preserving the
workspace-scoped admin restriction where applicable. Ensure invalid or unset
defaults fail during construction before Map() or MapRole() can return
m.defaultRole.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@ui/src/pages/users/UserFormModal.tsx`:
- Around line 262-274: Update the muted explanatory text in the
authorizationManaged branch of UserFormModal, specifically the paragraph
following WorkspaceAccessSummary, to use text-slate-500 dark:text-slate-500
instead of text-muted-foreground. Preserve the existing text and layout classes.

---

Nitpick comments:
In `@internal/service/authmapping/mapper.go`:
- Around line 34-40: Update New() to validate config.DefaultRole using the same
role-validation rules and error behavior applied to GroupMappings and
WorkspaceMappings, while preserving the workspace-scoped admin restriction where
applicable. Ensure invalid or unset defaults fail during construction before
Map() or MapRole() can return m.defaultRole.

In `@internal/service/frontend/server.go`:
- Around line 585-590: Update the trusted-proxy license warning condition to
verify srv.trustedProxyCfg is non-nil before accessing Enabled, matching the
existing guard used when mutating trustedProxyCfg. Preserve the current warning
behavior when the configuration exists, is enabled, and SSO is not licensed.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: fd13aad7-3a3f-4519-8fc8-3e1f58219448

📥 Commits

Reviewing files that changed from the base of the PR and between fce1629 and de1ff19.

📒 Files selected for processing (73)
  • api/v1/api.gen.go
  • api/v1/api.yaml
  • charts/dagu/Chart.yaml
  • charts/dagu/PROXY_AUTH.md
  • charts/dagu/README.md
  • charts/dagu/examples/proxy-network-policy.yaml
  • charts/dagu/templates/NOTES.txt
  • charts/dagu/templates/configmap.yaml
  • charts/dagu/templates/ui-deployment.yaml
  • charts/dagu/values.schema.json
  • charts/dagu/values.yaml
  • internal/auth/store.go
  • internal/auth/user.go
  • internal/auth/user_test.go
  • internal/cmn/config/config.go
  • internal/cmn/config/definition.go
  • internal/cmn/config/key_hints.go
  • internal/cmn/config/loader.go
  • internal/cmn/config/loader_test.go
  • internal/cmn/config/trusted_proxy_test.go
  • internal/cmn/schema/config.schema.json
  • internal/cmn/schema/config_schema_test.go
  • internal/persis/store/user.go
  • internal/persis/store/user_test.go
  • internal/service/auth/service.go
  • internal/service/auth/service_test.go
  • internal/service/authmapping/mapper.go
  • internal/service/authmapping/mapper_test.go
  • internal/service/frontend/api/v1/auth.go
  • internal/service/frontend/api/v1/auth_internal_test.go
  • internal/service/frontend/api/v1/auth_test.go
  • internal/service/frontend/api/v1/users.go
  • internal/service/frontend/api/v1/users_internal_test.go
  • internal/service/frontend/auth/middleware_test.go
  • internal/service/frontend/auth/trustedproxy.go
  • internal/service/frontend/auth/trustedproxy_headers.go
  • internal/service/frontend/auth/trustedproxy_headers_test.go
  • internal/service/frontend/auth/trustedproxy_test.go
  • internal/service/frontend/request_logging_test.go
  • internal/service/frontend/server.go
  • internal/service/frontend/server_test.go
  • internal/service/frontend/templates.go
  • internal/service/frontend/templates/base.gohtml
  • internal/service/frontend/templates_test.go
  • internal/service/oidcprovision/rolemapper.go
  • internal/service/oidcprovision/service.go
  • internal/service/oidcprovision/service_test.go
  • internal/service/trustedproxyprovision/service.go
  • internal/service/trustedproxyprovision/service_test.go
  • ui/index.html
  • ui/src/__tests__/App.test.tsx
  • ui/src/__tests__/menu.test.tsx
  • ui/src/api/v1/schema.ts
  • ui/src/components/UserMenu.tsx
  • ui/src/components/__tests__/LicenseBanner.test.tsx
  • ui/src/components/__tests__/UserMenu.test.tsx
  • ui/src/contexts/ConfigContext.tsx
  • ui/src/features/cockpit/hooks/__tests__/useInfiniteKanban.test.tsx
  • ui/src/features/dag-runs/components/dag-run-list/__tests__/DAGRunTable.test.tsx
  • ui/src/features/dags/components/dag-details/__tests__/NotificationsTab.test.tsx
  • ui/src/lib/authSession.ts
  • ui/src/pages/__tests__/index.test.tsx
  • ui/src/pages/__tests__/login.test.tsx
  • ui/src/pages/__tests__/setup.test.tsx
  • ui/src/pages/api-docs/__tests__/index.test.tsx
  • ui/src/pages/api-keys/__tests__/index.test.tsx
  • ui/src/pages/dags/__tests__/index.test.tsx
  • ui/src/pages/event-logs/__tests__/index.test.tsx
  • ui/src/pages/license/__tests__/index.test.tsx
  • ui/src/pages/login.tsx
  • ui/src/pages/users/UserFormModal.tsx
  • ui/src/pages/users/__tests__/index.test.tsx
  • ui/src/pages/users/index.tsx

Comment thread ui/src/pages/users/UserFormModal.tsx Outdated

Copy link
Copy Markdown
Collaborator Author

@coderabbitai review

Addressed all valid review feedback in f3dc134:

  • applied the designated muted-text colors;
  • validated the shared authorization mapper's default role while preserving OIDC's documented viewer default;
  • added the proxy configuration nil guard.

Also fixed an authorization synchronization race found during the follow-up audit. Proxy and OIDC now make the no-op/update decision atomically and log the actual previous authorization state. Deterministic regression tests cover both providers.

@coderabbitai

coderabbitai Bot commented Jul 20, 2026

Copy link
Copy Markdown

@yohamta0: I’ll review the latest changes, including the synchronization-race fix and its regression coverage.

✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

Copy link
Copy Markdown
Collaborator Author

@coderabbitai review

Latest commit 4961b1d only simplifies the deterministic authorization-race test fixtures to satisfy staticcheck QF1008. Please review the current head.

@coderabbitai

coderabbitai Bot commented Jul 20, 2026

Copy link
Copy Markdown

@yohamta0 I’ll review the current head, including the 4961b1d6c test-fixture simplification.

✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

Copilot AI review requested due to automatic review settings July 21, 2026 01:30

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Adds reverse-proxy header authentication as an optional “builtin” auth mode integration, with strict /proxy-login scoping, user provisioning, and managed-authorization synchronization. It also updates the UI/API/schema/config/Helm surfaces to expose proxy login and reflect externally managed users.

Changes:

  • Introduced a dedicated trusted-proxy login handler (GET /proxy-login) plus proxy user provisioning and identity persistence.
  • Unified/strengthened external authorization mapping and atomic role/workspace sync semantics (OIDC + Proxy).
  • Updated UI, OpenAPI/schema, config validation, Helm chart, and documentation; added focused backend/frontend tests.

Reviewed changes

Copilot reviewed 74 out of 75 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
ui/src/pages/users/UserFormModal.tsx Make role/workspace fields read-only when managed by external provider
ui/src/pages/users/index.tsx Display managed-provider badges; hide password reset for external users
ui/src/pages/users/tests/index.test.tsx Users page coverage for managed-provider combinations + proxy behavior
ui/src/pages/login.tsx Add proxy login button/link; generalize callback handling to “external”
ui/src/pages/license/tests/index.test.tsx Extend Config test fixtures with proxy fields
ui/src/pages/event-logs/tests/index.test.tsx Extend Config test fixtures with proxy fields
ui/src/pages/dags/tests/index.test.tsx Extend Config test fixtures with proxy fields
ui/src/pages/api-keys/tests/index.test.tsx Extend Config test fixtures with proxy fields
ui/src/pages/api-docs/tests/index.test.tsx Extend Config test fixtures with proxy fields
ui/src/pages/tests/setup.test.tsx Extend Config test fixtures with proxy fields
ui/src/pages/tests/login.test.tsx New tests covering proxy login link + separator behavior
ui/src/pages/tests/index.test.tsx Extend Config test fixtures with proxy fields
ui/src/lib/authSession.ts Replace oidc reason with generalized external
ui/src/features/dags/components/dag-details/tests/NotificationsTab.test.tsx Extend Config test fixtures with proxy fields
ui/src/features/dag-runs/components/dag-run-list/tests/DAGRunTable.test.tsx Extend Config test fixtures with proxy fields
ui/src/features/cockpit/hooks/tests/useInfiniteKanban.test.tsx Extend Config test fixtures with proxy fields
ui/src/contexts/ConfigContext.tsx Add proxyEnabled/proxyButtonLabel to UI config contract
ui/src/components/UserMenu.tsx Hide “Change Password” for externally authenticated users
ui/src/components/tests/UserMenu.test.tsx Coverage for proxy users not seeing password actions
ui/src/components/tests/LicenseBanner.test.tsx Extend Config test fixtures with proxy fields
ui/src/api/v1/schema.ts OpenAPI TS types updated (proxy provider + managed-provider metadata)
ui/src/tests/menu.test.tsx Extend Config test fixtures with proxy fields
ui/src/tests/App.test.tsx Extend Config test fixtures with proxy fields
ui/index.html Add proxyEnabled/proxyButtonLabel in embedded UI config scaffold
internal/service/trustedproxyprovision/service.go New proxy provisioning + authorization sync service
internal/service/oidcprovision/service.go Switch to atomic SyncAuthorization and align skip-sync strict semantics
internal/service/oidcprovision/service_test.go Extend OIDC provisioning tests for new sync/strict behavior
internal/service/oidcprovision/rolemapper.go Refactor to use shared authmapping.Mapper for group/workspace mapping
internal/service/frontend/templates/base.gohtml Plumb proxy config to UI; JS-escape auth button labels
internal/service/frontend/templates.go Add proxyEnabled/proxyButtonLabel template funcs + license gating
internal/service/frontend/templates_test.go Tests for licensed proxy enablement + JS escaping
internal/service/frontend/server.go Register /proxy-login; enforce scoped header redaction; basePath hardening
internal/service/frontend/server_test.go Route isolation tests for proxy headers + basePath validation tests
internal/service/frontend/request_logging_test.go Ensure trusted-proxy headers are redacted in request logs
internal/service/frontend/auth/trustedproxy.go New /proxy-login handler implementing strict parsing + redirects
internal/service/frontend/auth/trustedproxy_test.go Handler success/failure coverage, including setup/license gates
internal/service/frontend/auth/trustedproxy_headers.go Bounded/safe parsing for identity + CSV groups headers
internal/service/frontend/auth/trustedproxy_headers_test.go Unit + fuzz tests for header parsing
internal/service/frontend/auth/middleware_test.go Ensure proxy identity headers do not authenticate API middleware
internal/service/frontend/api/v1/users.go Expose managedRoleProviders/managedWorkspaceAccessProviders in users list
internal/service/frontend/api/v1/users_internal_test.go Coverage for managed-provider reporting + external-password reset denial
internal/service/frontend/api/v1/auth.go Update “password managed externally” error mapping/message
internal/service/frontend/api/v1/auth_test.go Route-isolation integration test: proxy headers ignored outside proxy-login
internal/service/frontend/api/v1/auth_internal_test.go Change-password rejects external users message
internal/service/authmapping/mapper.go New shared group→role/workspace authorization mapper
internal/service/authmapping/mapper_test.go Mapper test coverage (merge semantics, strict mode, validation)
internal/service/auth/service.go Treat any external provider as non-password; use Patch for updates
internal/service/auth/service_test.go Coverage for external providers + patch/update concurrency behavior
internal/persis/store/user.go Add trusted-proxy identity index + Patch + SyncAuthorization
internal/persis/store/user_test.go Coverage for proxy identity indexing/immutability + Patch/SyncAuthorization
internal/cmn/schema/config.schema.json Add auth.proxy schema and constraints
internal/cmn/schema/config_schema_test.go Schema validation tests for proxy config cases
internal/cmn/config/loader_test.go Ensure defaults include proxy auth subtree
internal/cmn/config/key_hints.go Add legacy key hints for proxy auth config
internal/cmn/config/definition.go Add proxy auth structs to config definitions
internal/cmn/config/config.go Add validation for proxy auth (headers, mode, tunnel/headless constraints)
internal/auth/workspace_access.go Add WorkspaceAccessEqual helper for canonical equality
internal/auth/workspace_access_test.go Tests for WorkspaceAccessEqual
internal/auth/user.go Add provider constants + trusted proxy identity fields + CanUsePassword
internal/auth/user_test.go Tests for new user fields + CanUsePassword
internal/auth/store.go Extend UserStore interfaces + new proxy identity errors/types
charts/dagu/values.yaml Helm values for proxy auth config
charts/dagu/values.schema.json Helm schema: proxy auth validation + UI replica constraint
charts/dagu/templates/ui-deployment.yaml Enforce Recreate strategy + config checksum when proxy auth enabled
charts/dagu/templates/NOTES.txt Warn about network trust boundary when proxy auth enabled
charts/dagu/templates/configmap.yaml Render auth.proxy config + enforce guardrails/validation
charts/dagu/README.md Document proxy auth availability and behavior
charts/dagu/PROXY_AUTH.md New detailed proxy auth setup/security/rollback guide
charts/dagu/examples/proxy-network-policy.yaml Example NetworkPolicy for UI isolation behind proxy
charts/dagu/Chart.yaml Bump chart version
api/v1/api.yaml OpenAPI updates: proxy provider enum + managed-provider fields + wording

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread ui/src/pages/users/UserFormModal.tsx
@yohamta0
yohamta0 merged commit ae69aaa into main Jul 21, 2026
16 checks passed
@yohamta0
yohamta0 deleted the feat/proxy-auth branch July 21, 2026 04:40
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.

2 participants