Skip to content
This repository was archived by the owner on Mar 20, 2025. It is now read-only.

Commit 1e9afea

Browse files
authored
Merge pull request #8 from elbgoods/ft-verifier-provider
add verifier provider
2 parents 278d496 + b77df5e commit 1e9afea

File tree

6 files changed

+80
-3
lines changed

6 files changed

+80
-3
lines changed

CHANGELOG.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@
22

33
All notable changes to this package will be documented in this file.
44

5+
## v0.4.0
6+
7+
* add https://verifier.meetchopra.com provider `\Elbgoods\TrashmailRule\Providers\VerifierProvider`
8+
59
## v0.3.0
610

711
* add https://disposable-email-detector.com provider `\Elbgoods\TrashmailRule\Providers\DisposableEmailDetectorProvider`
@@ -17,4 +21,4 @@ All notable changes to this package will be documented in this file.
1721

1822
## v0.1.0
1923

20-
* initial release
24+
* initial release

README.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,13 @@ You can add your own blacklist, these domains will always be blocked - independe
4141

4242
If you want to pass some domains always you can add them to the whitelist. These domains will always pass, even if they are listed in the blacklist.
4343

44+
# supported Providers
45+
46+
* local configuration - `\Elbgoods\TrashmailRule\Providers\ConfigProvider`
47+
* https://dead-letter.email - `\Elbgoods\TrashmailRule\Providers\DeadLetterProvider`
48+
* https://disposable-email-detector.com - `\Elbgoods\TrashmailRule\Providers\DisposableEmailDetectorProvider`
49+
* https://verifier.meetchopra.com - `\Elbgoods\TrashmailRule\Providers\VerifierProvider`
50+
4451
## Usage
4552

4653
## Validation Rule

config/trashmail.php

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,15 @@
1010
'providers' => [
1111
'config',
1212
'disposable_email_detector',
13+
'verifier',
1314
'dead_letter',
1415
],
1516

1617
/*
1718
* This package can load a remote blacklist from https://www.dead-letter.email
1819
*/
1920
'dead_letter' => [
20-
'enabled' => true,
21+
'enabled' => false,
2122
'cache' => [
2223
'enabled' => true,
2324
'store' => null,
@@ -33,7 +34,18 @@
3334
* This package can do a request to https://www.disposable-email-detector.com
3435
*/
3536
'disposable_email_detector' => [
36-
'enabled' => true,
37+
'enabled' => false,
38+
'guzzle' => [
39+
RequestOptions::TIMEOUT => 5,
40+
],
41+
],
42+
43+
/*
44+
* This package can do a request to https://verifier.meetchopra.com
45+
*/
46+
'verifier' => [
47+
'enabled' => false,
48+
'api_key' => null,
3749
'guzzle' => [
3850
RequestOptions::TIMEOUT => 5,
3951
],

src/Providers/VerifierProvider.php

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
<?php
2+
3+
namespace Elbgoods\TrashmailRule\Providers;
4+
5+
use Elbgoods\TrashmailRule\Contracts\ProviderContract;
6+
7+
class VerifierProvider implements ProviderContract
8+
{
9+
protected const BASE_URL = 'https://verifier.meetchopra.com/verify/';
10+
11+
protected array $config;
12+
13+
public function __construct(array $config)
14+
{
15+
$this->config = $config;
16+
}
17+
18+
public function isDisposable(string $domain): ?bool
19+
{
20+
if (! $this->config['enabled']) {
21+
return null;
22+
}
23+
24+
if (empty($this->config['api_key'])) {
25+
return null;
26+
}
27+
28+
$response = guzzle(
29+
self::BASE_URL,
30+
$this->config['guzzle']
31+
)->request('GET', $domain, [
32+
'query' => [
33+
'token' => $this->config['api_key'],
34+
],
35+
]);
36+
37+
$body = $response->getBody()->getContents();
38+
39+
return (! json_decode($body, true)['status']) ?? null;
40+
}
41+
}

src/TrashmailManager.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
use Elbgoods\TrashmailRule\Providers\ConfigProvider;
77
use Elbgoods\TrashmailRule\Providers\DeadLetterProvider;
88
use Elbgoods\TrashmailRule\Providers\DisposableEmailDetectorProvider;
9+
use Elbgoods\TrashmailRule\Providers\VerifierProvider;
910
use Illuminate\Support\Manager;
1011
use RuntimeException;
1112

@@ -56,4 +57,11 @@ protected function createDisposableEmailDetectorDriver(): DisposableEmailDetecto
5657
'config' => $this->config->get('trashmail.disposable_email_detector'),
5758
]);
5859
}
60+
61+
protected function createVerifierDriver(): VerifierProvider
62+
{
63+
return $this->container->make(VerifierProvider::class, [
64+
'config' => $this->config->get('trashmail.verifier'),
65+
]);
66+
}
5967
}

tests/Rules/TrashmailRuleTest.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@ final class TrashmailRuleTest extends TestCase
1111
/** @test */
1212
public function it_validates_the_email_domain(): void
1313
{
14+
$this->app['config']->set('trashmail.disposable_email_detector.enabled', true);
15+
$this->app['config']->set('trashmail.dead_letter.enabled', true);
16+
1417
$rule = new TrashmailRule();
1518

1619
$this->assertFalse($rule->passes('email', 'example@fakeinbox.com'));
@@ -23,6 +26,8 @@ public function it_validates_the_email_domain(): void
2326
*/
2427
public function it_fails_known_trashmail_providers(string $domain): void
2528
{
29+
$this->app['config']->set('trashmail.disposable_email_detector.enabled', true);
30+
$this->app['config']->set('trashmail.dead_letter.enabled', true);
2631
$this->app['config']->set('trashmail.blacklist', $this->trashMailDomains());
2732

2833
$rule = new TrashmailRule();

0 commit comments

Comments
 (0)