Merge pull request #9015 from turbo124/v5-develop

Verification domains
This commit is contained in:
David Bomba 2023-12-03 22:27:33 +11:00 committed by GitHub
commit 54de9d6c07
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 59501 additions and 52 deletions

59398
app/DataProviders/Domains.php Normal file

File diff suppressed because it is too large Load Diff

View File

@ -11,24 +11,25 @@
namespace App\Jobs\Account; namespace App\Jobs\Account;
use App\DataMapper\Analytics\AccountCreated as AnalyticsAccountCreated; use App\Utils\Ninja;
use App\DataMapper\Analytics\AccountPlatform; use App\Models\Account;
use App\Events\Account\AccountCreated; use Illuminate\Support\Str;
use App\Jobs\User\CreateUser;
use App\DataProviders\Domains;
use App\Jobs\Util\VersionCheck;
use App\Jobs\Mail\NinjaMailerJob;
use App\Jobs\Company\CreateCompany; use App\Jobs\Company\CreateCompany;
use Illuminate\Support\Facades\App;
use App\Jobs\Mail\NinjaMailerObject;
use App\Utils\Traits\User\LoginCache;
use App\Events\Account\AccountCreated;
use Turbo124\Beacon\Facades\LightLogs;
use App\Jobs\Company\CreateCompanyToken;
use Illuminate\Foundation\Bus\Dispatchable;
use App\DataMapper\Analytics\AccountPlatform;
use App\Jobs\Company\CreateCompanyPaymentTerms; use App\Jobs\Company\CreateCompanyPaymentTerms;
use App\Jobs\Company\CreateCompanyTaskStatuses; use App\Jobs\Company\CreateCompanyTaskStatuses;
use App\Jobs\Company\CreateCompanyToken; use App\DataMapper\Analytics\AccountCreated as AnalyticsAccountCreated;
use App\Jobs\Mail\NinjaMailerJob;
use App\Jobs\Mail\NinjaMailerObject;
use App\Jobs\User\CreateUser;
use App\Jobs\Util\VersionCheck;
use App\Models\Account;
use App\Utils\Ninja;
use App\Utils\Traits\User\LoginCache;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Support\Facades\App;
use Illuminate\Support\Str;
use Turbo124\Beacon\Facades\LightLogs;
class CreateAccount class CreateAccount
{ {
@ -39,6 +40,8 @@ class CreateAccount
protected $client_ip; protected $client_ip;
public function __construct(array $sp660339, $client_ip) public function __construct(array $sp660339, $client_ip)
{ {
$this->request = $sp660339; $this->request = $sp660339;
@ -77,7 +80,7 @@ class CreateAccount
$sp794f3f->hosted_company_count = config('ninja.quotas.free.max_companies'); $sp794f3f->hosted_company_count = config('ninja.quotas.free.max_companies');
$sp794f3f->account_sms_verified = true; $sp794f3f->account_sms_verified = true;
if (in_array($this->getDomain($this->request['email']), ['mailto.plus', 'givmail.com','yopmail.com','gmail.com', 'hotmail.com', 'outlook.com', 'yahoo.com', 'aol.com', 'mail.ru','brand-app.biz','proton.me','ema-sofia.eu', 'mail.com', 'fastmail.com'])) { if (in_array($this->getDomain($this->request['email']), Domains::getDomains())) {
$sp794f3f->account_sms_verified = false; $sp794f3f->account_sms_verified = false;
} }
@ -166,4 +169,8 @@ class CreateAccount
return 'gmail.com'; return 'gmail.com';
} }
} }

View File

@ -11,15 +11,16 @@
namespace App\Listeners\Mail; namespace App\Listeners\Mail;
use App\Utils\Ninja;
use App\Models\Webhook;
use App\Libraries\MultiDB; use App\Libraries\MultiDB;
use App\Models\QuoteInvitation;
use App\Models\CreditInvitation; use App\Models\CreditInvitation;
use App\Models\InvoiceInvitation; use App\Models\InvoiceInvitation;
use App\Models\PurchaseOrderInvitation; use App\Models\PurchaseOrderInvitation;
use App\Models\QuoteInvitation;
use App\Models\RecurringInvoiceInvitation;
use App\Utils\Ninja;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Events\MessageSent; use Illuminate\Mail\Events\MessageSent;
use App\Models\RecurringInvoiceInvitation;
use Illuminate\Contracts\Queue\ShouldQueue;
use Symfony\Component\Mime\MessageConverter; use Symfony\Component\Mime\MessageConverter;
class MailSentListener implements ShouldQueue class MailSentListener implements ShouldQueue
@ -41,30 +42,31 @@ class MailSentListener implements ShouldQueue
*/ */
public function handle(MessageSent $event) public function handle(MessageSent $event)
{ {
if (!Ninja::isHosted()) { try {
return; $message_id = $event->sent->getMessageId();
}
$message_id = $event->sent->getMessageId();
$message = MessageConverter::toEmail($event->sent->getOriginalMessage()); $message = MessageConverter::toEmail($event->sent->getOriginalMessage());
if (!$message->getHeaders()->get('x-invitation')) { if (!$message->getHeaders()->get('x-invitation')) {
return;
}
$invitation_key = $message->getHeaders()->get('x-invitation')->getValue();
if ($message_id && $invitation_key) {
$invitation = $this->discoverInvitation($invitation_key);
if (!$invitation) {
return; return;
} }
$invitation->message_id = $message_id; $invitation_key = $message->getHeaders()->get('x-invitation')->getValue();
$invitation->save();
if ($message_id && $invitation_key) {
$invitation = $this->discoverInvitation($invitation_key);
if (!$invitation) {
return;
}
$invitation->message_id = $message_id;
$invitation->save();
}
} catch (\Exception $e) {
nlog("Mail Sent Listener Exception");
nlog($e->getMessage());
} }
} }
@ -74,14 +76,18 @@ class MailSentListener implements ShouldQueue
foreach (MultiDB::$dbs as $db) { foreach (MultiDB::$dbs as $db) {
if ($invitation = InvoiceInvitation::on($db)->where('key', $key)->first()) { if ($invitation = InvoiceInvitation::on($db)->where('key', $key)->first()) {
$invitation->invoice->sendEvent(Webhook::EVENT_SENT_INVOICE, "client");
return $invitation; return $invitation;
} elseif ($invitation = QuoteInvitation::on($db)->where('key', $key)->first()) { } elseif ($invitation = QuoteInvitation::on($db)->where('key', $key)->first()) {
$invitation->quote->sendEvent(Webhook::EVENT_SENT_QUOTE, "client");
return $invitation; return $invitation;
} elseif ($invitation = RecurringInvoiceInvitation::on($db)->where('key', $key)->first()) { } elseif ($invitation = RecurringInvoiceInvitation::on($db)->where('key', $key)->first()) {
return $invitation; return $invitation;
} elseif ($invitation = CreditInvitation::on($db)->where('key', $key)->first()) { } elseif ($invitation = CreditInvitation::on($db)->where('key', $key)->first()) {
$invitation->credit->sendEvent(Webhook::EVENT_SENT_CREDIT, "client");
return $invitation; return $invitation;
} elseif ($invitation = PurchaseOrderInvitation::on($db)->where('key', $key)->first()) { } elseif ($invitation = PurchaseOrderInvitation::on($db)->where('key', $key)->first()) {
$invitation->purchase_order->sendEvent(Webhook::EVENT_SENT_PURCHASE_ORDER, "vendor");
return $invitation; return $invitation;
} }
} }

View File

@ -11,31 +11,33 @@
namespace Tests\Integration; namespace Tests\Integration;
use App\DataMapper\CompanySettings; use Tests\TestCase;
use App\DataMapper\InvoiceItem; use App\Models\User;
use App\Factory\CompanyUserFactory;
use App\Jobs\Ledger\UpdateLedger;
use App\Models\Account;
use App\Models\Client; use App\Models\Client;
use App\Models\ClientContact; use App\Models\Account;
use App\Models\Company; use App\Models\Company;
use App\Models\CompanyLedger;
use App\Models\CompanyToken;
use App\Models\Invoice; use App\Models\Invoice;
use App\Models\Payment; use App\Models\Payment;
use App\Models\User; use App\Models\CompanyToken;
use App\Models\ClientContact;
use App\Models\CompanyLedger;
use App\Utils\Traits\AppSetup;
use App\DataMapper\InvoiceItem;
use App\Utils\Traits\MakesHash; use App\Utils\Traits\MakesHash;
use Illuminate\Foundation\Testing\DatabaseTransactions; use App\Jobs\Ledger\UpdateLedger;
use App\DataMapper\CompanySettings;
use App\Factory\CompanyUserFactory;
use Illuminate\Support\Facades\Hash; use Illuminate\Support\Facades\Hash;
use Illuminate\Validation\ValidationException; use Illuminate\Validation\ValidationException;
use Tests\TestCase; use Illuminate\Foundation\Testing\DatabaseTransactions;
/** @test*/ /** @test*/
class CompanyLedgerTest extends TestCase class CompanyLedgerTest extends TestCase
{ {
use DatabaseTransactions; use DatabaseTransactions;
use MakesHash; use MakesHash;
use AppSetup;
public $company; public $company;
public $client; public $client;
@ -55,7 +57,8 @@ class CompanyLedgerTest extends TestCase
$this->withoutExceptionHandling(); $this->withoutExceptionHandling();
$this->artisan('db:seed --force'); $this->artisan('db:seed --force');
$this->buildCache(true);
$this->faker = \Faker\Factory::create(); $this->faker = \Faker\Factory::create();
$fake_email = $this->faker->email(); $fake_email = $this->faker->email();

View File

@ -0,0 +1,35 @@
<?php
/**
* Invoice Ninja (https://invoiceninja.com).
*
* @link https://github.com/invoiceninja/invoiceninja source repository
*
* @copyright Copyright (c) 2021. Invoice Ninja LLC (https://invoiceninja.com)
*
* @license https://www.elastic.co/licensing/elastic-license
*/
namespace Tests\Unit;
use App\DataProviders\Domains;
use Tests\TestCase;
/**
* @test
*/
class DomainCheckTest extends TestCase
{
protected function setUp() :void
{
parent::setUp();
}
public function testDomainCheck()
{
$this->assertTrue(in_array('yopmail.com', Domains::getDomains()));
$this->assertFalse(in_array('invoiceninja.com', Domains::getDomains()));
}
}