40
common/Validation/RecaptchaController.php
Executable file
40
common/Validation/RecaptchaController.php
Executable file
@@ -0,0 +1,40 @@
|
||||
<?php namespace Common\Validation;
|
||||
|
||||
use Common\Core\BaseController;
|
||||
use Common\Settings\Settings;
|
||||
use GuzzleHttp\Client;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class RecaptchaController extends BaseController
|
||||
{
|
||||
public function __construct(
|
||||
protected Request $request,
|
||||
protected Client $http,
|
||||
protected Settings $settings,
|
||||
) {
|
||||
}
|
||||
|
||||
public function verify()
|
||||
{
|
||||
$this->validate($this->request, [
|
||||
'token' => 'required|string',
|
||||
]);
|
||||
|
||||
$response = $this->http->post(
|
||||
'https://www.google.com/recaptcha/api/siteverify',
|
||||
[
|
||||
'form_params' => [
|
||||
'response' => $this->request->get('token'),
|
||||
'secret' => $this->settings->get('recaptcha.secret_key'),
|
||||
'remoteip' => $this->request->getClientIp(),
|
||||
],
|
||||
],
|
||||
);
|
||||
|
||||
$response = json_decode($response->getBody()->getContents(), true);
|
||||
|
||||
$success = $response['success'] && $response['score'] > 0.1;
|
||||
|
||||
return $this->success(['success' => $success]);
|
||||
}
|
||||
}
|
||||
98
common/Validation/Validators/EmailsAreValid.php
Executable file
98
common/Validation/Validators/EmailsAreValid.php
Executable file
@@ -0,0 +1,98 @@
|
||||
<?php
|
||||
|
||||
namespace Common\Validation\Validators;
|
||||
|
||||
use App\Models\User;
|
||||
use Illuminate\Contracts\Validation\Rule;
|
||||
use Illuminate\Validation\Concerns\ValidatesAttributes;
|
||||
|
||||
class EmailsAreValid implements Rule
|
||||
{
|
||||
use ValidatesAttributes;
|
||||
|
||||
/**
|
||||
* @var int
|
||||
*/
|
||||
private $maxEmails = 5;
|
||||
|
||||
/**
|
||||
* @var bool
|
||||
*/
|
||||
private $validateExistence;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private $validationMessage;
|
||||
|
||||
public function __construct($validateExistence = true)
|
||||
{
|
||||
$this->validateExistence = $validateExistence;
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
public function passes($attribute, $emails)
|
||||
{
|
||||
$invalidEmails = array_filter($emails, function ($email) use (
|
||||
$attribute,
|
||||
) {
|
||||
return !$this->validateEmail($attribute, $email, []);
|
||||
});
|
||||
|
||||
if (!empty($invalidEmails)) {
|
||||
$this->validationMessage = $this->invalidEmailsMessage(
|
||||
$invalidEmails,
|
||||
);
|
||||
return false;
|
||||
}
|
||||
|
||||
if ($this->validateExistence) {
|
||||
$dbEmails = app(User::class)
|
||||
->whereIn('email', $emails)
|
||||
->pluck('email');
|
||||
$nonExistentEmails = array_filter($emails, function ($email) use (
|
||||
$dbEmails,
|
||||
) {
|
||||
return !$dbEmails->contains($email);
|
||||
});
|
||||
if (!empty($nonExistentEmails)) {
|
||||
$this->validationMessage = $this->emailsDontExistMessage(
|
||||
$nonExistentEmails,
|
||||
);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private function invalidEmailsMessage(array $emails): string
|
||||
{
|
||||
$emailString = implode(', ', array_slice($emails, 0, $this->maxEmails));
|
||||
if (count($emails) > $this->maxEmails) {
|
||||
$emailString .= '...';
|
||||
}
|
||||
return trans('Invalid emails: :emails', ['emails' => $emailString]);
|
||||
}
|
||||
|
||||
private function emailsDontExistMessage(array $emails): string
|
||||
{
|
||||
$emailString = implode(', ', array_slice($emails, 0, $this->maxEmails));
|
||||
if (count($emails) > $this->maxEmails) {
|
||||
$emailString .= '...';
|
||||
}
|
||||
return trans('User with email: :emails does not exist', [
|
||||
'emails' => $emailString,
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
public function message()
|
||||
{
|
||||
return $this->validationMessage;
|
||||
}
|
||||
}
|
||||
23
common/Validation/Validators/MultiDateFormatValidator.php
Executable file
23
common/Validation/Validators/MultiDateFormatValidator.php
Executable file
@@ -0,0 +1,23 @@
|
||||
<?php
|
||||
|
||||
namespace Common\Validation\Validators;
|
||||
|
||||
class MultiDateFormatValidator
|
||||
{
|
||||
/**
|
||||
* @param string $attribute
|
||||
* @param string $value
|
||||
* @param array $formats
|
||||
* @return bool
|
||||
*/
|
||||
public function validate($attribute, $value, $formats)
|
||||
{
|
||||
foreach($formats as $format) {
|
||||
$parsed = date_parse_from_format($format, $value);
|
||||
if ($parsed['error_count'] === 0 && $parsed['warning_count'] === 0) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user