|
@@ -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-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-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-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-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-H** | Claude | Knoppen op `lib/login/login/login_widget.dart` onder het bestaande formulier |
|
|
|
| **130-I** | Claude | Vertalingen (P1-17-patroon: globe per widget) |
|
|
| **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-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` |
|
|
| **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
|
|
**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.
|
|
vóór de Play-inzending als 130 in de eerste release meegaat.
|