Skip to content

feat: port EU market changes from rc/web-3.5 and stable30 to ionos-dev-v32.0.6 - #289

Merged
bromiesTM merged 20 commits into
ionos-dev-v32.0.6from
dev/tkl/port-EU-Markets-to-V32.0.6
Jul 29, 2026
Merged

feat: port EU market changes from rc/web-3.5 and stable30 to ionos-dev-v32.0.6#289
bromiesTM merged 20 commits into
ionos-dev-v32.0.6from
dev/tkl/port-EU-Markets-to-V32.0.6

Conversation

@tanyaka

@tanyaka tanyaka commented Jul 24, 2026

Copy link
Copy Markdown

Summary

Backports EU market changes from rc/web-3.5 (v30) and rc/web-3.5-repared into the ionos-dev-v32.0.6 branch, adapted for NC32.

From rc/web-3.5-repared (cherry-picked, oldest→newest):

  • IONOS(user_oidc): update to v8.10.1, then downgrade to v8.6.1 to restore LFv2 bearer auth (HDNEXT-1914)
  • IONOS(ci): pin workflow/SBOM action versions, fix pre-existing action pin issues
  • IONOS(notify_push): add submodule at v1.3.3 + CI build step
  • IONOS(theme,config): Login & Security menu item submodule updates (nc-config excluded, theme kept at HEAD)
  • refactor(sharebymail): extract createEMailTemplate params into $templateData variables
  • IONOS(sharebymail): add BeforeShare*MailSentEvent dispatched before each mail send
  • IONOS(sharebymail): add Event classes to composer autoload_static classmap
  • IONOS(sharebymail): fix ShareByMailProviderTest broken by templateData/event refactors (adapted for NC32 PasswordContext::SHARING)
  • IONOS(sharebymail): add test coverage for BeforeShareNoteMailSentEvent dispatch
  • IONOS(sharebymail): fix createPasswordSendActivity firing when mail is suppressed
  • IONOS(nc_ionos_processes): update submodule to 9501a5e (send email for "file request")

From stable30 via simplesettings submodule (nc-simplesettings#197):

  • Linux App Image and Nautilus Integration download buttons
  • Conditional files/js/search script loading in simplesettings context
  • NC32 test fixes (OC_Util::$scripts removed, $scriptsInit reset added)

Excluded (intentionally):

  • IONOS (nc-config) submodule — kept at existing ionos-dev-v32.0.6 pointer
  • apps-external/viewer — kept at existing pointer
  • v30-specific package.json replacement
  • FA removal CI/core commits (already applied in base branch)

Test plan

  • make -f IONOS/Makefile build_locally completes without errors
  • sharebymail unit tests pass (BeforeShare*MailSentEvent dispatched correctly)
  • simplesettings unit tests pass (25 tests, 0 errors) — see nc-simplesettings#197
  • Notify push app builds and is functional
  • LFv2 bearer auth works with user_oidc v8.6.1

printminion-co and others added 17 commits July 24, 2026 14:18
Signed-off-by: Kai Henseler <kai.henseler@strato.de>
Signed-off-by: Kai Henseler <kai.henseler@strato.de>
- Pin docker/build-push-action to tagged release SHA v7.2.0 (was
  pinned to an untagged intermediate commit with no version label)
- Fix shivammathur/setup-php version comment: the action uses no 'v'
  prefix in its tags, so '#v2.31.1' is wrong; correct to '# 2.31.1'

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…NEXT-1914)

user_oidc 8.7.0 introduced setSessionUser() calls inside getCurrentUserId()
(IApacheBackend callback). This prevents NC core's loginWithExternalBackend()
from writing an oc_authtoken session row, so AppPasswordController returns 403
on every LFv2 getapppassword request. Regression present in 8.7.0–8.10.1.

v8.6.1 is the last release before the regression. DB-safe: no migrations were
added between v8.6.1 and v8.10.1 — all 14 migration files are identical.
Signed-off-by: Kai Henseler <kai.henseler@strato.de>
Signed-off-by: Kai Henseler <kai.henseler@strato.de>
…ateData variables

Extract the inline array literals passed to each createEMailTemplate() call
into named $templateData variables. For sendNote(), which previously passed no
data array, add a minimal array so all four send methods are consistent.

Zero behaviour change — $templateData is passed straight through to
createEMailTemplate() with identical contents.
…ach mail send

Dispatch a typed PSR-14 event immediately before every mailer->send() call
in ShareByMailProvider so that external listeners can intercept and replace
Nextcloud's native SMTP delivery.

Event hierarchy:
  AbstractBeforeShareMailSentEvent (base: share, resolvedEmails, message,
    markMailHandled / isMailHandled)
  ├── BeforeShareMailSentEvent   – sendEmail()
  ├── BeforeSharePasswordMailSentEvent – sendPassword() + sendPasswordToOwner()
  └── BeforeShareNoteMailSentEvent – sendNote()

Each concrete class holds its own typed $templateData (psalm array-shape)
and exposes named getters (getSenderUserId(), getFileName(), …) instead of
a generic getMailData(): array<string,mixed>.  This avoids defensive
is_string() / null guards in listeners.

$templateData reuses the array already passed to createEMailTemplate(), with
one extra key added for sendEmail(): senderUserId (the raw user ID, distinct
from the display name stored under 'initiator').

The native mailer->send() is skipped when a listener calls markMailHandled().
If the listener's own send throws, the exception propagates and the native
send is also skipped — no silent SMTP fallback.

sendEmail() and sendPassword() are flattened from nested
if (!isMailHandled()) { ... } pyramids to early-return style.

Signed-off-by: Misha M.-Kupriyanov <kupriyanov@strato.de>
…ssmap

autoload_real.php sets setClassMapAuthoritative(true), which disables
PSR-4 fallback entirely. Any class not listed in $classMap is never
found, regardless of whether PSR-4 would resolve it.

Signed-off-by: Tatjana Kaschperko Lindt <kaschperko-lindt@strato.de>
…a and event refactors

- Add senderUserId to the expected RecipientNotification templateData in 3 tests
  (added by the createEMailTemplate params refactor in 242b896)
- Update dispatchTyped expectation from once(GenerateSecurePasswordEvent) to
  exactly(3) with withConsecutive for GenerateSecurePasswordEvent,
  BeforeShareMailSentEvent, and BeforeSharePasswordMailSentEvent
  (sendEmail() and sendPassword() now each dispatch a Before*Event)

Signed-off-by: Tatjana Kaschperko Lindt <kaschperko-lindt@strato.de>
…t dispatch

Signed-off-by: Tatjana Kaschperko Lindt <kaschperko-lindt@strato.de>
…s suppressed

sendPassword() and sendPasswordToOwner() called createPasswordSendActivity()
unconditionally outside the isMailHandled() guard. A listener intercepting the
BeforeSharePasswordMailSentEvent would suppress the SMTP send but still cause
a false activity-log entry for a mail that was never delivered.

Apply the same early-return pattern used by sendEmail(): return immediately
when isMailHandled() is true so no side effects run after the flag is set.

Signed-off-by: Tatjana Kaschperko Lindt <kaschperko-lindt@strato.de>
…r "file request")

https://github.com/IONOS-Productivity/nc-ionos-processes/releases/tag/1.0.0-9501a5e

Signed-off-by: Misha M.-Kupriyanov <kupriyanov@strato.de>
Co-authored-by: Tatjana Kaschperko Lindt <kaschperko-lindt@strato.de>
…2.0.6 (Linux/Nautilus, files search, devtool fix, test fixes)
@tanyaka
tanyaka force-pushed the dev/tkl/port-EU-Markets-to-V32.0.6 branch 2 times, most recently from 14fa7be to 3f4ccea Compare July 24, 2026 14:24
@tanyaka tanyaka mentioned this pull request Jul 24, 2026
3 tasks
Signed-off-by: Kai Henseler <kai.henseler@strato.de>
@bromiesTM
bromiesTM force-pushed the dev/tkl/port-EU-Markets-to-V32.0.6 branch from 05be8ea to eebc485 Compare July 27, 2026 09:09
Signed-off-by: Kai Henseler <kai.henseler@strato.de>
@bromiesTM
bromiesTM force-pushed the dev/tkl/port-EU-Markets-to-V32.0.6 branch from f7e1c80 to 6c4653c Compare July 27, 2026 10:29
@bromiesTM bromiesTM modified the milestones: web-4, web-5 Jul 27, 2026
@bromiesTM
bromiesTM self-requested a review July 27, 2026 10:54
Signed-off-by: Kai Henseler <kai.henseler@strato.de>
@bromiesTM
bromiesTM force-pushed the dev/tkl/port-EU-Markets-to-V32.0.6 branch from 6c4653c to 51a4cd2 Compare July 29, 2026 08:20
@bromiesTM
bromiesTM merged commit 006f452 into ionos-dev-v32.0.6 Jul 29, 2026
9 of 11 checks passed
@bromiesTM
bromiesTM deleted the dev/tkl/port-EU-Markets-to-V32.0.6 branch July 29, 2026 08:39
@bromiesTM
bromiesTM restored the dev/tkl/port-EU-Markets-to-V32.0.6 branch July 29, 2026 12:46
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.

3 participants