Editing a Markdown file in a public share fails: TextContextProviderFactory::__construct(): Argument #5 ($userId) must be of type string, null given

Aperta Adatta ai principianti
#8,729 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
2/5
Tempo stimato
1-3 ore
Idoneità per principianti
76/100
Tipo di issue
Bug
Chiarezza
Specificata chiaramente
Stato di attività
Attiva
Stack tecnologico
php

Direzione di ricerca

Inizia da lib/Provider/TextContextProviderFactory.php e lib/Provider/TextContextProvider.php, poi controlla come PermissionService gestisce un ID utente null. Aggiungi un test di regressione in tests/unit/Provider/TextContextProviderFactoryTest.php per la costruzione della factory con null e verifica che build() e buildForCard() restituiscano contesti validi. Il lavoro è concluso quando la modifica delle condivisioni pubbliche non causa più questo TypeError e il test di regressione passa.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

0. Needs triage bug

Summary

After upgrading Nextcloud (35.0.2.2), editing a Markdown file in a public share fails with a 500 error. Deck's TextContextProviderFactory is resolved by the Text app for every registered text context, and on public shares there is no logged-in user, so the DI container injects null into the non-nullable string $userId constructor parameter.
Steps to reproduce

Create a public share link for a Markdown (.md) file
Open the share and start editing the file
The sync request POST /index.php/apps/text/public/session/<id>/sync fails

Error

OCA\Deck\Provider\TextContextProviderFactory::__construct(): Argument #5 ($userId) must be of type string, null given
in /nextcloud/apps/deck/lib/Provider/TextContextProviderFactory.php line 20

Relevant trace: OCA\Text\Controller\PublicSessionController::sync → ApiService::getContext → ContextManager::getContexts → dispatchTyped(RegisterContextEvent) → ServiceEventListener → SimpleContainer::resolve(TextContextProviderFactory::class) → TypeError.

Expected behavior
Editing a Markdown file in a public share works; Deck's context factory must not crash when no user is logged in.

Proposed solution
Widen the constructor parameter to nullable in both classes, since the downstream consumer already accepts null:

lib/Provider/TextContextProviderFactory.php:25: string $userId → ?string $userId
lib/Provider/TextContextProvider.php:34: string $userId → ?string $userId

PermissionService::checkPermission(..., $userId = null) (lib/Service/PermissionService.php:172) and userCan()/userIsBoardOwner() already handle null, so with no user the context simply resolves to read-only instead of throwing a TypeError. A regression test (tests/unit/Provider/TextContextProviderFactoryTest.php) constructs the factory with null userId and asserts build()/buildForCard() still return a valid context.

Environment
Nextcloud 35.0.2.2, Deck current master, Text app public share session

Lingua principale
JavaScript
Stelle
1.4k
Fork
363
Merge medio
1g 5h
PR unite (30g)
118

Preparare l'ambiente

Apri in Codespaces

Avvia il container di sviluppo del progetto nel browser, con il tuo account GitHub.

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di nextcloud/deck

Tutte le issue di nextcloud/deck

Issue simili

Altre issue su JavaScript

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.