diff options
author | Frankie B <git@diskfloppy.me> | 2023-06-13 21:59:16 +0100 |
---|---|---|
committer | Frankie B <frankieraybrown@gmail.com> | 2023-06-14 22:15:44 +0100 |
commit | a464ef4c0e3ce235fb1da70dfb282449beeeac80 (patch) | |
tree | 4708f5c996376dd94f2cc49f7d16dc80eef1a4df /app | |
parent | 44db6ce1d9cfdca7e175cb74ee7d818b94571bc4 (diff) |
Initialize laravel app
Diffstat (limited to 'app')
-rw-r--r-- | app/Console/Kernel.php | 27 | ||||
-rw-r--r-- | app/Exceptions/Handler.php | 30 | ||||
-rw-r--r-- | app/Http/Controllers/Controller.php | 12 | ||||
-rw-r--r-- | app/Http/Kernel.php | 67 | ||||
-rw-r--r-- | app/Http/Middleware/Authenticate.php | 17 | ||||
-rw-r--r-- | app/Http/Middleware/EncryptCookies.php | 17 | ||||
-rw-r--r-- | app/Http/Middleware/PreventRequestsDuringMaintenance.php | 17 | ||||
-rw-r--r-- | app/Http/Middleware/RedirectIfAuthenticated.php | 30 | ||||
-rw-r--r-- | app/Http/Middleware/TrimStrings.php | 19 | ||||
-rw-r--r-- | app/Http/Middleware/TrustHosts.php | 20 | ||||
-rw-r--r-- | app/Http/Middleware/TrustProxies.php | 28 | ||||
-rw-r--r-- | app/Http/Middleware/ValidateSignature.php | 22 | ||||
-rw-r--r-- | app/Http/Middleware/VerifyCsrfToken.php | 17 | ||||
-rw-r--r-- | app/Models/User.php | 45 | ||||
-rw-r--r-- | app/Providers/AppServiceProvider.php | 24 | ||||
-rw-r--r-- | app/Providers/AuthServiceProvider.php | 26 | ||||
-rw-r--r-- | app/Providers/BroadcastServiceProvider.php | 19 | ||||
-rw-r--r-- | app/Providers/EventServiceProvider.php | 38 | ||||
-rw-r--r-- | app/Providers/RouteServiceProvider.php | 40 |
19 files changed, 515 insertions, 0 deletions
diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php new file mode 100644 index 0000000..e6b9960 --- /dev/null +++ b/app/Console/Kernel.php @@ -0,0 +1,27 @@ +<?php + +namespace App\Console; + +use Illuminate\Console\Scheduling\Schedule; +use Illuminate\Foundation\Console\Kernel as ConsoleKernel; + +class Kernel extends ConsoleKernel +{ + /** + * Define the application's command schedule. + */ + protected function schedule(Schedule $schedule): void + { + // $schedule->command('inspire')->hourly(); + } + + /** + * Register the commands for the application. + */ + protected function commands(): void + { + $this->load(__DIR__.'/Commands'); + + require base_path('routes/console.php'); + } +} diff --git a/app/Exceptions/Handler.php b/app/Exceptions/Handler.php new file mode 100644 index 0000000..56af264 --- /dev/null +++ b/app/Exceptions/Handler.php @@ -0,0 +1,30 @@ +<?php + +namespace App\Exceptions; + +use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler; +use Throwable; + +class Handler extends ExceptionHandler +{ + /** + * The list of the inputs that are never flashed to the session on validation exceptions. + * + * @var array<int, string> + */ + protected $dontFlash = [ + 'current_password', + 'password', + 'password_confirmation', + ]; + + /** + * Register the exception handling callbacks for the application. + */ + public function register(): void + { + $this->reportable(function (Throwable $e) { + // + }); + } +} diff --git a/app/Http/Controllers/Controller.php b/app/Http/Controllers/Controller.php new file mode 100644 index 0000000..77ec359 --- /dev/null +++ b/app/Http/Controllers/Controller.php @@ -0,0 +1,12 @@ +<?php + +namespace App\Http\Controllers; + +use Illuminate\Foundation\Auth\Access\AuthorizesRequests; +use Illuminate\Foundation\Validation\ValidatesRequests; +use Illuminate\Routing\Controller as BaseController; + +class Controller extends BaseController +{ + use AuthorizesRequests, ValidatesRequests; +} diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php new file mode 100644 index 0000000..1fb53dc --- /dev/null +++ b/app/Http/Kernel.php @@ -0,0 +1,67 @@ +<?php + +namespace App\Http; + +use Illuminate\Foundation\Http\Kernel as HttpKernel; + +class Kernel extends HttpKernel +{ + /** + * The application's global HTTP middleware stack. + * + * These middleware are run during every request to your application. + * + * @var array<int, class-string|string> + */ + protected $middleware = [ + // \App\Http\Middleware\TrustHosts::class, + \App\Http\Middleware\TrustProxies::class, + \Illuminate\Http\Middleware\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<string, array<int, class-string|string>> + */ + protected $middlewareGroups = [ + 'web' => [ + \App\Http\Middleware\EncryptCookies::class, + \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, + \Illuminate\Session\Middleware\StartSession::class, + \Illuminate\View\Middleware\ShareErrorsFromSession::class, + \App\Http\Middleware\VerifyCsrfToken::class, + \Illuminate\Routing\Middleware\SubstituteBindings::class, + ], + + 'api' => [ + // \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class, + \Illuminate\Routing\Middleware\ThrottleRequests::class.':api', + \Illuminate\Routing\Middleware\SubstituteBindings::class, + ], + ]; + + /** + * The application's middleware aliases. + * + * Aliases may be used instead of class names to conveniently assign middleware to routes and groups. + * + * @var array<string, class-string|string> + */ + protected $middlewareAliases = [ + 'auth' => \App\Http\Middleware\Authenticate::class, + 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, + 'auth.session' => \Illuminate\Session\Middleware\AuthenticateSession::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' => \App\Http\Middleware\ValidateSignature::class, + 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, + 'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class, + ]; +} diff --git a/app/Http/Middleware/Authenticate.php b/app/Http/Middleware/Authenticate.php new file mode 100644 index 0000000..d4ef644 --- /dev/null +++ b/app/Http/Middleware/Authenticate.php @@ -0,0 +1,17 @@ +<?php + +namespace App\Http\Middleware; + +use Illuminate\Auth\Middleware\Authenticate as Middleware; +use Illuminate\Http\Request; + +class Authenticate extends Middleware +{ + /** + * Get the path the user should be redirected to when they are not authenticated. + */ + protected function redirectTo(Request $request): ?string + { + return $request->expectsJson() ? null : route('login'); + } +} diff --git a/app/Http/Middleware/EncryptCookies.php b/app/Http/Middleware/EncryptCookies.php new file mode 100644 index 0000000..867695b --- /dev/null +++ b/app/Http/Middleware/EncryptCookies.php @@ -0,0 +1,17 @@ +<?php + +namespace App\Http\Middleware; + +use Illuminate\Cookie\Middleware\EncryptCookies as Middleware; + +class EncryptCookies extends Middleware +{ + /** + * The names of the cookies that should not be encrypted. + * + * @var array<int, string> + */ + protected $except = [ + // + ]; +} diff --git a/app/Http/Middleware/PreventRequestsDuringMaintenance.php b/app/Http/Middleware/PreventRequestsDuringMaintenance.php new file mode 100644 index 0000000..74cbd9a --- /dev/null +++ b/app/Http/Middleware/PreventRequestsDuringMaintenance.php @@ -0,0 +1,17 @@ +<?php + +namespace App\Http\Middleware; + +use Illuminate\Foundation\Http\Middleware\PreventRequestsDuringMaintenance as Middleware; + +class PreventRequestsDuringMaintenance extends Middleware +{ + /** + * The URIs that should be reachable while maintenance mode is enabled. + * + * @var array<int, string> + */ + protected $except = [ + // + ]; +} diff --git a/app/Http/Middleware/RedirectIfAuthenticated.php b/app/Http/Middleware/RedirectIfAuthenticated.php new file mode 100644 index 0000000..afc78c4 --- /dev/null +++ b/app/Http/Middleware/RedirectIfAuthenticated.php @@ -0,0 +1,30 @@ +<?php + +namespace App\Http\Middleware; + +use App\Providers\RouteServiceProvider; +use Closure; +use Illuminate\Http\Request; +use Illuminate\Support\Facades\Auth; +use Symfony\Component\HttpFoundation\Response; + +class RedirectIfAuthenticated +{ + /** + * Handle an incoming request. + * + * @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next + */ + public function handle(Request $request, Closure $next, string ...$guards): Response + { + $guards = empty($guards) ? [null] : $guards; + + foreach ($guards as $guard) { + if (Auth::guard($guard)->check()) { + return redirect(RouteServiceProvider::HOME); + } + } + + return $next($request); + } +} diff --git a/app/Http/Middleware/TrimStrings.php b/app/Http/Middleware/TrimStrings.php new file mode 100644 index 0000000..88cadca --- /dev/null +++ b/app/Http/Middleware/TrimStrings.php @@ -0,0 +1,19 @@ +<?php + +namespace App\Http\Middleware; + +use Illuminate\Foundation\Http\Middleware\TrimStrings as Middleware; + +class TrimStrings extends Middleware +{ + /** + * The names of the attributes that should not be trimmed. + * + * @var array<int, string> + */ + protected $except = [ + 'current_password', + 'password', + 'password_confirmation', + ]; +} diff --git a/app/Http/Middleware/TrustHosts.php b/app/Http/Middleware/TrustHosts.php new file mode 100644 index 0000000..c9c58bd --- /dev/null +++ b/app/Http/Middleware/TrustHosts.php @@ -0,0 +1,20 @@ +<?php + +namespace App\Http\Middleware; + +use Illuminate\Http\Middleware\TrustHosts as Middleware; + +class TrustHosts extends Middleware +{ + /** + * Get the host patterns that should be trusted. + * + * @return array<int, string|null> + */ + public function hosts(): array + { + return [ + $this->allSubdomainsOfApplicationUrl(), + ]; + } +} diff --git a/app/Http/Middleware/TrustProxies.php b/app/Http/Middleware/TrustProxies.php new file mode 100644 index 0000000..3391630 --- /dev/null +++ b/app/Http/Middleware/TrustProxies.php @@ -0,0 +1,28 @@ +<?php + +namespace App\Http\Middleware; + +use Illuminate\Http\Middleware\TrustProxies as Middleware; +use Illuminate\Http\Request; + +class TrustProxies extends Middleware +{ + /** + * The trusted proxies for this application. + * + * @var array<int, string>|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/app/Http/Middleware/ValidateSignature.php b/app/Http/Middleware/ValidateSignature.php new file mode 100644 index 0000000..093bf64 --- /dev/null +++ b/app/Http/Middleware/ValidateSignature.php @@ -0,0 +1,22 @@ +<?php + +namespace App\Http\Middleware; + +use Illuminate\Routing\Middleware\ValidateSignature as Middleware; + +class ValidateSignature extends Middleware +{ + /** + * The names of the query string parameters that should be ignored. + * + * @var array<int, string> + */ + protected $except = [ + // 'fbclid', + // 'utm_campaign', + // 'utm_content', + // 'utm_medium', + // 'utm_source', + // 'utm_term', + ]; +} diff --git a/app/Http/Middleware/VerifyCsrfToken.php b/app/Http/Middleware/VerifyCsrfToken.php new file mode 100644 index 0000000..9e86521 --- /dev/null +++ b/app/Http/Middleware/VerifyCsrfToken.php @@ -0,0 +1,17 @@ +<?php + +namespace App\Http\Middleware; + +use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as Middleware; + +class VerifyCsrfToken extends Middleware +{ + /** + * The URIs that should be excluded from CSRF verification. + * + * @var array<int, string> + */ + protected $except = [ + // + ]; +} diff --git a/app/Models/User.php b/app/Models/User.php new file mode 100644 index 0000000..4d7f70f --- /dev/null +++ b/app/Models/User.php @@ -0,0 +1,45 @@ +<?php + +namespace App\Models; + +// use Illuminate\Contracts\Auth\MustVerifyEmail; +use Illuminate\Database\Eloquent\Factories\HasFactory; +use Illuminate\Foundation\Auth\User as Authenticatable; +use Illuminate\Notifications\Notifiable; +use Laravel\Sanctum\HasApiTokens; + +class User extends Authenticatable +{ + use HasApiTokens, HasFactory, Notifiable; + + /** + * The attributes that are mass assignable. + * + * @var array<int, string> + */ + protected $fillable = [ + 'name', + 'email', + 'password', + ]; + + /** + * The attributes that should be hidden for serialization. + * + * @var array<int, string> + */ + protected $hidden = [ + 'password', + 'remember_token', + ]; + + /** + * The attributes that should be cast. + * + * @var array<string, string> + */ + protected $casts = [ + 'email_verified_at' => 'datetime', + 'password' => 'hashed', + ]; +} diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php new file mode 100644 index 0000000..452e6b6 --- /dev/null +++ b/app/Providers/AppServiceProvider.php @@ -0,0 +1,24 @@ +<?php + +namespace App\Providers; + +use Illuminate\Support\ServiceProvider; + +class AppServiceProvider extends ServiceProvider +{ + /** + * Register any application services. + */ + public function register(): void + { + // + } + + /** + * Bootstrap any application services. + */ + public function boot(): void + { + // + } +} diff --git a/app/Providers/AuthServiceProvider.php b/app/Providers/AuthServiceProvider.php new file mode 100644 index 0000000..54756cd --- /dev/null +++ b/app/Providers/AuthServiceProvider.php @@ -0,0 +1,26 @@ +<?php + +namespace App\Providers; + +// use Illuminate\Support\Facades\Gate; +use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider; + +class AuthServiceProvider extends ServiceProvider +{ + /** + * The model to policy mappings for the application. + * + * @var array<class-string, class-string> + */ + protected $policies = [ + // + ]; + + /** + * Register any authentication / authorization services. + */ + public function boot(): void + { + // + } +} diff --git a/app/Providers/BroadcastServiceProvider.php b/app/Providers/BroadcastServiceProvider.php new file mode 100644 index 0000000..2be04f5 --- /dev/null +++ b/app/Providers/BroadcastServiceProvider.php @@ -0,0 +1,19 @@ +<?php + +namespace App\Providers; + +use Illuminate\Support\Facades\Broadcast; +use Illuminate\Support\ServiceProvider; + +class BroadcastServiceProvider extends ServiceProvider +{ + /** + * Bootstrap any application services. + */ + public function boot(): void + { + Broadcast::routes(); + + require base_path('routes/channels.php'); + } +} diff --git a/app/Providers/EventServiceProvider.php b/app/Providers/EventServiceProvider.php new file mode 100644 index 0000000..2d65aac --- /dev/null +++ b/app/Providers/EventServiceProvider.php @@ -0,0 +1,38 @@ +<?php + +namespace App\Providers; + +use Illuminate\Auth\Events\Registered; +use Illuminate\Auth\Listeners\SendEmailVerificationNotification; +use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider; +use Illuminate\Support\Facades\Event; + +class EventServiceProvider extends ServiceProvider +{ + /** + * The event to listener mappings for the application. + * + * @var array<class-string, array<int, class-string>> + */ + protected $listen = [ + Registered::class => [ + SendEmailVerificationNotification::class, + ], + ]; + + /** + * Register any events for your application. + */ + public function boot(): void + { + // + } + + /** + * Determine if events and listeners should be automatically discovered. + */ + public function shouldDiscoverEvents(): bool + { + return false; + } +} diff --git a/app/Providers/RouteServiceProvider.php b/app/Providers/RouteServiceProvider.php new file mode 100644 index 0000000..1cf5f15 --- /dev/null +++ b/app/Providers/RouteServiceProvider.php @@ -0,0 +1,40 @@ +<?php + +namespace App\Providers; + +use Illuminate\Cache\RateLimiting\Limit; +use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider; +use Illuminate\Http\Request; +use Illuminate\Support\Facades\RateLimiter; +use Illuminate\Support\Facades\Route; + +class RouteServiceProvider extends ServiceProvider +{ + /** + * The path to your application's "home" route. + * + * Typically, users are redirected here after authentication. + * + * @var string + */ + public const HOME = '/home'; + + /** + * Define your route model bindings, pattern filters, and other route configuration. + */ + public function boot(): void + { + RateLimiter::for('api', function (Request $request) { + return Limit::perMinute(60)->by($request->user()?->id ?: $request->ip()); + }); + + $this->routes(function () { + Route::middleware('api') + ->prefix('api') + ->group(base_path('routes/api.php')); + + Route::middleware('web') + ->group(base_path('routes/web.php')); + }); + } +} |