diff --git a/docs/assets/swifty_companion_oauth_icon.png b/docs/assets/swifty_companion_oauth_icon.png new file mode 100644 index 0000000..9dc96fd Binary files /dev/null and b/docs/assets/swifty_companion_oauth_icon.png differ diff --git a/docs/assets/swifty_companion_oauth_icon_256.jpg b/docs/assets/swifty_companion_oauth_icon_256.jpg new file mode 100644 index 0000000..91dad5c Binary files /dev/null and b/docs/assets/swifty_companion_oauth_icon_256.jpg differ diff --git a/docs/assets/swifty_companion_oauth_icon_256.png b/docs/assets/swifty_companion_oauth_icon_256.png new file mode 100644 index 0000000..32ff74e Binary files /dev/null and b/docs/assets/swifty_companion_oauth_icon_256.png differ diff --git a/docs/assets/swifty_companion_oauth_icon_512.png b/docs/assets/swifty_companion_oauth_icon_512.png new file mode 100644 index 0000000..9dc96fd Binary files /dev/null and b/docs/assets/swifty_companion_oauth_icon_512.png differ diff --git a/docs/pedagogie/etape-02-oauth-intra.md b/docs/pedagogie/etape-02-oauth-intra.md index 4508025..2941700 100644 --- a/docs/pedagogie/etape-02-oauth-intra.md +++ b/docs/pedagogie/etape-02-oauth-intra.md @@ -45,20 +45,37 @@ REDIRECT_URI=... ## 2.3 — Choisir le `REDIRECT_URI` (mobile) -Deux approches courantes en Flutter : +### Erreur Intra : « must be a valid URI » -| Approche | Redirect URI typique | Packages | -|----------|----------------------|----------| -| **Deep link** (recommandé mobile) | `com.example.swifty_companion://callback` | `flutter_appauth` + config Android/iOS | -| **Boucle locale / custom scheme** | variante documentée dans [apidoc OAuth](https://api.intra.42.fr/apidoc) | `url_launcher` + écoute du retour | +Le formulaire **42 Intra** accepte en pratique surtout des URI **`http://` ou `https://`**. +Les schémas du type `com.example.swifty_companion://callback` sont souvent **refusés** (validateur strict + `_` dans le schéma). -Le même URI doit être : +**Type d’application Intra :** `42 pedagogic project` (normal pour Swifty Companion — pas de type « mobile »). -- dans le formulaire Intra ; -- dans `.env` ; -- dans `AndroidManifest` / iOS (intent filter) si deep link. +**URI de redirection** — format **http(s)://host:port/chemin** uniquement (pas de `com.example://…`). -**Android** : `applicationId` actuel = `com.example.swifty_companion` (`android/app/build.gradle.kts`). +Essayer **dans cet ordre** (une seule ligne dans le champ, sans guillemets ni espace) : + +1. `http://localhost:8080/callback` ← le plus courant sur l’Intra 42 +2. `http://localhost:3000/callback` +3. `http://127.0.0.1:8080/callback` + +Exemple tiré de la [doc 42](https://api.intra.42.fr/apidoc/guides/web_application_flow) : +`http://localhost:1919/users/auth/ft/callback` (tu peux t’en inspirer, mais garde une URI simple type `/callback`). + +Copier **exactement** la ligne acceptée dans `.env` et dans Flutter. + +Avec `flutter_appauth`, Android/iOS interceptent cette URL de boucle locale après le login dans le navigateur — pas besoin d’un vrai serveur web. + +| Approche | Redirect URI | Intra 42 | +|----------|--------------|----------| +| **Recommandé (Flutter + 42)** | `http://127.0.0.1:42800/callback` | ✅ en général accepté | +| Schéma custom | `com.example.swifty_companion://callback` | ❌ souvent refusé | +| Site web classique | `https://ton-domaine.com/callback` | ✅ si tu as un backend | + +Le même URI doit être : formulaire Intra, `.env`, et paramètre `redirect_uri` dans l’app. + +**Android** : `applicationId` = `com.example.swifty_companion` (`android/app/build.gradle.kts`) — indépendant du `REDIRECT_URI` loopback. Endpoints 42 (référence) : diff --git a/docs/pedagogie/intra-oauth-formulaire.md b/docs/pedagogie/intra-oauth-formulaire.md new file mode 100644 index 0000000..6cc2137 --- /dev/null +++ b/docs/pedagogie/intra-oauth-formulaire.md @@ -0,0 +1,58 @@ +# Formulaire OAuth Intra — valeurs pour Swifty Companion + +À copier-coller sur [Nouvelle application API](https://profile.intra.42.fr/oauth/applications/new) (ou édition). + +## Paramètres obligatoires + +| Champ (FR) | Valeur proposée | +|------------|-----------------| +| **Nom** * | `Swifty Companion` | +| **Image** | `docs/assets/swifty_companion_oauth_icon_256.png` ou `swifty_companion_oauth_icon_256.jpg` (vrai PNG/JPEG, 256×256). Ne pas uploader l’ancien fichier mal nommé (`.png` qui était en réalité du JPEG). | +| **Description** * | `Projet pédagogique Mobile Initiation : application Flutter pour afficher le profil d’un étudiant 42 via l’API Intra.` | +| **Type d’application** * | **`42 pedagogic project`** (choix correct ; il n’y a pas de type « mobile ») | +| **Site web** | `https://www.42.fr` ou l’URL de ton dépôt GitHub / Git perso (placeholder accepté) | +| **Publique** | **Décoché** (app perso de projet) | + +## URI de redirection + +**Une seule ligne**, sans guillemets : + +```text +http://localhost:8080/callback +``` + +Si le formulaire affiche encore *invalid format*, tester **une** de ces lignes (toujours une seule) : + +```text +http://localhost:3000/callback +``` + +```text +http://127.0.0.1:8080/callback +``` + +**À ne pas mettre :** + +- `com.example.swifty_companion://callback` +- lignes vides ou plusieurs URI mélangées +- espaces avant/après + +## Champs d’application (scopes) + +Cocher **uniquement** : + +- [x] **Accéder aux données publiques de l'utilisateur** (`public`) + +Laisser **décoché** : équipes / projets, données utilisateur, médias, communauté, sujets. + +## Après création + +Sur la page de l’application : + +| Intra | `.env` | +|-------|--------| +| **UID** | `CLIENT_ID` | +| **SECRET** | `CLIENT_SECRET` | +| URI enregistrée | `REDIRECT_URI` (caractère pour caractère identique) | + +Fichier : `swiftyCompanion/.env` (ne pas committer). diff --git a/swiftyCompanion/.env.example b/swiftyCompanion/.env.example index 8d7f84a..8d3bf92 100644 --- a/swiftyCompanion/.env.example +++ b/swiftyCompanion/.env.example @@ -3,4 +3,5 @@ CLIENT_ID= CLIENT_SECRET= -REDIRECT_URI= +# Identique au champ « URI de redirection » sur l’Intra (une seule ligne, sans guillemets) +REDIRECT_URI=http://localhost:8080/callback