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',
|
health: '/up',
|
||||||
)
|
)
|
||||||
->withMiddleware(function (Middleware $middleware): void {
|
->withMiddleware(function (Middleware $middleware): void {
|
||||||
|
$middleware->alias([
|
||||||
|
'signed' => \App\Http\Middleware\ValidateSignatureFlexible::class,
|
||||||
|
]);
|
||||||
|
|
||||||
$middleware->trustProxies(
|
$middleware->trustProxies(
|
||||||
at: '*',
|
at: '*',
|
||||||
headers: Request::HEADER_X_FORWARDED_FOR |
|
headers: Request::HEADER_X_FORWARDED_FOR |
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user