From 710f54c0156c5fa081bc6af1a68e7cb44723939b Mon Sep 17 00:00:00 2001 From: Santo Cariotti Date: Mon, 24 Jan 2022 19:34:26 +0100 Subject: add example in laravel --- Year_3/TSDWL/LARAVEL/iBook/app/Console/Kernel.php | 32 +++++++ .../TSDWL/LARAVEL/iBook/app/Exceptions/Handler.php | 41 ++++++++ .../app/Http/Controllers/AuthorController.php | 85 +++++++++++++++++ .../iBook/app/Http/Controllers/BookController.php | 103 +++++++++++++++++++++ .../iBook/app/Http/Controllers/Controller.php | 13 +++ Year_3/TSDWL/LARAVEL/iBook/app/Http/Kernel.php | 67 ++++++++++++++ .../iBook/app/Http/Middleware/Authenticate.php | 21 +++++ .../iBook/app/Http/Middleware/EncryptCookies.php | 17 ++++ .../PreventRequestsDuringMaintenance.php | 17 ++++ .../Http/Middleware/RedirectIfAuthenticated.php | 32 +++++++ .../iBook/app/Http/Middleware/TrimStrings.php | 19 ++++ .../iBook/app/Http/Middleware/TrustHosts.php | 20 ++++ .../iBook/app/Http/Middleware/TrustProxies.php | 28 ++++++ .../iBook/app/Http/Middleware/VerifyCsrfToken.php | 17 ++++ Year_3/TSDWL/LARAVEL/iBook/app/Models/Author.php | 14 +++ Year_3/TSDWL/LARAVEL/iBook/app/Models/Book.php | 18 ++++ Year_3/TSDWL/LARAVEL/iBook/app/Models/User.php | 44 +++++++++ .../iBook/app/Providers/AppServiceProvider.php | 28 ++++++ .../iBook/app/Providers/AuthServiceProvider.php | 30 ++++++ .../app/Providers/BroadcastServiceProvider.php | 21 +++++ .../iBook/app/Providers/EventServiceProvider.php | 32 +++++++ .../iBook/app/Providers/RouteServiceProvider.php | 63 +++++++++++++ 22 files changed, 762 insertions(+) create mode 100644 Year_3/TSDWL/LARAVEL/iBook/app/Console/Kernel.php create mode 100644 Year_3/TSDWL/LARAVEL/iBook/app/Exceptions/Handler.php create mode 100644 Year_3/TSDWL/LARAVEL/iBook/app/Http/Controllers/AuthorController.php create mode 100644 Year_3/TSDWL/LARAVEL/iBook/app/Http/Controllers/BookController.php create mode 100644 Year_3/TSDWL/LARAVEL/iBook/app/Http/Controllers/Controller.php create mode 100644 Year_3/TSDWL/LARAVEL/iBook/app/Http/Kernel.php create mode 100644 Year_3/TSDWL/LARAVEL/iBook/app/Http/Middleware/Authenticate.php create mode 100644 Year_3/TSDWL/LARAVEL/iBook/app/Http/Middleware/EncryptCookies.php create mode 100644 Year_3/TSDWL/LARAVEL/iBook/app/Http/Middleware/PreventRequestsDuringMaintenance.php create mode 100644 Year_3/TSDWL/LARAVEL/iBook/app/Http/Middleware/RedirectIfAuthenticated.php create mode 100644 Year_3/TSDWL/LARAVEL/iBook/app/Http/Middleware/TrimStrings.php create mode 100644 Year_3/TSDWL/LARAVEL/iBook/app/Http/Middleware/TrustHosts.php create mode 100644 Year_3/TSDWL/LARAVEL/iBook/app/Http/Middleware/TrustProxies.php create mode 100644 Year_3/TSDWL/LARAVEL/iBook/app/Http/Middleware/VerifyCsrfToken.php create mode 100644 Year_3/TSDWL/LARAVEL/iBook/app/Models/Author.php create mode 100644 Year_3/TSDWL/LARAVEL/iBook/app/Models/Book.php create mode 100644 Year_3/TSDWL/LARAVEL/iBook/app/Models/User.php create mode 100644 Year_3/TSDWL/LARAVEL/iBook/app/Providers/AppServiceProvider.php create mode 100644 Year_3/TSDWL/LARAVEL/iBook/app/Providers/AuthServiceProvider.php create mode 100644 Year_3/TSDWL/LARAVEL/iBook/app/Providers/BroadcastServiceProvider.php create mode 100644 Year_3/TSDWL/LARAVEL/iBook/app/Providers/EventServiceProvider.php create mode 100644 Year_3/TSDWL/LARAVEL/iBook/app/Providers/RouteServiceProvider.php (limited to 'Year_3/TSDWL/LARAVEL/iBook/app') diff --git a/Year_3/TSDWL/LARAVEL/iBook/app/Console/Kernel.php b/Year_3/TSDWL/LARAVEL/iBook/app/Console/Kernel.php new file mode 100644 index 0000000..d8bc1d2 --- /dev/null +++ b/Year_3/TSDWL/LARAVEL/iBook/app/Console/Kernel.php @@ -0,0 +1,32 @@ +command('inspire')->hourly(); + } + + /** + * Register the commands for the application. + * + * @return void + */ + protected function commands() + { + $this->load(__DIR__.'/Commands'); + + require base_path('routes/console.php'); + } +} diff --git a/Year_3/TSDWL/LARAVEL/iBook/app/Exceptions/Handler.php b/Year_3/TSDWL/LARAVEL/iBook/app/Exceptions/Handler.php new file mode 100644 index 0000000..8e7fbd1 --- /dev/null +++ b/Year_3/TSDWL/LARAVEL/iBook/app/Exceptions/Handler.php @@ -0,0 +1,41 @@ +> + */ + protected $dontReport = [ + // + ]; + + /** + * A list of the inputs that are never flashed for validation exceptions. + * + * @var array + */ + protected $dontFlash = [ + 'current_password', + 'password', + 'password_confirmation', + ]; + + /** + * Register the exception handling callbacks for the application. + * + * @return void + */ + public function register() + { + $this->reportable(function (Throwable $e) { + // + }); + } +} diff --git a/Year_3/TSDWL/LARAVEL/iBook/app/Http/Controllers/AuthorController.php b/Year_3/TSDWL/LARAVEL/iBook/app/Http/Controllers/AuthorController.php new file mode 100644 index 0000000..242464c --- /dev/null +++ b/Year_3/TSDWL/LARAVEL/iBook/app/Http/Controllers/AuthorController.php @@ -0,0 +1,85 @@ +with('books', $books); + } + + /** + * Show the form for creating a new resource. + * + * @return \Illuminate\Http\Response + */ + public function create() + { + $authors = Author::all(); + return view('books.create')->with('authors', $authors); + } + + /** + * Store a newly created resource in storage. + * + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Http\Response + */ + public function store(Request $request) + { + $book = new Book(); + $book->name = $request['name']; + $book->published_at = $request['published_at']; + $book->is_online = $request['is_online'] ? 1: 0; + $book->author_id = $request['author_id']; + + $book->save(); + + return redirect('/books'); + } + + /** + * Display the specified resource. + * + * @param \App\Models\Book $book + * @return \Illuminate\Http\Response + */ + public function show(Book $book) + { + $authors = Author::all(); + return view('books.edit')->with('book', $book)->with('authors', $authors); + } + + /** + * Show the form for editing the specified resource. + * + * @param \App\Models\Book $book + * @return \Illuminate\Http\Response + */ + public function edit(Book $book) + { + } + + /** + * Update the specified resource in storage. + * + * @param \Illuminate\Http\Request $request + * @param \App\Models\Book $book + * @return \Illuminate\Http\Response + */ + public function update(Request $request, Book $book) + { + $book->name = $request['name']; + $book->published_at = $request['published_at']; + $book->is_online = $request['is_online'] ? 1: 0; + $book->author_id = $request['author_id']; + + $book->save(); + return redirect('/books/'.$book->id); + } + + /** + * Remove the specified resource from storage. + * + * @param \App\Models\Book $book + * @return \Illuminate\Http\Response + */ + public function destroy(Book $book) + { + // + } +} diff --git a/Year_3/TSDWL/LARAVEL/iBook/app/Http/Controllers/Controller.php b/Year_3/TSDWL/LARAVEL/iBook/app/Http/Controllers/Controller.php new file mode 100644 index 0000000..a0a2a8a --- /dev/null +++ b/Year_3/TSDWL/LARAVEL/iBook/app/Http/Controllers/Controller.php @@ -0,0 +1,13 @@ + + */ + protected $middleware = [ + // \App\Http\Middleware\TrustHosts::class, + \App\Http\Middleware\TrustProxies::class, + \Fruitcake\Cors\HandleCors::class, + \App\Http\Middleware\PreventRequestsDuringMaintenance::class, + \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class, + \App\Http\Middleware\TrimStrings::class, + \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class, + ]; + + /** + * The application's route middleware groups. + * + * @var array> + */ + protected $middlewareGroups = [ + 'web' => [ + \App\Http\Middleware\EncryptCookies::class, + \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, + \Illuminate\Session\Middleware\StartSession::class, + // \Illuminate\Session\Middleware\AuthenticateSession::class, + \Illuminate\View\Middleware\ShareErrorsFromSession::class, + \App\Http\Middleware\VerifyCsrfToken::class, + \Illuminate\Routing\Middleware\SubstituteBindings::class, + ], + + 'api' => [ + // \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class, + 'throttle:api', + \Illuminate\Routing\Middleware\SubstituteBindings::class, + ], + ]; + + /** + * The application's route middleware. + * + * These middleware may be assigned to groups or used individually. + * + * @var array + */ + protected $routeMiddleware = [ + 'auth' => \App\Http\Middleware\Authenticate::class, + 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, + 'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class, + 'can' => \Illuminate\Auth\Middleware\Authorize::class, + 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, + 'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class, + 'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class, + 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, + 'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class, + ]; +} diff --git a/Year_3/TSDWL/LARAVEL/iBook/app/Http/Middleware/Authenticate.php b/Year_3/TSDWL/LARAVEL/iBook/app/Http/Middleware/Authenticate.php new file mode 100644 index 0000000..704089a --- /dev/null +++ b/Year_3/TSDWL/LARAVEL/iBook/app/Http/Middleware/Authenticate.php @@ -0,0 +1,21 @@ +expectsJson()) { + return route('login'); + } + } +} diff --git a/Year_3/TSDWL/LARAVEL/iBook/app/Http/Middleware/EncryptCookies.php b/Year_3/TSDWL/LARAVEL/iBook/app/Http/Middleware/EncryptCookies.php new file mode 100644 index 0000000..867695b --- /dev/null +++ b/Year_3/TSDWL/LARAVEL/iBook/app/Http/Middleware/EncryptCookies.php @@ -0,0 +1,17 @@ + + */ + protected $except = [ + // + ]; +} diff --git a/Year_3/TSDWL/LARAVEL/iBook/app/Http/Middleware/PreventRequestsDuringMaintenance.php b/Year_3/TSDWL/LARAVEL/iBook/app/Http/Middleware/PreventRequestsDuringMaintenance.php new file mode 100644 index 0000000..74cbd9a --- /dev/null +++ b/Year_3/TSDWL/LARAVEL/iBook/app/Http/Middleware/PreventRequestsDuringMaintenance.php @@ -0,0 +1,17 @@ + + */ + protected $except = [ + // + ]; +} diff --git a/Year_3/TSDWL/LARAVEL/iBook/app/Http/Middleware/RedirectIfAuthenticated.php b/Year_3/TSDWL/LARAVEL/iBook/app/Http/Middleware/RedirectIfAuthenticated.php new file mode 100644 index 0000000..a2813a0 --- /dev/null +++ b/Year_3/TSDWL/LARAVEL/iBook/app/Http/Middleware/RedirectIfAuthenticated.php @@ -0,0 +1,32 @@ +check()) { + return redirect(RouteServiceProvider::HOME); + } + } + + return $next($request); + } +} diff --git a/Year_3/TSDWL/LARAVEL/iBook/app/Http/Middleware/TrimStrings.php b/Year_3/TSDWL/LARAVEL/iBook/app/Http/Middleware/TrimStrings.php new file mode 100644 index 0000000..88cadca --- /dev/null +++ b/Year_3/TSDWL/LARAVEL/iBook/app/Http/Middleware/TrimStrings.php @@ -0,0 +1,19 @@ + + */ + protected $except = [ + 'current_password', + 'password', + 'password_confirmation', + ]; +} diff --git a/Year_3/TSDWL/LARAVEL/iBook/app/Http/Middleware/TrustHosts.php b/Year_3/TSDWL/LARAVEL/iBook/app/Http/Middleware/TrustHosts.php new file mode 100644 index 0000000..7186414 --- /dev/null +++ b/Year_3/TSDWL/LARAVEL/iBook/app/Http/Middleware/TrustHosts.php @@ -0,0 +1,20 @@ + + */ + public function hosts() + { + return [ + $this->allSubdomainsOfApplicationUrl(), + ]; + } +} diff --git a/Year_3/TSDWL/LARAVEL/iBook/app/Http/Middleware/TrustProxies.php b/Year_3/TSDWL/LARAVEL/iBook/app/Http/Middleware/TrustProxies.php new file mode 100644 index 0000000..3391630 --- /dev/null +++ b/Year_3/TSDWL/LARAVEL/iBook/app/Http/Middleware/TrustProxies.php @@ -0,0 +1,28 @@ +|string|null + */ + protected $proxies; + + /** + * The headers that should be used to detect proxies. + * + * @var int + */ + protected $headers = + Request::HEADER_X_FORWARDED_FOR | + Request::HEADER_X_FORWARDED_HOST | + Request::HEADER_X_FORWARDED_PORT | + Request::HEADER_X_FORWARDED_PROTO | + Request::HEADER_X_FORWARDED_AWS_ELB; +} diff --git a/Year_3/TSDWL/LARAVEL/iBook/app/Http/Middleware/VerifyCsrfToken.php b/Year_3/TSDWL/LARAVEL/iBook/app/Http/Middleware/VerifyCsrfToken.php new file mode 100644 index 0000000..9e86521 --- /dev/null +++ b/Year_3/TSDWL/LARAVEL/iBook/app/Http/Middleware/VerifyCsrfToken.php @@ -0,0 +1,17 @@ + + */ + protected $except = [ + // + ]; +} diff --git a/Year_3/TSDWL/LARAVEL/iBook/app/Models/Author.php b/Year_3/TSDWL/LARAVEL/iBook/app/Models/Author.php new file mode 100644 index 0000000..bd3b4cf --- /dev/null +++ b/Year_3/TSDWL/LARAVEL/iBook/app/Models/Author.php @@ -0,0 +1,14 @@ +belongsTo(Author::class); + } +} diff --git a/Year_3/TSDWL/LARAVEL/iBook/app/Models/User.php b/Year_3/TSDWL/LARAVEL/iBook/app/Models/User.php new file mode 100644 index 0000000..8996368 --- /dev/null +++ b/Year_3/TSDWL/LARAVEL/iBook/app/Models/User.php @@ -0,0 +1,44 @@ + + */ + protected $fillable = [ + 'name', + 'email', + 'password', + ]; + + /** + * The attributes that should be hidden for serialization. + * + * @var array + */ + protected $hidden = [ + 'password', + 'remember_token', + ]; + + /** + * The attributes that should be cast. + * + * @var array + */ + protected $casts = [ + 'email_verified_at' => 'datetime', + ]; +} diff --git a/Year_3/TSDWL/LARAVEL/iBook/app/Providers/AppServiceProvider.php b/Year_3/TSDWL/LARAVEL/iBook/app/Providers/AppServiceProvider.php new file mode 100644 index 0000000..ee8ca5b --- /dev/null +++ b/Year_3/TSDWL/LARAVEL/iBook/app/Providers/AppServiceProvider.php @@ -0,0 +1,28 @@ + + */ + protected $policies = [ + // 'App\Models\Model' => 'App\Policies\ModelPolicy', + ]; + + /** + * Register any authentication / authorization services. + * + * @return void + */ + public function boot() + { + $this->registerPolicies(); + + // + } +} diff --git a/Year_3/TSDWL/LARAVEL/iBook/app/Providers/BroadcastServiceProvider.php b/Year_3/TSDWL/LARAVEL/iBook/app/Providers/BroadcastServiceProvider.php new file mode 100644 index 0000000..395c518 --- /dev/null +++ b/Year_3/TSDWL/LARAVEL/iBook/app/Providers/BroadcastServiceProvider.php @@ -0,0 +1,21 @@ +> + */ + protected $listen = [ + Registered::class => [ + SendEmailVerificationNotification::class, + ], + ]; + + /** + * Register any events for your application. + * + * @return void + */ + public function boot() + { + // + } +} diff --git a/Year_3/TSDWL/LARAVEL/iBook/app/Providers/RouteServiceProvider.php b/Year_3/TSDWL/LARAVEL/iBook/app/Providers/RouteServiceProvider.php new file mode 100644 index 0000000..3bd3c81 --- /dev/null +++ b/Year_3/TSDWL/LARAVEL/iBook/app/Providers/RouteServiceProvider.php @@ -0,0 +1,63 @@ +configureRateLimiting(); + + $this->routes(function () { + Route::prefix('api') + ->middleware('api') + ->namespace($this->namespace) + ->group(base_path('routes/api.php')); + + Route::middleware('web') + ->namespace($this->namespace) + ->group(base_path('routes/web.php')); + }); + } + + /** + * Configure the rate limiters for the application. + * + * @return void + */ + protected function configureRateLimiting() + { + RateLimiter::for('api', function (Request $request) { + return Limit::perMinute(60)->by(optional($request->user())->id ?: $request->ip()); + }); + } +} -- cgit v1.2.3-18-g5258