omniauth-ebay-oauth 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 76629a38f44a3dca39c9b623f58fec1e984c3d92cf395cbfaa06f6f4a145789c
4
- data.tar.gz: f013e52aa87b50efb83d4db7c4c5c896f230809f1482bf035fd32f0acc7a5beb
3
+ metadata.gz: 4fb141a515171c5891e73fa328ffe959abbea166644a927f43f546143b9384ad
4
+ data.tar.gz: fcdba1511fd15fd35f0dbc21b52ef5ebc37c319b744dd344de550410bcfb5dd4
5
5
  SHA512:
6
- metadata.gz: d2f3ca9e26bd5533b3f0abcb59a34b3a1ce7fdd2271c8cb911fd8fd491da19519d354dba3152cdc0fd9c752bba2fe592a6c6458cf21f8a81c153d9f385dcf534
7
- data.tar.gz: af48978d15b1750b595da5c65d67e448ec1b96631efaab0711d3780445452c15f97c53bf2053dd66cc20657fe2ae458d8d6752b0bd28cbcba8021550c5039146
6
+ metadata.gz: 1035eaf825e69b8e9de0a6eefcd5054228b7366c10ccfd81ce5370f6998e7d03650c40c65e70709ea635a43bc70ce596064b941f3a52a69c9f109fda3f45988f
7
+ data.tar.gz: b173b770f3d439d956cd4c287201b4eb523392a3bda50b10e4bc3fe93d0002ef4a45cd63884765ae48cf7756cf86b8c67ee4ed615c212ee61494e66227309457
@@ -4,6 +4,14 @@ All notable changes to this project will be documented in this file.
4
4
  The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
5
5
  and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
6
6
 
7
+ ## [0.3.0] - 2018-03-23
8
+
9
+ ### Added
10
+
11
+ - Handling of suspended users login. @Envek
12
+
13
+ Fail authentication with specific code so application can handle it.
14
+
7
15
  ## [0.2.0] - 2018-03-16
8
16
 
9
17
  ### Changed
@@ -2,8 +2,10 @@
2
2
 
3
3
  module OmniAuth
4
4
  module EbayOauth
5
- class FailureResponseCode < StandardError; end
6
- class FailureResponseResult < StandardError; end
7
- class UnsupportedSchemaError < StandardError; end
5
+ class Error < RuntimeError; end
6
+ class FailureResponseCode < Error; end
7
+ class FailureResponseResult < Error; end
8
+ class UnsupportedSchemaError < Error; end
9
+ class UserSuspended < Error; end
8
10
  end
9
11
  end
@@ -19,6 +19,10 @@ module OmniAuth
19
19
  'X-EBAY-API-CALL-NAME' => 'GetUser'
20
20
  }.freeze
21
21
 
22
+ ERRORS = {
23
+ '841' => UserSuspended
24
+ }.freeze
25
+
22
26
  def initialize(access_token, request: USER_REQUEST,
23
27
  user_info_endpoint:, read_timeout:, **_args)
24
28
  @access_token = access_token
@@ -45,7 +49,13 @@ module OmniAuth
45
49
 
46
50
  def ensure_success_result(body)
47
51
  return if body.dig(*STATUS_PATH) == SUCCESS_CODE
48
- raise FailureResponseResult, body
52
+
53
+ error_code = body.dig('GetUserResponse', 'Errors', 'ErrorCode')
54
+ raise(FailureResponseResult, body) unless ERRORS.key?(error_code)
55
+
56
+ err_class = ERRORS[error_code]
57
+ err_message = body.dig('GetUserResponse', 'Errors', 'LongMessage')
58
+ raise err_class, err_message
49
59
  end
50
60
 
51
61
  def http
@@ -2,6 +2,6 @@
2
2
 
3
3
  module OmniAuth
4
4
  module EbayOauth
5
- VERSION = '0.2.0'
5
+ VERSION = '0.3.0'
6
6
  end
7
7
  end
@@ -33,6 +33,12 @@ module OmniAuth
33
33
  super
34
34
  end
35
35
 
36
+ def callback_phase
37
+ super
38
+ rescue ::OmniAuth::EbayOauth::UserSuspended => e
39
+ fail!(:user_suspended, e)
40
+ end
41
+
36
42
  def callback_url
37
43
  options.callback_url
38
44
  end
@@ -7,8 +7,8 @@ require 'omniauth/ebay-oauth/version'
7
7
  Gem::Specification.new do |spec|
8
8
  spec.name = 'omniauth-ebay-oauth'
9
9
  spec.version = OmniAuth::EbayOauth::VERSION
10
- spec.authors = ['Ignat Zakrevsky']
11
- spec.email = ['iezakrevsky@gmail.com']
10
+ spec.authors = ['Ignat Zakrevsky', 'Andrey Novikov']
11
+ spec.email = ['iezakrevsky@gmail.com', 'envek@envek.name']
12
12
  spec.summary = 'OmniAuth strategy for new eBay OAuth API'
13
13
  spec.homepage = 'https://github.com/evilmartians/omniauth-ebay-oauth'
14
14
  spec.license = 'MIT'
@@ -0,0 +1,18 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <GetUserResponse xmlns="urn:ebay:apis:eBLBaseComponents">
3
+ <Timestamp>2018-03-21T09:22:11.985Z</Timestamp>
4
+ <Ack>Failure</Ack>
5
+ <Errors>
6
+ <ShortMessage>Requested user is suspended.</ShortMessage>
7
+ <LongMessage>The account for user ID \"evilenvek\" specified in this request is suspended. Sorry, you can only request information for current users.</LongMessage>
8
+ <ErrorCode>841</ErrorCode>
9
+ <SeverityCode>Error</SeverityCode>
10
+ <ErrorClassification>RequestError</ErrorClassification>
11
+ <ErrorParameters>
12
+ <ParamID>0</ParamID>
13
+ <Value>evilenvek</Value>
14
+ </ErrorParameters>
15
+ </Errors>
16
+ <Version>1045</Version>
17
+ <Build>E1045_CORE_APISIGNIN_18614794_R</Build>
18
+ </GetUserResponse>
@@ -15,6 +15,7 @@ RSpec.describe OmniAuth::EbayOauth::UserInfoRequest do
15
15
  let(:request_headers) { YAML.load_file('spec/fixtures/request_headers.yml') }
16
16
  let(:failure_result) { File.read('spec/fixtures/result_failure.xml') }
17
17
  let(:success_result) { File.read('spec/fixtures/result_success.xml') }
18
+ let(:user_suspended_result) { File.read('spec/fixtures/user_suspended.xml') }
18
19
 
19
20
  it 'raises error if eBay API request returned non-successful code' do
20
21
  stub_request(:post, endpoint)
@@ -39,4 +40,12 @@ RSpec.describe OmniAuth::EbayOauth::UserInfoRequest do
39
40
  expect(subject.call.fetch('GetUserResponse').keys)
40
41
  .to eql %w[xmlns Timestamp Ack Version Build User]
41
42
  end
43
+
44
+ it 'raises error if eBay user is suspended' do
45
+ stub_request(:post, endpoint)
46
+ .with(body: body, headers: request_headers)
47
+ .to_return(status: 200, body: user_suspended_result, headers: {})
48
+ expect { subject.call }
49
+ .to raise_error(OmniAuth::EbayOauth::UserSuspended)
50
+ end
42
51
  end
@@ -3,6 +3,8 @@
3
3
  require 'spec_helper'
4
4
 
5
5
  RSpec.describe OmniAuth::Strategies::EbayOauth do
6
+ let(:options) { {} }
7
+
6
8
  subject { described_class.new(nil, options) }
7
9
 
8
10
  describe '#callback_url' do
@@ -14,8 +16,6 @@ RSpec.describe OmniAuth::Strategies::EbayOauth do
14
16
  end
15
17
 
16
18
  describe '#options' do
17
- let(:options) { {} }
18
-
19
19
  before { subject.setup_phase }
20
20
 
21
21
  it 'default mode is sandbox' do
@@ -33,8 +33,6 @@ RSpec.describe OmniAuth::Strategies::EbayOauth do
33
33
  end
34
34
 
35
35
  context "when scopes aren't passed" do
36
- let(:options) { {} }
37
-
38
36
  it 'uses empty string as scope' do
39
37
  expect(subject.options.scope).to eql ''
40
38
  end
@@ -99,7 +97,6 @@ RSpec.describe OmniAuth::Strategies::EbayOauth do
99
97
 
100
98
  describe '#user_info' do
101
99
  let(:access_token) { instance_double(OAuth2::AccessToken, token: :token) }
102
- let(:options) { {} }
103
100
  let(:user_info) { instance_double(OmniAuth::EbayOauth::UserInfo) }
104
101
  let(:request) do
105
102
  instance_double(OmniAuth::EbayOauth::UserInfoRequest, call: {})
@@ -120,8 +117,6 @@ RSpec.describe OmniAuth::Strategies::EbayOauth do
120
117
 
121
118
  describe '#credentials' do
122
119
  let(:access_token) { OAuth2::AccessToken.new(client, token, opts) }
123
- let(:options) { {} }
124
-
125
120
  let(:client) { instance_double(OAuth2::Client) }
126
121
  let(:token) { 'v^1.1#i^1#f^0#I^3#r^0#p^3#t^H4sIAAAAAAAAAOlongstringtoken' }
127
122
  let(:opts) do
@@ -144,4 +139,20 @@ RSpec.describe OmniAuth::Strategies::EbayOauth do
144
139
  .to be_between(current_time, current_time + expiration_time)
145
140
  end
146
141
  end
142
+
143
+ describe '#callback_phase' do
144
+ context 'when user is suspended' do
145
+ before do
146
+ allow(subject).to receive(:request) do
147
+ raise OmniAuth::EbayOauth::UserSuspended
148
+ end
149
+ allow(subject).to receive(:fail!)
150
+ end
151
+
152
+ it 'fails with user_suspended message' do
153
+ subject.callback_phase
154
+ expect(subject).to have_received(:fail!).with(:user_suspended, anything)
155
+ end
156
+ end
157
+ end
147
158
  end
metadata CHANGED
@@ -1,14 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: omniauth-ebay-oauth
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ignat Zakrevsky
8
+ - Andrey Novikov
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2018-03-16 00:00:00.000000000 Z
12
+ date: 2018-03-23 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
15
  name: omniauth
@@ -125,6 +126,7 @@ dependencies:
125
126
  description:
126
127
  email:
127
128
  - iezakrevsky@gmail.com
129
+ - envek@envek.name
128
130
  executables: []
129
131
  extensions: []
130
132
  extra_rdoc_files: []
@@ -150,6 +152,7 @@ files:
150
152
  - spec/fixtures/request_headers.yml
151
153
  - spec/fixtures/result_failure.xml
152
154
  - spec/fixtures/result_success.xml
155
+ - spec/fixtures/user_suspended.xml
153
156
  - spec/omniauth/ebay-oauth/user_info_request_spec.rb
154
157
  - spec/omniauth/ebay-oauth/user_info_spec.rb
155
158
  - spec/omniauth/strategies/ebay_oauth_spec.rb