gmail_xoauth 0.4.1 → 0.4.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: ada8e1bb60133f9f4e64470edfb71d6d3088c11f
4
+ data.tar.gz: c1ad5cd94d78ce593d9bfbefc7d74e8261960728
5
+ SHA512:
6
+ metadata.gz: 485c6cf1092f97c72b8e0482faab12d0f8cff92c06080ac5026eb82054dd8fef2f9592d6f0a40258e249cd6ddfe395e89498e7f99c1b9d1b8962079a315fa022
7
+ data.tar.gz: d89e40b5c4d6fd08b5347f669a9f27ba81ad12f6c680b6415631580cc9e65b796230567e660ea581926a3939a9ba68f42b286b211f91627dc6992246cc5dddad
@@ -1,4 +1,4 @@
1
- # gmail_xoauth [![Dependency Status](https://gemnasium.com/nfo/gmail_xoauth.png)](https://gemnasium.com/nfo/gmail_xoauth)
1
+ # gmail_xoauth [![Gem Version](https://badge.fury.io/rb/gmail_xoauth.png)](http://badge.fury.io/rb/gmail_xoauth) [![Dependency Status](https://gemnasium.com/nfo/gmail_xoauth.png)](https://gemnasium.com/nfo/gmail_xoauth)
2
2
 
3
3
  Get access to [Gmail IMAP and STMP via OAuth2](https://developers.google.com/google-apps/gmail/xoauth2_protocol) and [OAuth 1.0a](https://developers.google.com/google-apps/gmail/oauth_protocol), using the standard Ruby Net libraries.
4
4
 
@@ -14,9 +14,11 @@ The gem supports 3-legged OAuth, and 2-legged OAuth for Google Apps Business or
14
14
 
15
15
  You can generate and validate your OAuth 2.0 tokens thanks to the [oauth2.py tool](http://code.google.com/p/google-mail-oauth2-tools/wiki/OAuth2DotPyRunThrough).
16
16
 
17
- Create your API project in the [Google APIs console](https://code.google.com/apis/console/), from the "API Access" tab.
17
+ Create your API project in the [Google APIs console](https://code.google.com/apis/console/), from the menu "APIs and auth > Credentials". Click on "Create new Client ID", choose "Installed Application" and "Other".
18
18
 
19
- $ python oauth2.py --generate_oauth2_token --client_id=364545978226.apps.googleusercontent.com --client_secret=zNrNsBzOOnQy8_O-8LkofeTR
19
+ Then go to the menu "APIs and auth > Consent screen" and enter an email address and product name.
20
+
21
+ $ python oauth2.py --generate_oauth2_token --client_id=423906513574-o9v6kqt89lefrbfv1f3394u9rebfgv6n.apps.googleusercontent.com --client_secret=5SfdvZsYagblukE5VAhERjxZ
20
22
 
21
23
  ### IMAP OAuth 2.0
22
24
 
@@ -118,14 +120,13 @@ smtp.finish
118
120
 
119
121
  ## Compatibility
120
122
 
121
- Tested on Ruby MRI 1.8.6, 1.8.7, 1.9.1, 1.9.2 and 1.9.3. Feel free to send me a message if you tested this code with other implementations of Ruby.
123
+ Tested on Ruby MRI 1.8.6, 1.8.7, 1.9.x and 2.1.x. Feel free to send me a message if you tested this code with other implementations of Ruby.
122
124
 
123
125
  The only external dependency is the [oauth gem](http://rubygems.org/gems/oauth).
124
126
 
125
127
  ## History
126
128
 
127
- * 0.4.1 Changed to way to give the OAuth 2.0 token, see https://github.com/nfo/gmail_xoauth/commit/b7b936cfb094c2fc9b8e9e48526906191423cb88
128
- * 0.4.0 [XOAUTH2](https://developers.google.com/google-apps/gmail/xoauth2_protocol) support, thanks to [glongman](https://github.com/glongman)
129
+ * 0.4.1 [XOAUTH2](https://developers.google.com/google-apps/gmail/xoauth2_protocol) support, thanks to [glongman](https://github.com/glongman)
129
130
  * 0.3.2 New email for the maintainer
130
131
  * 0.3.1 2-legged OAuth support confirmed by [BobDohnal](https://github.com/BobDohnal)
131
132
  * 0.3.0 Experimental 2-legged OAuth support, thanks to [wojciech](https://github.com/wojciech)
@@ -133,7 +134,7 @@ The only external dependency is the [oauth gem](http://rubygems.org/gems/oauth).
133
134
  * 0.1.0 Initial release with IMAP support and 3-legged OAuth
134
135
 
135
136
  ## Note on Patches/Pull Requests
136
-
137
+
137
138
  * Fork the project.
138
139
  * Make your feature addition or bug fix.
139
140
  * Add tests for it. This is important so I don't break it in a
@@ -148,4 +149,4 @@ http://about.me/nfo
148
149
 
149
150
  ## License
150
151
 
151
- See LICENSE for details.
152
+ See LICENSE for details.
@@ -3,14 +3,31 @@ require 'base64'
3
3
 
4
4
  module GmailXoauth
5
5
  module SmtpXoauth2Authenticator
6
-
6
+
7
+ def send_xoauth2(auth_token)
8
+ critical {
9
+ get_response("AUTH XOAUTH2 #{auth_token}")
10
+ }
11
+ end
12
+ private :send_xoauth2
13
+
14
+ def get_final_status
15
+ critical {
16
+ get_response("")
17
+ }
18
+ end
19
+ private :get_final_status
20
+
7
21
  def auth_xoauth2(user, oauth2_token)
8
22
  check_auth_args user, oauth2_token
9
23
 
10
24
  auth_string = build_oauth2_string(user, oauth2_token)
11
- res = critical {
12
- get_response("AUTH XOAUTH2 #{base64_encode(auth_string)}")
13
- }
25
+ res = send_xoauth2(base64_encode(auth_string))
26
+
27
+ # See note about SMTP protocol exchange in https://developers.google.com/gmail/xoauth2_protocol
28
+ if res.continue?
29
+ res = get_final_status
30
+ end
14
31
 
15
32
  check_auth_response res
16
33
  res
@@ -1,3 +1,3 @@
1
1
  module GmailXoauth
2
- VERSION = "0.4.1"
3
- end
2
+ VERSION = "0.4.2"
3
+ end
@@ -2,7 +2,7 @@ require 'yaml'
2
2
 
3
3
  require 'rubygems'
4
4
  require 'test/unit'
5
- require 'mocha'
5
+ require 'mocha/test_unit'
6
6
 
7
7
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
8
8
  $LOAD_PATH.unshift(File.dirname(__FILE__))
@@ -29,4 +29,30 @@ class TestSmtpXoauthAuthenticator < Test::Unit::TestCase
29
29
  ensure
30
30
  smtp.finish if smtp && smtp.started?
31
31
  end
32
+
33
+ # Test the handling of 3xx response to an "AUTH XOAUTH2" request... client
34
+ # should send a "\r\n" to get the actual error that occurred.
35
+ #
36
+ # See note about SMTP protocol exchange in https://developers.google.com/
37
+ # gmail/xoauth2_protocol
38
+ #
39
+ def test_authenticate_with_continuation
40
+ smtp = Net::SMTP.new('smtp.gmail.com', 587)
41
+
42
+ # Stub return from initial "AUTH XOAUTH2" request as well as the empty line sent to get final error
43
+ smtp.stubs(:send_xoauth2).returns(Net::SMTP::Response.parse("334 eyJzdGF0dXMiOiI0MDAiLCJzY2hlbWVzIjoiQmVhcmVyIiwic2NvcGUiOiJodHRwczovL21haWwuZ29vZ2xlLmNvbS8ifQ=="))
44
+ smtp.stubs(:get_final_status).returns(Net::SMTP::Response.parse("454 4.7.0 Too many login attempts, please try again later. j63sm3521185itj.19 - gsmtp"))
45
+
46
+ smtp.enable_starttls_auto
47
+
48
+ # Validate an error is still raised
49
+ ex = assert_raise(Net::SMTPAuthenticationError) do
50
+ smtp.start('gmail.com', 'roger@moore.com', 'a', :xoauth2)
51
+ end
52
+
53
+ # ...and that the 334 is not passed back to the caller.
54
+ assert_equal("454 4.7.0 Too many login attempts, please try again later. j63sm3521185itj.19 - gsmtp", ex.message)
55
+ ensure
56
+ smtp.finish if smtp && smtp.started?
57
+ end
32
58
  end
metadata CHANGED
@@ -1,46 +1,55 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gmail_xoauth
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
5
- prerelease:
4
+ version: 0.4.2
6
5
  platform: ruby
7
6
  authors:
8
7
  - Nicolas Fouché
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2012-09-16 00:00:00.000000000 Z
11
+ date: 2016-08-30 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: oauth
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - ">="
20
18
  - !ruby/object:Gem::Version
21
19
  version: 0.3.6
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ! '>='
24
+ - - ">="
28
25
  - !ruby/object:Gem::Version
29
26
  version: 0.3.6
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: shoulda
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ! '>='
31
+ - - ">="
36
32
  - !ruby/object:Gem::Version
37
33
  version: '0'
38
34
  type: :development
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
- - - ! '>='
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: mocha
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
44
53
  - !ruby/object:Gem::Version
45
54
  version: '0'
46
55
  description: Get access to Gmail IMAP and STMP via OAuth, using the standard Ruby
@@ -51,45 +60,44 @@ executables: []
51
60
  extensions: []
52
61
  extra_rdoc_files: []
53
62
  files:
63
+ - LICENSE
64
+ - README.markdown
65
+ - lib/gmail_xoauth.rb
54
66
  - lib/gmail_xoauth/imap_xoauth2_authenticator.rb
55
67
  - lib/gmail_xoauth/imap_xoauth_authenticator.rb
56
68
  - lib/gmail_xoauth/oauth_string.rb
57
69
  - lib/gmail_xoauth/smtp_xoauth2_authenticator.rb
58
70
  - lib/gmail_xoauth/smtp_xoauth_authenticator.rb
59
71
  - lib/gmail_xoauth/version.rb
60
- - lib/gmail_xoauth.rb
61
72
  - test/helper.rb
62
73
  - test/test_imap_xoauth2_authenticator.rb
63
74
  - test/test_imap_xoauth_authenticator.rb
64
75
  - test/test_oauth_string.rb
65
76
  - test/test_smtp_xoauth2_authenticator.rb
66
77
  - test/test_smtp_xoauth_authenticator.rb
67
- - LICENSE
68
- - README.markdown
69
78
  homepage: https://github.com/nfo/gmail_xoauth
70
79
  licenses: []
80
+ metadata: {}
71
81
  post_install_message:
72
82
  rdoc_options:
73
- - --charset=UTF-8
83
+ - "--charset=UTF-8"
74
84
  require_paths:
75
85
  - lib
76
86
  required_ruby_version: !ruby/object:Gem::Requirement
77
- none: false
78
87
  requirements:
79
- - - ! '>='
88
+ - - ">="
80
89
  - !ruby/object:Gem::Version
81
90
  version: '0'
82
91
  required_rubygems_version: !ruby/object:Gem::Requirement
83
- none: false
84
92
  requirements:
85
- - - ! '>='
93
+ - - ">="
86
94
  - !ruby/object:Gem::Version
87
95
  version: 1.3.6
88
96
  requirements: []
89
97
  rubyforge_project:
90
- rubygems_version: 1.8.23
98
+ rubygems_version: 2.4.5.1
91
99
  signing_key:
92
- specification_version: 3
100
+ specification_version: 4
93
101
  summary: Get access to Gmail IMAP and STMP via OAuth, using the standard Ruby Net
94
102
  libraries
95
103
  test_files: []