From a38dcbdd8761ca54f92015075409ff3605caad15 Mon Sep 17 00:00:00 2001 From: = Date: Sat, 17 Jul 2021 15:58:37 +1000 Subject: [PATCH 1/4] Streamline Hosted Migrations --- .../Controllers/HostedMigrationController.php | 52 +++++++++++++++++++ .../Requests/Account/CreateAccountRequest.php | 3 +- app/Jobs/Util/Import.php | 6 +++ routes/api.php | 2 + 4 files changed, 62 insertions(+), 1 deletion(-) create mode 100644 app/Http/Controllers/HostedMigrationController.php diff --git a/app/Http/Controllers/HostedMigrationController.php b/app/Http/Controllers/HostedMigrationController.php new file mode 100644 index 000000000000..bf967433ef8f --- /dev/null +++ b/app/Http/Controllers/HostedMigrationController.php @@ -0,0 +1,52 @@ +header('X-API-HOSTED-SECRET') != config('ninja.ninja_hosted_secret')) + return; + + if($user = MultiDB::hasUser(['email' => $request->input('email')])) + { + + if($user->account->owner() && $user->account->companies()->count() >= 1) + { + return response()->json(['token' => $user->account->companies->first()->tokens->first()->token] ,200); + } + + + return response()->json(['error' => 'This user is not able to perform a migration. Please contact us at contact@invoiceninja.com to discuss.'], 401) + + } + + $account = CreateAccount::dispatchNow($request->all(), $request->getClientIp()); + + $company = $account->companies->first(); + + $company_token = CompanyToken::where('user_id', auth()->user()->id) + ->where('company_id', $company->id) + ->first(); + + return response()->json(['token' => $company_token->token], 200); + + } + +} \ No newline at end of file diff --git a/app/Http/Requests/Account/CreateAccountRequest.php b/app/Http/Requests/Account/CreateAccountRequest.php index d8c05b70e3e5..eb8f8724a2d0 100644 --- a/app/Http/Requests/Account/CreateAccountRequest.php +++ b/app/Http/Requests/Account/CreateAccountRequest.php @@ -46,7 +46,8 @@ class CreateAccountRequest extends Request } protected function prepareForValidation() - {nlog($this->all()); + { + $input = $this->all(); $input['user_agent'] = request()->server('HTTP_USER_AGENT'); diff --git a/app/Jobs/Util/Import.php b/app/Jobs/Util/Import.php index 43a0e525a5ac..ba3b1e9654eb 100644 --- a/app/Jobs/Util/Import.php +++ b/app/Jobs/Util/Import.php @@ -319,6 +319,12 @@ class Import implements ShouldQueue $account = $this->company->account; $account->fill($data); $account->save(); + + //Prevent hosted users being pushed into a trial + if(Ninja::isHosted() && $account->plan != ''){ + $account->trial_plan = ''; + $account->save(); + } } /** diff --git a/routes/api.php b/routes/api.php index 18e97cf40517..2dba96ccc669 100644 --- a/routes/api.php +++ b/routes/api.php @@ -206,4 +206,6 @@ Route::post('api/v1/postmark_webhook', 'PostMarkController@webhook'); Route::get('token_hash_router', 'OneTimeTokenController@router'); Route::get('webcron', 'WebCronController@index'); +Route::post('api/v1/get_migration_account', 'HostedMigration@getAccount'); + Route::fallback('BaseController@notFound'); From 8554c6cceb6788a88211c6a79d34014a3057fee3 Mon Sep 17 00:00:00 2001 From: David Bomba Date: Sat, 17 Jul 2021 17:38:59 +1000 Subject: [PATCH 2/4] Working on improving hosted migration experience --- app/Http/Controllers/HostedMigrationController.php | 4 ++-- app/Jobs/User/CreateUser.php | 2 +- routes/api.php | 3 +-- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/app/Http/Controllers/HostedMigrationController.php b/app/Http/Controllers/HostedMigrationController.php index bf967433ef8f..7415dca2395b 100644 --- a/app/Http/Controllers/HostedMigrationController.php +++ b/app/Http/Controllers/HostedMigrationController.php @@ -21,6 +21,7 @@ class HostedMigrationController extends Controller public function getAccount(Request $request) { + if($request->header('X-API-HOSTED-SECRET') != config('ninja.ninja_hosted_secret')) return; @@ -32,8 +33,7 @@ class HostedMigrationController extends Controller return response()->json(['token' => $user->account->companies->first()->tokens->first()->token] ,200); } - - return response()->json(['error' => 'This user is not able to perform a migration. Please contact us at contact@invoiceninja.com to discuss.'], 401) + return response()->json(['error' => 'This user is not able to perform a migration. Please contact us at contact@invoiceninja.com to discuss.'], 401); } diff --git a/app/Jobs/User/CreateUser.php b/app/Jobs/User/CreateUser.php index 0962eaf5d410..8b767762d56d 100644 --- a/app/Jobs/User/CreateUser.php +++ b/app/Jobs/User/CreateUser.php @@ -58,7 +58,7 @@ class CreateUser { $user = new User(); $user->account_id = $this->account->id; - $user->password = bcrypt($this->request['password']); + $user->password = $this->request['password'] ? bcrypt($this->request['password']) : ''; $user->accepted_terms_version = config('ninja.terms_version'); $user->confirmation_code = $this->createDbHash(config('database.default')); $user->fill($this->request); diff --git a/routes/api.php b/routes/api.php index 2dba96ccc669..ce068d9077cb 100644 --- a/routes/api.php +++ b/routes/api.php @@ -205,7 +205,6 @@ Route::match(['get', 'post'], 'payment_notification_webhook/{company_key}/{compa Route::post('api/v1/postmark_webhook', 'PostMarkController@webhook'); Route::get('token_hash_router', 'OneTimeTokenController@router'); Route::get('webcron', 'WebCronController@index'); - -Route::post('api/v1/get_migration_account', 'HostedMigration@getAccount'); +Route::post('api/v1/get_migration_account', 'HostedMigrationController@getAccount')->middleware('guest'); Route::fallback('BaseController@notFound'); From 3605b18d2a7aa435d8c30c5d10ed6e2c400681c8 Mon Sep 17 00:00:00 2001 From: David Bomba Date: Sat, 17 Jul 2021 18:59:06 +1000 Subject: [PATCH 3/4] Fixes for hosted experience --- app/Jobs/Util/Import.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Jobs/Util/Import.php b/app/Jobs/Util/Import.php index ba3b1e9654eb..bbee05114e8b 100644 --- a/app/Jobs/Util/Import.php +++ b/app/Jobs/Util/Import.php @@ -532,7 +532,7 @@ class Import implements ShouldQueue $user = $user_repository->save($modified, $this->fetchUser($resource['email']), true, true); $user->email_verified_at = now(); - $user->confirmation_code = ''; + // $user->confirmation_code = ''; if($modified['deleted_at']) $user->deleted_at = now(); From 0a77e571fe66f4372d465f32ac0fcfcc9a04196f Mon Sep 17 00:00:00 2001 From: David Bomba Date: Sat, 17 Jul 2021 20:36:51 +1000 Subject: [PATCH 4/4] Fixes for uses_inclusive_taxes --- app/Jobs/Util/Import.php | 7 +++++++ app/Models/Invoice.php | 1 + 2 files changed, 8 insertions(+) diff --git a/app/Jobs/Util/Import.php b/app/Jobs/Util/Import.php index bbee05114e8b..111212195505 100644 --- a/app/Jobs/Util/Import.php +++ b/app/Jobs/Util/Import.php @@ -430,6 +430,9 @@ class Import implements ShouldQueue private function transformCompanyData(array $data): array { + nlog("pre transformed"); + nlog($data['settings']); + $company_settings = CompanySettings::defaults(); if (array_key_exists('settings', $data)) { @@ -451,6 +454,9 @@ class Import implements ShouldQueue $data['settings'] = $company_settings; } + + nlog("transformed Settings"); + nlog($data['settings']); return $data; } @@ -566,6 +572,7 @@ class Import implements ShouldQueue $model_query = $model::where($column, $value) ->where('company_id', $this->company->id) + ->withTrashed() ->exists(); if($model_query) diff --git a/app/Models/Invoice.php b/app/Models/Invoice.php index 75c3e314a86f..34aa257d3129 100644 --- a/app/Models/Invoice.php +++ b/app/Models/Invoice.php @@ -93,6 +93,7 @@ class Invoice extends BaseModel 'exchange_rate', 'subscription_id', 'auto_bill_enabled', + 'uses_inclusive_taxes', ]; protected $casts = [