1
0
mirror of https://github.com/invoiceninja/invoiceninja.git synced 2024-09-20 08:21:34 +02:00

Add Smtp check route

This commit is contained in:
David Bomba 2024-02-16 13:38:22 +11:00
parent 726ba91368
commit 998dd1c16c
5 changed files with 174 additions and 103 deletions

View File

@ -169,13 +169,16 @@ class ConnectedAccountController extends BaseController
'email_verified_at' => now(), 'email_verified_at' => now(),
]; ];
auth()->user()->update($connected_account); /** @var \App\Models\User $logged_in_user */
auth()->user()->email_verified_at = now(); $logged_in_user = auth()->user();
auth()->user()->save();
$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() return response()
@ -214,20 +217,22 @@ class ConnectedAccountController extends BaseController
// 'email_verified_at' =>now(), // '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); return response()->json(['message' => 'Primary Email differs to OAuth email. Emails must match.'], 400);
} }
auth()->user()->update($connected_account); $logged_in_user->update($connected_account);
auth()->user()->email_verified_at = now(); $logged_in_user->email_verified_at = now();
auth()->user()->oauth_user_token = $token; $logged_in_user->oauth_user_token = $token;
auth()->user()->oauth_user_refresh_token = $refresh_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($logged_in_user);
return $this->itemResponse(auth()->user());
} }
return response() return response()

View File

@ -0,0 +1,63 @@
<?php
/**
* Invoice Ninja (https://invoiceninja.com).
*
* @link https://github.com/invoiceninja/invoiceninja source repository
*
* @copyright Copyright (c) 2023. Invoice Ninja LLC (https://invoiceninja.com)
*
* @license https://www.elastic.co/licensing/elastic-license
*/
namespace App\Http\Controllers;
use App\Mail\TestMailServer;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Mail;
class SmtpController extends BaseController
{
public function __construct()
{
parent::__construct();
}
public function check(Request $request)
{
/** @var \App\Models\User $user */
$user = auth()->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);
}
}

View File

@ -60,8 +60,8 @@ class UpdateCompanyRequest extends Request
$rules['smtp_host'] = 'sometimes|string'; $rules['smtp_host'] = 'sometimes|string';
$rules['smtp_port'] = 'sometimes|string'; $rules['smtp_port'] = 'sometimes|string';
$rules['smtp_encryption'] = 'sometimes|string'; $rules['smtp_encryption'] = 'sometimes|string|nullable';
$rules['smtp_local_domain'] = 'sometimes|string'; $rules['smtp_local_domain'] = 'sometimes|string|nullable';
// $rules['smtp_verify_peer'] = 'sometimes|string'; // $rules['smtp_verify_peer'] = 'sometimes|string';

View File

@ -112,13 +112,13 @@ use Laracasts\Presenter\PresentableTrait;
* @property int $notify_vendor_when_paid * @property int $notify_vendor_when_paid
* @property int $invoice_task_hours * @property int $invoice_task_hours
* @property int $deleted_at * @property int $deleted_at
* @property string smtp_username * @property string $smtp_username
* @property string smtp_password * @property string $smtp_password
* @property string smtp_host * @property string $smtp_host
* @property string smtp_port * @property string $smtp_port
* @property string smtp_encryption * @property string $smtp_encryption
* @property string smtp_local_domain * @property string $smtp_local_domain
* @property boolean smtp_verify_peer * @property boolean $smtp_verify_peer
* @property-read \App\Models\Account $account * @property-read \App\Models\Account $account
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Activity> $activities * @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Activity> $activities
* @property-read int|null $activities_count * @property-read int|null $activities_count

View File

@ -10,113 +10,114 @@
| is assigned the "api" middleware group. Enjoy building your API! | is assigned the "api" middleware group. Enjoy building your API!
| |
*/ */
use App\Http\Controllers\AccountController; use Illuminate\Support\Facades\Route;
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 App\Http\Controllers\BaseController; 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\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\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\CreditController;
use App\Http\Controllers\DesignController; 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\ExportController;
use App\Http\Controllers\FilterController; use App\Http\Controllers\FilterController;
use App\Http\Controllers\GroupSettingController;
use App\Http\Controllers\HostedMigrationController;
use App\Http\Controllers\ImportController; use App\Http\Controllers\ImportController;
use App\Http\Controllers\ImportJsonController; use App\Http\Controllers\LogoutController;
use App\Http\Controllers\InAppPurchase\AppleController; 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\InvoiceController;
use App\Http\Controllers\LicenseController; 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\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\PreviewController;
use App\Http\Controllers\PreviewPurchaseOrderController;
use App\Http\Controllers\ProductController; use App\Http\Controllers\ProductController;
use App\Http\Controllers\ProjectController; 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\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\RecurringExpenseController;
use App\Http\Controllers\RecurringInvoiceController; use App\Http\Controllers\RecurringInvoiceController;
use App\Http\Controllers\RecurringQuoteController; use App\Http\Controllers\ProtectedDownloadController;
use App\Http\Controllers\Reports\ActivityReportController; use App\Http\Controllers\ClientGatewayTokenController;
use App\Http\Controllers\Reports\ARDetailReportController; use App\Http\Controllers\Reports\TaskReportController;
use App\Http\Controllers\Reports\ARSummaryReportController; use App\Http\Controllers\Auth\ForgotPasswordController;
use App\Http\Controllers\Reports\ClientBalanceReportController; use App\Http\Controllers\BankTransactionRuleController;
use App\Http\Controllers\Reports\ClientContactReportController; 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\ClientReportController;
use App\Http\Controllers\Reports\ClientSalesReportController;
use App\Http\Controllers\Reports\CreditReportController; 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\ExpenseReportController;
use App\Http\Controllers\Reports\InvoiceItemReportController;
use App\Http\Controllers\Reports\InvoiceReportController; use App\Http\Controllers\Reports\InvoiceReportController;
use App\Http\Controllers\Reports\PaymentReportController; use App\Http\Controllers\Reports\PaymentReportController;
use App\Http\Controllers\Reports\ProductReportController; use App\Http\Controllers\Reports\ProductReportController;
use App\Http\Controllers\Reports\ProductSalesReportController;
use App\Http\Controllers\Reports\ProfitAndLossController; 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\ReportPreviewController;
use App\Http\Controllers\Reports\TaskReportController; use App\Http\Controllers\Reports\ActivityReportController;
use App\Http\Controllers\Reports\TaxSummaryReportController; 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\UserSalesReportController;
use App\Http\Controllers\Reports\VendorReportController; use App\Http\Controllers\Reports\TaxSummaryReportController;
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\Support\Messages\SendingController; use App\Http\Controllers\Support\Messages\SendingController;
use App\Http\Controllers\SystemLogController; use App\Http\Controllers\Reports\ClientSalesReportController;
use App\Http\Controllers\TaskController; use App\Http\Controllers\Reports\InvoiceItemReportController;
use App\Http\Controllers\TaskSchedulerController; use App\Http\Controllers\PaymentNotificationWebhookController;
use App\Http\Controllers\TaskStatusController; use App\Http\Controllers\Reports\ProductSalesReportController;
use App\Http\Controllers\TaxRateController; use App\Http\Controllers\Reports\ClientBalanceReportController;
use App\Http\Controllers\TemplateController; use App\Http\Controllers\Reports\ClientContactReportController;
use App\Http\Controllers\TemplatePreviewController; use App\Http\Controllers\Reports\PurchaseOrderReportController;
use App\Http\Controllers\TokenController; use App\Http\Controllers\Reports\RecurringInvoiceReportController;
use App\Http\Controllers\TwilioController; use App\Http\Controllers\Reports\PurchaseOrderItemReportController;
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;
Route::group(['middleware' => ['throttle:api', 'api_secret_check']], function () { Route::group(['middleware' => ['throttle:api', 'api_secret_check']], function () {
Route::post('api/v1/signup', [AccountController::class, 'store'])->name('signup.submit'); 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::post('hooks', [SubscriptionController::class, 'subscribe'])->name('hooks.subscribe');
// Route::delete('hooks/{subscription_id}', [SubscriptionController::class, 'unsubscribe'])->name('hooks.unsubscribe'); // 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/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'); Route::post('stripe/import_customers', [StripeController::class, 'import'])->middleware('password_protected')->name('stripe.import');