g
This commit is contained in:
parent
c1996a415f
commit
91bbf06126
11 changed files with 186 additions and 26 deletions
41
app/Http/Controllers/SessionsController.php
Normal file
41
app/Http/Controllers/SessionsController.php
Normal file
|
@ -0,0 +1,41 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
|
||||
class SessionsController extends Controller
|
||||
{
|
||||
public function create()
|
||||
{
|
||||
return view('admin.sessions.create');
|
||||
}
|
||||
|
||||
public function store()
|
||||
{
|
||||
$credentials = request()->validate([
|
||||
'email' => ['required', 'exists:collectives,email'],
|
||||
'password' => ['required']
|
||||
]);
|
||||
|
||||
$remember = request()->boolean('remember');
|
||||
|
||||
if (!Auth::attempt($credentials, $remember)) {
|
||||
return back()->withInput()->withErrors([
|
||||
'email' => 'Your email could not be verified.',
|
||||
'password' => 'Your password is incorrect.',
|
||||
]);
|
||||
}
|
||||
|
||||
return redirect()->route('admin.dashboard')->with('success', 'Welcome back!');
|
||||
}
|
||||
|
||||
public function destroy(Request $request)
|
||||
{
|
||||
auth()->logout();
|
||||
$request->session()->invalidate();
|
||||
$request->session()->regenerateToken();
|
||||
return redirect()->route('admin.sessions.create')->with('success', 'Goodbye!');
|
||||
}
|
||||
}
|
|
@ -15,7 +15,7 @@ class Authenticate extends Middleware
|
|||
protected function redirectTo($request)
|
||||
{
|
||||
if (! $request->expectsJson()) {
|
||||
return route('login');
|
||||
return route('admin.sessions.create');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -271,15 +271,24 @@ .l-nav {
|
|||
|
||||
.l-nav__tab {
|
||||
flex-grow: 1;
|
||||
border-right: 1px solid #7874ff;
|
||||
padding: 10px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
text-decoration: none;
|
||||
background: unset;
|
||||
color: #7874ff;
|
||||
cursor: pointer;
|
||||
transition: color 0.2s;
|
||||
border: none;
|
||||
border-left: 1px solid #7874ff;
|
||||
}
|
||||
.l-nav__tab:last-child {
|
||||
border-right: none;
|
||||
.l-nav__tab:hover {
|
||||
color: #de7cff;
|
||||
transition: color 0.2s;
|
||||
}
|
||||
.l-nav__tab:first-child {
|
||||
border-left: none;
|
||||
}
|
||||
|
||||
.l-page-nav {
|
||||
|
|
|
@ -34,7 +34,6 @@ body {
|
|||
|
||||
.l-nav__tab {
|
||||
flex-grow: 1;
|
||||
border-right: 1px solid $c-main;
|
||||
padding: 10px;
|
||||
|
||||
display: flex;
|
||||
|
@ -42,7 +41,20 @@ body {
|
|||
justify-content: center;
|
||||
text-decoration: none;
|
||||
|
||||
&:last-child { border-right: none; }
|
||||
// log out button
|
||||
background: unset;
|
||||
color: $c-main;
|
||||
cursor: pointer;
|
||||
transition: color 0.2s;
|
||||
border: none;
|
||||
border-left: 1px solid $c-main;
|
||||
|
||||
&:hover {
|
||||
color: $c-accent;
|
||||
transition: color 0.2s;
|
||||
}
|
||||
|
||||
&:first-child { border-left: none; }
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -64,14 +64,4 @@ $c-red: #e20000;
|
|||
border-color: $c-accent;
|
||||
background-color: $c-accent-lightest;
|
||||
color: $c-accent;
|
||||
|
||||
// border-color: #888;
|
||||
// background-color: #ddd;
|
||||
// color: #888;
|
||||
|
||||
// &:hover, &:focus {
|
||||
// border-color: #888;
|
||||
// background-color: #ddd;
|
||||
// color: #888;
|
||||
// }
|
||||
}
|
|
@ -14,16 +14,20 @@
|
|||
|
||||
@auth
|
||||
<nav class="l-nav">
|
||||
<a href="{{ route('dashboard') }}" class="l-nav__tab">
|
||||
<a href="{{ route('admin.dashboard') }}" class="l-nav__tab">
|
||||
<span class="l-nav__link">dashboard</span>
|
||||
</a>
|
||||
|
||||
<a href="{{ route('joined.index') }}" class="l-nav__tab">
|
||||
<a href="{{ route('admin.joined.index') }}" class="l-nav__tab">
|
||||
<span class="l-nav__link">joined</span>
|
||||
</a>
|
||||
|
||||
<a href="#" class="l-nav__tab"><span class="l-nav__link">owned</span></a>
|
||||
<a href="#" class="l-nav__tab"><span class="l-nav__link">collective</span></a>
|
||||
|
||||
<x-admin.form.destroy :btnClass="'l-nav__tab'" :object="auth_collective()"
|
||||
:route="'admin.sessions.destroy'" :adminNav="true"
|
||||
:label="'log out'" />
|
||||
</nav>
|
||||
@endauth
|
||||
|
||||
|
|
33
resources/views/admin/sessions/create.blade.php
Normal file
33
resources/views/admin/sessions/create.blade.php
Normal file
|
@ -0,0 +1,33 @@
|
|||
@extends('admin.layout')
|
||||
|
||||
@section('pg-title', 'Log In')
|
||||
|
||||
@section('content')
|
||||
|
||||
<form action="{{ route('admin.sessions.store') }}" method="POST">
|
||||
@csrf
|
||||
|
||||
<fieldset class="form__fieldset">
|
||||
<label for="email" class="form__label">Email:</label>
|
||||
<input type="email" id="email" name="email" class="form__input">
|
||||
@error('email') <p class="form__error">{{ $message }}</p> @enderror
|
||||
|
||||
<label for="password" class="form__label">Password:</label>
|
||||
<input type="password" id="password" name="password" class="form__input">
|
||||
@error('password') <p class="form__error">{{ $message }}</p> @enderror
|
||||
|
||||
<div class="form__checkbox">
|
||||
<input type="checkbox" id="remember" name="remember" value="1"
|
||||
class="form__input--checkbox">
|
||||
<label for="remember" class="form__label--checkbox">remember me</label>
|
||||
@error('remember') <p class="form__error">{{ $message }}</p> @enderror
|
||||
</div>
|
||||
|
||||
<div class="form__btns">
|
||||
<input type="submit" class="form__btn" value="Submit">
|
||||
<input type="reset" class="input__btn" value="Reset">
|
||||
</div>
|
||||
</fieldset>
|
||||
</form>
|
||||
|
||||
@endsection
|
28
resources/views/components/admin/form/destroy.blade.php
Normal file
28
resources/views/components/admin/form/destroy.blade.php
Normal file
|
@ -0,0 +1,28 @@
|
|||
@props([
|
||||
'object',
|
||||
'route',
|
||||
'btnClass' => 'l-page-nav__link',
|
||||
'label' => 'Delete',
|
||||
'adminNav' => false
|
||||
])
|
||||
|
||||
@php
|
||||
$class = join('', array_slice(explode('\\', get_class($object)), -1));
|
||||
@endphp
|
||||
|
||||
<button form="delete-{{ $class }}-{{ $object->id }}" class="{{ $btnClass }}" title="delete">
|
||||
@if ($adminNav)
|
||||
<span class="l-nav__link">
|
||||
@endif
|
||||
{{ $label }}
|
||||
@if ($adminNav)
|
||||
</span>
|
||||
@endif
|
||||
</button>
|
||||
<form action="{{ route("$route", $object) }}" class="form--hidden"
|
||||
id="delete-{{ $class }}-{{ $object->id }}" method="post">
|
||||
|
||||
@csrf
|
||||
@method('DELETE')
|
||||
|
||||
</form>
|
|
@ -2,8 +2,8 @@
|
|||
|
||||
@switch ($section)
|
||||
@case('joined')
|
||||
<a href="{{ route('joined.index') }}" class="l-page-nav__link">All Joined</a>
|
||||
<a href="{{ route('joined.create') }}" class="l-page-nav__link">Add New</a>
|
||||
<a href="{{ route('admin.joined.index') }}" class="l-page-nav__link">All Joined</a>
|
||||
<a href="{{ route('admin.joined.create') }}" class="l-page-nav__link">Add New</a>
|
||||
@break
|
||||
@case('owned')
|
||||
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
|
||||
use App\Http\Controllers\CollectiveController;
|
||||
use App\Http\Controllers\JoinedController;
|
||||
use App\Http\Controllers\SessionsController;
|
||||
use Illuminate\Support\Facades\Route;
|
||||
|
||||
/*
|
||||
|
@ -14,15 +15,35 @@
|
|||
| contains the "web" middleware group. Now create something great!
|
||||
|
|
||||
*/
|
||||
Route::redirect('/fanatic', '/fanatic/login')->middleware('guest');
|
||||
|
||||
Route::middleware('guest')->group(function () {
|
||||
//Route::get('/', [])
|
||||
Route::get('/fanatic/login', [SessionsController::class, 'create'])
|
||||
->name('admin.sessions.create');
|
||||
Route::get('/fanatic/install', [CollectiveController::class, 'create'])
|
||||
->name('collectives.create');
|
||||
Route::post('/fanatic', [CollectiveController::class, 'store'])->name('collectives.store');
|
||||
->name('admin.collectives.create');
|
||||
Route::post('/fanatic', [CollectiveController::class, 'store'])
|
||||
->name('admin.collectives.store');
|
||||
});
|
||||
|
||||
Route::post('/fanatic', [SessionsController::class, 'store'])->name('admin.sessions.store');
|
||||
|
||||
Route::middleware('auth')->group(function () {
|
||||
Route::get('/fanatic', [CollectiveController::class, 'dashboard'])->name('dashboard');
|
||||
Route::get('/fanatic', [CollectiveController::class, 'dashboard'])->name('admin.dashboard');
|
||||
Route::delete('/fanatic', [SessionsController::class, 'destroy'])->name('admin.sessions.destroy');
|
||||
|
||||
Route::resource('joined', JoinedController::class);
|
||||
Route::get('/fanatic/joined', [JoinedController::class, 'index'])
|
||||
->name('admin.joined.index');
|
||||
Route::get('/fanatic/joined/create', [JoinedController::class, 'create'])
|
||||
->name('admin.joined.create');
|
||||
Route::post('/fanatic/joined', [JoinedController::class, 'store'])
|
||||
->name('admin.joined.store');
|
||||
Route::get('/admin/joined/{joined}', [JoinedController::class, 'show'])
|
||||
->name('admin.joined.show');
|
||||
Route::get('/admin/joined/{joined}/edit', [JoinedController::class, 'edit'])
|
||||
->name('admin.joined.edit');
|
||||
Route::patch('/admin/joined/{joined}', [JoinedController::class, 'update'])
|
||||
->name('admin.joined.update');
|
||||
Route::delete('/admin/joined/{joined}', [JoinedController::class, 'destroy'])
|
||||
->name('admin.joined.destroy');
|
||||
});
|
||||
|
|
22
tests/Feature/Http/Controllers/SessionsControllerTest.php
Normal file
22
tests/Feature/Http/Controllers/SessionsControllerTest.php
Normal file
|
@ -0,0 +1,22 @@
|
|||
<?php
|
||||
|
||||
namespace Tests\Feature\Http\Controllers;
|
||||
|
||||
use Illuminate\Foundation\Testing\RefreshDatabase;
|
||||
use Illuminate\Foundation\Testing\WithFaker;
|
||||
use Tests\TestCase;
|
||||
|
||||
class SessionsControllerTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* A basic feature test example.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function test_example()
|
||||
{
|
||||
$response = $this->get('/');
|
||||
|
||||
$response->assertStatus(200);
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue