Language Change PR-6.2-dev Failure

User tests: Successful: Unsuccessful:

avatar dawe78
dawe78
23 Apr 2026

Summary of Changes

This PR adds SMTP OAuth2 support in Global Configuration for outgoing mail on 6.2-dev.

Implemented changes:

  • New mailer value: smtpoauth2
  • OAuth2 token issue/check flow in com_config
  • Provider support: Microsoft, Google, Custom
  • Microsoft tenant mode: common and tenant-specific
  • XOAUTH2 SMTP integration in mail factory
  • PHPCS/CS fixes in touched files

Important Clarification (Review Feedback)

The previous provider-specific legacy wrappers (m365auth, m365callback, m365checktoken) were removed/adjusted because there was no real historical route contract to preserve in core.

Security / Callback Flow Notes

  • OAuth flow is initiated from authenticated administrator context (com_config).
  • Callback state is validated against session (com_config.oauth2_state) using hash_equals.
  • If state/session is missing or invalid, callback exits with invalid token error.
  • Token persistence requires admin privileges (core.admin check) before writing config.

Testing Instructions

  1. Login to Administrator.
  2. Open Global Configuration -> Server/Mail settings.
  3. Set mailer to smtpoauth2.
  4. Configure provider credentials for one provider:
  5. Microsoft (common tenant)
  6. Microsoft (specific tenant)
  7. Google
  8. Custom
  9. Click token issue button and complete provider consent.
  10. Verify redirect returns to admin config and token timestamp is set.
  11. Run token validation action.
  12. Send test mail from Global Configuration.
  13. Repeat for at least one additional provider profile.

Expected Result

  • OAuth flow completes only with valid admin session + valid state.
  • Refresh token is saved successfully.
  • Token check reports valid access token response.
  • SMTP test mail works with XOAUTH2 configuration.
  • CI style checks pass.

Actual Result

  • Behavior matches expected result for tested provider configurations.
  • 6.2 PR now uses correct head branch and updated formatting/documentation.

Documentation Changes

This PR description now documents:

  • callback auth/session assumptions
  • state validation behavior
  • required test flow for provider scenarios

AI Disclosure

AI assistance was used to help draft/refine parts of implementation and PR text.
All code, behavior, and security assumptions were manually reviewed and tested by the author before submission.

avatar dawe78 dawe78 - open - 23 Apr 2026
avatar dawe78 dawe78 - change - 23 Apr 2026
Status New Pending
avatar joomla-cms-bot joomla-cms-bot - change - 23 Apr 2026
Category Administration com_config Language & Strings Libraries
avatar Hackwar
Hackwar - comment - 23 Apr 2026

Please fill out the PR form correctly, especially the AI disclaimer. Also please format your text correctly. Right now the description is hardly readable.

Why do you have custom routes for the different providers as legacy fallback, when they never existed in the first place? Your docblocks are incomplete. How do those callbacks against the admin com_config work, when the calling provider is not an authorised user? Seems to me as if that would fail. This needs at least documentation on how to use and test in this PR.

avatar dawe78 dawe78 - change - 23 Apr 2026
The description was changed
avatar dawe78 dawe78 - edited - 23 Apr 2026
avatar dawe78
dawe78 - comment - 23 Apr 2026

Please fill out the PR form correctly, especially the AI disclaimer. Also please format your text correctly. Right now the description is hardly readable.

Okay, done. Code changes will be pulled soon

avatar dawe78 dawe78 - change - 23 Apr 2026
Labels Added: Language Change PR-6.2-dev
avatar dawe78
dawe78 - comment - 9 May 2026

Addressed in latest commit; thread outdated.

avatar joomla-cms-bot joomla-cms-bot - change - 10 May 2026
Category Administration com_config Language & Strings Libraries Administration com_config Language & Strings Layout Libraries
avatar dawe78
dawe78 - comment - 10 May 2026

Added layout file for oauth2token field

avatar dawe78
dawe78 - comment - 18 May 2026

All review points addressed, CI green, ready for merge.

avatar github-actions[bot]
github-actions[bot] - comment - 27 May 2026

This pull request has conflicts, please resolve those before we can evaluate the pull request.

avatar dawe78 dawe78 - change - 27 May 2026
Labels Added: Conflicting Files
avatar dawe78 dawe78 - change - 27 May 2026
Labels Removed: Conflicting Files
avatar dawe78
dawe78 - comment - 28 May 2026

System tests failed broadly across unrelated areas (Cypress, 36/156). Re-running CI as likely infra/flaky failure.

avatar QuyTon
QuyTon - comment - 28 May 2026

Missing language strings.

47669-smtp-oauth2-strings
avatar QuyTon
QuyTon - comment - 28 May 2026

Missing language strings.

47669-smtp-oauth2-strings 47669-smtp-oauth2-strings2
avatar brianteeman
brianteeman - comment - 28 May 2026

numerous codestyle issues with the xml have been marked as resolved but they have not been

avatar dawe78
dawe78 - comment - 28 May 2026

Fixed — added COM_CONFIG_MAIL_OAUTH2_BUTTON_CHECK, _BUTTON_ISSUE, _BUTTON_REISSUE, COM_CONFIG_OAUTH2_TENANT_MODE_COMMON and _TENANT.

avatar dawe78
dawe78 - comment - 28 May 2026

numerous codestyle issues with the xml have been marked as resolved but they have not been

Fixed — the closing > on oauth2_provider, oauth2_tenant_mode and oauth2_smtp_secure fields now uses 3-tab indentation consistent with the surrounding code.

avatar dawe78
dawe78 - comment - 28 May 2026

@Hackwar @brianteeman All review findings have been addressed in the latest commits. Could you please take another look?

Summary of changes since last review:

Added missing language strings (BUTTON_CHECK, BUTTON_ISSUE, BUTTON_REISSUE, OAUTH2_TENANT_MODE_COMMON/TENANT)
Reverted accidental re-sorting of existing language keys; restored accidentally deleted WEBSERVICES_CORS_OFF_* strings
Fixed XML closing > indentation (3 tabs) on the 3 new list fields
Replaced hardcoded Uri::root().'administrator/' with Uri::base() in ConfigHelper
Removed unused $params variable and replaced Factory::getApplication() with $this->app
All CI checks pass (Windows integration test flakiness re-triggered via empty commit)

Add a Comment

Login with GitHub to post a comment