email-verification 0.2.0 → 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +5 -1
- data/README.md +13 -1
- data/email-verification.gemspec +1 -0
- data/lib/email/verification/base.rb +26 -9
- data/lib/email/verification/gmail.rb +9 -1
- data/lib/email/verification/hotmail.rb +2 -2
- data/lib/email/verification/verifier.rb +8 -8
- data/lib/email/verification/version.rb +1 -1
- data/lib/email/verification.rb +4 -2
- metadata +16 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 280d7dfab6e3eb5b6f4fe8aa6e95423d19f6f7a0fc575c42b8c357d113ea4801
|
4
|
+
data.tar.gz: 53805c28a691d7285c7c12c05be4f14e46328829c46a501e9954a4b14dc6f81b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6813e1ef4ae7155ea78180943982d5f1acf775d3612ed32ebde9c6fa7abc94558ad71d5acc4c1ff9617cff00ba589f8b8d4cfce561b446b4d0e3834a838e07e2
|
7
|
+
data.tar.gz: 1b3d4bd66d845ba96cc4c53c0c3fc0708adb730189acf3197c5415fe513a7c03cb55a53e664203a3bc1f088f7195a5aaa18e94c2731c4eeb238b66db73af3409
|
data/Gemfile.lock
CHANGED
@@ -1,9 +1,10 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
email-verification (0.
|
4
|
+
email-verification (0.2.0)
|
5
5
|
gmail (~> 0.7.1)
|
6
6
|
highline (~> 2.0, >= 2.0.2)
|
7
|
+
net-imap-proxy (~> 0.1.0)
|
7
8
|
|
8
9
|
GEM
|
9
10
|
remote: https://rubygems.org/
|
@@ -20,7 +21,10 @@ GEM
|
|
20
21
|
mini_mime (>= 0.1.1)
|
21
22
|
method_source (0.9.2)
|
22
23
|
mini_mime (1.0.2)
|
24
|
+
net-imap-proxy (0.1.0)
|
25
|
+
proxifier (~> 1.0, >= 1.0.3)
|
23
26
|
oauth (0.5.4)
|
27
|
+
proxifier (1.0.3)
|
24
28
|
pry (0.12.2)
|
25
29
|
coderay (~> 1.1.0)
|
26
30
|
method_source (~> 0.9.0)
|
data/README.md
CHANGED
@@ -27,7 +27,7 @@ Email::Verification expects a settings hash in the following format:
|
|
27
27
|
```ruby
|
28
28
|
settings = {
|
29
29
|
address: "confirmation@foo.com",
|
30
|
-
from: "Confirmation",
|
30
|
+
from: "Confirmation", # Optional
|
31
31
|
subject: /Confirm your email!/i,
|
32
32
|
regex: /<a href=['"](?<match>[^"]*)['"]>\s*Click here\s*<\/a>/i
|
33
33
|
}
|
@@ -41,6 +41,18 @@ Then the client is invoked using:
|
|
41
41
|
Email::Verification.retrieve_verification_code(email: 'email.address@gmail.com', password: 's0mEpasSwOrD', settings: settings)
|
42
42
|
```
|
43
43
|
|
44
|
+
### Proxy support
|
45
|
+
|
46
|
+
Email::Verification can also be used together with proxies to fetch IMAP messages.
|
47
|
+
|
48
|
+
Simply provide a hash { host: "http://someproxyhost.com", port: 8080 } to the retrieve_verification_code method:
|
49
|
+
|
50
|
+
```ruby
|
51
|
+
Email::Verification.retrieve_verification_code(email: 'email.address@gmail.com', password: 's0mEpasSwOrD', settings: settings, proxy: {host: "http://someproxyhost.com", port: 8080})
|
52
|
+
```
|
53
|
+
|
54
|
+
Proxy authentication is also supported using the format {host: "http://user:password@someproxyhost.com", port: 8080}
|
55
|
+
|
44
56
|
## Development
|
45
57
|
|
46
58
|
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
data/email-verification.gemspec
CHANGED
@@ -36,6 +36,7 @@ Gem::Specification.new do |spec|
|
|
36
36
|
|
37
37
|
spec.add_dependency "gmail", "~> 0.7.1"
|
38
38
|
spec.add_dependency "highline", "~> 2.0", ">= 2.0.2"
|
39
|
+
spec.add_dependency "net-imap-proxy", "~> 0.1.0"
|
39
40
|
|
40
41
|
spec.add_development_dependency "bundler", "~> 1.17"
|
41
42
|
spec.add_development_dependency "rake", "~> 10.0"
|
@@ -7,19 +7,36 @@ module Email
|
|
7
7
|
self.configuration = configuration
|
8
8
|
end
|
9
9
|
|
10
|
-
def
|
10
|
+
def set_retriever(email:, password:, host:, port: 993, enable_ssl: true, proxy: nil)
|
11
|
+
retriever = :imap
|
12
|
+
|
13
|
+
options = {
|
14
|
+
address: host,
|
15
|
+
port: port,
|
16
|
+
user_name: email,
|
17
|
+
password: password,
|
18
|
+
enable_ssl: enable_ssl
|
19
|
+
}
|
20
|
+
|
21
|
+
if proxy && !proxy.empty? && !proxy[:host].to_s.empty? && !proxy[:port].to_s.empty?
|
22
|
+
retriever = ::Net::IMAP::Proxy::RetrieverMethod
|
23
|
+
proxy[:host] = "http://#{proxy[:host]}" unless proxy[:host] =~ /^http(s)?:\/\//i
|
24
|
+
options = options.merge(proxy_address: proxy[:host], proxy_port: proxy[:port])
|
25
|
+
log("Using proxy #{proxy[:host]}:#{proxy[:port]} to fetch messages from #{options[:address]}:#{options[:port]}")
|
26
|
+
end
|
27
|
+
|
28
|
+
Mail.defaults do
|
29
|
+
retriever_method retriever, options
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def retrieve_verification_code(email:, password:, host:, port: 993, enable_ssl: true, count: :all, mailboxes: %w(Inbox), settings: {}, proxy: nil)
|
11
34
|
emails = []
|
12
35
|
result = nil
|
13
36
|
|
14
37
|
begin
|
15
|
-
|
16
|
-
|
17
|
-
port: port,
|
18
|
-
user_name: email,
|
19
|
-
password: password,
|
20
|
-
enable_ssl: enable_ssl
|
21
|
-
end
|
22
|
-
|
38
|
+
set_retriever(email: email, password: password, host: host, port: port, enable_ssl: enable_ssl, proxy: proxy)
|
39
|
+
|
23
40
|
mailboxes.each do |mailbox|
|
24
41
|
Mail.find(mailbox: mailbox, order: :desc, count: count)&.each do |email|
|
25
42
|
log("From: #{email.from&.first&.strip}. Subject: #{email.subject}")
|
@@ -2,7 +2,15 @@ module Email
|
|
2
2
|
module Verification
|
3
3
|
class Gmail < Base
|
4
4
|
|
5
|
-
def retrieve_verification_code(email:, password:, mark_as_read: true, count: :all, mailboxes: %w(Inbox), settings: {})
|
5
|
+
def retrieve_verification_code(email:, password:, mark_as_read: true, count: :all, mailboxes: %w(Inbox), settings: {}, proxy: nil)
|
6
|
+
if proxy && !proxy.empty? && !proxy[:host].to_s.empty? && !proxy[:port].to_s.empty?
|
7
|
+
return super(email: email, password: password, host: "imap.gmail.com", port: 993, enable_ssl: true, mailboxes: mailboxes, count: count, settings: settings, proxy: proxy)
|
8
|
+
else
|
9
|
+
return normal_retrieve_verification_code(email: email, password: password, mark_as_read: mark_as_read, count: count, mailboxes: mailboxes, settings: settings)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def normal_retrieve_verification_code(email:, password:, mark_as_read: true, count: :all, mailboxes: %w(Inbox), settings: {})
|
6
14
|
emails = []
|
7
15
|
result = nil
|
8
16
|
|
@@ -2,8 +2,8 @@ module Email
|
|
2
2
|
module Verification
|
3
3
|
class Hotmail < Base
|
4
4
|
|
5
|
-
def retrieve_verification_code(email:, password:, mailboxes: %w(Inbox Junk), count: :all, settings: {})
|
6
|
-
super(email: email, password: password, host: "outlook.office365.com", port: 993, enable_ssl: true, mailboxes: mailboxes, count: count, settings: settings)
|
5
|
+
def retrieve_verification_code(email:, password:, mailboxes: %w(Inbox Junk), count: :all, settings: {}, proxy: nil)
|
6
|
+
super(email: email, password: password, host: "outlook.office365.com", port: 993, enable_ssl: true, mailboxes: mailboxes, count: count, settings: settings, proxy: proxy)
|
7
7
|
end
|
8
8
|
|
9
9
|
end
|
@@ -18,14 +18,14 @@ module Email
|
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
21
|
-
def retrieve_verification_code(email:, password:, mailboxes: %w(Inbox), count: :all, settings: {}, wait: 3, retries: 3)
|
21
|
+
def retrieve_verification_code(email:, password:, mailboxes: %w(Inbox), count: :all, settings: {}, proxy: nil, wait: 3, retries: 3)
|
22
22
|
service = determine_email_service(email)
|
23
23
|
|
24
24
|
result = case service
|
25
25
|
when :gmail
|
26
|
-
perform_retrieval(::Email::Verification::Gmail.new, email: email, password: password, mailboxes: mailboxes, count: count, settings: settings, wait: wait, retries: retries)
|
26
|
+
perform_retrieval(::Email::Verification::Gmail.new, email: email, password: password, mailboxes: mailboxes, count: count, settings: settings, proxy: proxy, wait: wait, retries: retries)
|
27
27
|
when :hotmail
|
28
|
-
perform_retrieval(::Email::Verification::Hotmail.new, email: email, password: password, mailboxes: mailboxes, count: count, settings: settings, wait: wait, retries: retries)
|
28
|
+
perform_retrieval(::Email::Verification::Hotmail.new, email: email, password: password, mailboxes: mailboxes, count: count, settings: settings, proxy: proxy, wait: wait, retries: retries)
|
29
29
|
when :protonmail, :tutanota
|
30
30
|
if self.mode.eql?(:interactive)
|
31
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."
|
@@ -40,7 +40,7 @@ module Email
|
|
40
40
|
return result
|
41
41
|
end
|
42
42
|
|
43
|
-
def perform_retrieval(verifier, email:, password: nil, mailboxes: %w(Inbox), count: :all, settings: {}, wait: 3, retries: 3)
|
43
|
+
def perform_retrieval(verifier, email:, password: nil, mailboxes: %w(Inbox), count: :all, settings: {}, proxy: nil, wait: 3, retries: 3)
|
44
44
|
result = nil
|
45
45
|
|
46
46
|
if password.to_s.empty? && self.mode.eql?(:interactive)
|
@@ -50,20 +50,20 @@ module Email
|
|
50
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
51
|
else
|
52
52
|
if settings_provided?(settings) && !wait.nil? && !retries.nil?
|
53
|
-
result = retrieve_with_retries(verifier, email: email, password: password, mailboxes: mailboxes, count: count, settings: settings, wait: wait, retries: retries)
|
53
|
+
result = retrieve_with_retries(verifier, email: email, password: password, mailboxes: mailboxes, count: count, settings: settings, proxy: proxy, wait: wait, retries: retries)
|
54
54
|
else
|
55
|
-
result = verifier.retrieve_verification_code(email: email, password: password, mailboxes: mailboxes, count: count, settings: settings)
|
55
|
+
result = verifier.retrieve_verification_code(email: email, password: password, mailboxes: mailboxes, count: count, settings: settings, proxy: proxy)
|
56
56
|
end
|
57
57
|
end
|
58
58
|
|
59
59
|
return result
|
60
60
|
end
|
61
61
|
|
62
|
-
def retrieve_with_retries(verifier, email:, password: nil, mailboxes: %w(Inbox), count: :all, settings: {}, wait: 3, retries: 3)
|
62
|
+
def retrieve_with_retries(verifier, email:, password: nil, mailboxes: %w(Inbox), count: :all, settings: {}, proxy: nil, wait: 3, retries: 3)
|
63
63
|
result = nil
|
64
64
|
|
65
65
|
begin
|
66
|
-
result = verifier.retrieve_verification_code(email: email, password: password, mailboxes: mailboxes, count: count, settings: settings)
|
66
|
+
result = verifier.retrieve_verification_code(email: email, password: password, mailboxes: mailboxes, count: count, settings: settings, proxy: proxy)
|
67
67
|
|
68
68
|
if result.to_s.empty?
|
69
69
|
sleep wait if wait
|
data/lib/email/verification.rb
CHANGED
@@ -3,6 +3,8 @@ require "mail"
|
|
3
3
|
require "yaml"
|
4
4
|
require "highline"
|
5
5
|
|
6
|
+
require "net/imap/proxy"
|
7
|
+
|
6
8
|
require "email/verification/version"
|
7
9
|
|
8
10
|
require "email/verification/configuration"
|
@@ -35,8 +37,8 @@ module Email
|
|
35
37
|
yield(configuration)
|
36
38
|
end
|
37
39
|
|
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)
|
40
|
+
def self.retrieve_verification_code(email:, password: nil, mailboxes: %w(Inbox), settings: {}, mode: :interactive, proxy: nil)
|
41
|
+
::Email::Verification::Verifier.new(mode: mode).retrieve_verification_code(email: email, password: password, mailboxes: mailboxes, settings: settings, proxy: proxy)
|
40
42
|
end
|
41
43
|
|
42
44
|
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.2.
|
4
|
+
version: 0.2.1
|
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-
|
11
|
+
date: 2019-10-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: gmail
|
@@ -44,6 +44,20 @@ dependencies:
|
|
44
44
|
- - ">="
|
45
45
|
- !ruby/object:Gem::Version
|
46
46
|
version: 2.0.2
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: net-imap-proxy
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - "~>"
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: 0.1.0
|
54
|
+
type: :runtime
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
requirements:
|
58
|
+
- - "~>"
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: 0.1.0
|
47
61
|
- !ruby/object:Gem::Dependency
|
48
62
|
name: bundler
|
49
63
|
requirement: !ruby/object:Gem::Requirement
|