gmail_xoauth 0.3.0 → 0.3.2
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.
- data/LICENSE +1 -1
- data/README.markdown +31 -5
- data/lib/gmail_xoauth/version.rb +1 -1
- data/test/helper.rb +44 -0
- data/test/test_imap_xoauth_authenticator.rb +68 -0
- data/test/test_oauth_string.rb +74 -0
- data/test/test_smtp_xoauth_authenticator.rb +66 -0
- metadata +57 -66
data/LICENSE
CHANGED
data/README.markdown
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
# gmail_xoauth
|
|
1
|
+
# gmail_xoauth [](https://gemnasium.com/nfo/gmail_xoauth)
|
|
2
2
|
|
|
3
3
|
Get access to [Gmail IMAP and STMP via OAuth](http://code.google.com/apis/gmail/oauth), using the standard Ruby Net libraries.
|
|
4
4
|
|
|
5
|
-
The gem supports 3-legged and 2-legged OAuth.
|
|
5
|
+
The gem supports 3-legged OAuth, and 2-legged OAuth for Google Apps Business or Education account owners.
|
|
6
6
|
|
|
7
|
-
Note: 2-legged OAuth support was
|
|
7
|
+
Note: 2-legged OAuth support was added by [Wojciech Kruszewski](https://github.com/wojciech).
|
|
8
8
|
|
|
9
9
|
## Install
|
|
10
10
|
|
|
@@ -37,6 +37,16 @@ For your tests, Gmail allows to set 'anonymous' as the consumer key and secret.
|
|
|
37
37
|
|
|
38
38
|
Note that the [Net::IMAP#login](http://www.ruby-doc.org/core/classes/Net/IMAP.html#M004191) method does not use support custom authenticators, so you have to use the [Net::IMAP#authenticate](http://www.ruby-doc.org/core/classes/Net/IMAP.html#M004190) method.
|
|
39
39
|
|
|
40
|
+
If you use 2-legged OAuth:
|
|
41
|
+
|
|
42
|
+
require 'gmail_xoauth'
|
|
43
|
+
imap = Net::IMAP.new('imap.gmail.com', 993, usessl = true, certs = nil, verify = false)
|
|
44
|
+
imap.authenticate('XOAUTH', 'myemail@mydomain.com',
|
|
45
|
+
:two_legged => true,
|
|
46
|
+
:consumer_key => 'a',
|
|
47
|
+
:consumer_secret => 'b'
|
|
48
|
+
)
|
|
49
|
+
|
|
40
50
|
### SMTP
|
|
41
51
|
|
|
42
52
|
For your tests, Gmail allows to set 'anonymous' as the consumer key and secret.
|
|
@@ -55,6 +65,20 @@ For your tests, Gmail allows to set 'anonymous' as the consumer key and secret.
|
|
|
55
65
|
|
|
56
66
|
Note that +Net::SMTP#enable_starttls_auto+ is not defined in Ruby 1.8.6.
|
|
57
67
|
|
|
68
|
+
If you use 2-legged OAuth:
|
|
69
|
+
|
|
70
|
+
require 'gmail_xoauth'
|
|
71
|
+
smtp = Net::SMTP.new('smtp.gmail.com', 587)
|
|
72
|
+
smtp.enable_starttls_auto
|
|
73
|
+
secret = {
|
|
74
|
+
:two_legged => true,
|
|
75
|
+
:consumer_key => 'a',
|
|
76
|
+
:consumer_secret => 'b'
|
|
77
|
+
}
|
|
78
|
+
smtp.start('gmail.com', 'myemail@mydomain.com', secret, :xoauth)
|
|
79
|
+
smtp.finish
|
|
80
|
+
|
|
81
|
+
|
|
58
82
|
## Compatibility
|
|
59
83
|
|
|
60
84
|
Tested on Ruby MRI 1.8.6, 1.8.7, 1.9.1 and 1.9.2. Feel free to send me a message if you tested this code with other implementations of Ruby.
|
|
@@ -63,7 +87,9 @@ The only external dependency is the [oauth gem](http://rubygems.org/gems/oauth).
|
|
|
63
87
|
|
|
64
88
|
## History
|
|
65
89
|
|
|
66
|
-
* 0.3.
|
|
90
|
+
* 0.3.2 New email for the maintainer
|
|
91
|
+
* 0.3.1 2-legged OAuth support confirmed by [BobDohnal](https://github.com/BobDohnal)
|
|
92
|
+
* 0.3.0 Experimental 2-legged OAuth support
|
|
67
93
|
* 0.2.0 SMTP support
|
|
68
94
|
* 0.1.0 Initial release with IMAP support and 3-legged OAuth
|
|
69
95
|
|
|
@@ -83,4 +109,4 @@ http://about.me/nfo
|
|
|
83
109
|
|
|
84
110
|
## Copyright
|
|
85
111
|
|
|
86
|
-
Copyright (c)
|
|
112
|
+
Copyright (c) 2011 Silentale SAS. See LICENSE for details.
|
data/lib/gmail_xoauth/version.rb
CHANGED
data/test/helper.rb
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
require 'yaml'
|
|
2
|
+
|
|
3
|
+
require 'rubygems'
|
|
4
|
+
require 'test/unit'
|
|
5
|
+
require 'mocha'
|
|
6
|
+
|
|
7
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
|
8
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
|
9
|
+
require 'gmail_xoauth'
|
|
10
|
+
|
|
11
|
+
# Wanna debug ? Activate the IMAP debug mode, it will show the client/server conversation
|
|
12
|
+
# Net::IMAP.debug = true
|
|
13
|
+
|
|
14
|
+
# SMTP debugging can only be enabled on Net::SMTP instances
|
|
15
|
+
# Net::SMTP.class_eval do
|
|
16
|
+
# def initialize_with_debug(*args)
|
|
17
|
+
# initialize_without_debug(*args)
|
|
18
|
+
# @debug_output = STDERR
|
|
19
|
+
# end
|
|
20
|
+
# alias_method :initialize_without_debug, :initialize
|
|
21
|
+
# alias_method :initialize, :initialize_with_debug
|
|
22
|
+
# end
|
|
23
|
+
|
|
24
|
+
VALID_CREDENTIALS = begin
|
|
25
|
+
YAML.load_file(File.join(File.dirname(__FILE__), 'valid_credentials.yml'))
|
|
26
|
+
rescue Errno::ENOENT
|
|
27
|
+
STDERR.puts %(
|
|
28
|
+
Warning: some tests are disabled because they require valid credentials. To enable them, create a file \"test/valid_credentials.yml\".
|
|
29
|
+
It should contain valid OAuth tokens. Valid tokens can be generated thanks to \"xoauth.py\":http://code.google.com/p/google-mail-xoauth-tools/.
|
|
30
|
+
Of course, this file is .gitignored. Template:
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
:email: someuser@gmail.com
|
|
34
|
+
:consumer_key: anonymous # "anonymous" is a valid value for testing
|
|
35
|
+
:consumer_secret: anonymous # "anonymous" is a valid value for testing
|
|
36
|
+
:token: 1/nE2xBCDOU0429bTeJySE11kRE95qzKQNlfTaaBcDeFg
|
|
37
|
+
:token_secret: 123Z/bMsi9fFhN6qHFWOabcd
|
|
38
|
+
|
|
39
|
+
)
|
|
40
|
+
false
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
class Test::Unit::TestCase
|
|
44
|
+
end
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
require 'helper'
|
|
2
|
+
|
|
3
|
+
class TestImapXoauthAuthenticator < Test::Unit::TestCase
|
|
4
|
+
|
|
5
|
+
def setup
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def test_xoauth_authenticator_is_enabled
|
|
9
|
+
authenticators = Net::IMAP.__send__('class_variable_get', '@@authenticators')
|
|
10
|
+
assert_not_nil authenticators['XOAUTH']
|
|
11
|
+
assert_equal authenticators['XOAUTH'], GmailXoauth::ImapXoauthAuthenticator
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def test_authenticate_with_invalid_credentials
|
|
15
|
+
imap = Net::IMAP.new('imap.gmail.com', 993, usessl = true, certs = nil, verify = false)
|
|
16
|
+
assert_raise(Net::IMAP::NoResponseError) do
|
|
17
|
+
imap.authenticate('XOAUTH', 'roger@moore.com',
|
|
18
|
+
:token => 'a',
|
|
19
|
+
:token_secret => 'b'
|
|
20
|
+
)
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def test_authenticate_with_valid_credentials
|
|
25
|
+
return unless VALID_CREDENTIALS
|
|
26
|
+
|
|
27
|
+
imap = Net::IMAP.new('imap.gmail.com', 993, usessl = true, certs = nil, verify = false)
|
|
28
|
+
imap.authenticate('XOAUTH', VALID_CREDENTIALS[:email],
|
|
29
|
+
:consumer_key => VALID_CREDENTIALS[:consumer_key],
|
|
30
|
+
:consumer_secret => VALID_CREDENTIALS[:consumer_secret],
|
|
31
|
+
:token => VALID_CREDENTIALS[:token],
|
|
32
|
+
:token_secret => VALID_CREDENTIALS[:token_secret]
|
|
33
|
+
)
|
|
34
|
+
mailboxes = imap.list('', '*')
|
|
35
|
+
assert_instance_of Array, mailboxes
|
|
36
|
+
assert_instance_of Net::IMAP::MailboxList, mailboxes.first
|
|
37
|
+
ensure
|
|
38
|
+
imap.disconnect if imap
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def test_2_legged_authenticate_with_invalid_credentials
|
|
42
|
+
imap = Net::IMAP.new('imap.gmail.com', 993, usessl = true, certs = nil, verify = false)
|
|
43
|
+
assert_raise(Net::IMAP::NoResponseError) do
|
|
44
|
+
imap.authenticate('XOAUTH', 'roger@moore.com',
|
|
45
|
+
:two_legged => true,
|
|
46
|
+
:consumer_key => 'a',
|
|
47
|
+
:consumer_secret => 'b'
|
|
48
|
+
)
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def test_2_legged_authenticate_with_valid_credentials
|
|
53
|
+
return unless VALID_CREDENTIALS
|
|
54
|
+
|
|
55
|
+
imap = Net::IMAP.new('imap.gmail.com', 993, usessl = true, certs = nil, verify = false)
|
|
56
|
+
imap.authenticate('XOAUTH', VALID_CREDENTIALS[:email],
|
|
57
|
+
:two_legged => true,
|
|
58
|
+
:consumer_key => VALID_CREDENTIALS[:consumer_key],
|
|
59
|
+
:consumer_secret => VALID_CREDENTIALS[:consumer_secret]
|
|
60
|
+
)
|
|
61
|
+
mailboxes = imap.list('', '*')
|
|
62
|
+
assert_instance_of Array, mailboxes
|
|
63
|
+
assert_instance_of Net::IMAP::MailboxList, mailboxes.first
|
|
64
|
+
ensure
|
|
65
|
+
imap.disconnect if imap
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
end
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
require 'helper'
|
|
2
|
+
|
|
3
|
+
class TestOauthString < Test::Unit::TestCase
|
|
4
|
+
|
|
5
|
+
def setup
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def test_build_oauth_string_should_accept_custom_consumer
|
|
9
|
+
OAuth::Helper.stubs(:generate_key).returns('abc')
|
|
10
|
+
OAuth::Helper.stubs(:generate_timestamp).returns(1274215474)
|
|
11
|
+
|
|
12
|
+
request_url = "https://mail.google.com/mail/b/user_name@gmail.com/imap/"
|
|
13
|
+
oauth_params = {
|
|
14
|
+
:consumer_key => 'c',
|
|
15
|
+
:consumer_secret => 'd',
|
|
16
|
+
:token => 'a',
|
|
17
|
+
:token_secret => 'b',
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
oauth_string = C.new.__send__('build_oauth_string', request_url, oauth_params)
|
|
21
|
+
|
|
22
|
+
assert_equal(
|
|
23
|
+
'oauth_consumer_key="c",oauth_nonce="abc",oauth_signature="eseW9YybDf3fPToiwyLdUwSlfUw%3D",oauth_signature_method="HMAC-SHA1",oauth_timestamp="1274215474",oauth_token="a",oauth_version="1.0"',
|
|
24
|
+
oauth_string
|
|
25
|
+
)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def test_build_oauth_string_should_set_consumer_anonymous_by_default
|
|
29
|
+
OAuth::Helper.stubs(:generate_key).returns('abc')
|
|
30
|
+
OAuth::Helper.stubs(:generate_timestamp).returns(1274215474)
|
|
31
|
+
|
|
32
|
+
request_url = "https://mail.google.com/mail/b/user_name@gmail.com/imap/"
|
|
33
|
+
oauth_params = {
|
|
34
|
+
:token => 'a',
|
|
35
|
+
:token_secret => 'b',
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
oauth_string = C.new.__send__('build_oauth_string', request_url, oauth_params)
|
|
39
|
+
|
|
40
|
+
assert_equal(
|
|
41
|
+
'oauth_consumer_key="anonymous",oauth_nonce="abc",oauth_signature="weu3Z%2Baqn6YUNnSLJmIvUwnCEmo%3D",oauth_signature_method="HMAC-SHA1",oauth_timestamp="1274215474",oauth_token="a",oauth_version="1.0"',
|
|
42
|
+
oauth_string
|
|
43
|
+
)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def test_build_2_legged_oauth_string_should_accept_custom_consumer
|
|
47
|
+
OAuth::Helper.stubs(:generate_key).returns('abc')
|
|
48
|
+
OAuth::Helper.stubs(:generate_timestamp).returns(1274215474)
|
|
49
|
+
|
|
50
|
+
request_url = "https://mail.google.com/mail/b/user_name@gmail.com/imap/?xoauth_requestor_id=user_name%40gmail.com";
|
|
51
|
+
oauth_params = {
|
|
52
|
+
:two_legged => true,
|
|
53
|
+
:consumer_key => 'c',
|
|
54
|
+
:consumer_secret => 'd',
|
|
55
|
+
:xoauth_requestor_id => 'user_name@gmail.com'
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
oauth_string = C.new.__send__('build_oauth_string', request_url, oauth_params)
|
|
59
|
+
|
|
60
|
+
assert_equal(
|
|
61
|
+
'oauth_consumer_key="c",oauth_nonce="abc",oauth_signature="eG6PG7Q%2BPbI%2FNeLLCZ9PvlB%2BUjg%3D",oauth_signature_method="HMAC-SHA1",oauth_timestamp="1274215474",oauth_version="1.0"',
|
|
62
|
+
oauth_string
|
|
63
|
+
)
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def test_build_sasl_client_request
|
|
67
|
+
assert_equal 'GET 1 2', C.new.__send__('build_sasl_client_request', '1', '2')
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
class C
|
|
73
|
+
include GmailXoauth::OauthString
|
|
74
|
+
end
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
require 'helper'
|
|
2
|
+
|
|
3
|
+
class TestSmtpXoauthAuthenticator < Test::Unit::TestCase
|
|
4
|
+
|
|
5
|
+
def setup
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def test_smtp_authenticator_is_enabled
|
|
9
|
+
assert Net::SMTP.new(nil).respond_to?(:auth_xoauth), 'The Net::SMTP class should define the method :auth_xoauth'
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def test_authenticate_with_invalid_credentials
|
|
13
|
+
smtp = Net::SMTP.new('smtp.gmail.com', 587)
|
|
14
|
+
smtp.enable_starttls_auto
|
|
15
|
+
assert_raise(Net::SMTPAuthenticationError) do
|
|
16
|
+
smtp.start('gmail.com', 'roger@moore.com', {:token => 'a', :token_secret => 'b'}, :xoauth)
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def test_authenticate_with_valid_credentials
|
|
21
|
+
return unless VALID_CREDENTIALS
|
|
22
|
+
|
|
23
|
+
smtp = Net::SMTP.new('smtp.gmail.com', 587)
|
|
24
|
+
smtp.enable_starttls_auto
|
|
25
|
+
|
|
26
|
+
secret = {
|
|
27
|
+
:consumer_key => VALID_CREDENTIALS[:consumer_key],
|
|
28
|
+
:consumer_secret => VALID_CREDENTIALS[:consumer_secret],
|
|
29
|
+
:token => VALID_CREDENTIALS[:token],
|
|
30
|
+
:token_secret => VALID_CREDENTIALS[:token_secret],
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
assert_nothing_raised do
|
|
34
|
+
smtp.start('gmail.com', VALID_CREDENTIALS[:email], secret, :xoauth)
|
|
35
|
+
end
|
|
36
|
+
ensure
|
|
37
|
+
smtp.finish if smtp.started?
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def test_2_legged_authenticate_with_invalid_credentials
|
|
41
|
+
smtp = Net::SMTP.new('smtp.gmail.com', 587)
|
|
42
|
+
smtp.enable_starttls_auto
|
|
43
|
+
assert_raise(Net::SMTPAuthenticationError) do
|
|
44
|
+
smtp.start('gmail.com', 'roger@moore.com', {:two_legged => true, :consumer_key => 'a', :consumer_secret => 'b'}, :xoauth)
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def test_2_legged_authenticate_with_valid_credentials
|
|
49
|
+
return unless VALID_CREDENTIALS
|
|
50
|
+
|
|
51
|
+
smtp = Net::SMTP.new('smtp.gmail.com', 587)
|
|
52
|
+
smtp.enable_starttls_auto
|
|
53
|
+
|
|
54
|
+
secret = {
|
|
55
|
+
:two_legged => true,
|
|
56
|
+
:consumer_key => VALID_CREDENTIALS[:consumer_key],
|
|
57
|
+
:consumer_secret => VALID_CREDENTIALS[:consumer_secret],
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
assert_nothing_raised do
|
|
61
|
+
smtp.start('gmail.com', VALID_CREDENTIALS[:email], secret, :xoauth)
|
|
62
|
+
end
|
|
63
|
+
ensure
|
|
64
|
+
smtp.finish if smtp.started?
|
|
65
|
+
end
|
|
66
|
+
end
|
metadata
CHANGED
|
@@ -1,100 +1,91 @@
|
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: gmail_xoauth
|
|
3
|
-
version: !ruby/object:Gem::Version
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
- 0
|
|
7
|
-
- 3
|
|
8
|
-
- 0
|
|
9
|
-
version: 0.3.0
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.3.2
|
|
5
|
+
prerelease:
|
|
10
6
|
platform: ruby
|
|
11
|
-
authors:
|
|
12
|
-
-
|
|
7
|
+
authors:
|
|
8
|
+
- Nicolas Fouché
|
|
13
9
|
autorequire:
|
|
14
10
|
bindir: bin
|
|
15
11
|
cert_chain: []
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
dependencies:
|
|
20
|
-
- !ruby/object:Gem::Dependency
|
|
12
|
+
date: 2012-04-16 00:00:00.000000000 Z
|
|
13
|
+
dependencies:
|
|
14
|
+
- !ruby/object:Gem::Dependency
|
|
21
15
|
name: oauth
|
|
22
|
-
|
|
23
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
|
24
17
|
none: false
|
|
25
|
-
requirements:
|
|
26
|
-
- -
|
|
27
|
-
- !ruby/object:Gem::Version
|
|
28
|
-
segments:
|
|
29
|
-
- 0
|
|
30
|
-
- 3
|
|
31
|
-
- 6
|
|
18
|
+
requirements:
|
|
19
|
+
- - ! '>='
|
|
20
|
+
- !ruby/object:Gem::Version
|
|
32
21
|
version: 0.3.6
|
|
33
22
|
type: :runtime
|
|
34
|
-
version_requirements: *id001
|
|
35
|
-
- !ruby/object:Gem::Dependency
|
|
36
|
-
name: shoulda
|
|
37
23
|
prerelease: false
|
|
38
|
-
|
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
25
|
+
none: false
|
|
26
|
+
requirements:
|
|
27
|
+
- - ! '>='
|
|
28
|
+
- !ruby/object:Gem::Version
|
|
29
|
+
version: 0.3.6
|
|
30
|
+
- !ruby/object:Gem::Dependency
|
|
31
|
+
name: shoulda
|
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
|
39
33
|
none: false
|
|
40
|
-
requirements:
|
|
41
|
-
- -
|
|
42
|
-
- !ruby/object:Gem::Version
|
|
43
|
-
|
|
44
|
-
- 0
|
|
45
|
-
version: "0"
|
|
34
|
+
requirements:
|
|
35
|
+
- - ! '>='
|
|
36
|
+
- !ruby/object:Gem::Version
|
|
37
|
+
version: '0'
|
|
46
38
|
type: :development
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
39
|
+
prerelease: false
|
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
41
|
+
none: false
|
|
42
|
+
requirements:
|
|
43
|
+
- - ! '>='
|
|
44
|
+
- !ruby/object:Gem::Version
|
|
45
|
+
version: '0'
|
|
46
|
+
description: Get access to Gmail IMAP and STMP via OAuth, using the standard Ruby
|
|
47
|
+
Net libraries
|
|
48
|
+
email:
|
|
49
|
+
- nicolas.fouche@gmail.com
|
|
51
50
|
executables: []
|
|
52
|
-
|
|
53
51
|
extensions: []
|
|
54
|
-
|
|
55
52
|
extra_rdoc_files: []
|
|
56
|
-
|
|
57
|
-
files:
|
|
53
|
+
files:
|
|
58
54
|
- lib/gmail_xoauth/imap_xoauth_authenticator.rb
|
|
59
55
|
- lib/gmail_xoauth/oauth_string.rb
|
|
60
56
|
- lib/gmail_xoauth/smtp_xoauth_authenticator.rb
|
|
61
57
|
- lib/gmail_xoauth/version.rb
|
|
62
58
|
- lib/gmail_xoauth.rb
|
|
59
|
+
- test/helper.rb
|
|
60
|
+
- test/test_imap_xoauth_authenticator.rb
|
|
61
|
+
- test/test_oauth_string.rb
|
|
62
|
+
- test/test_smtp_xoauth_authenticator.rb
|
|
63
63
|
- LICENSE
|
|
64
64
|
- README.markdown
|
|
65
|
-
|
|
66
|
-
homepage: http://geeks.silentale.com/2010/05/26/gmail-and-oauth-ruby-gem
|
|
65
|
+
homepage: https://github.com/nfo/gmail_xoauth
|
|
67
66
|
licenses: []
|
|
68
|
-
|
|
69
67
|
post_install_message:
|
|
70
|
-
rdoc_options:
|
|
68
|
+
rdoc_options:
|
|
71
69
|
- --charset=UTF-8
|
|
72
|
-
require_paths:
|
|
70
|
+
require_paths:
|
|
73
71
|
- lib
|
|
74
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
|
72
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
75
73
|
none: false
|
|
76
|
-
requirements:
|
|
77
|
-
- -
|
|
78
|
-
- !ruby/object:Gem::Version
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
version: "0"
|
|
82
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
74
|
+
requirements:
|
|
75
|
+
- - ! '>='
|
|
76
|
+
- !ruby/object:Gem::Version
|
|
77
|
+
version: '0'
|
|
78
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
83
79
|
none: false
|
|
84
|
-
requirements:
|
|
85
|
-
- -
|
|
86
|
-
- !ruby/object:Gem::Version
|
|
87
|
-
segments:
|
|
88
|
-
- 1
|
|
89
|
-
- 3
|
|
90
|
-
- 6
|
|
80
|
+
requirements:
|
|
81
|
+
- - ! '>='
|
|
82
|
+
- !ruby/object:Gem::Version
|
|
91
83
|
version: 1.3.6
|
|
92
84
|
requirements: []
|
|
93
|
-
|
|
94
85
|
rubyforge_project:
|
|
95
|
-
rubygems_version: 1.
|
|
86
|
+
rubygems_version: 1.8.21
|
|
96
87
|
signing_key:
|
|
97
88
|
specification_version: 3
|
|
98
|
-
summary: Get access to Gmail IMAP and STMP via OAuth, using the standard Ruby Net
|
|
89
|
+
summary: Get access to Gmail IMAP and STMP via OAuth, using the standard Ruby Net
|
|
90
|
+
libraries
|
|
99
91
|
test_files: []
|
|
100
|
-
|