Skip to content

feat(oidc): 支持自定义 OIDC 登录显示名称 - #6012

Merged
Calcium-Ion merged 13 commits into
QuantumNous:mainfrom
mrchi:feat/oidc-custom-display-name
Jul 29, 2026
Merged

feat(oidc): 支持自定义 OIDC 登录显示名称#6012
Calcium-Ion merged 13 commits into
QuantumNous:mainfrom
mrchi:feat/oidc-custom-display-name

Conversation

@mrchi

@mrchi mrchi commented Jul 8, 2026

Copy link
Copy Markdown
Contributor

Note

本 PR 的代码由 AI 辅助生成(Claude Code),提交者非本项目历史核心贡献者。设计文档、实施计划与逐任务代码评审记录见下方描述与提交历史。

📝 变更描述 / Description

OIDC 登录相关的按钮文案、OAuth 错误提示、以及新用户首次登录时自动生成的 DisplayName,此前都硬编码为字面量 "OIDC"。本 PR 参考项目里已有的「自定义 OAuth 渠道」(Custom OAuth Provider)功能中可配置 Name 字段的模式,为内置 OIDC 渠道增加一个可选的「显示名称」设置项:

  • 后端:OIDCSettings 新增 DisplayName 字段(复用现有的通用 options 键值持久化机制,无需迁移),新增 GetEffectiveDisplayName() 方法,留空时回退为字面量 "OIDC"。该方法被 oauth/oidc.goGetName()controller/misc.go 的公开 /api/status 接口复用,因此错误提示文案、自动生成的用户 DisplayName、登录页按钮文案都会联动。
  • 前端 web/default(新版主题)与 web/classic(旧版主题):设置页 OIDC 分区新增「显示名称」输入框,登录页按钮文案改为读取该配置(复用已有的 Continue with {{name}} / 使用 {{name}} 继续 国际化 key,未新增 key),并为设置页新增的字段标签补充了全部语言包翻译。

🚀 变更类型 / Type of change

  • ✨ 新功能 (New feature)

✅ 提交前检查项 / Checklist

  • 人工确认: 我已亲自整理并撰写此描述,没有直接粘贴未经处理的 AI 输出。
  • 非重复提交: 已搜索现有 Issue/PR,未发现重复提交。
  • Bug fix 说明: 不适用(非 bug fix)。
  • 变更理解: 已理解这些更改的工作原理及可能影响。
  • 范围聚焦: 本 PR 未包含任何与当前任务无关的代码改动。
  • 本地验证: 见下方「运行证明」。
  • 安全合规: 代码中无敏感凭据,且符合项目代码规范。

📸 运行证明 / Proof of Work

  • go test ./...:全仓库测试套件全部通过。
  • 新增 Go 单测:setting/system_setting/oidc_test.goGetEffectiveDisplayName 的空值回退 / 空白字符 trim / 自定义值场景)、oauth/oidc_test.goOIDCProvider.GetName() 联动验证)。
  • web/defaultbun run buildbun run typecheck 均通过;bun run i18n:sync 确认 7 个语言包新增 key 均无缺失。
  • web/classic:新增 JSON 语言包已通过 JSON.parse 校验;bun run build 因仓库既有的、与本次改动无关的依赖冲突(bun workspace 提升后的 date-fns@4.4.0 与 Semi UI 依赖的 date-fns-tz@1.3.8 版本不兼容)暂时无法运行——已在全新 worktree 上用改动前的代码复现同样的失败,确认是预先存在的问题,本 PR 未触碰相关依赖。
  • 端到端验证:本地启动服务后,通过 /api/setup → 登录 → PUT /api/option/ 设置 oidc.display_name=Acme SSO 并启用 OIDC,确认 GET /api/status 返回 "oidc_display_name":"Acme SSO";清空该配置后确认回退为 "oidc_display_name":"OIDC",验证了两套前端登录按钮实际读取的字段契约。

Summary by CodeRabbit

  • New Features

    • OIDC integrations can now use a custom display name.
    • The configured OIDC name appears consistently in status information and authentication provider labels.
    • Names are automatically trimmed, with “OIDC” used when no custom name is provided.
  • Tests

    • Added coverage for custom names, whitespace handling, and default behavior.

@coderabbitai

coderabbitai Bot commented Jul 8, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 3ef2f6f6-5f54-45c0-ab7b-48a575755dfe

📥 Commits

Reviewing files that changed from the base of the PR and between b396dbf and f3f9f80.

📒 Files selected for processing (3)
  • controller/misc.go
  • controller/misc_oidc_test.go
  • oauth/oidc_test.go
🚧 Files skipped from review as they are similar to previous changes (2)
  • oauth/oidc_test.go
  • controller/misc.go

Walkthrough

OIDC settings now support a configurable display name with trimming and a default fallback. The resolved value is used by the OIDC provider name and included in the status response, with tests covering both integrations.

Changes

OIDC Custom Display Name

Layer / File(s) Summary
OIDC display-name settings and resolution
setting/system_setting/oidc.go, setting/system_setting/oidc_test.go
Adds OIDC configuration fields and resolves trimmed custom names or the default "OIDC".
Provider and status integration
oauth/oidc.go, oauth/oidc_test.go, controller/misc.go, controller/misc_oidc_test.go
Uses the effective display name for provider naming and exposes it as oidc_display_name in the status payload.

Estimated code review effort: 2 (Simple) | ~10 minutes

Poem

I’m a bunny with a name to share,
Trimmed-up letters floating through the air.
“OIDC” waits when fields are bare,
Status and provider match with care.
Hop, hop—settings bloom everywhere!

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed 标题准确概括了本次变更的核心:支持自定义 OIDC 登录显示名称。
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
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.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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
Contributor

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 (1)
docs/superpowers/specs/2026-07-08-oidc-custom-display-name-design.md (1)

47-54: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Design doc code snippet is stale vs. actual implementation.

GetEffectiveDisplayName trims the configured DisplayName and defaults to the literal "OIDC" when empty. The doc's snippet omits strings.TrimSpace, which per the commit summary was added later ("fixing whitespace trimming so blank values fall back correctly"). Consider updating the doc snippet to match the final implementation for future readers.

🤖 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 `@docs/superpowers/specs/2026-07-08-oidc-custom-display-name-design.md` around
lines 47 - 54, The design doc snippet for OIDCSettings.GetEffectiveDisplayName
is stale and should match the actual implementation. Update the example to
reflect that GetEffectiveDisplayName trims whitespace from DisplayName before
checking emptiness, and only falls back to the literal "OIDC" when the trimmed
value is empty. Keep the reference anchored to OIDCSettings and
GetEffectiveDisplayName so readers can find the correct behavior even if the
implementation changes.
🤖 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 `@web/classic/src/i18n/locales/ru.json`:
- Around line 3514-3515: The Russian translation for the hint tied to the OIDC
display-name field is awkward and should be rewritten in `ru.json` so it clearly
says the value falls back to OIDC when left blank. Update the string for the
hint associated with the `"留空则默认显示为 OIDC,例如:公司 SSO"` entry to a more natural
Russian phrasing, keeping the same meaning and matching the OIDC display-name
context.

---

Nitpick comments:
In `@docs/superpowers/specs/2026-07-08-oidc-custom-display-name-design.md`:
- Around line 47-54: The design doc snippet for
OIDCSettings.GetEffectiveDisplayName is stale and should match the actual
implementation. Update the example to reflect that GetEffectiveDisplayName trims
whitespace from DisplayName before checking emptiness, and only falls back to
the literal "OIDC" when the trimmed value is empty. Keep the reference anchored
to OIDCSettings and GetEffectiveDisplayName so readers can find the correct
behavior even if the implementation changes.
🪄 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: 41bd6999-da04-42ba-9b77-a67cc0ddd43e

📥 Commits

Reviewing files that changed from the base of the PR and between 97bbb7c and fec973c.

📒 Files selected for processing (29)
  • controller/misc.go
  • docs/superpowers/specs/2026-07-08-oidc-custom-display-name-design.md
  • oauth/oidc.go
  • oauth/oidc_test.go
  • setting/system_setting/oidc.go
  • setting/system_setting/oidc_test.go
  • web/classic/src/components/auth/LoginForm.jsx
  • web/classic/src/components/settings/SystemSetting.jsx
  • web/classic/src/i18n/locales/en.json
  • web/classic/src/i18n/locales/fr.json
  • web/classic/src/i18n/locales/ja.json
  • web/classic/src/i18n/locales/ru.json
  • web/classic/src/i18n/locales/vi.json
  • web/classic/src/i18n/locales/zh-CN.json
  • web/classic/src/i18n/locales/zh-TW.json
  • web/classic/src/i18n/locales/zh.json
  • web/default/src/features/auth/components/oauth-providers.tsx
  • web/default/src/features/auth/types.ts
  • web/default/src/features/system-settings/auth/index.tsx
  • web/default/src/features/system-settings/auth/oauth-section.tsx
  • web/default/src/features/system-settings/auth/section-registry.tsx
  • web/default/src/features/system-settings/types.ts
  • web/default/src/i18n/locales/en.json
  • web/default/src/i18n/locales/fr.json
  • web/default/src/i18n/locales/ja.json
  • web/default/src/i18n/locales/ru.json
  • web/default/src/i18n/locales/vi.json
  • web/default/src/i18n/locales/zh-TW.json
  • web/default/src/i18n/locales/zh.json

Comment thread web/classic/src/i18n/locales/ru.json Outdated
mrchi added 2 commits July 8, 2026 15:59
Design/planning docs are working artifacts for this session and
shouldn't be submitted to the upstream project.
Reorders the combined placeholder to show the example first, then
the fallback note, matching the Custom OAuth Provider Name field's
placeholder convention (example-only) that this feature mirrors.
@mrchi

mrchi commented Jul 8, 2026

Copy link
Copy Markdown
Contributor Author

Sorry for accidentally submitting part of the design document. It has been fixed.

…ranslation

Leads each clause with its condition/subject and adds the missing
verb, per PR review feedback.
@mrchi

mrchi commented Jul 23, 2026

Copy link
Copy Markdown
Contributor Author

@Calcium-Ion Is there any hope that this PR will be merged? If so, I'll resolve the conflicts; if not, let's just close it :)

…m-display-name

# Conflicts:
#	web/classic/src/components/auth/LoginForm.jsx
#	web/classic/src/components/settings/SystemSetting.jsx
#	web/classic/src/i18n/locales/en.json
#	web/classic/src/i18n/locales/fr.json
#	web/classic/src/i18n/locales/ja.json
#	web/classic/src/i18n/locales/ru.json
#	web/classic/src/i18n/locales/vi.json
#	web/classic/src/i18n/locales/zh-CN.json
#	web/classic/src/i18n/locales/zh-TW.json
#	web/classic/src/i18n/locales/zh.json
@Calcium-Ion
Calcium-Ion merged commit cb4c8c0 into QuantumNous:main Jul 29, 2026
2 of 3 checks passed
@mrchi
mrchi deleted the feat/oidc-custom-display-name branch July 29, 2026 08:46
kimberxu pushed a commit to kimberxu/new-api that referenced this pull request Jul 30, 2026
* docs: add design spec for OIDC custom display name

Mirrors the existing Custom OAuth Provider name pattern so admins can
show a meaningful label instead of the hardcoded "OIDC" on the login
page and in related copy.

* feat(oidc): add configurable display name with OIDC fallback

* feat(oidc): use configured display name in provider name and status API

* feat(oidc): add display name field to default-theme OIDC settings

Claude-Session: https://claude.ai/code/session_01FDkWJqigJi9yE3HG5pjZP5

* feat(oidc): show configured display name on default-theme login button

* feat(oidc): add display name field to classic-theme OIDC settings

* feat(oidc): show configured display name on classic-theme login button

* fix(oidc): trim whitespace before applying display name fallback

* chore: remove internal design doc from PR

Design/planning docs are working artifacts for this session and
shouldn't be submitted to the upstream project.

* fix(oidc): lead with example in classic-theme display name placeholder

Reorders the combined placeholder to show the example first, then
the fallback note, matching the Custom OAuth Provider Name field's
placeholder convention (example-only) that this feature mirrors.

* fix(i18n): improve Russian grammar in OIDC display-name placeholder translation

Leads each clause with its condition/subject and adds the missing
verb, per PR review feedback.

* test(web): remove redundant OIDC harness tests
bilicapr pushed a commit to bilicapr/new-api that referenced this pull request Jul 30, 2026
* docs: add design spec for OIDC custom display name

Mirrors the existing Custom OAuth Provider name pattern so admins can
show a meaningful label instead of the hardcoded "OIDC" on the login
page and in related copy.

* feat(oidc): add configurable display name with OIDC fallback

* feat(oidc): use configured display name in provider name and status API

* feat(oidc): add display name field to default-theme OIDC settings

Claude-Session: https://claude.ai/code/session_01FDkWJqigJi9yE3HG5pjZP5

* feat(oidc): show configured display name on default-theme login button

* feat(oidc): add display name field to classic-theme OIDC settings

* feat(oidc): show configured display name on classic-theme login button

* fix(oidc): trim whitespace before applying display name fallback

* chore: remove internal design doc from PR

Design/planning docs are working artifacts for this session and
shouldn't be submitted to the upstream project.

* fix(oidc): lead with example in classic-theme display name placeholder

Reorders the combined placeholder to show the example first, then
the fallback note, matching the Custom OAuth Provider Name field's
placeholder convention (example-only) that this feature mirrors.

* fix(i18n): improve Russian grammar in OIDC display-name placeholder translation

Leads each clause with its condition/subject and adds the missing
verb, per PR review feedback.

* test(web): remove redundant OIDC harness tests
IQZZ020501 pushed a commit to IQZZ020501/new-api that referenced this pull request Jul 30, 2026
* docs: add design spec for OIDC custom display name

Mirrors the existing Custom OAuth Provider name pattern so admins can
show a meaningful label instead of the hardcoded "OIDC" on the login
page and in related copy.

* feat(oidc): add configurable display name with OIDC fallback

* feat(oidc): use configured display name in provider name and status API

* feat(oidc): add display name field to default-theme OIDC settings

Claude-Session: https://claude.ai/code/session_01FDkWJqigJi9yE3HG5pjZP5

* feat(oidc): show configured display name on default-theme login button

* feat(oidc): add display name field to classic-theme OIDC settings

* feat(oidc): show configured display name on classic-theme login button

* fix(oidc): trim whitespace before applying display name fallback

* chore: remove internal design doc from PR

Design/planning docs are working artifacts for this session and
shouldn't be submitted to the upstream project.

* fix(oidc): lead with example in classic-theme display name placeholder

Reorders the combined placeholder to show the example first, then
the fallback note, matching the Custom OAuth Provider Name field's
placeholder convention (example-only) that this feature mirrors.

* fix(i18n): improve Russian grammar in OIDC display-name placeholder translation

Leads each clause with its condition/subject and adds the missing
verb, per PR review feedback.

* test(web): remove redundant OIDC harness tests
0401lucky pushed a commit to 0401lucky/new-api that referenced this pull request Aug 2, 2026
* docs: add design spec for OIDC custom display name

Mirrors the existing Custom OAuth Provider name pattern so admins can
show a meaningful label instead of the hardcoded "OIDC" on the login
page and in related copy.

* feat(oidc): add configurable display name with OIDC fallback

* feat(oidc): use configured display name in provider name and status API

* feat(oidc): add display name field to default-theme OIDC settings

Claude-Session: https://claude.ai/code/session_01FDkWJqigJi9yE3HG5pjZP5

* feat(oidc): show configured display name on default-theme login button

* feat(oidc): add display name field to classic-theme OIDC settings

* feat(oidc): show configured display name on classic-theme login button

* fix(oidc): trim whitespace before applying display name fallback

* chore: remove internal design doc from PR

Design/planning docs are working artifacts for this session and
shouldn't be submitted to the upstream project.

* fix(oidc): lead with example in classic-theme display name placeholder

Reorders the combined placeholder to show the example first, then
the fallback note, matching the Custom OAuth Provider Name field's
placeholder convention (example-only) that this feature mirrors.

* fix(i18n): improve Russian grammar in OIDC display-name placeholder translation

Leads each clause with its condition/subject and adds the missing
verb, per PR review feedback.

* test(web): remove redundant OIDC harness tests
bigfish9 added a commit to lanlingxiawu/new-api-er that referenced this pull request Aug 3, 2026
合并上游 16 个提交,主要是 token Auto 分组 (QuantumNous#6590)、deepseek responses API
(QuantumNous#6562)、Bedrock 客户端断开取消 (QuantumNous#6589)、分层重试计费加固 (QuantumNous#6518/QuantumNous#6570)、
zstd 请求解压 (QuantumNous#6545)、OIDC 自定义显示名 (QuantumNous#6012)、日志暴露 stream_status
(QuantumNous#6558)。

33 处冲突的处理:

- 11 个 legacy channel adaptor:上游删除 panic 之后的死代码以配合新增的
  go vet CI,本仓早已把整段 panic 换成返回 ErrLegacyAdaptorNotImplemented,
  已达成同一目的且不会让中继链路 panic,保留本仓实现。
- relay-aws.go 流式循环:两侧改动正交,合并保留 —— 上游的 ctx.Done() 取消
  分支(客户端断开时不再空转上游),加本仓的 finalizeClaudeOnError(提前
  返回时补发流终止符,否则 Claude 格式调用方会一直挂着)。
- 7 个 locale:两侧各自插入相邻 key,按字母序归并;上游 24 个新 key 与本仓
  1278 个 fork key 全部保留,逐一核对无丢失。
- keys / oauth / profile 前端:上游 Auto 分组为主体,叠加本仓改动;
  account-bindings-tab 与 oauth/$provider 保留本仓实现,理由见下。

测试取舍:

- 不引入 model/token_auto_groups_cache_test.go:它依赖上游的 truncateTables,
  该助手全局清表,与本仓行级清理原则冲突(共享库里有开发数据)。
- 不携带上游 controller/token_test.go:其迁移兼容测试会替换 model.DB 并在
  cleanup 里关闭,后续用 harness 连接的测试会拿到已关闭的句柄。按既有约定,
  token_auto_groups_test.go 需要的四个助手放进 zz_upstream_test_shims_test.go,
  其中 openTokenControllerTestDB 增加了 model.DB/LOG_DB 的成对保存还原。
  本仓原 token_test.go 的 controller 行为测试迁到
  gen_ctrl_token_handlers_test.go,与上游文件名脱钩以免再冲突。
- 三处断言随上游行为更新:stream_status 现对日志所有者可见;deepseek 的
  ConvertOpenAIResponsesRequest 已实现不再返回错误;计费路径判定收紧为
  「标记之外还需带对应 usage payload」,并补了三个反向用例锁住该语义。

遗留:oauth 绑定回调仍用 window.opener 判定 bind/login,上游 QuantumNous#6425 已改为
sessionStorage 标记 + state 比对。该修复要求 popup 先以 about:blank 打开再打
标记,本仓四个内置 provider 走 window.open(url) 直开,直接套用会让绑定永远
判成 login,故本次未采纳,需单独改造。
yuqiyi pushed a commit to yuqiyi/new-api that referenced this pull request Aug 16, 2026
* v1.0.0-rc.24: (117 commits)
  CI: enhance release synchronization workflow with optional file syncing
  fix: 修复兑换码额度精度损失 (QuantumNous#6685)
  feat(rate-limit): add user critical rate limit middleware for access token and aff transfer routes
  fix: test Claude/Gemini endpoints with native request format (QuantumNous#6698)
  feat(channels): refine fetched model categorization (QuantumNous#6632)
  Merge commit from fork
  refactor(relay): move replay metadata onto request bodies
  fix(relay): set Request.GetBody so the HTTP/2 transport can transparently retry after an upstream stream reset (QuantumNous#6249)
  Feat/auto group (QuantumNous#6590)
  fix(aws): cancel Bedrock requests on client disconnect (QuantumNous#6589)
  fix(billing): harden tiered retry group-switch billing (QuantumNous#6570)
  fix(billing): settle tiered retries with final group (QuantumNous#6518)
  feat: deepseek responses api (QuantumNous#6562)
  style: use text-sm for public header nav links to match other nav components (QuantumNous#6557)
  fix(oauth): stop treating a foreign window.opener as a bind flow (QuantumNous#6425)
  fix(relay): preserve multipart image edits for New API channels (QuantumNous#6559)
  feat(logs): expose stream status to log owners (QuantumNous#6558)
  feat: support zstd request decompression (QuantumNous#6545)
  fix: preserve Qwen thinking_budget passthrough (QuantumNous#5836)
  feat(oidc): 支持自定义 OIDC 登录显示名称 (QuantumNous#6012)
  ...

# Conflicts:
#	service/text_quota.go
#	web/src/features/models/components/drawers/model-mutate-drawer.tsx
#	web/src/features/pricing/components/model-details.tsx
#	web/src/features/pricing/lib/price.ts
refeiner pushed a commit to wuqiang44444444/new-api that referenced this pull request Aug 17, 2026
* docs: add design spec for OIDC custom display name

Mirrors the existing Custom OAuth Provider name pattern so admins can
show a meaningful label instead of the hardcoded "OIDC" on the login
page and in related copy.

* feat(oidc): add configurable display name with OIDC fallback

* feat(oidc): use configured display name in provider name and status API

* feat(oidc): add display name field to default-theme OIDC settings

Claude-Session: https://claude.ai/code/session_01FDkWJqigJi9yE3HG5pjZP5

* feat(oidc): show configured display name on default-theme login button

* feat(oidc): add display name field to classic-theme OIDC settings

* feat(oidc): show configured display name on classic-theme login button

* fix(oidc): trim whitespace before applying display name fallback

* chore: remove internal design doc from PR

Design/planning docs are working artifacts for this session and
shouldn't be submitted to the upstream project.

* fix(oidc): lead with example in classic-theme display name placeholder

Reorders the combined placeholder to show the example first, then
the fallback note, matching the Custom OAuth Provider Name field's
placeholder convention (example-only) that this feature mirrors.

* fix(i18n): improve Russian grammar in OIDC display-name placeholder translation

Leads each clause with its condition/subject and adds the missing
verb, per PR review feedback.

* test(web): remove redundant OIDC harness tests
330079598 pushed a commit to 330079598/new-api that referenced this pull request Aug 19, 2026
* docs: add design spec for OIDC custom display name

Mirrors the existing Custom OAuth Provider name pattern so admins can
show a meaningful label instead of the hardcoded "OIDC" on the login
page and in related copy.

* feat(oidc): add configurable display name with OIDC fallback

* feat(oidc): use configured display name in provider name and status API

* feat(oidc): add display name field to default-theme OIDC settings

Claude-Session: https://claude.ai/code/session_01FDkWJqigJi9yE3HG5pjZP5

* feat(oidc): show configured display name on default-theme login button

* feat(oidc): add display name field to classic-theme OIDC settings

* feat(oidc): show configured display name on classic-theme login button

* fix(oidc): trim whitespace before applying display name fallback

* chore: remove internal design doc from PR

Design/planning docs are working artifacts for this session and
shouldn't be submitted to the upstream project.

* fix(oidc): lead with example in classic-theme display name placeholder

Reorders the combined placeholder to show the example first, then
the fallback note, matching the Custom OAuth Provider Name field's
placeholder convention (example-only) that this feature mirrors.

* fix(i18n): improve Russian grammar in OIDC display-name placeholder translation

Leads each clause with its condition/subject and adds the missing
verb, per PR review feedback.

* test(web): remove redundant OIDC harness tests
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