From ba61ac8d5079fd695f2681953a448dcbb5d6ae48 Mon Sep 17 00:00:00 2001 From: Vincent BRIDIER Date: Mon, 2 Nov 2020 14:47:11 +0100 Subject: [PATCH] - Add static routes / views + AUTH (without reset password and activation email) --- app/Http/Controllers/Auth/LoginController.php | 45 ++++++ .../Controllers/Auth/RegisterController.php | 41 ++++++ .../Auth/ResetPasswordController.php | 14 ++ app/Http/Controllers/BasketController.php | 13 ++ app/Http/Controllers/IndexController.php | 38 +++++ app/Http/Controllers/ProductsController.php | 18 +++ app/Http/Kernel.php | 2 + app/Http/Middleware/Authenticate.php | 2 +- app/Http/Middleware/isAdmin.php | 24 ++++ app/Models/User.php | 5 +- app/Providers/RouteServiceProvider.php | 2 +- .../2014_10_12_000000_create_users_table.php | 5 +- resources/views/auth/login.blade.php | 23 +++ resources/views/auth/register.blade.php | 37 +++++ resources/views/auth/reset-password.blade.php | 5 + resources/views/basket.blade.php | 5 + resources/views/contact.blade.php | 5 + resources/views/faq.blade.php | 5 + resources/views/home.blade.php | 5 + .../views/layouts/front-layout.blade.php | 38 +++++ resources/views/legal-notice.blade.php | 5 + resources/views/privacy.blade.php | 5 + resources/views/range.blade.php | 5 + resources/views/ranges.blade.php | 5 + resources/views/terms.blade.php | 5 + resources/views/welcome.blade.php | 132 ------------------ routes/web.php | 41 +++++- 27 files changed, 391 insertions(+), 139 deletions(-) create mode 100644 app/Http/Controllers/Auth/LoginController.php create mode 100644 app/Http/Controllers/Auth/RegisterController.php create mode 100644 app/Http/Controllers/Auth/ResetPasswordController.php create mode 100644 app/Http/Controllers/BasketController.php create mode 100644 app/Http/Controllers/IndexController.php create mode 100644 app/Http/Controllers/ProductsController.php create mode 100644 app/Http/Middleware/isAdmin.php create mode 100644 resources/views/auth/login.blade.php create mode 100644 resources/views/auth/register.blade.php create mode 100644 resources/views/auth/reset-password.blade.php create mode 100644 resources/views/basket.blade.php create mode 100644 resources/views/contact.blade.php create mode 100644 resources/views/faq.blade.php create mode 100644 resources/views/home.blade.php create mode 100644 resources/views/layouts/front-layout.blade.php create mode 100644 resources/views/legal-notice.blade.php create mode 100644 resources/views/privacy.blade.php create mode 100644 resources/views/range.blade.php create mode 100644 resources/views/ranges.blade.php create mode 100644 resources/views/terms.blade.php delete mode 100644 resources/views/welcome.blade.php diff --git a/app/Http/Controllers/Auth/LoginController.php b/app/Http/Controllers/Auth/LoginController.php new file mode 100644 index 0000000..101ed74 --- /dev/null +++ b/app/Http/Controllers/Auth/LoginController.php @@ -0,0 +1,45 @@ +validate([ + 'email' => 'required', + 'password' => 'required' + ]); + + $credentials = $request->only(['email', 'password']); + + if (Auth::attempt($credentials)) { + $user = Auth::user(); + if ($user->role === 1 || $user->role === 2){ + return redirect()->route('bo.dashboard'); + }else{ + if ($user->email_verified_at === NULL) { + Auth::logout(); + return view('auth.login')->withErrors('Compte non activé.'); + } + return redirect()->intended('/'); + } + } + return view('auth.login')->withErrors('Informations incorrectes.'); + } + + public function logout(Request $request) + { + Auth::logout(); + return redirect()->route('home'); + } +} diff --git a/app/Http/Controllers/Auth/RegisterController.php b/app/Http/Controllers/Auth/RegisterController.php new file mode 100644 index 0000000..1c235b5 --- /dev/null +++ b/app/Http/Controllers/Auth/RegisterController.php @@ -0,0 +1,41 @@ +validate([ + 'lastname' => 'required|string|max:255', + 'firstname' => 'required|string|max:255', + 'date_of_birth' => 'required|date|before_or_equal:' . Carbon::now()->subYears(18)->toDateString(), + 'email' => 'required|string|email|max:255|unique:users|confirmed', + 'password' => 'required|string|min:8', + ]); + + User::create([ + 'firstname' => $request->firstname, + 'lastname' => $request->lastname, + 'date_of_birth' => $request->date_of_birth, + 'email' => $request->email, + 'password' => Hash::make($request->password), + 'role' => 3 + ]); + + // Envoi mail activation + + return redirect()->route('auth.register')->with('success', 'Mail envoyé pour confirmation'); + } +} diff --git a/app/Http/Controllers/Auth/ResetPasswordController.php b/app/Http/Controllers/Auth/ResetPasswordController.php new file mode 100644 index 0000000..acc775c --- /dev/null +++ b/app/Http/Controllers/Auth/ResetPasswordController.php @@ -0,0 +1,14 @@ + \Illuminate\Routing\Middleware\ValidateSignature::class, 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, 'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class, + 'is-admin' => isAdmin::class, ]; } diff --git a/app/Http/Middleware/Authenticate.php b/app/Http/Middleware/Authenticate.php index 704089a..67c7daf 100644 --- a/app/Http/Middleware/Authenticate.php +++ b/app/Http/Middleware/Authenticate.php @@ -15,7 +15,7 @@ class Authenticate extends Middleware protected function redirectTo($request) { if (! $request->expectsJson()) { - return route('login'); + return route('auth.login'); } } } diff --git a/app/Http/Middleware/isAdmin.php b/app/Http/Middleware/isAdmin.php new file mode 100644 index 0000000..1ad0d89 --- /dev/null +++ b/app/Http/Middleware/isAdmin.php @@ -0,0 +1,24 @@ +role; + if ($role === 1 || $role === 2) + return $next($request); + abort(404, "Cette page n'existe pas."); + } +} diff --git a/app/Models/User.php b/app/Models/User.php index 804799b..bad987f 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -17,9 +17,12 @@ class User extends Authenticatable * @var array */ protected $fillable = [ - 'name', + 'firstname', + 'lastname', 'email', 'password', + 'date_of_birth', + 'role' ]; /** diff --git a/app/Providers/RouteServiceProvider.php b/app/Providers/RouteServiceProvider.php index 3bd3c81..affd6da 100644 --- a/app/Providers/RouteServiceProvider.php +++ b/app/Providers/RouteServiceProvider.php @@ -17,7 +17,7 @@ class RouteServiceProvider extends ServiceProvider * * @var string */ - public const HOME = '/home'; + public const HOME = '/'; /** * The controller namespace for the application. 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 621a24e..dfd1a40 100644 --- a/database/migrations/2014_10_12_000000_create_users_table.php +++ b/database/migrations/2014_10_12_000000_create_users_table.php @@ -15,10 +15,13 @@ class CreateUsersTable extends Migration { Schema::create('users', function (Blueprint $table) { $table->id(); - $table->string('name'); + $table->string('firstname'); + $table->string('lastname'); + $table->date('date_of_birth'); $table->string('email')->unique(); $table->timestamp('email_verified_at')->nullable(); $table->string('password'); + $table->integer('role'); $table->rememberToken(); $table->timestamps(); }); diff --git a/resources/views/auth/login.blade.php b/resources/views/auth/login.blade.php new file mode 100644 index 0000000..489553a --- /dev/null +++ b/resources/views/auth/login.blade.php @@ -0,0 +1,23 @@ +@extends('layouts.front-layout') + +@section('content') +

Se connecter

+ @if ($errors->any()) +
+ +
+ @endif +
+
+ @csrf + +
+ +
+ +
+@endsection diff --git a/resources/views/auth/register.blade.php b/resources/views/auth/register.blade.php new file mode 100644 index 0000000..a6e628f --- /dev/null +++ b/resources/views/auth/register.blade.php @@ -0,0 +1,37 @@ +@extends('layouts.front-layout') + +@section('content') +

Inscription

+ + @if ($errors->any()) +
+ +
+ @endif + + @if (session('success')) +

{{ session('success') }}

+ @else +
+ @csrf + + +
+
+ +
+ +
+ +
+ +
+ +
+ @endif + +@endsection diff --git a/resources/views/auth/reset-password.blade.php b/resources/views/auth/reset-password.blade.php new file mode 100644 index 0000000..5f2597b --- /dev/null +++ b/resources/views/auth/reset-password.blade.php @@ -0,0 +1,5 @@ +@extends('layouts.front-layout') + +@section('content') +

Mot de passe oublié ?

+@endsection diff --git a/resources/views/basket.blade.php b/resources/views/basket.blade.php new file mode 100644 index 0000000..145111d --- /dev/null +++ b/resources/views/basket.blade.php @@ -0,0 +1,5 @@ +@extends('layouts.front-layout') + +@section('content') +

Mon panier

+@endsection diff --git a/resources/views/contact.blade.php b/resources/views/contact.blade.php new file mode 100644 index 0000000..842f94c --- /dev/null +++ b/resources/views/contact.blade.php @@ -0,0 +1,5 @@ +@extends('layouts.front-layout') + +@section('content') +

Contact

+@endsection diff --git a/resources/views/faq.blade.php b/resources/views/faq.blade.php new file mode 100644 index 0000000..2bcb5f9 --- /dev/null +++ b/resources/views/faq.blade.php @@ -0,0 +1,5 @@ +@extends('layouts.front-layout') + +@section('content') +

FAQ

+@endsection diff --git a/resources/views/home.blade.php b/resources/views/home.blade.php new file mode 100644 index 0000000..fd03436 --- /dev/null +++ b/resources/views/home.blade.php @@ -0,0 +1,5 @@ +@extends('layouts.front-layout') + +@section('content') +

Home

+@endsection diff --git a/resources/views/layouts/front-layout.blade.php b/resources/views/layouts/front-layout.blade.php new file mode 100644 index 0000000..b27ef90 --- /dev/null +++ b/resources/views/layouts/front-layout.blade.php @@ -0,0 +1,38 @@ + + + + + + + Laravel + + + +@yield('content') + + diff --git a/resources/views/legal-notice.blade.php b/resources/views/legal-notice.blade.php new file mode 100644 index 0000000..5040883 --- /dev/null +++ b/resources/views/legal-notice.blade.php @@ -0,0 +1,5 @@ +@extends('layouts.front-layout') + +@section('content') +

Mentions Légales

+@endsection diff --git a/resources/views/privacy.blade.php b/resources/views/privacy.blade.php new file mode 100644 index 0000000..c331c6e --- /dev/null +++ b/resources/views/privacy.blade.php @@ -0,0 +1,5 @@ +@extends('layouts.front-layout') + +@section('content') +

Politique de confidentialité

+@endsection diff --git a/resources/views/range.blade.php b/resources/views/range.blade.php new file mode 100644 index 0000000..0618b55 --- /dev/null +++ b/resources/views/range.blade.php @@ -0,0 +1,5 @@ +@extends('layouts.front-layout') + +@section('content') +

Gamme de produits

+@endsection diff --git a/resources/views/ranges.blade.php b/resources/views/ranges.blade.php new file mode 100644 index 0000000..f8f6efc --- /dev/null +++ b/resources/views/ranges.blade.php @@ -0,0 +1,5 @@ +@extends('layouts.front-layout') + +@section('content') +

Gammes de produits

+@endsection diff --git a/resources/views/terms.blade.php b/resources/views/terms.blade.php new file mode 100644 index 0000000..e2ece24 --- /dev/null +++ b/resources/views/terms.blade.php @@ -0,0 +1,5 @@ +@extends('layouts.front-layout') + +@section('content') +

CGV

+@endsection diff --git a/resources/views/welcome.blade.php b/resources/views/welcome.blade.php deleted file mode 100644 index ed7110b..0000000 --- a/resources/views/welcome.blade.php +++ /dev/null @@ -1,132 +0,0 @@ - - - - - - - Laravel - - - - - - - - - - -
- @if (Route::has('login')) - - @endif - -
-
- - - - - -
- -
-
-
- - -
-
- Laravel has wonderful, thorough documentation covering every aspect of the framework. Whether you are new to the framework or have previous experience with Laravel, we recommend reading all of the documentation from beginning to end. -
-
-
- -
-
- - -
- -
-
- Laracasts offers thousands of video tutorials on Laravel, PHP, and JavaScript development. Check them out, see for yourself, and massively level up your development skills in the process. -
-
-
- -
-
- - -
- -
-
- Laravel News is a community driven portal and newsletter aggregating all of the latest and most important news in the Laravel ecosystem, including new package releases and tutorials. -
-
-
- -
-
- -
Vibrant Ecosystem
-
- -
-
- Laravel's robust library of first-party tools and libraries, such as Forge, Vapor, Nova, and Envoyer help you take your projects to the next level. Pair them with powerful open source libraries like Cashier, Dusk, Echo, Horizon, Sanctum, Telescope, and more. -
-
-
-
-
- -
-
-
- - - - - - Shop - - - - - - - - Sponsor - -
-
- -
- Laravel v{{ Illuminate\Foundation\Application::VERSION }} (PHP v{{ PHP_VERSION }}) -
-
-
-
- - diff --git a/routes/web.php b/routes/web.php index b130397..a6fa327 100644 --- a/routes/web.php +++ b/routes/web.php @@ -2,6 +2,16 @@ use Illuminate\Support\Facades\Route; +use App\Http\Controllers\IndexController; +use App\Http\Controllers\BasketController; +use App\Http\Controllers\ProductsController; +// BO +use App\Http\Controllers\Bo\DashboardController; +// AUTH +use App\Http\Controllers\Auth\LoginController; +use App\Http\Controllers\Auth\RegisterController; +use App\Http\Controllers\Auth\ResetPasswordController; + /* |-------------------------------------------------------------------------- | Web Routes @@ -13,6 +23,31 @@ use Illuminate\Support\Facades\Route; | */ -Route::get('/', function () { - return view('welcome'); -}); +Route::get('/', [IndexController::class, 'index'])->name('home'); +Route::get('/contact', [IndexController::class, 'contact'])->name('contact'); +Route::get('/mentions-legales', [IndexController::class, 'legalNotice'])->name('legal-notice'); +Route::get('/cgv', [IndexController::class, 'terms'])->name('terms'); +Route::get('/politique-de-confidentialite', [IndexController::class, 'privacy'])->name('privacy'); +Route::get('/faq', [IndexController::class, 'faq'])->name('faq'); +Route::get('/mon-panier', [BasketController::class, 'index'])->name('basket'); +Route::get('/gammes-de-produits', [ProductsController::class, 'ranges'])->name('ranges'); +Route::get('/gamme-de-produits/{rangeSlug}', [ProductsController::class, 'range'])->name('range'); + +Route::namespace('Bo') + ->prefix('bo') + ->name('bo.') + ->middleware(['auth', 'is-admin']) + ->group(function () { + Route::get('/', [DashboardController::class, 'index'])->name('dashboard'); + }); + +Route::namespace('Auth') + ->name('auth.') + ->group(function () { + Route::get('/se-connecter', [LoginController::class, 'index'])->name('login')->middleware('guest'); + Route::post('/login', [LoginController::class, 'login'])->name('login.post')->middleware('guest'); + Route::get('/se-deconnecter', [LoginController::class, 'logout'])->name('logout')->middleware('auth'); + Route::get('/inscription', [RegisterController::class, 'index'])->name('register')->middleware('guest'); + Route::post('/register', [RegisterController::class, 'register'])->name('register.post')->middleware('guest'); + Route::get('/mot-de-passe-oublie', [ResetPasswordController::class, 'index'])->name('reset-password')->middleware('guest'); + });