<?php declare(strict_types=1); use DI\Bridge\Slim\Bridge as SlimAppFactory; use DI\ContainerBuilder; use Slim\Views\PhpRenderer; use Voyrio\AdsAi\AuthService; use Voyrio\AdsAi\Config\GoogleAdsConfig; use Voyrio\AdsAi\Config\GoogleOAuthConfig; use Voyrio\AdsAi\Crypto\TokenEncryption; use Voyrio\AdsAi\Database; use Voyrio\AdsAi\Google\GoogleOAuthService; use Voyrio\AdsAi\GoogleAds\GoogleAdsClientFactory; use Voyrio\AdsAi\GoogleAds\GoogleAdsReadService; use Voyrio\AdsAi\Http\HttpClient; use Voyrio\AdsAi\OAuthConnectionRepository; use Voyrio\AdsAi\Services\GoogleAdsDashboardService; use Dotenv\Dotenv; require dirname(__DIR__) . '/vendor/autoload.php'; $baseDir = dirname(__DIR__); if (is_readable($baseDir . '/.env')) { Dotenv::createImmutable($baseDir)->safeLoad(); } $settings = require $baseDir . '/config/settings.php'; session_name($settings['session']['name']); session_set_cookie_params([ 'lifetime' => 0, 'path' => '/', 'domain' => '', 'secure' => true, 'httponly' => true, 'samesite' => 'Lax', ]); session_start(); $pdo = Database::pdo($settings['db']); $googleOAuthConfig = GoogleOAuthConfig::fromAppSettings($settings['google']); $googleAdsConfig = GoogleAdsConfig::fromAppSettings($settings['google_ads']); $tokenEncryption = new TokenEncryption($settings['app_key']); $containerBuilder = new ContainerBuilder(); $containerBuilder->addDefinitions([ PDO::class => $pdo, PhpRenderer::class => new PhpRenderer($baseDir . '/templates'), AuthService::class => DI\create(AuthService::class)->constructor(DI\get(PDO::class)), GoogleOAuthConfig::class => $googleOAuthConfig, GoogleAdsConfig::class => $googleAdsConfig, TokenEncryption::class => $tokenEncryption, HttpClient::class => DI\create(HttpClient::class), GoogleOAuthService::class => DI\create(GoogleOAuthService::class)->constructor( DI\get(GoogleOAuthConfig::class), DI\get(HttpClient::class) ), OAuthConnectionRepository::class => DI\create(OAuthConnectionRepository::class)->constructor(DI\get(PDO::class)), GoogleAdsClientFactory::class => DI\create(GoogleAdsClientFactory::class)->constructor( DI\get(GoogleOAuthConfig::class), DI\get(GoogleAdsConfig::class) ), GoogleAdsReadService::class => DI\create(GoogleAdsReadService::class), GoogleAdsDashboardService::class => DI\create(GoogleAdsDashboardService::class)->constructor( DI\get(OAuthConnectionRepository::class), DI\get(TokenEncryption::class), DI\get(GoogleAdsConfig::class), DI\get(GoogleAdsClientFactory::class), DI\get(GoogleAdsReadService::class), DI\get(AuthService::class) ), ]); $container = $containerBuilder->build(); $app = SlimAppFactory::create($container); $app->addBodyParsingMiddleware(); $app->addRoutingMiddleware(); $app->add(new Voyrio\AdsAi\Middleware\SecurityHeadersMiddleware()); $app->addErrorMiddleware($settings['displayErrorDetails'], true, true, null); (require $baseDir . '/app/routes.php')($app); $app->run();