service-captcha/app/Providers/AppServiceProvider.php
Leonid Nikitin c3e4c68a41
Add CryptographyContract and its implementation
Added a new CryptographyContract interface and CryptographyString class that implements this contract. The CryptographyContract encapsulates the encryption and decryption of strings, enforcing these operations to be standardized across the application. The CryptographyString class uses Laravel's native crypt facades to perform these actions. In the AppServiceProvider, CryptographyContract is now bound to CryptographyString class, allowing the container to automatically resolve the dependencies wherever the interface is type hinted.
2023-09-19 14:29:01 +06:00

82 lines
2.7 KiB
PHP

<?php declare(strict_types=1);
namespace App\Providers;
use App\Captcha\Contracts\ImageBody;
use App\Captcha\Contracts\ImageHead;
use App\Captcha\Contracts\ImageLines;
use App\Captcha\Contracts\ImageManager as ImageManagerContract;
use App\Captcha\Images\Body;
use App\Captcha\Images\Head;
use App\Captcha\Images\ImageManager;
use App\Captcha\Images\Lines;
use App\Contracts\CryptographyContract;
use App\Services\Api\V1\CaptchaGenerateService;
use App\Services\CaptchaToken\CaptchaTokenHandler;
use App\Services\CryptographyString;
use App\Services\GenerateTokenCommand\GenerateTokenUlidCommand;
use App\Services\GenerateTokenCommand\GenerateTokenUuidCommand;
use App\Services\Search\CreateSearchInstanceCommand;
use App\Services\Search\Search;
use Illuminate\Contracts\Foundation\Application;
use Illuminate\Pagination\Paginator;
use Illuminate\Support\ServiceProvider;
use Illuminate\Validation\Rules\Password;
final class AppServiceProvider extends ServiceProvider
{
/**
* Register any application services.
*/
public function register(): void
{
$this->app->bind(ImageManagerContract::class, function () {
return new ImageManager(imageClassName: config('captcha.imageClass'));
});
$this->app->bind(ImageHead::class, Head::class);
$this->app->bind(ImageBody::class, Body::class);
$this->app->bind(ImageLines::class, Lines::class);
$this->app->bind(CryptographyContract::class, CryptographyString::class);
$this->app->bind(CreateSearchInstanceCommand::class, function () {
return new CreateSearchInstanceCommand(Search::class);
});
$this->app->bind(CaptchaGenerateService::class, function (Application $app) {
return new CaptchaGenerateService(
config: config('captcha', []),
imageHead: $app->make(ImageHead::class),
imageBody: $app->make(ImageBody::class)
);
});
$this->app->bind(CaptchaTokenHandler::class, function (Application $app) {
return new CaptchaTokenHandler(
generatePublicTokenCommand: $app->make(GenerateTokenUlidCommand::class),
generatePrivateTokenCommand: $app->make(GenerateTokenUuidCommand::class)
);
});
}
/**
* Bootstrap any application services.
*/
public function boot(): void
{
Password::defaults(function () {
$rule = Password::min(8);
return $this->app->isProduction()
? $rule->letters()
->mixedCase()
->numbers()
->symbols()
->uncompromised()
: $rule;
});
Paginator::useBootstrapFive();
}
}