38 lines
1 KiB
PHP
38 lines
1 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Middleware;
|
|
|
|
use Closure;
|
|
use Illuminate\Http\Request;
|
|
use Symfony\Component\HttpFoundation\Response;
|
|
|
|
class GuestbookValidate
|
|
{
|
|
/**
|
|
* Handle an incoming request.
|
|
*
|
|
* @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next
|
|
*/
|
|
public function handle(Request $request, Closure $next): Response
|
|
{
|
|
if (
|
|
!$request->validate([
|
|
'name' => 'required',
|
|
'message' => 'required'
|
|
]) ||
|
|
$this->containsUrl($request->get('message')) ||
|
|
$this->containsUrl($request->get('name'))
|
|
) {
|
|
return response()->view('errors.guestbook-invalid', [], 400);
|
|
}
|
|
return $next($request);
|
|
}
|
|
|
|
public function containsUrl($str) {
|
|
$matches = [];
|
|
$pattern = '/\b(?:https?|ftp|www)(:\/\/)*[-A-Z0-9+&@#\/%?=~_|$!:,.;]*[A-Z0-9+&@#\/%=~_|$]/i';
|
|
preg_match_all($pattern, $str, $matches);
|
|
return count($matches[0]);
|
|
}
|
|
}
|