61 lines
1.8 KiB
PHP
61 lines
1.8 KiB
PHP
<?php declare(strict_types=1);
|
|
|
|
namespace korElf\CaptchaRuleForLaravel;
|
|
|
|
use Illuminate\Support\Facades\Validator;
|
|
use Illuminate\Support\ServiceProvider;
|
|
use Illuminate\Support\Facades\Blade;
|
|
use Illuminate\Contracts\Foundation\Application;
|
|
|
|
final class CaptchaProvider extends ServiceProvider
|
|
{
|
|
public function boot(): Void
|
|
{
|
|
$this->addValidationRule();
|
|
$this->publishes([
|
|
__DIR__ . '/../config/captcha.php' => config_path('captcha.php'),
|
|
], 'config');
|
|
|
|
if (config('captcha.enable_blade_captcha')) {
|
|
Blade::directive('captcha', function () {
|
|
return "<?php echo \korElf\CaptchaRuleForLaravel\htmlCaptcha(); ?>";
|
|
});
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Extends Validator to include a captcha type
|
|
*/
|
|
public function addValidationRule(): Void
|
|
{
|
|
$message = trans(config('captcha.error_message_key'));
|
|
Validator::extendImplicit(config('captcha.rule_name'), function ($attribute, $value) {
|
|
if (!is_string($value)) {
|
|
return false;
|
|
}
|
|
return app(CaptchaService::class)->validate($value, request()->userAgent());
|
|
}, $message);
|
|
}
|
|
|
|
/**
|
|
* Register the service provider.
|
|
*
|
|
* @return void
|
|
*/
|
|
public function register(): Void
|
|
{
|
|
$this->mergeConfigFrom(
|
|
__DIR__ . '/../config/captcha.php',
|
|
'captcha'
|
|
);
|
|
|
|
$this->app->singleton(CaptchaService::class, function (Application $app) {
|
|
return new CaptchaService(
|
|
privateToken: config('captcha.api_private_token', ''),
|
|
domainApi: config('captcha.api_domain', ''),
|
|
curlTimeout: config('captcha.curl_timeout', ''),
|
|
);
|
|
});
|
|
}
|
|
}
|