update fix deadcode, security

This commit is contained in:
baodev0
2026-09-28 08:26:29 +07:00
parent 3af59bd9c5
commit 82080b5b84
452 changed files with 4857 additions and 26289 deletions
@@ -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');
}
}
-24
View File
@@ -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');
}
}
-28
View File
@@ -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);
}
}
-56
View File
@@ -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);
}
}
-20
View File
@@ -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(),
];
}
}
-1
View File
@@ -12,7 +12,6 @@ class VerifyCsrfToken extends Middleware
* @var array<int, string>
*/
protected $except = [
'/administrator/ckfinder/*',
'api/*',
'v1/*',
];