feat: add-flexible-middelware-force-https
This commit is contained in:
parent
890375474a
commit
51a2aa196d
36
app/Http/Middleware/ValidateSignatureFlexible.php
Normal file
36
app/Http/Middleware/ValidateSignatureFlexible.php
Normal file
@ -0,0 +1,36 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use Closure;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class ValidateSignatureFlexible
|
||||
{
|
||||
public function handle(Request $request, Closure $next)
|
||||
{
|
||||
$signature = $request->query('signature');
|
||||
|
||||
if (! $signature) {
|
||||
abort(403);
|
||||
}
|
||||
|
||||
// Pakai APP_URL, bukan request scheme
|
||||
$baseUrl = rtrim(config('app.url'), '/') . '/' . ltrim($request->path(), '/');
|
||||
|
||||
$query = collect($request->query())
|
||||
->except('signature')
|
||||
->map(fn ($value, $key) => $key.'='.$value)
|
||||
->implode('&');
|
||||
|
||||
$original = rtrim($baseUrl.'?'.$query, '?');
|
||||
|
||||
$expected = hash_hmac('sha256', $original, config('app.key'));
|
||||
|
||||
if (! hash_equals($expected, $signature)) {
|
||||
abort(403, 'Invalid signature.');
|
||||
}
|
||||
|
||||
return $next($request);
|
||||
}
|
||||
}
|
||||
@ -12,6 +12,10 @@
|
||||
health: '/up',
|
||||
)
|
||||
->withMiddleware(function (Middleware $middleware): void {
|
||||
$middleware->alias([
|
||||
'signed' => \App\Http\Middleware\ValidateSignatureFlexible::class,
|
||||
]);
|
||||
|
||||
$middleware->trustProxies(
|
||||
at: '*',
|
||||
headers: Request::HEADER_X_FORWARDED_FOR |
|
||||
|
||||
Loading…
Reference in New Issue
Block a user