email-verification 0.1.9 → 0.2.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/Gemfile.lock +2 -0
- data/email-verification.gemspec +1 -0
- data/lib/email/verification.rb +3 -2
- data/lib/email/verification/data/domains.yml +7 -0
- data/lib/email/verification/errors.rb +1 -0
- data/lib/email/verification/verifier.rb +32 -8
- data/lib/email/verification/version.rb +1 -1
- metadata +22 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b7f15443c9ec1e533893b1eb3a32775b2fbc3ab0c98c7a79d8b48a30c5cf6600
|
4
|
+
data.tar.gz: d513f67f6824f045487e8783d13db9dbf5ffea4605ab689dbb8e64a7cf302c07
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9bc77e4d23247da0cb79006e16b0bcd93d5aaf591ba97c3cb0801dbc2676fdeddb3796078f00339ae9c140c898bb72a14cf1f8ce1ba7f3271746ae2774b5af0a
|
7
|
+
data.tar.gz: aa20717ebbbc67c2bd56c23af65b3576ffd8dd2216f0627ac73b9e4ac7c51055208d8c4841c538006e2c3f8b1740b7f0f0fd149ddc08ffb1cf82c43e093efaa8
|
data/Gemfile.lock
CHANGED
@@ -3,6 +3,7 @@ PATH
|
|
3
3
|
specs:
|
4
4
|
email-verification (0.1.9)
|
5
5
|
gmail (~> 0.7.1)
|
6
|
+
highline (~> 2.0, >= 2.0.2)
|
6
7
|
|
7
8
|
GEM
|
8
9
|
remote: https://rubygems.org/
|
@@ -14,6 +15,7 @@ GEM
|
|
14
15
|
mail (>= 2.2.1)
|
15
16
|
gmail_xoauth (0.4.2)
|
16
17
|
oauth (>= 0.3.6)
|
18
|
+
highline (2.0.2)
|
17
19
|
mail (2.7.1)
|
18
20
|
mini_mime (>= 0.1.1)
|
19
21
|
method_source (0.9.2)
|
data/email-verification.gemspec
CHANGED
@@ -35,6 +35,7 @@ Gem::Specification.new do |spec|
|
|
35
35
|
spec.require_paths = ["lib"]
|
36
36
|
|
37
37
|
spec.add_dependency "gmail", "~> 0.7.1"
|
38
|
+
spec.add_dependency "highline", "~> 2.0", ">= 2.0.2"
|
38
39
|
|
39
40
|
spec.add_development_dependency "bundler", "~> 1.17"
|
40
41
|
spec.add_development_dependency "rake", "~> 10.0"
|
data/lib/email/verification.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require "gmail"
|
2
2
|
require "mail"
|
3
3
|
require "yaml"
|
4
|
+
require "highline"
|
4
5
|
|
5
6
|
require "email/verification/version"
|
6
7
|
|
@@ -34,8 +35,8 @@ module Email
|
|
34
35
|
yield(configuration)
|
35
36
|
end
|
36
37
|
|
37
|
-
def self.retrieve_verification_code(email:, password
|
38
|
-
::Email::Verification::Verifier.new.retrieve_verification_code(email: email, password: password, mailboxes: mailboxes, settings: settings)
|
38
|
+
def self.retrieve_verification_code(email:, password: nil, mailboxes: %w(Inbox), settings: {}, mode: :interactive)
|
39
|
+
::Email::Verification::Verifier.new(mode: mode).retrieve_verification_code(email: email, password: password, mailboxes: mailboxes, settings: settings)
|
39
40
|
end
|
40
41
|
|
41
42
|
end
|
@@ -1,9 +1,12 @@
|
|
1
1
|
module Email
|
2
2
|
module Verification
|
3
3
|
class Verifier
|
4
|
-
attr_accessor :mapping
|
4
|
+
attr_accessor :mapping, :mode, :cli
|
5
5
|
|
6
|
-
def initialize
|
6
|
+
def initialize(mode: :interactive)
|
7
|
+
self.mode = mode&.to_sym
|
8
|
+
self.cli = self.mode.eql?(:interactive) ? ::HighLine.new : nil
|
9
|
+
|
7
10
|
set_mapping
|
8
11
|
end
|
9
12
|
|
@@ -16,19 +19,36 @@ module Email
|
|
16
19
|
end
|
17
20
|
|
18
21
|
def retrieve_verification_code(email:, password:, mailboxes: %w(Inbox), count: :all, settings: {}, wait: 3, retries: 3)
|
19
|
-
result = nil
|
20
22
|
service = determine_email_service(email)
|
21
23
|
|
22
|
-
|
24
|
+
result = case service
|
23
25
|
when :gmail
|
24
|
-
::Email::Verification::Gmail.new
|
26
|
+
perform_retrieval(::Email::Verification::Gmail.new, email: email, password: password, mailboxes: mailboxes, count: count, settings: settings, wait: wait, retries: retries)
|
25
27
|
when :hotmail
|
26
|
-
::Email::Verification::Hotmail.new
|
28
|
+
perform_retrieval(::Email::Verification::Hotmail.new, email: email, password: password, mailboxes: mailboxes, count: count, settings: settings, wait: wait, retries: retries)
|
29
|
+
when :protonmail, :tutanota
|
30
|
+
if self.mode.eql?(:interactive)
|
31
|
+
puts "[Email::Verification::Verifier] - #{Time.now}: You're using an email account that doesn't have support for POP3 or IMAP. You have to manually retrieve the code or URL from the account and post it below."
|
32
|
+
capture_cli_input(email)
|
33
|
+
else
|
34
|
+
raise ::Email::Verification::Errors::ImapNotSupportedError.new("#{service} doesn't have support for IMAP or POP3 retrieval! Please switch to interactive mode or use another provider!")
|
35
|
+
end
|
27
36
|
else
|
28
37
|
nil
|
29
38
|
end
|
30
39
|
|
31
|
-
|
40
|
+
return result
|
41
|
+
end
|
42
|
+
|
43
|
+
def perform_retrieval(verifier, email:, password: nil, mailboxes: %w(Inbox), count: :all, settings: {}, wait: 3, retries: 3)
|
44
|
+
result = nil
|
45
|
+
|
46
|
+
if password.to_s.empty? && self.mode.eql?(:interactive)
|
47
|
+
puts "[Email::Verification::Verifier] - #{Time.now}: Password wasn't provided, you need to manually retrieve the code or URL from the account #{email}."
|
48
|
+
result = capture_cli_input(email)
|
49
|
+
elsif password.to_s.empty? && self.mode.eql?(:automatic)
|
50
|
+
raise ::Email::Verification::Errors::InvalidCredentialsError.new("Password wasn't provided for #{email} and automatic mode is enabled. Please provide a password or switch to interactive mode.")
|
51
|
+
else
|
32
52
|
if settings_provided?(settings) && !wait.nil? && !retries.nil?
|
33
53
|
result = retrieve_with_retries(verifier, email: email, password: password, mailboxes: mailboxes, count: count, settings: settings, wait: wait, retries: retries)
|
34
54
|
else
|
@@ -39,7 +59,7 @@ module Email
|
|
39
59
|
return result
|
40
60
|
end
|
41
61
|
|
42
|
-
def retrieve_with_retries(verifier, email:, password
|
62
|
+
def retrieve_with_retries(verifier, email:, password: nil, mailboxes: %w(Inbox), count: :all, settings: {}, wait: 3, retries: 3)
|
43
63
|
result = nil
|
44
64
|
|
45
65
|
begin
|
@@ -73,6 +93,10 @@ module Email
|
|
73
93
|
settings && !settings.empty?
|
74
94
|
end
|
75
95
|
|
96
|
+
def capture_cli_input(email)
|
97
|
+
self.cli.ask("Please enter the code or URL sent to #{email}:")&.strip
|
98
|
+
end
|
99
|
+
|
76
100
|
end
|
77
101
|
end
|
78
102
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: email-verification
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sebastian Johnsson
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-07-
|
11
|
+
date: 2019-07-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: gmail
|
@@ -24,6 +24,26 @@ dependencies:
|
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 0.7.1
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: highline
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '2.0'
|
34
|
+
- - ">="
|
35
|
+
- !ruby/object:Gem::Version
|
36
|
+
version: 2.0.2
|
37
|
+
type: :runtime
|
38
|
+
prerelease: false
|
39
|
+
version_requirements: !ruby/object:Gem::Requirement
|
40
|
+
requirements:
|
41
|
+
- - "~>"
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '2.0'
|
44
|
+
- - ">="
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: 2.0.2
|
27
47
|
- !ruby/object:Gem::Dependency
|
28
48
|
name: bundler
|
29
49
|
requirement: !ruby/object:Gem::Requirement
|