HEX
Server: nginx/1.28.3
System: Linux lightweb-s1 5.15.0-173-generic #183-Ubuntu SMP Fri Mar 6 13:29:34 UTC 2026 x86_64
User: drdrivek-71 (1047)
PHP: 8.3.30
Disabled: NONE
Upload Files
File: /home/eslinced-103/brise-edu.or.kr/app/Providers/AppServiceProvider.php
<?php

namespace App\Providers;

use App\Models\Central\Tenant;
use Illuminate\Contracts\Foundation\CachesConfiguration;
use Illuminate\Support\Facades\File;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Str;
use Laravel\Cashier\Cashier;
use Symfony\Component\Finder\Finder;
use Laravel\Passport\Passport;
use League\OAuth2\Server\CryptKey;

class AppServiceProvider extends ServiceProvider
{
    /**
     * Register any application services.
     */
    public function register(): void
    {
        $this->overrideConfigs();

        \Stancl\Tenancy\Listeners\UpdateSyncedResource::$shouldQueue = true;
        if (config('amuz.admin_host') != null) $this->replaceNovaUrl();

        $this->registerResources();
    }

    /**
     * Bootstrap any application services.
     */
    public function boot(): void
    {
        Passport::loadKeysFrom(base_path('storage'));

	app()->bind('League\OAuth2\Server\CryptKey', function () {
            return new CryptKey(
                storage_path('oauth-private.key'),
                null,
                false
            );
        });
	
        $this->registerCommands();
        Cashier::ignoreMigrations();
        Cashier::useCustomerModel(Tenant::class);
    }

    private function replaceNovaUrl(): void
    {
        //도메인 기반의 노바주소를 호스트기반으로 변경해준다.
        if (current(explode(".", request()->getHost())) === config('amuz.admin_host')) {
            config(['nova.domain' => request()->httpHost()]);
        } else {
            config(['nova.domain' => config('amuz.admin_host') . '.' . request()->httpHost()]);
        }
    }
    private function overrideConfigs(): void
    {
        $tenancyMigrationParams = config('tenancy.migration_parameters');
        //패키지 내에있는 마이그레이션을 추가할 수 있도록
        $packages = $this->getAmuzPackages();

        foreach ($packages as $package) {
            $tenancyMigrationParams['--path'][] = base_path(sprintf('AmuzPackages/%s/Database/migrations/tenant', $package));
        }

        config(['tenancy.migration_parameters' => $tenancyMigrationParams]);

        //Nova Language
        $locales = [];
        foreach (config('amuz.languages') as $code => $language) {
            $locales[$code] = $language['display'];
        }
        config([
            'nova-language-switch' =>  $locales
        ]);

        foreach ($packages as $package) {
            $packagePath = base_path(sprintf('AmuzPackages/%s/config', $package));
            if (!is_dir($packagePath)) {
                mkdir($packagePath);
            }

            $configs = File::files($packagePath);
            foreach ($configs as $config) {
                if ($config->getExtension() == "php") {
                    $this->mergeConfigFrom($config->getRealPath(), $config->getFilenameWithoutExtension());
                }
            }
        }
    }
    protected function mergeConfigFrom($path, $key): void
    {
        if (! ($this->app instanceof CachesConfiguration && $this->app->configurationIsCached())) {
            $config = $this->app->make('config');

            $config->set($key, array_merge(
                $config->get($key, []),
                require $path
            ));
        }
    }

    private function getAmuzPackages(): array
    {
        return Storage::disk('package')->directories();
    }


    protected function registerResources(): void
    {
        $path = base_path(config('amuz.package_path'));

        $namespace = config('amuz.package_path');

        if (!is_dir($path)) return;

        foreach ((new Finder())->in($path)->directories() as $dir) {

            $name = Str::studly($dir->getFilename());
            $provider = "$namespace\\$name\\{$name}ServiceProvider";

            if (class_exists($provider)) {
                $this->app->register($provider);
            }
        }
    }

    protected function registerCommands(): void
    {
        $this->commands([
            \App\Commands\CreateActionCommand::class,
            \App\Commands\CreateCardCommand::class,
            \App\Commands\CreateCustomFilterCommand::class,
            \App\Commands\CreateDashboardCommand::class,
            \App\Commands\CreateFilterCommand::class,
            \App\Commands\CreateFieldCommand::class,
            \App\Commands\CreateLensCommand::class,
            \App\Commands\CreateMigrationCommand::class,
            \App\Commands\CreateModelCommand::class,
            \App\Commands\CreatePackageCommand::class,
            \App\Commands\CreatePartitionCommand::class,
            \App\Commands\CreatePolicyCommand::class,
            \App\Commands\CreateProgressCommand::class,
            \App\Commands\CreateResourceCommand::class,
            \App\Commands\CreateResourceToolCommand::class,
            \App\Commands\CreateServiceProviderCommand::class,
            \App\Commands\CreateToolCommand::class,
            \App\Commands\CreateTrendCommand::class,
            \App\Commands\CreateValueCommand::class,
            \App\Commands\SeedCommand::class,
            \App\Commands\ResourceListCommand::class
        ]);
    }
}