Major refactors to the way routes work

This commit is contained in:
Graphictoria 2022-05-07 22:37:05 -04:00
parent a5d1d2f55b
commit f0096f2e97
35 changed files with 341 additions and 165 deletions

View File

@ -1,19 +0,0 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class IndexController extends Controller
{
/**
* Handle the incoming request.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function __invoke(Request $request)
{
return view('welcome');
}
}

View File

@ -1,13 +1,13 @@
<?php
namespace App\Http\Controllers\Auth;
namespace App\Http\Controllers\Web\Auth;
use App\Http\Controllers\Controller;
use App\Http\Requests\Auth\LoginRequest;
use App\Providers\RouteServiceProvider;
use App\Models\Session;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use App\Http\Controllers\Controller;
class AuthenticatedSessionController extends Controller
{
@ -16,9 +16,9 @@ class AuthenticatedSessionController extends Controller
*
* @return \Illuminate\View\View
*/
public function create()
public function index()
{
return view('auth.login');
return view('web.auth.login');
}
/**

View File

@ -1,12 +1,12 @@
<?php
namespace App\Http\Controllers\Auth;
namespace App\Http\Controllers\Web\Auth;
use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Validation\ValidationException;
use App\Http\Controllers\Controller;
class ConfirmablePasswordController extends Controller
{
@ -17,7 +17,7 @@ class ConfirmablePasswordController extends Controller
*/
public function show()
{
return view('auth.confirm-password');
return view('web.auth.confirm-password');
}
/**

View File

@ -1,17 +1,17 @@
<?php
namespace App\Http\Controllers\Auth;
namespace App\Http\Controllers\Web\Auth;
use App\Http\Controllers\Controller;
use App\Models\Session;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
class DoubleSessionBlockController extends Controller
{
public function create()
public function index()
{
return response()
->view('auth.ddos_blocked', [], 403);
->view('web.auth.ddos_blocked', [], 403);
}
public function store()

View File

@ -1,10 +1,10 @@
<?php
namespace App\Http\Controllers\Auth;
namespace App\Http\Controllers\Web\Auth;
use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
class EmailVerificationNotificationController extends Controller
{

View File

@ -1,10 +1,10 @@
<?php
namespace App\Http\Controllers\Auth;
namespace App\Http\Controllers\Web\Auth;
use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
class EmailVerificationPromptController extends Controller
{

View File

@ -1,14 +1,14 @@
<?php
namespace App\Http\Controllers\Auth;
namespace App\Http\Controllers\Web\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Auth\Events\PasswordReset;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Password;
use Illuminate\Support\Str;
use Illuminate\Validation\Rules;
use App\Http\Controllers\Controller;
class NewPasswordController extends Controller
{
@ -18,9 +18,9 @@ class NewPasswordController extends Controller
* @param \Illuminate\Http\Request $request
* @return \Illuminate\View\View
*/
public function create(Request $request)
public function index(Request $request)
{
return view('auth.reset-password', ['request' => $request]);
return view('web.auth.reset-password', ['request' => $request]);
}
/**
@ -57,7 +57,7 @@ class NewPasswordController extends Controller
// the application's home authenticated view. If there is an error we can
// redirect them back to where they came from with their error message.
return $status == Password::PASSWORD_RESET
? redirect()->route('login')->with('status', __($status))
? redirect()->route('auth.login.index')->with('status', __($status))
: back()->withErrors(['status' => __($status)]);
}
}

View File

@ -1,10 +1,10 @@
<?php
namespace App\Http\Controllers\Auth;
namespace App\Http\Controllers\Web\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Password;
use App\Http\Controllers\Controller;
class PasswordResetLinkController extends Controller
{
@ -13,9 +13,9 @@ class PasswordResetLinkController extends Controller
*
* @return \Illuminate\View\View
*/
public function create()
public function index()
{
return view('auth.forgot-password');
return view('web.auth.forgot-password');
}
/**

View File

@ -1,8 +1,7 @@
<?php
namespace App\Http\Controllers\Auth;
namespace App\Http\Controllers\Web\Auth;
use App\Http\Controllers\Controller;
use App\Models\User;
use App\Providers\RouteServiceProvider;
use Illuminate\Auth\Events\Registered;
@ -11,6 +10,7 @@ use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rules;
use App\Http\Controllers\Controller;
class RegisteredUserController extends Controller
{
@ -19,9 +19,9 @@ class RegisteredUserController extends Controller
*
* @return \Illuminate\View\View
*/
public function create()
public function index()
{
return view('auth.register');
return view('web.auth.register');
}
/**

View File

@ -1,14 +1,14 @@
<?php
namespace App\Http\Controllers\Auth;
namespace App\Http\Controllers\Web\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
class UserModerationController extends Controller
{
public function create()
{
return view('auth.moderated');
return view('web.auth.moderated');
}
}

View File

@ -1,11 +1,11 @@
<?php
namespace App\Http\Controllers\Auth;
namespace App\Http\Controllers\Web\Auth;
use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use Illuminate\Auth\Events\Verified;
use Illuminate\Foundation\Auth\EmailVerificationRequest;
use App\Http\Controllers\Controller;
class VerifyEmailController extends Controller
{

View File

@ -0,0 +1,19 @@
<?php
namespace App\Http\Controllers\Web;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
class HomeController extends Controller
{
public function landing()
{
return view('web.home.landing');
}
public function dashboard()
{
return view('web.home.dashboard');
}
}

View File

@ -15,7 +15,7 @@ class Authenticate extends Middleware
protected function redirectTo($request)
{
if (! $request->expectsJson()) {
return route('login');
return route('auth.login.index');
}
}
}

View File

@ -9,9 +9,9 @@ use App\Models\Session;
class DoubleSessionProtector
{
protected function handlePage(Request $request, Closure $next) {
if($request->route()->getName() != 'ddos.bypass' && !$request->isMethod('post')) {
if(!str_starts_with($request->route()->getName(), 'auth.protection')) {
return redirect()
->to(route('ddos.bypass', ['ReturnUrl' => urlencode('/'.$request->path())]), 302);
->to(route('auth.protection.index', ['ReturnUrl' => url()->full()]), 302);
}
return $next($request);
@ -39,13 +39,13 @@ class DoubleSessionProtector
}
}
if($request->route()->getName() == 'ddos.bypass') {
if(str_starts_with($request->route()->getName(), 'auth.protection')) {
$returnUrl = $request->input('ReturnUrl');
if(!$returnUrl)
$returnUrl = '/';
$returnUrl = route('home.landing');
return redirect('/', 302);
return redirect(route('home.landing'), 302);
}
return $next($request);

View File

@ -6,6 +6,7 @@ use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use App\Notifications\ResetPasswordNotification;
use Laravel\Sanctum\HasApiTokens;
class User extends Authenticatable
@ -42,4 +43,17 @@ class User extends Authenticatable
'email_verified_at' => 'datetime',
'next_reward' => 'datetime',
];
/**
* Send a password reset notification to the user.
*
* @param string $token
* @return void
*/
public function sendPasswordResetNotification($token)
{
$url = route('auth.password.reset-submit', ['token' => $token]);
$this->notify(new ResetPasswordNotification($url, $this));
}
}

View File

@ -0,0 +1,66 @@
<?php
namespace App\Notifications;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Notifications\Messages\MailMessage;
use Illuminate\Notifications\Notification;
class ResetPasswordNotification extends Notification
{
use Queueable;
protected $token;
protected $user;
/**
* Create a new notification instance.
*
* @return void
*/
public function __construct($token, $user)
{
$this->token = $token;
$this->user = $user;
}
/**
* Get the notification's delivery channels.
*
* @param mixed $notifiable
* @return array
*/
public function via($notifiable)
{
return ['mail'];
}
/**
* Get the mail representation of the notification.
*
* @param mixed $notifiable
* @return \Illuminate\Notifications\Messages\MailMessage
*/
public function toMail($notifiable)
{
$title = 'Graphictoria Password Reset';
return (new MailMessage)
->subject($title)
->view('emails.password-reset', ['title' => $title, 'user' => $this->user->username, 'link' => $this->token]);
}
/**
* Get the array representation of the notification.
*
* @param mixed $notifiable
* @return array
*/
public function toArray($notifiable)
{
return [
//
];
}
}

View File

@ -36,6 +36,7 @@ class RouteServiceProvider extends ServiceProvider
//
Route::domain(DomainHelper::TopLevelDomain())
->middleware('web')
->namespace('App\Http\Controllers\Web')
->group(base_path('routes/web.php'));
//
@ -43,13 +44,15 @@ class RouteServiceProvider extends ServiceProvider
//
Route::domain('www.' . DomainHelper::TopLevelDomain())
->middleware('web')
->namespace('App\Http\Controllers\Web')
->group(base_path('routes/web.php'));
//
// Domain: api.gtoria.net
//
Route::domain('api.' . DomainHelper::TopLevelDomain())
->middleware('api')
->middleware('web')
->namespace('App\Http\Controllers\Api')
->group(base_path('routes/api.php'));
});
}
@ -61,8 +64,6 @@ class RouteServiceProvider extends ServiceProvider
*/
protected function configureRateLimiting()
{
RateLimiter::for('api', function (Request $request) {
return Limit::perMinute(60)->by($request->user()?->id ?: $request->ip());
});
//
}
}

View File

@ -0,0 +1,36 @@
// © XlXi 2021
// Graphictoria 5
import { useState, useRef } from 'react';
import Loader from './Loader';
const Feed = () => {
const inputRef = useRef();
const submitRef = useRef();
const feedRef = useRef();
const [feedLoaded, setFeedLoaded] = useState(false);
return (
<>
<h4>My Feed</h4>
<div className="card mb-2">
<div className="input-group p-2">
<input ref={ inputRef } type="text" className="form-control" placeholder="What are you up to?" />
<button ref={ submitRef } className="btn btn-secondary" type="submit">Share</button>
</div>
</div>
<div ref={ feedRef } className="d-flex">
{
feedLoaded ?
<h1>feed</h1>
:
<Loader />
}
</div>
</>
);
};
export default Feed;

View File

@ -0,0 +1,10 @@
// © XlXi 2021
// Graphictoria 5
const Loader = () => {
return (
<div className="gtoria-loader"><div></div><div></div><div></div><div></div></div>
);
};
export default Loader;

View File

@ -1,3 +1,6 @@
// © XlXi 2021
// Graphictoria 5
import $ from 'jquery';
import * as Bootstrap from 'bootstrap';

View File

@ -0,0 +1,18 @@
// © XlXi 2021
// Graphictoria 5
import $ from 'jquery';
import * as Bootstrap from 'bootstrap';
import React from 'react';
import { render } from 'react-dom';
import Feed from '../Components/Feed';
const feedId = 'gt-dash-feed';
$(document).ready(function() {
if (document.getElementById(feedId)) {
render(<Feed />, document.getElementById(feedId));
}
});

View File

@ -0,0 +1,12 @@
@extends('layouts.email')
@section('title', 'Graphictoria Password Reset')
@section('content')
<h4>Hello, <b>{{ $user }}</b>!</h4>
<p>We've received your password reset request. Simply just click the button below to change your password.</p>
<a class="btn btn-primary mt-2" href="{{ $link }}">Reset Password</a>
<p class="mt-3" style="color:#ff0000;">
If you did not submit this request, you can ignore this email.
</p>
@endsection

View File

@ -0,0 +1,42 @@
@php
$slogan = (View::hasSection('description') ? View::getSection('description') . ' ' : '') . 'Graphictoria is an online social platform for those looking to relive the classic Roblox experience. So what are you waiting for? Join 8k+ other users in reliving the good ol\' days! Graphictoria is not affiliated with or sponsored by Roblox Corporation, all Roblox related indica and slogans belong to Roblox Corporation.';
$cssDriver = Storage::createLocalDriver(['root' => $_SERVER['DOCUMENT_ROOT'] . '/css']);
@endphp
<html class="gtoria-light" lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<head>
<title>Graphictoria{{ View::hasSection('title') ? ' | ' . View::getSection('title') : '' }}</title>
<style>
{{ $cssDriver->get('Graphictoria.css') }}
html, body {
background-color: #fff!important;
}
.emailCard {
background-color: #b5e0ff;
margin: 10px;
text-align: center;
padding: 10px;
}
</style>
</head>
<body>
<div id="gtoria-root">
@env(['local', 'staging'])
<h1 style="color:#ff0000;">This is a test message.</h1>
@endenv
<div class="card shadow-sm emailCard">
<h3 class="my-auto">{{ $title }}</h3>
</div>
<div class="container text-center p-3">
@yield('content')
</div>
<div class="card shadow-sm emailCard mt-auto">
<p class="fw-light m-0">Copyright © {{ \Carbon\Carbon::now()->format('Y') }} Graphictoria. All rights reserved.</p>
</div>
<p class="text-muted text-center fw-light mt-0 mb-2">Graphictoria is not affiliated with, endorsed by, or sponsored by Roblox Corporation.</p>
</div>
</body>
</html>

View File

@ -13,7 +13,7 @@
<!-- Validation Errors -->
<x-auth-validation-errors class="mb-4" :errors="$errors" />
<form method="POST" action="{{ route('password.confirm') }}">
<form method="POST" action="{{ route('auth.password.confirm-submit') }}">
@csrf
<!-- Password -->

View File

@ -29,7 +29,7 @@
</div>
@endif
<form method="POST" action="{{ route('ddos.bypass') }}">
<form method="POST" action="{{ route('auth.protection.bypass') }}">
@csrf
<input type="hidden" name="ReturnUrl" value="{{ request()->input('ReturnUrl') }}" />

View File

@ -22,15 +22,21 @@
</div>
@endif
@if(session('status'))
<div class="px-3 mb-10">
<div class="alert alert-success graphictoria-alert graphictoria-error-popup">{{ session('status') }}</div>
</div>
@endif
<h5 class="m-0">Forgot your password? No problem!</h5>
<p class="mb-3">Enter the email address associated with your account and we'll send you a reset link.</p>
<form method="POST" action="{{ route('password.email') }}">
<form method="POST" action="{{ route('auth.password.forgot-submit') }}">
@csrf
@foreach($fields as $field => $label)
<input type="{{ $field }}" @class(['form-control', 'mb-2', 'is-invalid'=>($errors->first($field) != null)]) placeholder="{{ $label }}" name="{{ $field }}" :value="old($field)" />
@endforeach
<a href="{{ route('login') }}" class="btn btn-secondary px-5" ><i class="fa-solid fa-angles-left"></i> Back</a>&nbsp;
<a href="{{ route('auth.login.index') }}" class="btn btn-secondary px-5" ><i class="fa-solid fa-angles-left"></i> Back</a>&nbsp;
<button class="btn btn-primary px-5" type="submit">Send Reset Link</button>
</form>
</div>

View File

@ -24,7 +24,13 @@
</div>
@endif
<form method="POST" action="{{ route('login') }}">
@if(session('status'))
<div class="px-3 mb-10">
<div class="alert alert-success graphictoria-alert graphictoria-error-popup">{{ session('status') }}</div>
</div>
@endif
<form method="POST" action="{{ route('auth.login.submit') }}">
@csrf
@foreach($fields as $field => $label)
<input type="{{ $field }}" @class(['form-control', 'mb-2', 'is-invalid'=>($errors->first($field) != null)]) placeholder="{{ $label }}" name="{{ $field }}" :value="old($field)" />
@ -38,11 +44,11 @@
<button class="btn btn-primary px-5" type="submit">Sign In</button>
</form>
<a href="/passwordreset" class="text-decoration-none fw-normal center" target="_blank">Forgot your password?</a>
<a href="{{ route('auth.password.forgot') }}" class="text-decoration-none fw-normal center" target="_blank">Forgot your password?</a>
</div>
<div class="col">
<h5>New to Graphictoria?</h5>
<p>Creating an account takes less than a minute, and you can join a community of 10k+ users for <b>completely free</b>.<br/><a href="/register" class="btn btn-sm btn-success mt-2" target="_blank">Sign Up</a></p>
<p>Creating an account takes less than a minute, and you can join a community of 10k+ users for <b>completely free</b>.<br/><a href="{{ route('auth.register.index') }}" class="btn btn-sm btn-success mt-2" target="_blank">Sign Up</a></p>
</div>
</div>
</x-slot>

View File

@ -30,14 +30,14 @@
</div>
@endif
<form method="POST" action="{{ route('register') }}">
<form method="POST" action="{{ route('auth.register.submit') }}">
@csrf
@foreach($fields as $field => $label)
<input type="{{ $field == 'password_confirmation' ? 'password' : $field }}" @class(['form-control', 'mb-2', 'is-invalid'=>($errors->first($field) != null)]) placeholder="{{ $label }}" name="{{ $field }}" :value="old($field)" />
@endforeach
<button class="btn btn-success px-5 mt-3" type="submit">Sign Up</button>
</form>
<a href="{{ route('login') }}" class="text-decoration-none fw-normal center" target="_blank">Already have an account?</a>
<a href="{{ route('auth.login.index') }}" class="text-decoration-none fw-normal center" target="_blank">Already have an account?</a>
<p class="text-muted mt-3">By creating an account, you agree to our <a href="/legal/terms-of-service" class="text-decoration-none fw-normal" target="_blank">Terms of Service</a> and our <a href="/legal/privacy-policy" class="text-decoration-none fw-normal" target="_blank">Privacy Policy</a>.</p>
</div>

View File

@ -23,7 +23,7 @@
</div>
@endif
<form method="POST" action="{{ route('password.update') }}">
<form method="POST" action="{{ route('auth.password.reset-submit', $request->route('token')) }}">
@csrf
<input type="hidden" name="token" value="{{ $request->route('token') }}" />
@foreach($fields as $field => $label)

View File

@ -2,6 +2,10 @@
@section('title', 'Dashboard')
@section('page-specific')
<script src="{{ mix('js/dashboard.js') }}"></script>
@endsection
@section('content')
<div class="container-lg my-2">
<h4>Hello, {{ Auth::user()->username }}!</h4>
@ -9,7 +13,6 @@
<div class="col-md-3">
<div class="card text-center">
<img src="{{ asset('/images/testing/avatar.png') }}" class="img-fluid gt-charimg" />
<p class="mb-3 px-3">"abcd"</p>
</div>
<x-MiniCard class="mt-3 d-none d-md-flex">
@ -39,16 +42,7 @@
</x-slot>
</x-MiniCard>
<h4>My Feed</h4>
<div class="card mb-2">
<div class="input-group p-2">
<input type="text" class="form-control" placeholder="What are you up to?" area-label="What are you up to?"/>
<button class="btn btn-secondary" type="submit">Share</button>
</div>
</div>
<div class="d-flex">
<x-loader />
</div>
<div id="gt-dash-feed"></div>
</div>
</div>
</div>

View File

@ -9,7 +9,7 @@
<h5 class="mb-0">Graphictoria aims to revive the classic Roblox experience. Join <b>9k+</b> other users and relive your childhood!</h5>
<p class="graphictoria-homepage-fine-print fst-italic">* Graphictoria is not affiliated with, endorsed by, or sponsored by Roblox Corporation.</p>
</div>
<a href="{{ url('/register') }}" class="btn btn-success">Create your account<i class="ps-2 graphictoria-small-aligned-text fas fa-chevron-right"></i></a>
<a href="{{ route('auth.register.index') }}" class="btn btn-success">Create your account<i class="ps-2 graphictoria-small-aligned-text fas fa-chevron-right"></i></a>
</div>
</div>
<div class="graphictoria-home-about my-1">

View File

@ -1,86 +1,53 @@
<?php
use App\Http\Controllers\Auth\AuthenticatedSessionController;
use App\Http\Controllers\Auth\ConfirmablePasswordController;
use App\Http\Controllers\Auth\DoubleSessionBlockController;
use App\Http\Controllers\Auth\EmailVerificationNotificationController;
use App\Http\Controllers\Auth\EmailVerificationPromptController;
use App\Http\Controllers\Auth\NewPasswordController;
use App\Http\Controllers\Auth\PasswordResetLinkController;
use App\Http\Controllers\Auth\RegisteredUserController;
use App\Http\Controllers\Auth\UserModerationController;
use App\Http\Controllers\Auth\VerifyEmailController;
use App\Http\Controllers\IndexController;
use Illuminate\Support\Facades\Route;
/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/
Route::get('/', function () {
return view('welcome');
})->middleware(['guest'])->name('welcome');
Route::get('my/dashboard', function () {
return view('dashboard');
})->middleware(['auth'])->name('dashboard');
Route::get('request-blocked', [DoubleSessionBlockController::class, 'create'])
->name('ddos.bypass');
Route::post('request-blocked', [DoubleSessionBlockController::class, 'store']);
Route::get('moderation-notice', [UserModerationController::class, 'create'])
->middleware(['banned'])
->name('moderation.notice');
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::post('login', [AuthenticatedSessionController::class, 'store']);
Route::get('forgot-password', [PasswordResetLinkController::class, 'create'])
->name('password.request');
Route::post('forgot-password', [PasswordResetLinkController::class, 'store'])
->name('password.email');
Route::get('reset-password/{token}', [NewPasswordController::class, 'create'])
->name('password.reset');
Route::post('reset-password', [NewPasswordController::class, 'store'])
->name('password.update');
Route::group(['as' => 'home.'], function() {
Route::get('/', 'HomeController@landing')->name('landing')->middleware('guest');
Route::get('/my/dashboard', 'HomeController@dashboard')->name('dashboard')->middleware('auth');
});
Route::middleware('auth')->group(function () {
Route::get('verify-email', [EmailVerificationPromptController::class, '__invoke'])
->name('verification.notice');
Route::group(['as' => 'auth.', 'namespace' => 'Auth'], function() {
Route::group(['as' => 'protection.', 'prefix' => 'request-blocked'], function() {
Route::get('/', 'DoubleSessionBlockController@index')->name('index');
Route::post('/', 'DoubleSessionBlockController@store')->name('bypass');
});
Route::get('/moderation-notice', 'UserModerationController@index')->middleware(['auth', 'banned'])->name('moderation.notice');
Route::get('verify-email/{id}/{hash}', [VerifyEmailController::class, '__invoke'])
->middleware(['signed', 'throttle:6,1'])
->name('verification.verify');
Route::middleware('guest')->group(function () {
Route::group(['as' => 'register.', 'prefix' => 'register'], function() {
Route::get('/', 'RegisteredUserController@index')->name('index');
Route::post('/', 'RegisteredUserController@store')->name('submit');
});
Route::group(['as' => 'login.', 'prefix' => 'login'], function() {
Route::get('/', 'AuthenticatedSessionController@index')->name('index');
Route::post('/', 'AuthenticatedSessionController@store')->name('submit');
});
Route::group(['as' => 'password.', 'prefix' => 'forgot-password'], function() {
Route::get('/', 'PasswordResetLinkController@index')->name('forgot');
Route::post('/', 'PasswordResetLinkController@store')->name('forgot-submit');
});
Route::group(['as' => 'password.', 'prefix' => 'reset-password'], function() {
Route::get('/{token}', 'NewPasswordController@index')->name('reset');
Route::post('/{token}', 'NewPasswordController@store')->name('reset-submit');
});
});
Route::middleware('auth')->group(function () {
Route::group(['as' => 'verify-email.', 'prefix' => 'verify-email'], function() {
Route::get('/', 'EmailVerificationPromptController@__invoke')->name('index');
Route::post('/', 'EmailVerificationNotificationController@store')->middleware('throttle:6,1')->name('submit');
Route::get('/{hash}', 'VerifyEmailController@__invoke')->middleware(['signed', 'throttle:6,1'])->name('verify');
});
Route::post('email/verification-notification', [EmailVerificationNotificationController::class, 'store'])
->middleware('throttle:6,1')
->name('verification.send');
Route::get('confirm-password', [ConfirmablePasswordController::class, 'show'])
->name('password.confirm');
Route::post('confirm-password', [ConfirmablePasswordController::class, 'store']);
Route::get('logout', [AuthenticatedSessionController::class, 'destroy'])
->name('logout');
});
Route::group(['as' => 'password.', 'prefix' => 'confirm-password'], function() {
Route::get('/', 'ConfirmablePasswordController@index')->name('confirm');
Route::post('/', 'ConfirmablePasswordController@store')->name('confirm-submit');
});
Route::get('/logout', 'AuthenticatedSessionController@destroy')->name('logout');
});
});

View File

@ -13,7 +13,8 @@ require('laravel-mix-banner');
*/
mix.js('resources/js/app.js', 'public/js')
.js('resources/js/pages/maintenance.js', 'public/js/pages')
.js('resources/js/pages/maintenance.js', 'public/js')
.js('resources/js/pages/dashboard.js', 'public/js')
.react()
.sass('resources/sass/graphictoria.scss', 'public/css')
.banner({