Jelajahi Sumber

Taak 130-F: keten werkt op devbob, state verhuisd naar het pad

4/4 tests groen op devbob. De state gaat nu via het pad in plaats van
een query-parameter, zodat het niet uitmaakt of OneAll een bestaande
query in de callback_uri laat staan.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
bob 19 jam lalu
induk
melakukan
8d8f6157ee
1 mengubah file dengan 14 tambahan dan 1 penghapusan
  1. 14 1
      TASKS.md

+ 14 - 1
TASKS.md

@@ -1826,7 +1826,7 @@ OneAll als client. Er verandert dus niets aan de Facebook-instellingen van de si
 | **130-C** | ✅ **Besloten 2026-09-21** | **Geen iOS op korte termijn** → Apple-login overslaan. Play kent geen tegenhanger van richtlijn 4.8. De provider is een parameter in de URL, dus later bijzetten raakt de app-kant niet. Blijft open punt zodra iOS aan de beurt komt |
 | **130-D** | ✅ **Code klaar** (2026-09-21), Bob deployt | `custom.social_login_app.inc` — callback die de token inwisselt (hergebruikt `social_login_core_get_settings()` / `_do_api_request()` / `_get_user_for_user_token()` / `_get_uid_for_email()` / `_map_identity_token_to_user_token()`), inlogt met `user_login_finalize()` en de sessie onder de `state` in de cache-bin legt (TTL 5 min, eenmalig). `php -l` schoon op PHP 8.1. Staat in `~/tmp/` op aegir-o1 |
 | **130-E** | ✅ **Code klaar** (2026-09-21), Bob deployt | `POST /flutterdrup/app_social_login/claim.json` → `{status: pending\|ok\|error}`; bij `ok` staan `sessid`/`session_name`/`token`/`user` erin als bij `user/login.json`, maar met een **klein** user-object (uid/name/mail) — geen volledig object in een anoniem claimbaar antwoord. Access callback `_custom_social_app_claim_access()` (TRUE, huispatroon van `custom_plaatsen_access`) |
-| **130-F** | Bob | Plaatsen + aanzetten + testen. **Stap-voor-stap in `~/tmp/130-drupal-instructies.md` op aegir-o1**, inclusief 4 curl-tests. ⚠️ De `callback_uri` moet de **`/nl/`-prefix** hebben (de site draait op `pathPrefix: nl/`, de widget op /nl/user doet het ook zo) |
+| **130-F** | 🟡 **Werkt op devbob** (2026-09-21) | 4/4 tests groen: callback rendert, callback→claim vinden elkaar via de cache, een state is eenmalig, ongeldige state geeft 400. **Nog te doen:** de bijgewerkte `.inc` + de tweede `hook_menu`-regel (pad-variant) plaatsen, en daarna alles naar **productie** — de app praat met uitgaanskrant.com |
 | **130-G** | ✅ **Code klaar** (2026-09-21), nog niet in de builder | `socialLoginStart(provider)` — state genereren, Custom Tab openen (`LaunchMode.inAppBrowserView`, **niet** `inAppWebView`), elke 2 s claimen, App State vullen als `drupalLogin`, tab sluiten met `closeInAppWebView()`. Timeout 3 min. `dart analyze` 0 errors. Wacht op 130-F. ⚠️ Te verifiëren op een toestel: of Android de polling niet throttlet terwijl de Custom Tab voorgrond is — zo ja, claimt hij alsnog bij terugkeer, want de state is 5 min geldig |
 | **130-H** | Claude | Knoppen op `lib/login/login/login_widget.dart` onder het bestaande formulier |
 | **130-I** | Claude | Vertalingen (P1-17-patroon: globe per widget) |
@@ -1834,5 +1834,18 @@ OneAll als client. Er verandert dus niets aan de Facebook-instellingen van de si
 | **130-K** | Bob | Privacyverklaring + Play **Data Safety** bijwerken: de app ontvangt dan naam/e-mail/avatar van een derde partij |
 | **130-L** | Claude | Bevindingen naar `CLAUDE.md` |
 
+**Stand 2026-09-21 na de eerste testronde:**
+- ⚠️ **De upgrade is nog niet actief** — gemeten: Direct Connect geeft nog
+  steeds *"not available in the Starter plan"*.
+- **Devbob gebruikt hetzelfde OneAll-subdomein** (`uitgaanskrantcom`) als
+  productie. Testen op devbob kan dus, maar dan moet `devbob.uitgaanskrant.com`
+  bij de **allowed domains** staan (Advanced geeft er 8).
+- **De state gaat door het PAD, niet door de query**
+  (`/nl/app-social-login/callback/<state>`). Het is niet bewezen dat OneAll een
+  bestaande query-parameter in de `callback_uri` laat staan als hij er zelf
+  `?connection_token=` aan toevoegt; met de state in het pad kan dat niet
+  misgaan. De query-variant blijft bestaan als terugval en om handmatig te
+  testen — daarom staan er **twee** `hook_menu`-items.
+
 **Volgorde:** A t/m C zijn besluiten en blokkeren D. F blokkeert G. K moet af
 vóór de Play-inzending als 130 in de eerste release meegaat.