app->register(SettingsProvider::class); UrlGenerator::macro('alternateHasCorrectSignature', function (Request $request, $absolute = true, Closure|array $ignoreQuery = []) { // ensure the base path is applied to absolute url $absoluteUrl = url($request->path()); // forceRootUrl and forceScheme will apply $url = $absolute ? $absoluteUrl : '/' . $request->path(); $queryString = collect(explode('&', (string) $request->server->get('QUERY_STRING'))) ->reject(function ($parameter) use ($ignoreQuery) { $parameter = Str::before($parameter, '='); if ($parameter === 'signature') { return true; } if ($ignoreQuery instanceof Closure) { return $ignoreQuery($parameter); } return in_array($parameter, $ignoreQuery); }) ->join('&'); $original = rtrim($url . '?' . $queryString, '?'); $keys = call_user_func($this->keyResolver); $keys = is_array($keys) ? $keys : [$keys]; foreach ($keys as $key) { if ( hash_equals( hash_hmac('sha256', $original, $key), (string) $request->query('signature', '') ) ) { return true; } } return false; }); UrlGenerator::macro('alternateHasValidSignature', function (Request $request, $absolute = true, array $ignoreQuery = []) { return \URL::alternateHasCorrectSignature($request, $absolute, $ignoreQuery) && \URL::signatureHasNotExpired($request); }); Request::macro('hasValidSignature', function ($absolute = true, array $ignoreQuery = []) { return \URL::alternateHasValidSignature($this, $absolute, $ignoreQuery); }); } /** * Bootstrap any application services. */ public function boot(): void { // Change livewire url \Livewire\Livewire::setUpdateRoute(function ($handle) { return \Illuminate\Support\Facades\Route::post('/paymenter/update', $handle)->middleware('web')->name('paymenter.'); }); \Livewire\Livewire::propertySynthesizer(PriceSynth::class); Gate::define('has-permission', function (User $user, string $ability) { return $user->hasPermission($ability); }); Event::listen(function (\SocialiteProviders\Manager\SocialiteWasCalled $event) { $event->extendSocialite('discord', \SocialiteProviders\Discord\Provider::class); }); try { foreach ( collect(Extension::where(function ($query) { $query->where('enabled', true)->orWhere('type', 'server')->orWhere('type', 'gateway'); })->get())->unique('extension') as $extension ) { ExtensionHelper::call($extension, 'boot', mayFail: true); } } catch (\Exception $e) { // Fail silently } Queue::after(function (JobProcessed $event) { if ($event->job->resolveName() === 'App\Mail\Mail') { $payload = json_decode($event->job->getRawBody()); $data = unserialize($payload->data->command); EmailLog::where('id', $data->mailable->email_log_id)->update([ 'sent_at' => now(), 'status' => 'sent', ]); } }); Queue::failing(function (JobFailed $event) { if ($event->job->resolveName() === 'App\Mail\Mail') { $payload = json_decode($event->job->getRawBody()); $data = unserialize($payload->data->command); EmailLog::where('id', $data->mailable->email_log_id)->update([ 'status' => 'failed', 'error' => $event->exception->getMessage(), 'job_uuid' => $event->job->uuid(), ]); } }); Str::macro('markdown', function ($markdown) { return Str::markdown($markdown, extensions: [ new TableExtension, ]); }); Passport::clientModel(OauthClient::class); Passport::ignoreRoutes(); Passport::tokensCan(ScopeRegistry::getAll()); if (class_exists(Scramble::class)) { Scramble::configure() ->routes(function (\Illuminate\Routing\Route $route) { return Str::startsWith($route->uri, 'api/v1/admin'); }) ->withDocumentTransformers(function (OpenApi $openApi) { $openApi->secure( SecurityScheme::http('bearer') ); }); } } }