Skip to content

Commit ecb8358

Browse files
committed
setup middlewares, admin models and rights
1 parent 75849bc commit ecb8358

24 files changed

+845
-67
lines changed

app/Enums/StatusCode.php

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<?php
2+
3+
namespace App\Enums;
4+
5+
enum StatusCode: int
6+
{
7+
8+
case Ok = 200;
9+
case Continue = 201;
10+
case BadRequest = 400;
11+
case Unauthorized = 401;
12+
case Forbidden = 403;
13+
case NotFound = 404;
14+
case MethodNotAllowed = 405;
15+
case UnprocessableEntity = 422;
16+
case InternalServerError = 500;
17+
}

app/Http/Controllers/ProfileController.php

Lines changed: 0 additions & 60 deletions
This file was deleted.

app/Http/Middleware/Admin.php

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
<?php
2+
3+
namespace App\Http\Middleware;
4+
5+
use Closure;
6+
use Illuminate\Http\Request;
7+
use Illuminate\Support\Facades\Auth;
8+
9+
class Admin
10+
{
11+
/**
12+
* Handle an incoming request.
13+
*
14+
* @param \Illuminate\Http\Request $request
15+
* @param \Closure(\Illuminate\Http\Request): (\Illuminate\Http\Response|\Illuminate\Http\RedirectResponse) $next
16+
* @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse
17+
*/
18+
public function handle(Request $request, Closure $next)
19+
{
20+
if (!Auth::guard('admin')->check()) {
21+
$notification = array(
22+
'title' => 'Sorry!',
23+
'message' => 'You need to login first',
24+
'alert-type' => 'warning',
25+
);
26+
27+
return redirect()->route('/')->with($notification);
28+
}
29+
return $next($request);
30+
}
31+
}

app/Http/Middleware/Authenticate.php

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
<?php
2+
3+
namespace App\Http\Middleware;
4+
5+
use Illuminate\Auth\Middleware\Authenticate as Middleware;
6+
7+
class Authenticate extends Middleware
8+
{
9+
/**
10+
* Get the path the user should be redirected to when they are not authenticated.
11+
*
12+
* @param \Illuminate\Http\Request $request
13+
* @return string|null
14+
*/
15+
protected function redirectTo($request)
16+
{
17+
if (! $request->expectsJson()) {
18+
return route('login');
19+
}
20+
}
21+
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
<?php
2+
3+
namespace App\Http\Middleware;
4+
5+
use App\Models\User;
6+
use Closure;
7+
use Illuminate\Http\Request;
8+
use Illuminate\Support\Facades\Auth;
9+
use Symfony\Component\HttpFoundation\Response;
10+
11+
class CheckUserHasVerify
12+
{
13+
/**
14+
* Handle an incoming request.
15+
*
16+
* @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next
17+
*/
18+
public function handle(Request $request, Closure $next): Response
19+
{
20+
$user = Auth::user();
21+
$mUser = User::where('id', $user->id)->first();
22+
if (is_null($user)) {
23+
return response()->json([
24+
'status' => 404,
25+
'success' => false,
26+
'message' => 'This account does not exist.',
27+
'data' => null,
28+
], 404,);
29+
}
30+
if ($user->email_verified_at == null) {
31+
32+
$token = $mUser->createToken('token')->plainTextToken;
33+
$unverifiedData = [
34+
'token' => $token,
35+
];
36+
37+
return response()->json([
38+
'status' => 401,
39+
'success' => false,
40+
'message' => 'This account is not yet verified.',
41+
'data' => $unverifiedData,
42+
], 401,);
43+
}
44+
return $next($request);
45+
}
46+
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
<?php
2+
3+
namespace App\Http\Middleware;
4+
5+
use App\Models\User;
6+
use Closure;
7+
use Illuminate\Http\Request;
8+
use Illuminate\Support\Facades\Auth;
9+
use Symfony\Component\HttpFoundation\Response;
10+
11+
class CheckUserIsSuspended
12+
{
13+
/**
14+
* Handle an incoming request.
15+
*
16+
* @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next
17+
*/
18+
public function handle(Request $request, Closure $next): Response
19+
{
20+
$user = Auth::user();
21+
$mUser = User::where('id', $user->id)->first();
22+
if (is_null($mUser)) {
23+
return response()->json([
24+
'status' => 404,
25+
'success' => false,
26+
'message' => 'This account does not exist.',
27+
'data' => null,
28+
], 404,);
29+
}
30+
31+
if ($mUser->is_suspended === 1) {
32+
return response()->json([
33+
'status' => 401,
34+
'success' => false,
35+
'message' => 'This account is suspended',
36+
'data' => null,
37+
], 401,);
38+
}
39+
40+
return $next($request);
41+
}
42+
}

app/Http/Middleware/HandleCors.php

Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
<?php
2+
3+
namespace Illuminate\Http\Middleware;
4+
5+
use Closure;
6+
use Fruitcake\Cors\CorsService;
7+
use Illuminate\Contracts\Container\Container;
8+
use Illuminate\Http\Request;
9+
10+
class HandleCors
11+
{
12+
/**
13+
* The container instance.
14+
*
15+
* @var \Illuminate\Contracts\Container\Container
16+
*/
17+
protected $container;
18+
19+
/**
20+
* The CORS service instance.
21+
*
22+
* @var \Fruitcake\Cors\CorsService
23+
*/
24+
protected $cors;
25+
26+
/**
27+
* Create a new middleware instance.
28+
*
29+
* @param \Illuminate\Contracts\Container\Container $container
30+
* @param \Fruitcake\Cors\CorsService $cors
31+
* @return void
32+
*/
33+
public function __construct(Container $container, CorsService $cors)
34+
{
35+
$this->container = $container;
36+
$this->cors = $cors;
37+
}
38+
39+
/**
40+
* Handle the incoming request.
41+
*
42+
* @param \Illuminate\Http\Request $request
43+
* @param \Closure $next
44+
* @return \Illuminate\Http\Response
45+
*/
46+
public function handle($request, Closure $next)
47+
{
48+
if (! $this->hasMatchingPath($request)) {
49+
return $next($request);
50+
}
51+
52+
$this->cors->setOptions($this->container['config']->get('cors', []));
53+
54+
if ($this->cors->isPreflightRequest($request)) {
55+
$response = $this->cors->handlePreflightRequest($request);
56+
57+
$this->cors->varyHeader($response, 'Access-Control-Request-Method');
58+
59+
return $response;
60+
}
61+
62+
$response = $next($request);
63+
64+
if ($request->getMethod() === 'OPTIONS') {
65+
$this->cors->varyHeader($response, 'Access-Control-Request-Method');
66+
}
67+
68+
return $this->cors->addActualRequestHeaders($response, $request);
69+
}
70+
71+
/**
72+
* Get the path from the configuration to determine if the CORS service should run.
73+
*
74+
* @param \Illuminate\Http\Request $request
75+
* @return bool
76+
*/
77+
protected function hasMatchingPath(Request $request): bool
78+
{
79+
$paths = $this->getPathsByHost($request->getHost());
80+
81+
foreach ($paths as $path) {
82+
if ($path !== '/') {
83+
$path = trim($path, '/');
84+
}
85+
86+
if ($request->fullUrlIs($path) || $request->is($path)) {
87+
return true;
88+
}
89+
}
90+
91+
return false;
92+
}
93+
94+
/**
95+
* Get the CORS paths for the given host.
96+
*
97+
* @param string $host
98+
* @return array
99+
*/
100+
protected function getPathsByHost(string $host)
101+
{
102+
$paths = $this->container['config']->get('cors.paths', []);
103+
104+
if (isset($paths[$host])) {
105+
return $paths[$host];
106+
}
107+
108+
return array_filter($paths, function ($path) {
109+
return is_string($path);
110+
});
111+
}
112+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<?php
2+
3+
namespace App\Http\Middleware;
4+
5+
use Illuminate\Foundation\Http\Middleware\PreventRequestsDuringMaintenance as Middleware;
6+
7+
class PreventRequestsDuringMaintenance extends Middleware
8+
{
9+
/**
10+
* The URIs that should be reachable while maintenance mode is enabled.
11+
*
12+
* @var array<int, string>
13+
*/
14+
protected $except = [
15+
//
16+
];
17+
}

0 commit comments

Comments
 (0)