diff --git a/app/Http/Controllers/ConnectedAccountController.php b/app/Http/Controllers/ConnectedAccountController.php index 9fc1376cff49..c588d58a9020 100644 --- a/app/Http/Controllers/ConnectedAccountController.php +++ b/app/Http/Controllers/ConnectedAccountController.php @@ -169,13 +169,16 @@ class ConnectedAccountController extends BaseController 'email_verified_at' => now(), ]; - auth()->user()->update($connected_account); - auth()->user()->email_verified_at = now(); - auth()->user()->save(); + /** @var \App\Models\User $logged_in_user */ + $logged_in_user = auth()->user(); - $this->setLoginCache(auth()->user()); + $logged_in_user->update($connected_account); + $logged_in_user->email_verified_at = now(); + $logged_in_user->save(); - return $this->itemResponse(auth()->user()); + $this->setLoginCache($logged_in_user); + + return $this->itemResponse($logged_in_user); } return response() @@ -214,20 +217,22 @@ class ConnectedAccountController extends BaseController // 'email_verified_at' =>now(), ]; - if (auth()->user()->email != $google->harvestEmail($user)) { + /** @var \App\Models\User $logged_in_user */ + $logged_in_user = auth()->user(); + + if ($logged_in_user->email != $google->harvestEmail($user)) { return response()->json(['message' => 'Primary Email differs to OAuth email. Emails must match.'], 400); } - auth()->user()->update($connected_account); - auth()->user()->email_verified_at = now(); - auth()->user()->oauth_user_token = $token; - auth()->user()->oauth_user_refresh_token = $refresh_token; + $logged_in_user->update($connected_account); + $logged_in_user->email_verified_at = now(); + $logged_in_user->oauth_user_token = $token; + $logged_in_user->oauth_user_refresh_token = $refresh_token; + $logged_in_user->save(); - auth()->user()->save(); + $this->activateGmail($logged_in_user); - $this->activateGmail(auth()->user()); - - return $this->itemResponse(auth()->user()); + return $this->itemResponse($logged_in_user); } return response() diff --git a/app/Http/Controllers/SmtpController.php b/app/Http/Controllers/SmtpController.php new file mode 100644 index 000000000000..2b800fb96d4d --- /dev/null +++ b/app/Http/Controllers/SmtpController.php @@ -0,0 +1,63 @@ +user(); + $company = $user->company(); + + + + config([ + 'mail.mailers.smtp' => [ + 'transport' => 'smtp', + 'host' => $request->input('smtp_host', $company->smtp_host), + 'port' => $request->input('smtp_port', $company->smtp_port), + 'username' => $request->input('smtp_username', $company->smtp_username), + 'password' => $request->input('smtp_password', $company->smtp_password), + 'encryption' => $request->input('smtp_encryption', $company->smtp_encryption ?? 'tls'), + 'local_domain' => $request->input('smtp_local_domain', strlen($company->smtp_local_domain) > 2 ? $company->smtp_local_domain : null), + 'verify_peer' => $request->input('verify_peer', $company->smtp_verify_peer ?? true), + 'timeout' => 5, + ], + ]); + + (new \Illuminate\Mail\MailServiceProvider(app()))->register(); + + try { + Mail::to($user->email, $user->present()->name())->send(new TestMailServer('Email Server Works!', strlen($company->settings->custom_sending_email) > 1 ? $company->settings->custom_sending_email : $user->email)); + } catch (\Exception $e) { + app('mail.manager')->forgetMailers(); + return response()->json(['message' => $e->getMessage()], 400); + } + + app('mail.manager')->forgetMailers(); + + return response()->json(['message' => 'Ok'], 200); + + } + +} \ No newline at end of file diff --git a/app/Http/Requests/Company/UpdateCompanyRequest.php b/app/Http/Requests/Company/UpdateCompanyRequest.php index 5b716aacf21c..0482fa0aadb5 100644 --- a/app/Http/Requests/Company/UpdateCompanyRequest.php +++ b/app/Http/Requests/Company/UpdateCompanyRequest.php @@ -60,8 +60,8 @@ class UpdateCompanyRequest extends Request $rules['smtp_host'] = 'sometimes|string'; $rules['smtp_port'] = 'sometimes|string'; - $rules['smtp_encryption'] = 'sometimes|string'; - $rules['smtp_local_domain'] = 'sometimes|string'; + $rules['smtp_encryption'] = 'sometimes|string|nullable'; + $rules['smtp_local_domain'] = 'sometimes|string|nullable'; // $rules['smtp_verify_peer'] = 'sometimes|string'; diff --git a/app/Models/Company.php b/app/Models/Company.php index 4e0ba74eea52..f9bd44bd630d 100644 --- a/app/Models/Company.php +++ b/app/Models/Company.php @@ -112,13 +112,13 @@ use Laracasts\Presenter\PresentableTrait; * @property int $notify_vendor_when_paid * @property int $invoice_task_hours * @property int $deleted_at - * @property string smtp_username - * @property string smtp_password - * @property string smtp_host - * @property string smtp_port - * @property string smtp_encryption - * @property string smtp_local_domain - * @property boolean smtp_verify_peer + * @property string $smtp_username + * @property string $smtp_password + * @property string $smtp_host + * @property string $smtp_port + * @property string $smtp_encryption + * @property string $smtp_local_domain + * @property boolean $smtp_verify_peer * @property-read \App\Models\Account $account * @property-read \Illuminate\Database\Eloquent\Collection $activities * @property-read int|null $activities_count diff --git a/routes/api.php b/routes/api.php index 904885c59174..311360ae66d8 100644 --- a/routes/api.php +++ b/routes/api.php @@ -10,113 +10,114 @@ | is assigned the "api" middleware group. Enjoy building your API! | */ -use App\Http\Controllers\AccountController; -use App\Http\Controllers\ActivityController; -use App\Http\Controllers\Auth\ForgotPasswordController; -use App\Http\Controllers\Auth\LoginController; -use App\Http\Controllers\Auth\PasswordTimeoutController; -use App\Http\Controllers\Bank\NordigenController; -use App\Http\Controllers\Bank\YodleeController; -use App\Http\Controllers\BankIntegrationController; -use App\Http\Controllers\BankTransactionController; -use App\Http\Controllers\BankTransactionRuleController; +use Illuminate\Support\Facades\Route; use App\Http\Controllers\BaseController; +use App\Http\Controllers\PingController; +use App\Http\Controllers\SmtpController; +use App\Http\Controllers\TaskController; +use App\Http\Controllers\UserController; use App\Http\Controllers\ChartController; +use App\Http\Controllers\EmailController; +use App\Http\Controllers\QuoteController; +use App\Http\Controllers\TokenController; use App\Http\Controllers\ClientController; -use App\Http\Controllers\ClientGatewayTokenController; -use App\Http\Controllers\ClientStatementController; -use App\Http\Controllers\CompanyController; -use App\Http\Controllers\CompanyGatewayController; -use App\Http\Controllers\CompanyLedgerController; -use App\Http\Controllers\CompanyUserController; -use App\Http\Controllers\ConnectedAccountController; use App\Http\Controllers\CreditController; use App\Http\Controllers\DesignController; -use App\Http\Controllers\DocumentController; -use App\Http\Controllers\EmailController; -use App\Http\Controllers\EmailHistoryController; -use App\Http\Controllers\ExpenseCategoryController; -use App\Http\Controllers\ExpenseController; use App\Http\Controllers\ExportController; use App\Http\Controllers\FilterController; -use App\Http\Controllers\GroupSettingController; -use App\Http\Controllers\HostedMigrationController; use App\Http\Controllers\ImportController; -use App\Http\Controllers\ImportJsonController; -use App\Http\Controllers\InAppPurchase\AppleController; +use App\Http\Controllers\LogoutController; +use App\Http\Controllers\SearchController; +use App\Http\Controllers\StaticController; +use App\Http\Controllers\StripeController; +use App\Http\Controllers\TwilioController; +use App\Http\Controllers\VendorController; +use App\Http\Controllers\AccountController; +use App\Http\Controllers\CompanyController; +use App\Http\Controllers\ExpenseController; use App\Http\Controllers\InvoiceController; use App\Http\Controllers\LicenseController; -use App\Http\Controllers\LogoutController; -use App\Http\Controllers\MailgunWebhookController; -use App\Http\Controllers\MigrationController; -use App\Http\Controllers\OneTimeTokenController; use App\Http\Controllers\PaymentController; -use App\Http\Controllers\PaymentNotificationWebhookController; -use App\Http\Controllers\PaymentTermController; -use App\Http\Controllers\PaymentWebhookController; -use App\Http\Controllers\PingController; -use App\Http\Controllers\PostMarkController; use App\Http\Controllers\PreviewController; -use App\Http\Controllers\PreviewPurchaseOrderController; use App\Http\Controllers\ProductController; use App\Http\Controllers\ProjectController; -use App\Http\Controllers\ProtectedDownloadController; +use App\Http\Controllers\TaxRateController; +use App\Http\Controllers\WebCronController; +use App\Http\Controllers\WebhookController; +use App\Http\Controllers\ActivityController; +use App\Http\Controllers\DocumentController; +use App\Http\Controllers\PostMarkController; +use App\Http\Controllers\TemplateController; +use App\Http\Controllers\MigrationController; +use App\Http\Controllers\SchedulerController; +use App\Http\Controllers\SubdomainController; +use App\Http\Controllers\SystemLogController; +use App\Http\Controllers\TwoFactorController; +use App\Http\Controllers\Auth\LoginController; +use App\Http\Controllers\ImportJsonController; +use App\Http\Controllers\SelfUpdateController; +use App\Http\Controllers\TaskStatusController; +use App\Http\Controllers\Bank\YodleeController; +use App\Http\Controllers\CompanyUserController; +use App\Http\Controllers\PaymentTermController; +use App\PaymentDrivers\PayPalPPCPPaymentDriver; +use App\Http\Controllers\EmailHistoryController; +use App\Http\Controllers\GroupSettingController; +use App\Http\Controllers\OneTimeTokenController; +use App\Http\Controllers\SubscriptionController; +use App\Http\Controllers\Bank\NordigenController; +use App\Http\Controllers\CompanyLedgerController; use App\Http\Controllers\PurchaseOrderController; -use App\Http\Controllers\QuoteController; +use App\Http\Controllers\TaskSchedulerController; +use App\Http\Controllers\CompanyGatewayController; +use App\Http\Controllers\MailgunWebhookController; +use App\Http\Controllers\PaymentWebhookController; +use App\Http\Controllers\RecurringQuoteController; +use App\Http\Controllers\BankIntegrationController; +use App\Http\Controllers\BankTransactionController; +use App\Http\Controllers\ClientStatementController; +use App\Http\Controllers\ExpenseCategoryController; +use App\Http\Controllers\HostedMigrationController; +use App\Http\Controllers\TemplatePreviewController; +use App\Http\Controllers\ConnectedAccountController; use App\Http\Controllers\RecurringExpenseController; use App\Http\Controllers\RecurringInvoiceController; -use App\Http\Controllers\RecurringQuoteController; -use App\Http\Controllers\Reports\ActivityReportController; -use App\Http\Controllers\Reports\ARDetailReportController; -use App\Http\Controllers\Reports\ARSummaryReportController; -use App\Http\Controllers\Reports\ClientBalanceReportController; -use App\Http\Controllers\Reports\ClientContactReportController; +use App\Http\Controllers\ProtectedDownloadController; +use App\Http\Controllers\ClientGatewayTokenController; +use App\Http\Controllers\Reports\TaskReportController; +use App\Http\Controllers\Auth\ForgotPasswordController; +use App\Http\Controllers\BankTransactionRuleController; +use App\Http\Controllers\InAppPurchase\AppleController; +use App\Http\Controllers\Reports\QuoteReportController; +use App\Http\Controllers\Auth\PasswordTimeoutController; +use App\Http\Controllers\PreviewPurchaseOrderController; use App\Http\Controllers\Reports\ClientReportController; -use App\Http\Controllers\Reports\ClientSalesReportController; use App\Http\Controllers\Reports\CreditReportController; -use App\Http\Controllers\Reports\DocumentReportController; +use App\Http\Controllers\Reports\ReportExportController; +use App\Http\Controllers\Reports\VendorReportController; use App\Http\Controllers\Reports\ExpenseReportController; -use App\Http\Controllers\Reports\InvoiceItemReportController; use App\Http\Controllers\Reports\InvoiceReportController; use App\Http\Controllers\Reports\PaymentReportController; use App\Http\Controllers\Reports\ProductReportController; -use App\Http\Controllers\Reports\ProductSalesReportController; use App\Http\Controllers\Reports\ProfitAndLossController; -use App\Http\Controllers\Reports\PurchaseOrderItemReportController; -use App\Http\Controllers\Reports\PurchaseOrderReportController; -use App\Http\Controllers\Reports\QuoteItemReportController; -use App\Http\Controllers\Reports\QuoteReportController; -use App\Http\Controllers\Reports\RecurringInvoiceReportController; -use App\Http\Controllers\Reports\ReportExportController; use App\Http\Controllers\Reports\ReportPreviewController; -use App\Http\Controllers\Reports\TaskReportController; -use App\Http\Controllers\Reports\TaxSummaryReportController; +use App\Http\Controllers\Reports\ActivityReportController; +use App\Http\Controllers\Reports\ARDetailReportController; +use App\Http\Controllers\Reports\DocumentReportController; +use App\Http\Controllers\Reports\ARSummaryReportController; +use App\Http\Controllers\Reports\QuoteItemReportController; use App\Http\Controllers\Reports\UserSalesReportController; -use App\Http\Controllers\Reports\VendorReportController; -use App\Http\Controllers\SchedulerController; -use App\Http\Controllers\SearchController; -use App\Http\Controllers\SelfUpdateController; -use App\Http\Controllers\StaticController; -use App\Http\Controllers\StripeController; -use App\Http\Controllers\SubdomainController; -use App\Http\Controllers\SubscriptionController; +use App\Http\Controllers\Reports\TaxSummaryReportController; use App\Http\Controllers\Support\Messages\SendingController; -use App\Http\Controllers\SystemLogController; -use App\Http\Controllers\TaskController; -use App\Http\Controllers\TaskSchedulerController; -use App\Http\Controllers\TaskStatusController; -use App\Http\Controllers\TaxRateController; -use App\Http\Controllers\TemplateController; -use App\Http\Controllers\TemplatePreviewController; -use App\Http\Controllers\TokenController; -use App\Http\Controllers\TwilioController; -use App\Http\Controllers\TwoFactorController; -use App\Http\Controllers\UserController; -use App\Http\Controllers\VendorController; -use App\Http\Controllers\WebCronController; -use App\Http\Controllers\WebhookController; -use App\PaymentDrivers\PayPalPPCPPaymentDriver; -use Illuminate\Support\Facades\Route; +use App\Http\Controllers\Reports\ClientSalesReportController; +use App\Http\Controllers\Reports\InvoiceItemReportController; +use App\Http\Controllers\PaymentNotificationWebhookController; +use App\Http\Controllers\Reports\ProductSalesReportController; +use App\Http\Controllers\Reports\ClientBalanceReportController; +use App\Http\Controllers\Reports\ClientContactReportController; +use App\Http\Controllers\Reports\PurchaseOrderReportController; +use App\Http\Controllers\Reports\RecurringInvoiceReportController; +use App\Http\Controllers\Reports\PurchaseOrderItemReportController; Route::group(['middleware' => ['throttle:api', 'api_secret_check']], function () { Route::post('api/v1/signup', [AccountController::class, 'store'])->name('signup.submit'); @@ -392,6 +393,8 @@ Route::group(['middleware' => ['throttle:api', 'api_db', 'token_auth', 'locale'] // Route::post('hooks', [SubscriptionController::class, 'subscribe'])->name('hooks.subscribe'); // Route::delete('hooks/{subscription_id}', [SubscriptionController::class, 'unsubscribe'])->name('hooks.unsubscribe'); + Route::post('smtp/check', [SmtpController::class, 'check'])->name('smtp.check')->middleware('throttle:10,1'); + Route::post('stripe/update_payment_methods', [StripeController::class, 'update'])->middleware('password_protected')->name('stripe.update'); Route::post('stripe/import_customers', [StripeController::class, 'import'])->middleware('password_protected')->name('stripe.import');