From fab47bd08cf131122f94634118b62351abfe00e6 Mon Sep 17 00:00:00 2001 From: paulwer Date: Mon, 11 Dec 2023 13:23:28 +0100 Subject: [PATCH] introduce ENV-variables for nordigen --- app/Helpers/Bank/Nordigen/Nordigen.php | 2 +- .../Controllers/Bank/NordigenController.php | 13 +++++++------ .../Controllers/BankIntegrationController.php | 8 +++++--- .../Bank/ProcessBankTransactionsNordigen.php | 10 +++++++--- app/Jobs/Ninja/BankTransactionSync.php | 17 ++++++++++++----- config/ninja.php | 11 ++++++++--- 6 files changed, 40 insertions(+), 21 deletions(-) diff --git a/app/Helpers/Bank/Nordigen/Nordigen.php b/app/Helpers/Bank/Nordigen/Nordigen.php index 1ddbe3e80fc8..68ca093a4e26 100644 --- a/app/Helpers/Bank/Nordigen/Nordigen.php +++ b/app/Helpers/Bank/Nordigen/Nordigen.php @@ -21,7 +21,7 @@ use Nordigen\NordigenPHP\Exceptions\NordigenExceptions\NordigenException; class Nordigen { - public bool $test_mode = false; // https://developer.gocardless.com/bank-account-data/sandbox + public bool $test_mode = config('ninja.nordigen.test_mode'); // https://developer.gocardless.com/bank-account-data/sandbox public string $sandbox_institutionId = "SANDBOXFINANCE_SFIN0000"; diff --git a/app/Http/Controllers/Bank/NordigenController.php b/app/Http/Controllers/Bank/NordigenController.php index ad9d4758db07..d2caa70f625e 100644 --- a/app/Http/Controllers/Bank/NordigenController.php +++ b/app/Http/Controllers/Bank/NordigenController.php @@ -35,11 +35,12 @@ class NordigenController extends BaseController return response()->redirectTo($data["redirect"] . "?action=nordigen_connect&status=failed&reason=token-invalid"); $company = $request->getCompany(); + $account = $company->account; - if (!$company->account->bank_integration_nordigen_secret_id || !$company->account->bank_integration_nordigen_secret_key) + if (!(($account->bank_integration_nordigen_secret_id && $account->bank_integration_nordigen_secret_key) || (config('ninja.nordigen.secret_id') && config('ninja.nordigen.secret_key')))) return response()->redirectTo($data["redirect"] . "?action=nordigen_connect&status=failed&reason=account-config-invalid"); - $nordigen = new Nordigen($company->account->bank_integration_nordigen_secret_id, $company->account->bank_integration_nordigen_secret_key); + $nordigen = ($account->bank_integration_nordigen_secret_id && $account->bank_integration_nordigen_secret_key) ? new Nordigen($account->bank_integration_nordigen_secret_id, $account->bank_integration_nordigen_secret_key) : new Nordigen(config('ninja.nordigen.secret_id'), config('ninja.nordigen.secret_key')); // show bank_selection_screen, when institution_id is not present if (!array_key_exists("institution_id", $data)) { @@ -156,11 +157,11 @@ class NordigenController extends BaseController $company = Company::where('company_key', $context["company_key"])->first(); $account = $company->account; - if (!$account->bank_integration_nordigen_secret_id || !$account->bank_integration_nordigen_secret_key) + if (!(($account->bank_integration_nordigen_secret_id && $account->bank_integration_nordigen_secret_key) || (config('ninja.nordigen.secret_id') && config('ninja.nordigen.secret_key')))) return response()->redirectTo($context["redirect"] . "?action=nordigen_connect&status=failed&reason=account-config-invalid"); // fetch requisition - $nordigen = new Nordigen($account->bank_integration_nordigen_secret_id, $account->bank_integration_nordigen_secret_key); + $nordigen = ($account->bank_integration_nordigen_secret_id && $account->bank_integration_nordigen_secret_key) ? new Nordigen($account->bank_integration_nordigen_secret_id, $account->bank_integration_nordigen_secret_key) : new Nordigen(config('ninja.nordigen.secret_id'), config('ninja.nordigen.secret_key')); $requisition = $nordigen->getRequisition($context["requisitionId"]); // check validity of requisition @@ -302,10 +303,10 @@ class NordigenController extends BaseController { $account = auth()->user()->account; - if (!$account->bank_integration_nordigen_secret_id || !$account->bank_integration_nordigen_secret_key) + if (!(($account->bank_integration_nordigen_secret_id && $account->bank_integration_nordigen_secret_key) || (config('ninja.nordigen.secret_id') && config('ninja.nordigen.secret_key')))) return response()->json(['message' => 'Not yet authenticated with Nordigen Bank Integration service'], 400); - $nordigen = new Nordigen($account->bank_integration_nordigen_secret_id, $account->bank_integration_nordigen_secret_key); + $nordigen = ($account->bank_integration_nordigen_secret_id && $account->bank_integration_nordigen_secret_key) ? new Nordigen($account->bank_integration_nordigen_secret_id, $account->bank_integration_nordigen_secret_key) : new Nordigen(config('ninja.nordigen.secret_id'), config('ninja.nordigen.secret_key')); return response()->json($nordigen->getInstitutions()); } diff --git a/app/Http/Controllers/BankIntegrationController.php b/app/Http/Controllers/BankIntegrationController.php index 8da51fe35fed..dfc4e281b630 100644 --- a/app/Http/Controllers/BankIntegrationController.php +++ b/app/Http/Controllers/BankIntegrationController.php @@ -213,7 +213,7 @@ class BankIntegrationController extends BaseController }); - if ($user->account->bank_integration_nordigen_secret_id && $user->account->bank_integration_nordigen_secret_key) + if (($user->account->bank_integration_nordigen_secret_id && $user->account->bank_integration_nordigen_secret_key) || (config('ninja.nordigen.secret_id') && config('ninja.nordigen.secret_key'))) $user_account->bank_integrations->where("integration_type", BankIntegration::INTEGRATION_TYPE_NORDIGEN)->andWhere('auto_sync', true)->each(function ($bank_integration) use ($user_account) { ProcessBankTransactionsNordigen::dispatch($user_account, $bank_integration); @@ -263,10 +263,12 @@ class BankIntegrationController extends BaseController private function refreshAccountsNordigen(User $user) { - if (!$user->account->bank_integration_nordigen_secret_id || !$user->account->bank_integration_nordigen_secret_key) + $account = $user->account; + + if (!(($account->bank_integration_nordigen_secret_id && $account->bank_integration_nordigen_secret_key) || (config('ninja.nordigen.secret_id') && config('ninja.nordigen.secret_key')))) return; - $nordigen = new Nordigen($user->account->bank_integration_nordigen_secret_id, $user->account->bank_integration_nordigen_secret_key); + $nordigen = ($account->bank_integration_nordigen_secret_id && $account->bank_integration_nordigen_secret_key) ? new Nordigen($account->bank_integration_nordigen_secret_id, $account->bank_integration_nordigen_secret_key) : new Nordigen(config('ninja.nordigen.secret_id'), config('ninja.nordigen.secret_key')); BankIntegration::withTrashed()->where("integration_type", BankIntegration::INTEGRATION_TYPE_NORDIGEN)->each(function (BankIntegration $bank_integration) use ($nordigen) { $account = $nordigen->getAccount($bank_integration->nordigen_account_id); diff --git a/app/Jobs/Bank/ProcessBankTransactionsNordigen.php b/app/Jobs/Bank/ProcessBankTransactionsNordigen.php index a5d4d557df7f..42c196937b33 100644 --- a/app/Jobs/Bank/ProcessBankTransactionsNordigen.php +++ b/app/Jobs/Bank/ProcessBankTransactionsNordigen.php @@ -56,8 +56,10 @@ class ProcessBankTransactionsNordigen implements ShouldQueue if ($this->bank_integration->integration_type != BankIntegration::INTEGRATION_TYPE_NORDIGEN) throw new \Exception("Invalid BankIntegration Type"); - $this->nordigen = new Nordigen($this->account->bank_integration_nordigen_secret_id, $this->account->bank_integration_nordigen_secret_key); + if (!(($this->account->bank_integration_nordigen_secret_id && $this->account->bank_integration_nordigen_secret_key) || (config('ninja.nordigen.secret_id') && config('ninja.nordigen.secret_key')))) + throw new \Exception("Missing credentials for bank_integration service nortigen"); + $this->nordigen = ($this->account->bank_integration_nordigen_secret_id && $this->account->bank_integration_nordigen_secret_key) ? new Nordigen($this->account->bank_integration_nordigen_secret_id, $this->account->bank_integration_nordigen_secret_key) : new Nordigen(config('ninja.nordigen.secret_id'), config('ninja.nordigen.secret_key')); } /** @@ -78,7 +80,8 @@ class ProcessBankTransactionsNordigen implements ShouldQueue try { $this->updateAccount(); } catch (\Exception $e) { - nlog("{$this->account->bank_integration_nordigen_secret_id} - exited abnormally => " . $e->getMessage()); + $secretId = $this->account->bank_integration_nordigen_secret_id ?: config('ninja.nortigen.secret_id'); + nlog("{$secretId} - exited abnormally => " . $e->getMessage()); $content = [ "Processing transactions for account: {$this->bank_integration->account->key} failed", @@ -98,7 +101,8 @@ class ProcessBankTransactionsNordigen implements ShouldQueue try { $this->processTransactions(); } catch (\Exception $e) { - nlog("{$this->account->bank_integration_nordigen_secret_id} - exited abnormally => " . $e->getMessage()); + $secretId = $this->account->bank_integration_nordigen_secret_id ?: config('ninja.nortigen.secret_id'); + nlog("{$secretId} - exited abnormally => " . $e->getMessage()); $content = [ "Processing transactions for account: {$this->bank_integration->account->key} failed", diff --git a/app/Jobs/Ninja/BankTransactionSync.php b/app/Jobs/Ninja/BankTransactionSync.php index af1fd5bcbce4..a65d52046e9b 100644 --- a/app/Jobs/Ninja/BankTransactionSync.php +++ b/app/Jobs/Ninja/BankTransactionSync.php @@ -52,7 +52,7 @@ class BankTransactionSync implements ShouldQueue if (Ninja::isHosted()) { // @turbo124 @todo I migrated the schedule for the job within the kernel to execute on all platforms and use the same expression here to determine if yodlee can run or not. Please chek/verify nlog("syncing transactions - yodlee"); - $a = Account::with('bank_integrations')->whereNotNull('bank_integration_yodlee_account_id')->cursor()->each(function ($account) { + Account::with('bank_integrations')->whereNotNull('bank_integration_yodlee_account_id')->cursor()->each(function ($account) { // $queue = Ninja::isHosted() ? 'bank' : 'default'; if ($account->isPaid() && $account->plan == 'enterprise') { @@ -65,11 +65,18 @@ class BankTransactionSync implements ShouldQueue nlog("syncing transactions - nordigen"); - $b = Account::with('bank_integrations')->whereNotNull('bank_integration_nordigen_secret_id')->andWhereNotNull('bank_integration_nordigen_secret_key')->cursor()->each(function ($account) { - $account->bank_integrations()->where('integration_type', BankIntegration::INTEGRATION_TYPE_NORDIGEN)->andWhere('auto_sync', true)->cursor()->each(function ($bank_integration) use ($account) { - (new ProcessBankTransactionsNordigen($account, $bank_integration))->handle(); + if (config("ninja.nortigen.secret_id") && config("ninja.nortigen.secret_key")) + Account::with('bank_integrations')->cursor()->each(function ($account) { + $account->bank_integrations()->where('integration_type', BankIntegration::INTEGRATION_TYPE_NORDIGEN)->andWhere('auto_sync', true)->cursor()->each(function ($bank_integration) use ($account) { + (new ProcessBankTransactionsNordigen($account, $bank_integration))->handle(); + }); + }); + else + Account::with('bank_integrations')->whereNotNull('bank_integration_nordigen_secret_id')->andWhereNotNull('bank_integration_nordigen_secret_key')->cursor()->each(function ($account) { + $account->bank_integrations()->where('integration_type', BankIntegration::INTEGRATION_TYPE_NORDIGEN)->andWhere('auto_sync', true)->cursor()->each(function ($bank_integration) use ($account) { + (new ProcessBankTransactionsNordigen($account, $bank_integration))->handle(); + }); }); - }); nlog("syncing transactions - done"); } diff --git a/config/ninja.php b/config/ninja.php index 94d0a307fc6a..5053cc40d9ca 100644 --- a/config/ninja.php +++ b/config/ninja.php @@ -7,7 +7,7 @@ return [ 'license_url' => 'https://app.invoiceninja.com', 'react_url' => env('REACT_URL', 'https://app.invoicing.co'), 'production' => env('NINJA_PROD', false), - 'license' => env('NINJA_LICENSE', ''), + 'license' => env('NINJA_LICENSE', ''), 'version_url' => 'https://pdf.invoicing.co/api/version', 'app_name' => env('APP_NAME', 'Invoice Ninja'), 'app_env' => env('APP_ENV', 'selfhosted'), @@ -86,7 +86,7 @@ return [ 'password' => 'password', 'stripe' => env('STRIPE_KEYS', ''), 'paypal' => env('PAYPAL_KEYS', ''), - 'ppcp' => env('PPCP_KEYS', ''), + 'ppcp' => env('PPCP_KEYS', ''), 'paypal_rest' => env('PAYPAL_REST_KEYS', ''), 'authorize' => env('AUTHORIZE_KEYS', ''), 'checkout' => env('CHECKOUT_KEYS', ''), @@ -196,7 +196,7 @@ return [ 'ninja_default_company_id' => env('NINJA_COMPANY_ID', null), 'ninja_default_company_gateway_id' => env('NINJA_COMPANY_GATEWAY_ID', null), 'ninja_hosted_secret' => env('NINJA_HOSTED_SECRET', ''), - 'ninja_hosted_header' =>env('NINJA_HEADER', ''), + 'ninja_hosted_header' => env('NINJA_HEADER', ''), 'ninja_connect_secret' => env('NINJA_CONNECT_SECRET', ''), 'internal_queue_enabled' => env('INTERNAL_QUEUE_ENABLED', true), 'ninja_apple_api_key' => env('APPLE_API_KEY', false), @@ -218,6 +218,11 @@ return [ 'dev_mode' => env("YODLEE_DEV_MODE", false), 'config_name' => env("YODLEE_CONFIG_NAME", false), ], + 'nordigen' => [ + 'client_id' => env('NORDIGEN_SECRET_ID', false), + 'client_secret' => env('NORDIGEN_SECRET_KEY', false), + 'test_mode' => env("NORDIGEN_TEST_MODE", false), + ], 'licenses' => env('LICENSES', false), 'google_application_credentials' => env("GOOGLE_APPLICATION_CREDENTIALS", false), 'shopify' => [