/
Validator.php
89 lines (73 loc) · 2.11 KB
/
Validator.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
<?php
namespace Alariva\EmailDomainBlacklist;
use Alariva\EmailDomainBlacklist\Updater;
use Illuminate\Support\Facades\Artisan;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Str;
class Validator
{
/**
* Array of blacklisted domains.
**/
private $domains = [];
/**
* Retrieve latest selection of blacklisted domains and cache them.
*
* @param none.
*
* @return void.
**/
public function refresh()
{
$this->shouldUpdate();
// Retrieve blacklisted domains from the cache
$this->domains = Cache::get(config('validation.email.blacklist.cache-key'), []);
$this->appendCustomDomains();
}
protected function shouldUpdate()
{
$autoupdate = config('validation.email.blacklist.auto-update');
if ($autoupdate && !Cache::has(config('validation.email.blacklist.cache-key'))) {
Updater::update();
}
}
protected function appendCustomDomains()
{
$appendList = config('validation.email.blacklist.append');
if ($appendList === null) {
return;
}
$appendDomains = explode('|', strtolower($appendList));
$this->domains = array_merge($this->domains, $appendDomains);
}
/**
* Generate the error message on validation failure.
*
* @param string $message.
* @param string $attribute.
* @param string $rule.
* @param array $parameters.
*
* @return string.
**/
public function message($message, $attribute, $rule, $parameters)
{
// Provide custom error message
return __('The domain for :attribute is not allowed. Please use another email address.', ['attribute' => $attribute]);
}
/**
* Execute the validation routine.
*
* @param string $attribute.
* @param string $value.
* @param array $parameters.
*
* @return bool.
**/
public function validate($attribute, $value, $parameters)
{
$this->refresh();
$domain = Str::after(strtolower($value), '@');
return !in_array($domain, $this->domains);
}
}