diff --git a/README.md b/README.md
index 6438a89..457cd84 100644
--- a/README.md
+++ b/README.md
@@ -1,10 +1,10 @@
# laravel-connect
-The Bluesquare Connect package allows you to use its OAuth server and sync its resources.
+Ce package permet d'utiliser [Bluesquare Connect](https://connect.bluesquare.io) comme méthode d'authentification grâce au protocole OAuth 2.0.
## Installation
-Update your `composer.json`:
+Mettre à jour `composer.json` avec :
```
"repositories": [
@@ -15,199 +15,194 @@ Update your `composer.json`:
]
```
-Install the package:
+Puis installer le package :
```bash
-composer require bluesquare/laravel-connect "1.2"
+composer require bluesquare/laravel-connect "2.0"
```
-Finally, update your `.env` with your client's credentials:
+Mettre à jour le `.env` avec les identifiants du client OAuth généré sur [Bluesquare Connect](https://connect.bluesquare.io) :
```bash
BCONNECT_CLIENT_ID=your_client_id
BCONNECT_CLIENT_SECRET=your_client_secret
-BCONNECT_REDIRECT=http://localhost:8000/connect/callback
+BCONNECT_REDIRECT="${APP_URL}/connect/callback"
```
-### Sign in with Bluesquare Connect
+Et optionnellement :
-Follow there instructions to add Bluesquare Connect's authentication to your app.
-
-Update your `routes/web.php`:
+```bash
+# URL du serveur OAuth
+BCONNECT_URL=https://connect.bluesquare.io
-```
-Connect::routes();
+# Données demandées (scopes)
+BCONNECT_USER_SCOPES=profile
```
-Add the "Sign in with Bluesquare Connect" button in your blade login page:
+Il est possible de modifier d'autres comportements, à savoir :
+- Model utilisateur utilisé (par défaut `App\Models\User`)
+- URL de connexion via Bluesquare Connect (par défaut `/connect/authorize`)
+- Remember me : garder la session active post-connexion (par défaut `true`)
-```blade
-
-```
+Pour cela, il suffit de modifier le fichier `config/bconnect.php` généré via la commande `php artisan vendor:publish`.
-Make sure that the `password` column of users table is nullable.
+### Configuration minimale de `User`
-#### Keep user tokens (optional)
+À moins d'utiliser le trait `HasConnectData` (voir ci-dessous), il faut s'assurer que toutes les colonnes autres que `email` sont `nullable` dans la table `users` (y compris `password`).
+La colonne `email` est alors utilisée comme identifiant de référence par Bluesquare Connect.
-First, make sure that your model implements `HasConnectTokens` trait.
+### Connexion
-Then, add the following columns to your table:
+Pour activer la connexion via Bluesquare Connect, il faut mettre à jour `web.php` en y ajoutant :
-```
-$table->text('connect_access_token')->nullable();
-$table->text('connect_refresh_token')->nullable();
-$table->dateTime('connect_expires_at')->nullable();
-```
-
-### Database syncing
+```php
+use Bluesquare\Connect\Facades\Connect;
-Follow these instructions to sync your database with Bluesquare Connect.
+Connect::routes();
+```
-In your `AppServiceProvider`, specify in the `boot()` function which entities you want to sync:
+Si Blade est utilisé, un bouton "Connexion via Bluesquare Connect" peut être ajouté ainsi :
-```
-$connect->setSynchronized([
- Role::class,
- Company::class,
- Team::class,
- User::class,
- UserTeam::class
-]);
+```blade
+
```
-Your models must use `HasConnectSync` trait. This trait allows you to customize the syncing behavior.
+Sinon il suffit de rediriger vers `/connect/authorize` pour déclencher le flux.
-You also need to add this column to your synced tables:
+### Configuration personnalisée de `User`
-```
-$table->unsignedBigInteger('connect_resource_id')->unique();
-```
+Le trait `HasConnectData` permet d'exploiter au maximum les données fournies par Bluesquare Connect. Notamment :
+- Définir quelle colonne sert d'identifiant unique (par défaut `connect_id`) avec `$connectIdentifier` ;
+- Définir quelles données sont à injectées dans le Model à la connexion, avec `$connectFillable`
-_You can customize this column name and the syncing behavior in your model. Take a look at `HasConnectSync`._
+Pour utiliser l'identifiant par défaut, il convient d'ajouter cette colonne à `User` :
-Finally, use this command to sync everything:
-
-```bash
-php artisan connect:sync
+```php
+$table->string('connect_id')->nullable();
```
-#### Live updates (optional)
+Ou alors, et pour revenir à l'utilisation de `email` comme identifiant :
-First, configure a webhook on Bluesquare Connect :
+```php
+use HasConnectData;
-```
-https://your-app.com/api/connect/webhook
+protected $connectIdentifier = 'email';
```
-Then, update your `routes/api.php`:
+Ensuite, pour injecter automatiquement les données fournies par Bluesquare Connect (liste indicative ci-dessous) :
-```
-Connect::apiRoutes();
+```php
+protected $connectFillable = [
+ 'name',
+ 'email'
+];
```
-## Advanced usage
+Il est possible de mapper les colonnes avec des noms différents et des valeurs par defaut, voire même d'injecter dans plusieurs colonnes, comme ceci :
-### OAuth (sign in)
+```php
+protected $connectIdentifier = ['connect_id' => 'oauth_id'];
-#### Authorization
+protected $connectFillable = [
+ 'name' => 'fullname|Anonymous',
+ 'firstname' => ['firstname', 'nickname'],
+ 'email' => 'email_address',
+ 'group' => 'role|user'
+];
+```
-Redirect to Bluesquare Connect authorization page:
+## Synchronisation des données _(optionnel)_
-```
-public function authorize(Connect $connect)
-{
- return $connect->redirect($optional_custom_state);
-}
-```
+Par défaut, les données des utilisateurs sont mises à jour à chaque nouvelle connexion.
+Cependant, deux méthodes peuvent être utilisées pour conserver les données de tous les utilisateurs à jour sans reconnexion.
-#### Authorization callback
+### 1. Synchronisation passive
-Auto: check state, login and redirect
+Le trait `HasConnectTokens` permet de conserver les tokens OAuth pour une utilisation future (par exemple, pour synchroniser les utilisateurs périodiquement).
-```
-public function callback(Request $request, Connect $connect)
-{
- return $connect->loginFromCallback($request, $optional_redirect_to);
-}
+Avant tout, il faut ajouter ces colonnes dans la table `users` :
+
+```php
+$table->text('connect_access_token')->nullable();
+$table->text('connect_refresh_token')->nullable();
+$table->datetime('connect_expires_at')->nullable();
```
-Manual: check state
+Il est ensuite possible de mettre à jour les utilisateurs avec cette commande :
-```
-public function callback(Request $request, Connect $connect)
-{
- $valid = $connect->checkState($request);
- // ...
-}
+```bash
+php artisan connect:sync
```
-#### Tokens management
+Mais aussi de seulement mettre à jour les tokens avant expiration avec cette commande :
+```bash
+php artisan connect:refresh
```
-// Retrieve tokens from an authorization code
-$connect_data = $connect->getAccessTokenFromAuthorizationCode($code);
-// Retrieve tokens from a refresh token
-$connect_data = $connect->getAccessTokenFromRefreshToken($connect_data['refresh_token']);
+Il est conseillé d'appeler ces commandes périodiquement via une tâche CRON dans `Console/Kernel.php`.
-// With HasConnectTokens trait: get your local user tokens
-$connect->getUserAccessToken($user);
-```
+### 2. Synchronisation active (webhook)
-#### User data
+Avant tout, il est requis de créer une `App` liée au client utilisé sur Bluesquare Connect, et d'en activer le webhook.
-```
-// Retrieve user data from an access token
-$user_data = $connect->getUserData($connect_data['access_token']);
+Ensuite, pour pouvoir utiliser le webhook, il faut ajouter ceci à `routes/api.php`:
-// Example: find the corresponding user in your database
-$user = User::where('email', $user_data['email'])->first();
```
+use Bluesquare\Connect\Facades\Connect;
-### OAuth (client)
+Connect::apiRoutes();
+```
-#### Token management
+Cela va permettre à Bluesquare Connect d'appeler cette URL à chaque modification d'un utilisateur :
```
-// Get an access token
-$connect->getAccessToken();
-
-// Delete the current access token from cache
-$connect->deleteAccessToken();
+https://your-app.com/api/connect/webhook
```
-#### API resources
+Pour terminer, il suffit d'ajouter le trait `HasConnectWebhook` à `User`.
-```
-// Fetch all users
-$connect->getAll('User');
+#### Configurer le comportement du webhook
-// Fetch an user
-$connect->get('User', 1);
-```
+Par défaut, le webhook se comporte ainsi :
+- Lorsqu'un utilisateur est créé, il est inséré dans `users` comme à la première connexion ;
+- Lorsqu'un utilisateur est mis à jour, il est modifié comme à chaque connexion / synchronisation ;
+- Lorsqu'un utilisateur est supprimé, deux cas se présentent :
+ - si `User` implémente `SoftDeletes`, alors le webhook fait appel à `$user->delete()` ;
+ - si `SoftDeletes` est absent, alors la session utilisateur est simplement expirée en repassant `remember_token` à `null`.
+- Si l'utilisateur est restauré, deux cas se présentent :
+ - si `User` implémente `SoftDeletes` et que l'utilisateur est bien présent en base de données, alors le webhook fait appel à `$user->restore()` ;
+ - si `SoftDeletes` est absent ou que l'utilisateur n'existe pas, alors on recréé l'utilisateur (s'il existe, il est simplement mis à jour).
-#### Syncing
+Il est recommandé de personnaliser le cas de la suppression en ajoutant la fonction suivante à `User.php` :
-```
-// Sync everything
-$optional_resource_types = ['User', ...];
-$connect->syncAll($optional_resource_types);
+```php
+public function onConnectDelete(array $data)
+{
+ // Optionnel : avec cette fonction on met à jour une dernière fois l'utilisateur
+ $this->onConnectUpdate($data);
-// Sync a specific resource
-$connect->sync('User', 1);
+ //...supprimer l'utilisateur comme souhaité...
+}
```
-### Webhook
+Les autres cas peuvent être personnalisés avec ces différentes fonctions :
-```
-// Handle a webhook request
-$connect->handleWebhook($request);
+```php
+public function onConnectCreate(array $data);
+public function onConnectUpdate(array $data);
+public function onConnectRestore(array $data);
```
-### Configuration
+## Données fournies par Bluesquare Connect
-Publish our config file (`config/bconnect.php`) to customize the package configuration:
-
-```bash
-php artisan vendor:publish
-```
+- `id` et `connect_id` : identifiant unique de l'utilisateur
+- `email` : adresse e-mail
+- `name` : nom complet
+- `firstname` et `nickname` : prénom
+- `lastname` : nom de famille
+- `avatar`, `picture` et `profile_picture` : URL de la photo de profil
+- `company` : entreprise
+- `job` : mêtier exercé dans l'entreprise
+- `group` : rôle principal (les groupes sont personnalisées pour chaque App sur Bluesquare Connect)
+- `groups` : tableau contenant tous les rôles associés à l'utilisateur
\ No newline at end of file