From 403383d2b891047442e668b5da6dac27b9ee0157 Mon Sep 17 00:00:00 2001 From: GoldenDev74 Date: Thu, 19 Dec 2024 15:39:06 +0000 Subject: [PATCH 1/4] mise de l'authentification, des redirections et gestion des erreurs de pages --- .env.example | 59 ----- app/Exceptions/Handler.php | 10 + app/Http/Controllers/AdminController.php | 2 +- .../Auth/AuthenticatedSessionController.php | 5 +- app/Http/Controllers/ClientController.php | 2 +- app/Http/Controllers/ManagerController.php | 5 +- app/Http/Kernel.php | 3 +- app/Http/Middleware/RoleMiddleware.php | 33 +++ app/Models/User.php | 9 +- app/Providers/RouteServiceProvider.php | 2 +- app/View/Components/AdminAppLayout.php | 13 ++ app/View/Components/ManagerAppLayout.php | 13 ++ database/seeders/UserSeeder.php | 2 +- resources/views/admin/dashboard.blade.php | 5 +- .../{index.blade.php => dashboard.blade.php} | 0 resources/views/dashboard.blade.php | 17 -- resources/views/errors/403.blade.php | 216 ++++++++++++++++++ resources/views/errors/404.blade.php | 24 ++ resources/views/layouts/adminapp.blade.php | 36 +++ .../views/layouts/adminnavigation.blade.php | 100 ++++++++ resources/views/layouts/managerapp.blade.php | 36 +++ .../views/layouts/managernavigation.blade.php | 100 ++++++++ resources/views/layouts/navigation.blade.php | 6 +- resources/views/manager/dashboard.blade.php | 4 +- resources/views/welcome.blade.php | 2 +- routes/auth.php | 33 ++- routes/web.php | 18 +- 27 files changed, 627 insertions(+), 128 deletions(-) delete mode 100644 .env.example create mode 100644 app/Http/Middleware/RoleMiddleware.php create mode 100644 app/View/Components/AdminAppLayout.php create mode 100644 app/View/Components/ManagerAppLayout.php rename resources/views/client/{index.blade.php => dashboard.blade.php} (100%) delete mode 100644 resources/views/dashboard.blade.php create mode 100644 resources/views/errors/403.blade.php create mode 100644 resources/views/errors/404.blade.php create mode 100644 resources/views/layouts/adminapp.blade.php create mode 100644 resources/views/layouts/adminnavigation.blade.php create mode 100644 resources/views/layouts/managerapp.blade.php create mode 100644 resources/views/layouts/managernavigation.blade.php diff --git a/.env.example b/.env.example deleted file mode 100644 index 33237d6..0000000 --- a/.env.example +++ /dev/null @@ -1,59 +0,0 @@ -APP_NAME=Laravel -APP_ENV=local -APP_KEY= -APP_DEBUG=true -APP_URL=http://localhost - -LOG_CHANNEL=stack -LOG_DEPRECATIONS_CHANNEL=null -LOG_LEVEL=debug - -DB_CONNECTION=mysql -DB_HOST=127.0.0.1 -DB_PORT=3306 -DB_DATABASE=ecommerce -DB_USERNAME=root -DB_PASSWORD= - -BROADCAST_DRIVER=log -CACHE_DRIVER=file -FILESYSTEM_DISK=local -QUEUE_CONNECTION=sync -SESSION_DRIVER=file -SESSION_LIFETIME=120 - -MEMCACHED_HOST=127.0.0.1 - -REDIS_HOST=127.0.0.1 -REDIS_PASSWORD=null -REDIS_PORT=6379 - -MAIL_MAILER=smtp -MAIL_HOST=mailpit -MAIL_PORT=1025 -MAIL_USERNAME=null -MAIL_PASSWORD=null -MAIL_ENCRYPTION=null -MAIL_FROM_ADDRESS="hello@example.com" -MAIL_FROM_NAME="${APP_NAME}" - -AWS_ACCESS_KEY_ID= -AWS_SECRET_ACCESS_KEY= -AWS_DEFAULT_REGION=us-east-1 -AWS_BUCKET= -AWS_USE_PATH_STYLE_ENDPOINT=false - -PUSHER_APP_ID= -PUSHER_APP_KEY= -PUSHER_APP_SECRET= -PUSHER_HOST= -PUSHER_PORT=443 -PUSHER_SCHEME=https -PUSHER_APP_CLUSTER=mt1 - -VITE_APP_NAME="${APP_NAME}" -VITE_PUSHER_APP_KEY="${PUSHER_APP_KEY}" -VITE_PUSHER_HOST="${PUSHER_HOST}" -VITE_PUSHER_PORT="${PUSHER_PORT}" -VITE_PUSHER_SCHEME="${PUSHER_SCHEME}" -VITE_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}" diff --git a/app/Exceptions/Handler.php b/app/Exceptions/Handler.php index 56af264..f6b6f58 100644 --- a/app/Exceptions/Handler.php +++ b/app/Exceptions/Handler.php @@ -4,6 +4,7 @@ use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler; use Throwable; +use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; class Handler extends ExceptionHandler { @@ -27,4 +28,13 @@ public function register(): void // }); } + + public function render($request, Throwable $exception) + { + if ($exception instanceof NotFoundHttpException) { + return response()->view('errors.404', [], 404); + } + + return parent::render($request, $exception); + } } diff --git a/app/Http/Controllers/AdminController.php b/app/Http/Controllers/AdminController.php index 6d39e23..cef63b9 100644 --- a/app/Http/Controllers/AdminController.php +++ b/app/Http/Controllers/AdminController.php @@ -6,7 +6,7 @@ class AdminController extends Controller { - public function dashboard() + public function index() { return view('admin.dashboard'); } diff --git a/app/Http/Controllers/Auth/AuthenticatedSessionController.php b/app/Http/Controllers/Auth/AuthenticatedSessionController.php index fb2ae90..bae9353 100644 --- a/app/Http/Controllers/Auth/AuthenticatedSessionController.php +++ b/app/Http/Controllers/Auth/AuthenticatedSessionController.php @@ -32,7 +32,6 @@ public function store(LoginRequest $request): RedirectResponse // Récupérer l'utilisateur connecté $user = $request->user(); - // Redirection basée sur le rôle if ($user->isAdmin()) { return redirect()->route('admin.dashboard'); } @@ -41,13 +40,11 @@ public function store(LoginRequest $request): RedirectResponse return redirect()->route('manager.dashboard'); } - // Pour les clients if ($user->isClient()) { - // Vérifier si l'email est vérifié if (!$user->hasVerifiedEmail()) { return redirect()->route('verification.notice'); } - return redirect()->route('client.index'); + return redirect()->route('client.dashboard'); } return redirect('/'); diff --git a/app/Http/Controllers/ClientController.php b/app/Http/Controllers/ClientController.php index ddbfbe3..85f32fa 100644 --- a/app/Http/Controllers/ClientController.php +++ b/app/Http/Controllers/ClientController.php @@ -8,6 +8,6 @@ class ClientController extends Controller { public function index() { - return view('client.index'); + return view('client.dashboard'); } } diff --git a/app/Http/Controllers/ManagerController.php b/app/Http/Controllers/ManagerController.php index 39822d8..d21633b 100644 --- a/app/Http/Controllers/ManagerController.php +++ b/app/Http/Controllers/ManagerController.php @@ -6,8 +6,9 @@ class ManagerController extends Controller { - public function dashboard() + public function index() { - return view('manager.dashboard'); + // Logique pour afficher la vue du tableau de bord du gestionnaire + return view('manager.dashboard'); // Assurez-vous que cette vue existe } } diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php index 12ba01f..17b9db1 100644 --- a/app/Http/Kernel.php +++ b/app/Http/Kernel.php @@ -41,7 +41,7 @@ class Kernel extends HttpKernel 'api' => [ // \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class, - \Illuminate\Routing\Middleware\ThrottleRequests::class.':api', + \Illuminate\Routing\Middleware\ThrottleRequests::class . ':api', \Illuminate\Routing\Middleware\SubstituteBindings::class, ], ]; @@ -78,5 +78,6 @@ class Kernel extends HttpKernel 'admin' => \App\Http\Middleware\AdminMiddleware::class, 'manager' => \App\Http\Middleware\ManagerMiddleware::class, + 'role' => \App\Http\Middleware\RoleMiddleware::class, ]; } diff --git a/app/Http/Middleware/RoleMiddleware.php b/app/Http/Middleware/RoleMiddleware.php new file mode 100644 index 0000000..a17ef87 --- /dev/null +++ b/app/Http/Middleware/RoleMiddleware.php @@ -0,0 +1,33 @@ +role !== $role) { + return response()->view('errors.403', [], 403); // Affiche une page d'erreur 403 si l'utilisateur n'a pas accès + } + + return $next($request); + } +} diff --git a/app/Models/User.php b/app/Models/User.php index 7fa1b44..e7f6e7f 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -46,19 +46,18 @@ class User extends Authenticatable implements MustVerifyEmail 'password' => 'hashed', ]; - public function isAdmin():bool + public function isAdmin(): bool { return $this->role === 'admin'; } - public function isManager():bool + public function isManager(): bool { - return $this->role === 'gestionnaire'; + return $this->role === 'manager'; } - public function isClient():bool + public function isClient(): bool { return $this->role === 'client'; } - } diff --git a/app/Providers/RouteServiceProvider.php b/app/Providers/RouteServiceProvider.php index 025e874..785082a 100644 --- a/app/Providers/RouteServiceProvider.php +++ b/app/Providers/RouteServiceProvider.php @@ -17,7 +17,7 @@ class RouteServiceProvider extends ServiceProvider * * @var string */ - public const HOME = '/dashboard'; + public const HOME = '/client/dashboard'; /** * Define your route model bindings, pattern filters, and other route configuration. diff --git a/app/View/Components/AdminAppLayout.php b/app/View/Components/AdminAppLayout.php new file mode 100644 index 0000000..2d2c75a --- /dev/null +++ b/app/View/Components/AdminAppLayout.php @@ -0,0 +1,13 @@ + 'Avepozo', 'phone' => '91919191', 'password' => Hash::make('gestion2024'), - 'role' => 'gestionnaire', + 'role' => 'manager', ]); // Vérification immédiate du gestionnaire diff --git a/resources/views/admin/dashboard.blade.php b/resources/views/admin/dashboard.blade.php index 624806b..f8cba66 100644 --- a/resources/views/admin/dashboard.blade.php +++ b/resources/views/admin/dashboard.blade.php @@ -1,4 +1,4 @@ - +

{{ __('Tableau de bord Administrateur') }} @@ -14,5 +14,4 @@ - - \ No newline at end of file + diff --git a/resources/views/client/index.blade.php b/resources/views/client/dashboard.blade.php similarity index 100% rename from resources/views/client/index.blade.php rename to resources/views/client/dashboard.blade.php diff --git a/resources/views/dashboard.blade.php b/resources/views/dashboard.blade.php deleted file mode 100644 index 313cc3b..0000000 --- a/resources/views/dashboard.blade.php +++ /dev/null @@ -1,17 +0,0 @@ - - -

- {{ __('Dashboard') }} -

-
- -
-
-
-
- {{ __("Vous êtes connecté !") }} -
-
-
-
-
diff --git a/resources/views/errors/403.blade.php b/resources/views/errors/403.blade.php new file mode 100644 index 0000000..8b4796c --- /dev/null +++ b/resources/views/errors/403.blade.php @@ -0,0 +1,216 @@ + + + + + + + + + +
Vous n'êtes pas autorisé. +
+
Vous avez tenté d'accéder à une page pour laquelle vous n'aviez pas d'autorisation préalable.
+
+
403
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/resources/views/errors/404.blade.php b/resources/views/errors/404.blade.php new file mode 100644 index 0000000..00ae60c --- /dev/null +++ b/resources/views/errors/404.blade.php @@ -0,0 +1,24 @@ + + + + + + Page non trouvée + @vite(['resources/css/app.css', 'resources/js/app.js']) + + + +
+
+
+

+ Error404 +

+

Sorry, we couldn't find this page.

+

But dont worry, you can find plenty of other things on our homepage.

+ Back to homepage +
+
+
+ + diff --git a/resources/views/layouts/adminapp.blade.php b/resources/views/layouts/adminapp.blade.php new file mode 100644 index 0000000..1a4186d --- /dev/null +++ b/resources/views/layouts/adminapp.blade.php @@ -0,0 +1,36 @@ + + + + + + + + {{ config('app.name', 'Laravel') }} + + + + + + + @vite(['resources/css/app.css', 'resources/js/app.js']) + + +
+ @include('layouts.adminnavigation') + + + @if (isset($header)) +
+
+ {{ $header }} +
+
+ @endif + + +
+ {{ $slot }} +
+
+ + diff --git a/resources/views/layouts/adminnavigation.blade.php b/resources/views/layouts/adminnavigation.blade.php new file mode 100644 index 0000000..8854948 --- /dev/null +++ b/resources/views/layouts/adminnavigation.blade.php @@ -0,0 +1,100 @@ + diff --git a/resources/views/layouts/managerapp.blade.php b/resources/views/layouts/managerapp.blade.php new file mode 100644 index 0000000..61c0c31 --- /dev/null +++ b/resources/views/layouts/managerapp.blade.php @@ -0,0 +1,36 @@ + + + + + + + + {{ config('app.name', 'Laravel') }} + + + + + + + @vite(['resources/css/app.css', 'resources/js/app.js']) + + +
+ @include('layouts.managernavigation') + + + @if (isset($header)) +
+
+ {{ $header }} +
+
+ @endif + + +
+ {{ $slot }} +
+
+ + diff --git a/resources/views/layouts/managernavigation.blade.php b/resources/views/layouts/managernavigation.blade.php new file mode 100644 index 0000000..2bee7ee --- /dev/null +++ b/resources/views/layouts/managernavigation.blade.php @@ -0,0 +1,100 @@ + diff --git a/resources/views/layouts/navigation.blade.php b/resources/views/layouts/navigation.blade.php index c2d3a65..c8fefcb 100644 --- a/resources/views/layouts/navigation.blade.php +++ b/resources/views/layouts/navigation.blade.php @@ -5,14 +5,14 @@
@@ -67,7 +67,7 @@
- + diff --git a/resources/views/welcome.blade.php b/resources/views/welcome.blade.php index 3fce17a..77f3697 100644 --- a/resources/views/welcome.blade.php +++ b/resources/views/welcome.blade.php @@ -20,7 +20,7 @@ @if (Route::has('login'))
@auth - Dashboard + Dashboard @else Log in diff --git a/routes/auth.php b/routes/auth.php index 1040b51..8065c36 100644 --- a/routes/auth.php +++ b/routes/auth.php @@ -12,48 +12,43 @@ use Illuminate\Support\Facades\Route; Route::middleware('guest')->group(function () { - Route::get('register', [RegisteredUserController::class, 'create']) - ->name('register'); - - Route::post('register', [RegisteredUserController::class, 'store']); - - Route::get('login', [AuthenticatedSessionController::class, 'create']) - ->name('login'); - + Route::get('login', [AuthenticatedSessionController::class, 'create'])->name('login'); Route::post('login', [AuthenticatedSessionController::class, 'store']); + Route::get('register', [RegisteredUserController::class, 'create'])->name('register'); + Route::post('register', [RegisteredUserController::class, 'store']); Route::get('forgot-password', [PasswordResetLinkController::class, 'create']) - ->name('password.request'); + ->name('password.request'); Route::post('forgot-password', [PasswordResetLinkController::class, 'store']) - ->name('password.email'); + ->name('password.email'); Route::get('reset-password/{token}', [NewPasswordController::class, 'create']) - ->name('password.reset'); + ->name('password.reset'); Route::post('reset-password', [NewPasswordController::class, 'store']) - ->name('password.store'); + ->name('password.store'); }); Route::middleware('auth')->group(function () { Route::get('verify-email', EmailVerificationPromptController::class) - ->name('verification.notice'); + ->name('verification.notice'); Route::get('verify-email/{id}/{hash}', VerifyEmailController::class) - ->middleware(['signed', 'throttle:6,1']) - ->name('verification.verify'); + ->middleware(['signed', 'throttle:6,1']) + ->name('verification.verify'); Route::post('email/verification-notification', [EmailVerificationNotificationController::class, 'store']) - ->middleware('throttle:6,1') - ->name('verification.send'); + ->middleware('throttle:6,1') + ->name('verification.send'); Route::get('confirm-password', [ConfirmablePasswordController::class, 'show']) - ->name('password.confirm'); + ->name('password.confirm'); Route::post('confirm-password', [ConfirmablePasswordController::class, 'store']); Route::put('password', [PasswordController::class, 'update'])->name('password.update'); Route::post('logout', [AuthenticatedSessionController::class, 'destroy']) - ->name('logout'); + ->name('logout'); }); diff --git a/routes/web.php b/routes/web.php index 24b1773..e946978 100644 --- a/routes/web.php +++ b/routes/web.php @@ -21,9 +21,9 @@ return view('welcome'); }); -Route::get('/dashboard', function () { - return view('dashboard'); -})->middleware(['auth', 'verified'])->name('dashboard'); +//Route::get('/dashboard', function () { +// return view('dashboard'); +//}/)->middleware(['auth', 'verified'])->name('dashboard'); Route::middleware('auth')->group(function () { Route::get('/profile', [ProfileController::class, 'edit'])->name('profile.edit'); @@ -32,19 +32,21 @@ }); Route::middleware(['auth', 'manager'])->group(function () { - Route::get('/manager/dashboard', [ManagerController::class, 'dashboard']) + Route::get('/manager/dashboard', [ManagerController::class, 'index']) ->name('manager.dashboard'); }); Route::middleware(['auth', 'admin'])->group(function () { - Route::get('/admin/dashboard', [AdminController::class, 'dashboard']) + Route::get('/admin/dashboard', [AdminController::class, 'index']) + ->middleware('role:admin') ->name('admin.dashboard'); }); // Routes pour les clients Route::middleware(['auth', 'verified'])->group(function () { - Route::get('/client/index', [ClientController::class, 'index']) - ->name('client.index'); + Route::get('/client/dashboard', [ClientController::class, 'index']) + ->middleware('role:client') + ->name('client.dashboard'); }); -require __DIR__.'/auth.php'; +require __DIR__ . '/auth.php'; From 6f87c2ea1a1042bb8e985057d5de7c96a5906300 Mon Sep 17 00:00:00 2001 From: GoldenDev74 Date: Thu, 19 Dec 2024 15:52:25 +0000 Subject: [PATCH 2/4] auth 1.1 modification migration --- database/migrations/2014_10_12_000000_create_users_table.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/database/migrations/2014_10_12_000000_create_users_table.php b/database/migrations/2014_10_12_000000_create_users_table.php index ebc22c8..87a0cb8 100644 --- a/database/migrations/2014_10_12_000000_create_users_table.php +++ b/database/migrations/2014_10_12_000000_create_users_table.php @@ -19,7 +19,7 @@ public function up(): void $table->string('phone')->unique(); $table->timestamp('email_verified_at')->nullable(); $table->string('password'); - $table->enum('role', ['admin', 'gestionnaire', 'client','livreur'])->default('client'); + $table->enum('role', ['admin', 'manager', 'client','livreur'])->default('client'); $table->rememberToken(); $table->timestamps(); }); From 63397787016b61817997cdce1c77542ccdb72a48 Mon Sep 17 00:00:00 2001 From: "@GoldenDev74" Date: Thu, 19 Dec 2024 15:54:20 +0000 Subject: [PATCH 3/4] Update README.md --- README.md | 41 ++++++++++++++++++----------------------- 1 file changed, 18 insertions(+), 23 deletions(-) diff --git a/README.md b/README.md index aa7d868..cdf7039 100644 --- a/README.md +++ b/README.md @@ -6,16 +6,27 @@ ### Fonctionnalités principales - Gestion des rôles (admin, gestionnaire, client). - Redirection basée sur les rôles. -- Vérification des emails pour les nouveaux utilisateurs. +- Vérification des emails pour les clients. - Gestion de la récupération de mot de passe. - Middleware pour restreindre l'accès en fonction des rôles. +- gestion des erreurs de pages ( 404 & 403) ### Instructions pour tester 1. Clonez le dépôt : `git clone https://github.com/GoldenDev74/commerce.git`. 2. Installez les dépendances : `composer install`. & `npm install` 4. Configurez l'environnement : `.env`. -5. Ajoute la méthode suivante dans le fichier AppServiceProvider.php dans le répertoire app/Providers : + ``` + MAIL_MAILER=smtp + MAIL_HOST=smtp.gmail.com + MAIL_PORT=587 + MAIL_USERNAME=redmoondevs2024@gmail.com + MAIL_PASSWORD=nmhvmabbfaeedmxw + MAIL_ENCRYPTION=tls + MAIL_FROM_ADDRESS=redmoondevs2024@gmail.com + MAIL_FROM_NAME=SkydashEcommerce + ``` +6. Ajoute la méthode suivante dans le fichier AppServiceProvider.php dans le répertoire app/Providers : ``` public function boot() { @@ -36,28 +47,9 @@ ## Appendix -pour tester les mails on a utiliser mailtrap. Pour ce faire, ajouter un nouveau compte google à vos compte avec les identifiant suivantes: +pour tester les mails on a utiliser smtp de gmail. Pour ce faire, ajouter un nouveau compte google à vos compte avec les identifiant suivantes: - email : redmoondevs2024@gmail.com - mot de passe : redmoon102024 -arrivé sur mailtrap - -![Capture d'écran 2024-12-01 224735](https://github.com/user-attachments/assets/70e2183e-ee7d-4990-b14e-3f44a29ca195) - -![Capture d’écran 2024-12-01 224909](https://github.com/user-attachments/assets/f386814e-b440-4205-a07b-d3d0c299706c) - -![Capture d’écran 2024-12-01 225006](https://github.com/user-attachments/assets/44f85e5b-06ac-4135-be21-d998979b958b) - -![Capture d’écran 2024-12-01 225049](https://github.com/user-attachments/assets/3410354f-e98d-4754-9bdc-6efff902267b) - -assurer de copier ses configuration suivantes : - -![Capture d’écran 2024-12-01 225316](https://github.com/user-attachments/assets/9a7b20af-6930-48bd-8b61-7b9739743a81) - -dans vôtres fichier .env comme suit : - -![Capture d’écran 2024-12-01 225339](https://github.com/user-attachments/assets/91d90333-d266-4c27-aea1-5995861fbaf3) - -si tout est bien configurer vous deviez reçevoir les mails de vérification pour l'inscription, les mots de passes oublier. ## Contributing Voici les collaborateurs intervenues ! @@ -66,7 +58,6 @@ Voici les collaborateurs intervenues ! - Steventog - Antoine 253 - ## ScreenShoot ![image](https://github.com/user-attachments/assets/1e52abf4-af54-4759-a731-de12a550c3da) @@ -85,4 +76,8 @@ Voici les collaborateurs intervenues ! ![image](https://github.com/user-attachments/assets/49501512-a7f6-4d96-8dfb-61fdf325228a) +![Capture d'écran 2024-12-19 145703](https://github.com/user-attachments/assets/bd8b6f07-be5d-4823-ac78-1b380fa21925) + +![Capture d'écran 2024-12-19 150352](https://github.com/user-attachments/assets/e09c7179-d621-436f-b738-65c1d8ddec05) + From 4b40db71e9c282cd595efcce7fd48dda3bed4ef2 Mon Sep 17 00:00:00 2001 From: "@GoldenDev74" Date: Thu, 19 Dec 2024 15:57:50 +0000 Subject: [PATCH 4/4] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index cdf7039..d5e1e2b 100644 --- a/README.md +++ b/README.md @@ -74,7 +74,7 @@ Voici les collaborateurs intervenues ! ![image](https://github.com/user-attachments/assets/a1702d40-f7b6-43ef-9713-5d7ee676637d) -![image](https://github.com/user-attachments/assets/49501512-a7f6-4d96-8dfb-61fdf325228a) +![Capture d'écran 2024-12-19 155639](https://github.com/user-attachments/assets/50fc38e4-d491-46e3-b1f1-3aa3780f8c10) ![Capture d'écran 2024-12-19 145703](https://github.com/user-attachments/assets/bd8b6f07-be5d-4823-ac78-1b380fa21925)