truemail 2.7.5 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.circleci/config.yml +1 -1
- data/.circleci/gemspec_latest +1 -1
- data/.codeclimate.yml +1 -1
- data/.reek.yml +1 -0
- data/CHANGELOG.md +31 -0
- data/README.md +69 -9
- data/lib/truemail/configuration.rb +5 -0
- data/lib/truemail/core.rb +2 -1
- data/lib/truemail/log/serializer/base.rb +4 -0
- data/lib/truemail/validate/list_match.rb +45 -0
- data/lib/truemail/validator.rb +1 -1
- data/lib/truemail/version.rb +1 -1
- metadata +3 -3
- data/lib/truemail/validate/domain_list_match.rb +0 -39
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5aaf968788710bfc570f154269d75830058841b3936b542246de4557be3b4727
|
4
|
+
data.tar.gz: 3ebe69aa575bc2eb84e277c7ee77bdf055ff112597926e167db84903fb4a7ad4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f6e6941d7990f128258308bcf24205162fc968c3c03a74f451c765059b53a3ded73ea0ef7a545edd36456d93f0318f66b016640b2c02986f8c0b117ed8ab28b1
|
7
|
+
data.tar.gz: 516f7151529e111845044c8c3c238b549d4fc989d460f6568e9a2f1586d083f4d355b53d0dc939a3f2d714dc4834fe920eab1bba31d287abd57a43d8fc223f80
|
data/.circleci/config.yml
CHANGED
data/.circleci/gemspec_latest
CHANGED
@@ -42,7 +42,7 @@ Gem::Specification.new do |spec|
|
|
42
42
|
spec.add_development_dependency 'rake', '~> 13.0', '>= 13.0.6'
|
43
43
|
spec.add_development_dependency 'reek', '~> 6.1', '>= 6.1.1'
|
44
44
|
spec.add_development_dependency 'rspec', '~> 3.11'
|
45
|
-
spec.add_development_dependency 'rubocop', '~> 1.
|
45
|
+
spec.add_development_dependency 'rubocop', '~> 1.37'
|
46
46
|
spec.add_development_dependency 'rubocop-performance', '~> 1.15'
|
47
47
|
spec.add_development_dependency 'rubocop-rspec', '~> 2.13', '>= 2.13.2'
|
48
48
|
spec.add_development_dependency 'simplecov', '~> 0.21.2'
|
data/.codeclimate.yml
CHANGED
data/.reek.yml
CHANGED
@@ -15,6 +15,7 @@ detectors:
|
|
15
15
|
- Truemail::Configuration#logger=
|
16
16
|
- Truemail::Validate::Smtp::Request#initialize
|
17
17
|
- Truemail::Validate::Smtp::Request::Session#initialize
|
18
|
+
- Truemail::RSpec::ValidatorHelper::ValidatorFactory#process_validator_params
|
18
19
|
|
19
20
|
TooManyInstanceVariables:
|
20
21
|
exclude:
|
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,37 @@
|
|
2
2
|
|
3
3
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
4
4
|
|
5
|
+
## [3.0.0] - 2022.10.24
|
6
|
+
|
7
|
+
### Added
|
8
|
+
|
9
|
+
- Added ability to specify whitelisted/blacklisted emails by complete match
|
10
|
+
|
11
|
+
```ruby
|
12
|
+
Truemail.configure do |config|
|
13
|
+
# Optional parameter. Validation of email which contains whitelisted emails always will
|
14
|
+
# return true. Other validations will not processed even if it was defined in validation_type_for
|
15
|
+
# It is equal to empty array by default.
|
16
|
+
config.whitelisted_emails = %w[user@somedomain1.com user@somedomain2.com]
|
17
|
+
|
18
|
+
# Optional parameter. Validation of email which contains blacklisted emails always will
|
19
|
+
# return false. Other validations will not processed even if it was defined in validation_type_for
|
20
|
+
# It is equal to empty array by default.
|
21
|
+
config.blacklisted_emails = %w[user@somedomain3.com user@somedomain4.com]
|
22
|
+
end
|
23
|
+
```
|
24
|
+
|
25
|
+
### Updated
|
26
|
+
|
27
|
+
- Updated `Truemail::Configuration`, tests
|
28
|
+
- Updated namespace from `Truemail::Validate::DomainListMatch` to `Truemail::Validate::ListMatch`
|
29
|
+
- Updated `Truemail::Validator#run, tests
|
30
|
+
- Updated `Truemail::Log::Serializer::ValidatorJson`, tests
|
31
|
+
- Updated `Truemail::Log::Serializer::ValidatorText`, tests
|
32
|
+
- Updated `Truemail::Log::Serializer::AuditorJson`, tests
|
33
|
+
- Updated schemas, gemspecs, circleci/codeclimate config
|
34
|
+
- Updated docs, gem version
|
35
|
+
|
5
36
|
## [2.7.5] - 2022.10.10
|
6
37
|
|
7
38
|
### Updated
|
data/README.md
CHANGED
@@ -130,9 +130,11 @@ You can use global gem configuration or custom independent configuration. Availa
|
|
130
130
|
- connection attempts
|
131
131
|
- default validation type
|
132
132
|
- validation type for domains
|
133
|
+
- whitelisted emails
|
134
|
+
- blacklisted emails
|
133
135
|
- whitelisted domains
|
134
|
-
- whitelist validation
|
135
136
|
- blacklisted domains
|
137
|
+
- whitelist validation
|
136
138
|
- blacklisted mx ip-addresses
|
137
139
|
- custom DNS gateway(s)
|
138
140
|
- RFC MX lookup flow
|
@@ -190,22 +192,32 @@ Truemail.configure do |config|
|
|
190
192
|
# It is equal to empty hash by default.
|
191
193
|
config.validation_type_for = { 'somedomain.com' => :regex, 'otherdomain.com' => :mx }
|
192
194
|
|
195
|
+
# Optional parameter. Validation of email which contains whitelisted emails always will
|
196
|
+
# return true. Other validations will not processed even if it was defined in validation_type_for
|
197
|
+
# It is equal to empty array by default.
|
198
|
+
config.whitelisted_emails = %w[user@somedomain1.com user@somedomain2.com]
|
199
|
+
|
200
|
+
# Optional parameter. Validation of email which contains blacklisted emails always will
|
201
|
+
# return false. Other validations will not processed even if it was defined in validation_type_for
|
202
|
+
# It is equal to empty array by default.
|
203
|
+
config.blacklisted_emails = %w[user@somedomain3.com user@somedomain4.com]
|
204
|
+
|
193
205
|
# Optional parameter. Validation of email which contains whitelisted domain always will
|
194
206
|
# return true. Other validations will not processed even if it was defined in validation_type_for
|
195
207
|
# It is equal to empty array by default.
|
196
208
|
config.whitelisted_domains = %w[somedomain1.com somedomain2.com]
|
197
209
|
|
210
|
+
# Optional parameter. Validation of email which contains blacklisted domain always will
|
211
|
+
# return false. Other validations will not processed even if it was defined in validation_type_for
|
212
|
+
# It is equal to empty array by default.
|
213
|
+
config.blacklisted_domains = %w[somedomain3.com somedomain4.com]
|
214
|
+
|
198
215
|
# Optional parameter. With this option Truemail will validate email which contains whitelisted
|
199
216
|
# domain only, i.e. if domain whitelisted, validation will passed to Regex, MX or SMTP validators.
|
200
217
|
# Validation of email which not contains whitelisted domain always will return false.
|
201
218
|
# It is equal false by default.
|
202
219
|
config.whitelist_validation = true
|
203
220
|
|
204
|
-
# Optional parameter. Validation of email which contains blacklisted domain always will
|
205
|
-
# return false. Other validations will not processed even if it was defined in validation_type_for
|
206
|
-
# It is equal to empty array by default.
|
207
|
-
config.blacklisted_domains = %w[somedomain3.com somedomain4.com]
|
208
|
-
|
209
221
|
# Optional parameter. With this option Truemail will filter out unwanted mx servers via
|
210
222
|
# predefined list of ip addresses. It can be used as a part of DEA (disposable email
|
211
223
|
# address) validations. It is equal to empty array by default.
|
@@ -259,9 +271,11 @@ Truemail.configuration
|
|
259
271
|
@connection_attempts=3,
|
260
272
|
@default_validation_type=:mx,
|
261
273
|
@validation_type_by_domain={"somedomain.com" => :regex, "otherdomain.com" => :mx},
|
274
|
+
@whitelisted_emails=["user@somedomain1.com", "user@somedomain2.com"],
|
275
|
+
@blacklisted_emails=["user@somedomain3.com", "user@somedomain4.com"],
|
262
276
|
@whitelisted_domains=["somedomain1.com", "somedomain2.com"],
|
263
|
-
@whitelist_validation=true,
|
264
277
|
@blacklisted_domains=["somedomain3.com", "somedomain4.com"],
|
278
|
+
@whitelist_validation=true,
|
265
279
|
@blacklisted_mx_ip_addresses=["1.1.1.1", "2.2.2.2"],
|
266
280
|
@dns=["10.0.0.1", "10.0.0.2:54"],
|
267
281
|
@verifier_domain="somedomain.com",
|
@@ -293,9 +307,11 @@ Truemail.configuration
|
|
293
307
|
@connection_attempts=1,
|
294
308
|
@default_validation_type=:mx,
|
295
309
|
@validation_type_by_domain={"somedomain.com" => :regex, "otherdomain.com" => :mx},
|
310
|
+
@whitelisted_emails=["user@somedomain1.com", "user@somedomain2.com"],
|
311
|
+
@blacklisted_emails=["user@somedomain3.com", "user@somedomain4.com"],
|
296
312
|
@whitelisted_domains=["somedomain1.com", "somedomain2.com"],
|
297
|
-
@whitelist_validation=true,
|
298
313
|
@blacklisted_domains=["somedomain3.com", "somedomain4.com"],
|
314
|
+
@whitelist_validation=true,
|
299
315
|
@blacklisted_mx_ip_addresses=["1.1.1.1", "2.2.2.2"],
|
300
316
|
@dns=["10.0.0.1", "10.0.0.2:54"],
|
301
317
|
@verifier_domain="somedomain.com",
|
@@ -339,7 +355,7 @@ Please note, you should have global or custom configuration for use Truemail gem
|
|
339
355
|
|
340
356
|
#### Whitelist/Blacklist check
|
341
357
|
|
342
|
-
Whitelist/Blacklist check is zero validation level. You can define white and black
|
358
|
+
Whitelist/Blacklist check is zero validation level. You can define white and black emails/domains lists. It means that validation of email which contains whitelisted email or domain always will return `true`, and for blacklisted email or domain will return `false`.
|
343
359
|
|
344
360
|
Please note, other validations will not processed even if it was defined in `validation_type_for`.
|
345
361
|
|
@@ -356,6 +372,8 @@ require 'truemail'
|
|
356
372
|
|
357
373
|
Truemail.configure do |config|
|
358
374
|
config.verifier_email = 'verifier@example.com'
|
375
|
+
config.whitelisted_emails = %w[user@somedomain1.com user@somedomain2.com]
|
376
|
+
config.blacklisted_emails = %w[user@somedomain3.com user@somedomain4.com]
|
359
377
|
config.whitelisted_domains = %w[white-domain.com somedomain.com]
|
360
378
|
config.blacklisted_domains = %w[black-domain.com somedomain.com]
|
361
379
|
config.validation_type_for = { 'somedomain.com' => :mx }
|
@@ -378,6 +396,8 @@ Truemail.validate('email@white-domain.com')
|
|
378
396
|
errors={},
|
379
397
|
smtp_debug=nil>,
|
380
398
|
configuration=#<Truemail::Configuration:0x00005629f801bd28
|
399
|
+
@whitelisted_emails=["user@somedomain1.com", "user@somedomain2.com"],
|
400
|
+
@blacklisted_emails=["user@somedomain3.com", "user@somedomain4.com"],
|
381
401
|
@blacklisted_domains=["black-domain.com", "somedomain.com"],
|
382
402
|
@blacklisted_mx_ip_addresses=[],
|
383
403
|
@dns=[],
|
@@ -428,6 +448,8 @@ Truemail.validate('email@white-domain.com', with: :regex)
|
|
428
448
|
smtp_debug=nil>,
|
429
449
|
configuration=
|
430
450
|
#<Truemail::Configuration:0x0000563f0d2605c8
|
451
|
+
@whitelisted_emails=[],
|
452
|
+
@blacklisted_emails=[],
|
431
453
|
@blacklisted_domains=[],
|
432
454
|
@blacklisted_mx_ip_addresses=[],
|
433
455
|
@dns=[],
|
@@ -464,6 +486,8 @@ Truemail.validate('email@domain.com', with: :regex)
|
|
464
486
|
smtp_debug=nil>,
|
465
487
|
configuration=
|
466
488
|
#<Truemail::Configuration:0x0000563f0cd82ab0
|
489
|
+
@whitelisted_emails=[],
|
490
|
+
@blacklisted_emails=[],
|
467
491
|
@blacklisted_domains=[],
|
468
492
|
@blacklisted_mx_ip_addresses=[],
|
469
493
|
@dns=[],
|
@@ -502,6 +526,8 @@ Truemail.validate('email@black-domain.com')
|
|
502
526
|
smtp_debug=nil>,
|
503
527
|
configuration=
|
504
528
|
#<Truemail::Configuration:0x0000563f0d36f4f0
|
529
|
+
@whitelisted_emails=[],
|
530
|
+
@blacklisted_emails=[],
|
505
531
|
@blacklisted_domains=[],
|
506
532
|
@blacklisted_mx_ip_addresses=[],
|
507
533
|
@dns=[],
|
@@ -540,6 +566,8 @@ Truemail.validate('email@somedomain.com')
|
|
540
566
|
smtp_debug=nil>,
|
541
567
|
configuration=
|
542
568
|
#<Truemail::Configuration:0x0000563f0d3f8fc0
|
569
|
+
@whitelisted_emails=[],
|
570
|
+
@blacklisted_emails=[],
|
543
571
|
@blacklisted_domains=[],
|
544
572
|
@blacklisted_mx_ip_addresses=[],
|
545
573
|
@dns=[],
|
@@ -595,6 +623,8 @@ Truemail.validate('email@example.com', with: :regex)
|
|
595
623
|
smtp_debug=nil>,
|
596
624
|
configuration=
|
597
625
|
#<Truemail::Configuration:0x000055aa56a54d48
|
626
|
+
@whitelisted_emails=[],
|
627
|
+
@blacklisted_emails=[],
|
598
628
|
@blacklisted_domains=[],
|
599
629
|
@blacklisted_mx_ip_addresses=[],
|
600
630
|
@dns=[],
|
@@ -641,6 +671,8 @@ Truemail.validate('email@example.com', with: :regex)
|
|
641
671
|
smtp_debug=nil>,
|
642
672
|
configuration=
|
643
673
|
#<Truemail::Configuration:0x0000560e58d80830
|
674
|
+
@whitelisted_emails=[],
|
675
|
+
@blacklisted_emails=[],
|
644
676
|
@blacklisted_domains=[],
|
645
677
|
@blacklisted_mx_ip_addresses=[],
|
646
678
|
@dns=[],
|
@@ -698,6 +730,8 @@ Truemail.validate('email@example.com', with: :mx)
|
|
698
730
|
smtp_debug=nil>,
|
699
731
|
configuration=
|
700
732
|
#<Truemail::Configuration:0x0000559b6e44af70
|
733
|
+
@whitelisted_emails=[],
|
734
|
+
@blacklisted_emails=[],
|
701
735
|
@blacklisted_domains=[],
|
702
736
|
@blacklisted_mx_ip_addresses=[],
|
703
737
|
@dns=[],
|
@@ -746,6 +780,8 @@ Truemail.validate('email@example.com', with: :mx)
|
|
746
780
|
smtp_debug=nil>,
|
747
781
|
configuration=
|
748
782
|
#<Truemail::Configuration:0x0000559b6e44af70
|
783
|
+
@whitelisted_emails=[],
|
784
|
+
@blacklisted_emails=[],
|
749
785
|
@blacklisted_domains=[],
|
750
786
|
@blacklisted_mx_ip_addresses=[],
|
751
787
|
@dns=[],
|
@@ -798,6 +834,8 @@ Truemail.validate('email@example.com', with: :mx_blacklist)
|
|
798
834
|
smtp_debug=nil,
|
799
835
|
configuration=
|
800
836
|
#<Truemail::Configuration:0x00007fca0c8aeb38
|
837
|
+
@whitelisted_emails=[],
|
838
|
+
@blacklisted_emails=[],
|
801
839
|
@blacklisted_domains=[],
|
802
840
|
@blacklisted_mx_ip_addresses=["127.0.1.2"],
|
803
841
|
@connection_attempts=2,
|
@@ -875,6 +913,8 @@ Truemail.validate('email@example.com')
|
|
875
913
|
errors={}>>],
|
876
914
|
configuration=
|
877
915
|
#<Truemail::Configuration:0x00007fdc4504f5c8
|
916
|
+
@whitelisted_emails=[],
|
917
|
+
@blacklisted_emails=[],
|
878
918
|
@blacklisted_domains=[],
|
879
919
|
@blacklisted_mx_ip_addresses=[],
|
880
920
|
@dns=[],
|
@@ -921,6 +961,8 @@ Truemail.validate('email@example.com')
|
|
921
961
|
smtp_debug=nil>,
|
922
962
|
configuration=
|
923
963
|
#<Truemail::Configuration:0x00005615e87b9298
|
964
|
+
@whitelisted_emails=[],
|
965
|
+
@blacklisted_emails=[],
|
924
966
|
@blacklisted_domains=[],
|
925
967
|
@blacklisted_mx_ip_addresses=[],
|
926
968
|
@dns=[],
|
@@ -973,6 +1015,8 @@ Truemail.validate('email@example.com')
|
|
973
1015
|
errors={:rcptto=>"550 User not found\n"}>>]>,
|
974
1016
|
configuration=
|
975
1017
|
#<Truemail::Configuration:0x00005615e87b9298
|
1018
|
+
@whitelisted_emails=[],
|
1019
|
+
@blacklisted_emails=[],
|
976
1020
|
@blacklisted_domains=[],
|
977
1021
|
@blacklisted_mx_ip_addresses=[],
|
978
1022
|
@dns=[],
|
@@ -1038,6 +1082,8 @@ Truemail.validate('email@example.com')
|
|
1038
1082
|
errors={:mailfrom=>"554 5.7.1 Client host blocked\n", :connection=>"server dropped connection after response"}>>,]>,
|
1039
1083
|
configuration=
|
1040
1084
|
#<Truemail::Configuration:0x00005615e87b9298
|
1085
|
+
@whitelisted_emails=[],
|
1086
|
+
@blacklisted_emails=[],
|
1041
1087
|
@blacklisted_domains=[],
|
1042
1088
|
@blacklisted_mx_ip_addresses=[],
|
1043
1089
|
@dns=[],
|
@@ -1087,6 +1133,8 @@ Truemail.validate('email@example.com')
|
|
1087
1133
|
errors={:rcptto=>"550 User not found\n"}>>]>,
|
1088
1134
|
configuration=
|
1089
1135
|
#<Truemail::Configuration:0x00005615e87b9298
|
1136
|
+
@whitelisted_emails=[],
|
1137
|
+
@blacklisted_emails=[],
|
1090
1138
|
@blacklisted_domains=[],
|
1091
1139
|
@blacklisted_mx_ip_addresses=[],
|
1092
1140
|
@dns=[],
|
@@ -1138,6 +1186,8 @@ Truemail.host_audit
|
|
1138
1186
|
warnings={}>,
|
1139
1187
|
configuration=
|
1140
1188
|
#<Truemail::Configuration:0x00005615e86327a8
|
1189
|
+
@whitelisted_emails=[],
|
1190
|
+
@blacklisted_emails=[],
|
1141
1191
|
@blacklisted_domains=[],
|
1142
1192
|
@blacklisted_mx_ip_addresses=[],
|
1143
1193
|
@dns=[],
|
@@ -1168,6 +1218,8 @@ Truemail.host_audit
|
|
1168
1218
|
},
|
1169
1219
|
configuration=
|
1170
1220
|
#<Truemail::Configuration:0x00005615e86327a8
|
1221
|
+
@whitelisted_emails=[],
|
1222
|
+
@blacklisted_emails=[],
|
1171
1223
|
@blacklisted_domains=[],
|
1172
1224
|
@blacklisted_mx_ip_addresses=[],
|
1173
1225
|
@dns=[],
|
@@ -1223,6 +1275,8 @@ Truemail::Log::Serializer::AuditorJson.call(Truemail.host_audit)
|
|
1223
1275
|
"dns": "A-record of verifier domain not refers to current host ip address", "ptr": "PTR-record does not reference to current verifier domain"
|
1224
1276
|
},
|
1225
1277
|
"configuration": {
|
1278
|
+
"whitelisted_emails": null,
|
1279
|
+
"blacklisted_emails": null,
|
1226
1280
|
"blacklisted_domains": null,
|
1227
1281
|
"blacklisted_mx_ip_addresses": null,
|
1228
1282
|
"dns": null,
|
@@ -1264,6 +1318,8 @@ Truemail::Log::Serializer::ValidatorJson.call(Truemail.validate('nonexistent_ema
|
|
1264
1318
|
}
|
1265
1319
|
],
|
1266
1320
|
"configuration": {
|
1321
|
+
"whitelisted_emails": null,
|
1322
|
+
"blacklisted_emails": null,
|
1267
1323
|
"blacklisted_domains": null,
|
1268
1324
|
"blacklisted_mx_ip_addresses": null,
|
1269
1325
|
"dns": null,
|
@@ -1307,6 +1363,8 @@ Truemail.host_audit.as_json
|
|
1307
1363
|
"dns": "A-record of verifier domain not refers to current host ip address", "ptr": "PTR-record does not reference to current verifier domain"
|
1308
1364
|
},
|
1309
1365
|
"configuration": {
|
1366
|
+
"whitelisted_emails": null,
|
1367
|
+
"blacklisted_emails": null,
|
1310
1368
|
"blacklisted_domains": null,
|
1311
1369
|
"blacklisted_mx_ip_addresses": null,
|
1312
1370
|
"dns": null,
|
@@ -1345,6 +1403,8 @@ Truemail.validate('nonexistent_email@bestweb.com.ua').as_json
|
|
1345
1403
|
}
|
1346
1404
|
],
|
1347
1405
|
"configuration": {
|
1406
|
+
"whitelisted_emails": null,
|
1407
|
+
"blacklisted_emails": null,
|
1348
1408
|
"blacklisted_domains": null,
|
1349
1409
|
"blacklisted_mx_ip_addresses": null,
|
1350
1410
|
"dns": null,
|
@@ -14,6 +14,8 @@ module Truemail
|
|
14
14
|
connection_timeout
|
15
15
|
response_timeout
|
16
16
|
connection_attempts
|
17
|
+
whitelisted_emails
|
18
|
+
blacklisted_emails
|
17
19
|
whitelisted_domains
|
18
20
|
blacklisted_domains
|
19
21
|
blacklisted_mx_ip_addresses
|
@@ -100,6 +102,8 @@ module Truemail
|
|
100
102
|
default_validation_type: Truemail::Configuration::DEFAULT_VALIDATION_TYPE,
|
101
103
|
smtp_port: Truemail::Configuration::DEFAULT_SMTP_PORT,
|
102
104
|
validation_type_by_domain: {},
|
105
|
+
whitelisted_emails: [],
|
106
|
+
blacklisted_emails: [],
|
103
107
|
whitelisted_domains: [],
|
104
108
|
whitelist_validation: false,
|
105
109
|
blacklisted_domains: [],
|
@@ -131,6 +135,7 @@ module Truemail
|
|
131
135
|
def regex_by_method(method)
|
132
136
|
return Truemail::RegexConstant::REGEX_IP_ADDRESS_PATTERN if method.eql?(:blacklisted_mx_ip_addresses)
|
133
137
|
return Truemail::RegexConstant::REGEX_DNS_SERVER_ADDRESS_PATTERN if method.eql?(:dns)
|
138
|
+
return Truemail::RegexConstant::REGEX_SIMPLE_EMAIL_PATTERN if method[/email/]
|
134
139
|
Truemail::RegexConstant::REGEX_DOMAIN_PATTERN
|
135
140
|
end
|
136
141
|
|
data/lib/truemail/core.rb
CHANGED
@@ -20,6 +20,7 @@ module Truemail
|
|
20
20
|
|
21
21
|
module RegexConstant
|
22
22
|
REGEX_DOMAIN = /[\p{L}0-9]+([\-.]{1}[\p{L}0-9]+)*\.\p{L}{2,63}/i.freeze
|
23
|
+
REGEX_SIMPLE_EMAIL_PATTERN = /\w+@\w+/.freeze
|
23
24
|
REGEX_EMAIL_PATTERN = %r{(?=\A.{6,255}\z)(\A([\p{L}0-9]+[\w\p{L}.+!~,'&%#*^`{}|\-/?=$]*)@(#{REGEX_DOMAIN})\z)}.freeze
|
24
25
|
REGEX_DOMAIN_PATTERN = /(?=\A.{4,255}\z)(\A#{REGEX_DOMAIN}\z)/.freeze
|
25
26
|
REGEX_DOMAIN_FROM_EMAIL = /\A.+@(.+)\z/.freeze
|
@@ -45,7 +46,7 @@ module Truemail
|
|
45
46
|
|
46
47
|
module Validate
|
47
48
|
require_relative '../truemail/validate/base'
|
48
|
-
require_relative '../truemail/validate/
|
49
|
+
require_relative '../truemail/validate/list_match'
|
49
50
|
require_relative '../truemail/validate/regex'
|
50
51
|
require_relative '../truemail/validate/mx'
|
51
52
|
require_relative '../truemail/validate/mx_blacklist'
|
@@ -8,6 +8,8 @@ module Truemail
|
|
8
8
|
|
9
9
|
CONFIGURATION_ARRAY_ATTRS = %i[
|
10
10
|
validation_type_by_domain
|
11
|
+
whitelisted_emails
|
12
|
+
blacklisted_emails
|
11
13
|
whitelisted_domains
|
12
14
|
blacklisted_domains
|
13
15
|
blacklisted_mx_ip_addresses
|
@@ -61,6 +63,8 @@ module Truemail
|
|
61
63
|
{
|
62
64
|
validation_type_by_domain: validation_type_by_domain,
|
63
65
|
whitelist_validation: executor_configuration.whitelist_validation,
|
66
|
+
whitelisted_emails: whitelisted_emails,
|
67
|
+
blacklisted_emails: blacklisted_emails,
|
64
68
|
whitelisted_domains: whitelisted_domains,
|
65
69
|
blacklisted_domains: blacklisted_domains,
|
66
70
|
blacklisted_mx_ip_addresses: blacklisted_mx_ip_addresses,
|
@@ -0,0 +1,45 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Truemail
|
4
|
+
module Validate
|
5
|
+
class ListMatch < Truemail::Validate::Base
|
6
|
+
ERROR = 'blacklisted email'
|
7
|
+
|
8
|
+
def run
|
9
|
+
return success(true) if whitelisted? && !whitelist_validation?
|
10
|
+
return unless whitelist_validation_case? || blacklisted?
|
11
|
+
success(false)
|
12
|
+
add_error(Truemail::Validate::ListMatch::ERROR)
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def email
|
18
|
+
@email ||= result.email
|
19
|
+
end
|
20
|
+
|
21
|
+
def email_domain
|
22
|
+
@email_domain ||=
|
23
|
+
result.domain = email[Truemail::RegexConstant::REGEX_DOMAIN_FROM_EMAIL, 1]
|
24
|
+
end
|
25
|
+
|
26
|
+
def whitelisted?
|
27
|
+
configuration.whitelisted_emails.include?(email) ||
|
28
|
+
configuration.whitelisted_domains.include?(email_domain)
|
29
|
+
end
|
30
|
+
|
31
|
+
def whitelist_validation?
|
32
|
+
configuration.whitelist_validation
|
33
|
+
end
|
34
|
+
|
35
|
+
def whitelist_validation_case?
|
36
|
+
whitelist_validation? && !whitelisted?
|
37
|
+
end
|
38
|
+
|
39
|
+
def blacklisted?
|
40
|
+
configuration.blacklisted_emails.include?(email) ||
|
41
|
+
configuration.blacklisted_domains.include?(email_domain)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
data/lib/truemail/validator.rb
CHANGED
@@ -26,7 +26,7 @@ module Truemail
|
|
26
26
|
end
|
27
27
|
|
28
28
|
def run
|
29
|
-
Truemail::Validate::
|
29
|
+
Truemail::Validate::ListMatch.check(result)
|
30
30
|
result_not_changed? ? Truemail::Validate.const_get(constantize(validation_type)).check(result) : update_validation_type
|
31
31
|
logger&.push(self)
|
32
32
|
self
|
data/lib/truemail/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: truemail
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 3.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Vladislav Trotsenko
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-10-
|
11
|
+
date: 2022-10-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: simpleidn
|
@@ -216,7 +216,7 @@ files:
|
|
216
216
|
- lib/truemail/log/serializer/validator_text.rb
|
217
217
|
- lib/truemail/logger.rb
|
218
218
|
- lib/truemail/validate/base.rb
|
219
|
-
- lib/truemail/validate/
|
219
|
+
- lib/truemail/validate/list_match.rb
|
220
220
|
- lib/truemail/validate/mx.rb
|
221
221
|
- lib/truemail/validate/mx_blacklist.rb
|
222
222
|
- lib/truemail/validate/regex.rb
|
@@ -1,39 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Truemail
|
4
|
-
module Validate
|
5
|
-
class DomainListMatch < Truemail::Validate::Base
|
6
|
-
ERROR = 'blacklisted email'
|
7
|
-
|
8
|
-
def run
|
9
|
-
return success(true) if whitelisted_domain? && !whitelist_validation?
|
10
|
-
return unless whitelist_validation_case? || blacklisted_domain?
|
11
|
-
success(false)
|
12
|
-
add_error(Truemail::Validate::DomainListMatch::ERROR)
|
13
|
-
end
|
14
|
-
|
15
|
-
private
|
16
|
-
|
17
|
-
def email_domain
|
18
|
-
@email_domain ||=
|
19
|
-
result.domain = result.email[Truemail::RegexConstant::REGEX_DOMAIN_FROM_EMAIL, 1]
|
20
|
-
end
|
21
|
-
|
22
|
-
def whitelisted_domain?
|
23
|
-
configuration.whitelisted_domains.include?(email_domain)
|
24
|
-
end
|
25
|
-
|
26
|
-
def whitelist_validation?
|
27
|
-
configuration.whitelist_validation
|
28
|
-
end
|
29
|
-
|
30
|
-
def whitelist_validation_case?
|
31
|
-
whitelist_validation? && !whitelisted_domain?
|
32
|
-
end
|
33
|
-
|
34
|
-
def blacklisted_domain?
|
35
|
-
configuration.blacklisted_domains.include?(email_domain)
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|