update fix deadcode, security
This commit is contained in:
@@ -1,131 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use Closure;
|
||||
use Illuminate\Http\Request;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
|
||||
class AdvancedCompressionMiddleware
|
||||
{
|
||||
/**
|
||||
* Compression settings
|
||||
*/
|
||||
private const MIN_LENGTH = 1024; // Minimum content length to compress (1KB)
|
||||
private const COMPRESSION_LEVEL = 6; // Compression level (1-9)
|
||||
private const MAX_COMPRESSION_RATIO = 0.9; // Don't compress if compression ratio > 90%
|
||||
|
||||
/**
|
||||
* Content types that should be compressed
|
||||
*/
|
||||
private const COMPRESSIBLE_TYPES = [
|
||||
'application/json',
|
||||
'text/plain',
|
||||
'text/html',
|
||||
'text/xml',
|
||||
'application/xml',
|
||||
'text/css',
|
||||
'application/javascript',
|
||||
'text/javascript'
|
||||
];
|
||||
|
||||
/**
|
||||
* Handle an incoming request.
|
||||
*/
|
||||
public function handle(Request $request, Closure $next): Response
|
||||
{
|
||||
$response = $next($request);
|
||||
|
||||
if (!$this->shouldCompress($request, $response)) {
|
||||
return $response;
|
||||
}
|
||||
|
||||
return $this->compressResponse($request, $response);
|
||||
}
|
||||
|
||||
/**
|
||||
* Compress the response content
|
||||
*/
|
||||
private function compressResponse(Request $request, Response $response): Response
|
||||
{
|
||||
$content = $response->getContent();
|
||||
$originalLength = strlen($content);
|
||||
|
||||
if ($originalLength < self::MIN_LENGTH) {
|
||||
return $response;
|
||||
}
|
||||
|
||||
$acceptEncoding = $request->header('Accept-Encoding', '');
|
||||
$compressed = null;
|
||||
$encoding = null;
|
||||
|
||||
// Try Brotli compression first (best compression ratio)
|
||||
if (str_contains($acceptEncoding, 'br') && function_exists('brotli_compress')) {
|
||||
$compressed = brotli_compress($content, self::COMPRESSION_LEVEL);
|
||||
$encoding = 'br';
|
||||
}
|
||||
// Try Gzip compression
|
||||
elseif (str_contains($acceptEncoding, 'gzip') && function_exists('gzencode')) {
|
||||
$compressed = gzencode($content, self::COMPRESSION_LEVEL);
|
||||
$encoding = 'gzip';
|
||||
}
|
||||
// Fallback to Deflate
|
||||
elseif (str_contains($acceptEncoding, 'deflate') && function_exists('gzdeflate')) {
|
||||
$compressed = gzdeflate($content, self::COMPRESSION_LEVEL);
|
||||
$encoding = 'deflate';
|
||||
}
|
||||
|
||||
// Check compression efficiency
|
||||
if ($compressed !== false && $encoding) {
|
||||
$compressionRatio = strlen($compressed) / $originalLength;
|
||||
|
||||
// Only use compressed content if it's significantly smaller
|
||||
if ($compressionRatio < self::MAX_COMPRESSION_RATIO) {
|
||||
$response->setContent($compressed);
|
||||
$response->headers->set('Content-Encoding', $encoding);
|
||||
$response->headers->set('Content-Length', strlen($compressed));
|
||||
$response->headers->set('Vary', 'Accept-Encoding');
|
||||
|
||||
// Add compression info to headers for debugging
|
||||
if (config('app.debug')) {
|
||||
$response->headers->set('X-Compression-Ratio', round($compressionRatio * 100, 2) . '%');
|
||||
$response->headers->set('X-Original-Size', $originalLength);
|
||||
$response->headers->set('X-Compressed-Size', strlen($compressed));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $response;
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine if the response should be compressed
|
||||
*/
|
||||
private function shouldCompress(Request $request, Response $response): bool
|
||||
{
|
||||
// Don't compress if already compressed
|
||||
if ($response->headers->has('Content-Encoding')) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Don't compress file downloads
|
||||
if ($response->headers->has('Content-Disposition')) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Only compress successful responses
|
||||
if ($response->getStatusCode() >= 400) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Check if content type is compressible
|
||||
$contentType = $response->headers->get('Content-Type', '');
|
||||
foreach (self::COMPRESSIBLE_TYPES as $type) {
|
||||
if (str_contains($contentType, $type)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -1,90 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use Closure;
|
||||
use Illuminate\Http\Request;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
|
||||
class CompressionMiddleware
|
||||
{
|
||||
/**
|
||||
* Handle an incoming request.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next
|
||||
* @return \Symfony\Component\HttpFoundation\Response
|
||||
*/
|
||||
public function handle(Request $request, Closure $next): Response
|
||||
{
|
||||
$response = $next($request);
|
||||
|
||||
// Chỉ nén response cho JSON API
|
||||
if (!$this->shouldCompress($request, $response)) {
|
||||
return $response;
|
||||
}
|
||||
|
||||
$content = $response->getContent();
|
||||
|
||||
// Chỉ nén nếu content size > 1KB
|
||||
if (strlen($content) < 1024) {
|
||||
return $response;
|
||||
}
|
||||
|
||||
$acceptEncoding = $request->header('Accept-Encoding', '');
|
||||
|
||||
// Kiểm tra client hỗ trợ gzip
|
||||
if (str_contains($acceptEncoding, 'gzip') && function_exists('gzencode')) {
|
||||
$compressed = gzencode($content, 6); // Level 6 compression
|
||||
|
||||
if ($compressed !== false) {
|
||||
$response->setContent($compressed);
|
||||
$response->headers->set('Content-Encoding', 'gzip');
|
||||
$response->headers->set('Content-Length', strlen($compressed));
|
||||
$response->headers->set('Vary', 'Accept-Encoding');
|
||||
}
|
||||
}
|
||||
// Fallback to deflate if gzip not supported
|
||||
elseif (str_contains($acceptEncoding, 'deflate') && function_exists('gzdeflate')) {
|
||||
$compressed = gzdeflate($content, 6);
|
||||
|
||||
if ($compressed !== false) {
|
||||
$response->setContent($compressed);
|
||||
$response->headers->set('Content-Encoding', 'deflate');
|
||||
$response->headers->set('Content-Length', strlen($compressed));
|
||||
$response->headers->set('Vary', 'Accept-Encoding');
|
||||
}
|
||||
}
|
||||
|
||||
return $response;
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine if the response should be compressed.
|
||||
*/
|
||||
private function shouldCompress(Request $request, Response $response): bool
|
||||
{
|
||||
// Chỉ nén JSON responses
|
||||
$contentType = $response->headers->get('Content-Type', '');
|
||||
if (!str_contains($contentType, 'application/json')) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Không nén nếu đã có Content-Encoding
|
||||
if ($response->headers->has('Content-Encoding')) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Không nén file downloads
|
||||
if ($response->headers->has('Content-Disposition')) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Chỉ nén response thành công
|
||||
if ($response->getStatusCode() >= 400) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -1,24 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use Closure;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class CustomCKFinderAuth
|
||||
{
|
||||
/**
|
||||
* Handle an incoming request.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @param \Closure(\Illuminate\Http\Request): (\Illuminate\Http\Response|\Illuminate\Http\RedirectResponse) $next
|
||||
* @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse
|
||||
*/
|
||||
public function handle($request, Closure $next)
|
||||
{
|
||||
config(['ckfinder.authentication' => function() {
|
||||
return true;
|
||||
}]);
|
||||
return $next($request);
|
||||
}
|
||||
}
|
||||
@@ -1,29 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use Closure;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Cookie;
|
||||
|
||||
class CustomerLoginCheck
|
||||
{
|
||||
/**
|
||||
* Handle an incoming request.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @param \Closure(\Illuminate\Http\Request): (\Illuminate\Http\Response|\Illuminate\Http\RedirectResponse) $next
|
||||
* @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse
|
||||
*/
|
||||
public function handle(Request $request, Closure $next)
|
||||
{
|
||||
|
||||
$url = $request->url();
|
||||
if (auth('users')->check())
|
||||
{
|
||||
return $next($request);
|
||||
}
|
||||
Cookie::queue('prev_url',$url);
|
||||
return redirect()->route('user.login');
|
||||
}
|
||||
}
|
||||
@@ -1,24 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use Closure;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class IsLoginCheck
|
||||
{
|
||||
/**
|
||||
* Handle an incoming request.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @param \Closure(\Illuminate\Http\Request): (\Illuminate\Http\Response|\Illuminate\Http\RedirectResponse) $next
|
||||
* @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse
|
||||
*/
|
||||
public function handle(Request $request, Closure $next)
|
||||
{
|
||||
if (! auth()->guard('client')->check()) {
|
||||
return $next($request);
|
||||
}
|
||||
return redirect()->route('home');
|
||||
}
|
||||
}
|
||||
@@ -1,28 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use Closure;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
|
||||
class LoginCheck
|
||||
{
|
||||
|
||||
/**
|
||||
* Handle an incoming request.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @param \Closure(\Illuminate\Http\Request): (\Illuminate\Http\Response|\Illuminate\Http\RedirectResponse) $next
|
||||
* @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse
|
||||
*/
|
||||
public function handle(Request $request, Closure $next)
|
||||
{
|
||||
|
||||
if (Auth::check())
|
||||
{
|
||||
return redirect()->route('dashboard');
|
||||
}
|
||||
return $next($request);
|
||||
}
|
||||
}
|
||||
@@ -1,56 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use App\Models\Staff;
|
||||
use App\Repositories\Staff\StaffRepositoryInterface;
|
||||
use Closure;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
|
||||
class StaffCheck
|
||||
{
|
||||
public function __construct(
|
||||
public StaffRepositoryInterface $staffRepository
|
||||
) {}
|
||||
/**
|
||||
* Handle an incoming request.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @param \Closure(\Illuminate\Http\Request): (\Illuminate\Http\Response|\Illuminate\Http\RedirectResponse) $next
|
||||
* @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse
|
||||
*/
|
||||
public function handle(Request $request, Closure $next)
|
||||
{
|
||||
$session_id = $request->session()->getId();
|
||||
$auth_id = auth()->user()->id;
|
||||
|
||||
$time = 60;
|
||||
|
||||
// $visited = Staff::where(function ($query) use ($auth_id,$session_id) {
|
||||
// $query->where('sessions_id', $session_id);
|
||||
// $query->where('user_id', $auth_id);
|
||||
// })->first();
|
||||
$visited = $this->staffRepository->getFirstBy([
|
||||
'sessions_id' => $session_id,
|
||||
'user_id' => $auth_id
|
||||
]);
|
||||
|
||||
if ($visited) {
|
||||
$visited->last_visited = time();
|
||||
$visited->save();
|
||||
} else {
|
||||
$this->staffRepository->create(
|
||||
[
|
||||
'sessions_id' => $session_id,
|
||||
'user_id' => $auth_id,
|
||||
'last_visited' => time()
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
$this->staffRepository->deleteRawTime($time);
|
||||
|
||||
return $next($request);
|
||||
}
|
||||
}
|
||||
@@ -1,20 +0,0 @@
|
||||
<?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()
|
||||
{
|
||||
return [
|
||||
$this->allSubdomainsOfApplicationUrl(),
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -12,7 +12,6 @@ class VerifyCsrfToken extends Middleware
|
||||
* @var array<int, string>
|
||||
*/
|
||||
protected $except = [
|
||||
'/administrator/ckfinder/*',
|
||||
'api/*',
|
||||
'v1/*',
|
||||
];
|
||||
|
||||
Reference in New Issue
Block a user