From 700a0eb6c61556e73c7f4c02be16c18cee8cf764 Mon Sep 17 00:00:00 2001 From: David Bomba Date: Thu, 19 Jun 2025 09:08:34 +1000 Subject: [PATCH] Fixes for yodlee reauth flow --- app/Filters/QuoteFilters.php | 16 +++++++++++++--- app/Http/Controllers/Bank/YodleeController.php | 5 ++++- app/Http/Controllers/OneTimeTokenController.php | 4 ++++ app/Utils/HtmlEngine.php | 2 +- resources/views/bank/yodlee/auth.blade.php | 5 +++++ 5 files changed, 27 insertions(+), 5 deletions(-) diff --git a/app/Filters/QuoteFilters.php b/app/Filters/QuoteFilters.php index 37f0a0b32e..9e6c4c06cc 100644 --- a/app/Filters/QuoteFilters.php +++ b/app/Filters/QuoteFilters.php @@ -14,6 +14,8 @@ namespace App\Filters; use App\Models\Quote; use Illuminate\Database\Eloquent\Builder; +use Illuminate\Support\Facades\DB; +use Illuminate\Support\Facades\Schema; /** * QuoteFilters. @@ -151,17 +153,25 @@ class QuoteFilters extends QueryFilters { $sort_col = explode('|', $sort); - if (!is_array($sort_col) || count($sort_col) != 2 || !in_array($sort_col[0], \Illuminate\Support\Facades\Schema::getColumnListing($this->builder->getModel()->getTable()))) { + if (!is_array($sort_col) || count($sort_col) != 2) { return $this->builder; } $dir = ($sort_col[1] == 'asc') ? 'asc' : 'desc'; - if ($sort_col[0] == 'client_id') { + // Handle relationship-based sorting + if ($sort_col[0] == 'documents') { + return $this->builder->withCount('documents')->orderBy('documents_count', $dir); + } + // Validate column exists in database schema + if (!in_array($sort_col[0], Schema::getColumnListing($this->builder->getModel()->getTable()))) { + return $this->builder; + } + + if ($sort_col[0] == 'client_id') { return $this->builder->orderBy(\App\Models\Client::select('name') ->whereColumn('clients.id', 'quotes.client_id'), $dir); - } if ($sort_col[0] == 'number') { diff --git a/app/Http/Controllers/Bank/YodleeController.php b/app/Http/Controllers/Bank/YodleeController.php index 7a32a1fe63..4261401be9 100644 --- a/app/Http/Controllers/Bank/YodleeController.php +++ b/app/Http/Controllers/Bank/YodleeController.php @@ -53,6 +53,8 @@ class YodleeController extends BaseController $redirect_url = isset($request->getTokenContent()['is_react']) && $request->getTokenContent()['is_react'] ? config('ninja.react_url') : config('ninja.app_url'); + $provider_id = isset($request->getTokenContent()['provider_id']) ? $request->getTokenContent()['provider_id'] : false; + $data = [ 'access_token' => $yodlee->getAccessToken(), 'fasttrack_url' => $yodlee->getFastTrackUrl(), @@ -62,6 +64,7 @@ class YodleeController extends BaseController 'account' => $company->account, 'completed' => $request->has('window_closed') ? true : false, 'redirect_url' => $redirect_url, + 'provider_id' => $provider_id, ]; return view('bank.yodlee.auth', $data); @@ -84,7 +87,7 @@ class YodleeController extends BaseController $bank_integration->bank_account_name = $account['account_name']; $bank_integration->bank_account_status = $account['account_status']; $bank_integration->bank_account_number = $account['account_number']; - $bank_integration->provider_id = $account['provider_id']; + $bank_integration->provider_id = $account['provider_account_id'] ?? $account['provider_id']; $bank_integration->provider_name = $account['provider_name']; $bank_integration->nickname = $account['nickname']; $bank_integration->balance = $account['current_balance']; diff --git a/app/Http/Controllers/OneTimeTokenController.php b/app/Http/Controllers/OneTimeTokenController.php index c41104e260..c6bfd482ca 100644 --- a/app/Http/Controllers/OneTimeTokenController.php +++ b/app/Http/Controllers/OneTimeTokenController.php @@ -78,6 +78,10 @@ class OneTimeTokenController extends BaseController $data['institution_id'] = $request->institution_id; } + if($request->provider_id) { + $data['provider_id'] = $request->provider_id; + } + Cache::put($hash, $data, 3600); return response()->json(['hash' => $hash], 200); diff --git a/app/Utils/HtmlEngine.php b/app/Utils/HtmlEngine.php index ea09bba26b..1d07f21b41 100644 --- a/app/Utils/HtmlEngine.php +++ b/app/Utils/HtmlEngine.php @@ -675,7 +675,7 @@ class HtmlEngine } - $signature_invite = $this->invitation->signature_base64 ? $this->invitation : $this->enZtity->invitations()->whereNotNull('signature_base64')->orderBy('updated_at','desc')->first(); + $signature_invite = $this->invitation->signature_base64 ? $this->invitation : $this->entity->invitations()->whereNotNull('signature_base64')->orderBy('updated_at','desc')->first(); if ($this->settings->signature_on_pdf) { $data['$contact.signature'] = ['value' => $signature_invite?->signature_base64 ?? '', 'label' => ctrans('texts.signature')]; diff --git a/resources/views/bank/yodlee/auth.blade.php b/resources/views/bank/yodlee/auth.blade.php index 27738d5c80..411809e360 100644 --- a/resources/views/bank/yodlee/auth.blade.php +++ b/resources/views/bank/yodlee/auth.blade.php @@ -103,6 +103,11 @@ fastLinkURL: '{{ $fasttrack_url }}', accessToken: 'Bearer {{ $access_token }}', params: { + @if($provider_id) + flow: '{{ $flow }}', + providerAccountId: {{ $provider_id }}, + reauthenticate: true, + @endif configName : '{{ $config_name }}' }, onSuccess: function (data) {