omniauth-taobao 1.0.1

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/.gitignore ADDED
@@ -0,0 +1,4 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in omniauth-taobao.gemspec
4
+ gemspec
data/README.md ADDED
@@ -0,0 +1,72 @@
1
+ ### How does omniauth-taobao work with Taobao
2
+
3
+ #### API permission levels
4
+
5
+ Taobao has three API permission levels
6
+
7
+ * Default API (Requires additional approval from Taobao)
8
+ * Buyer API
9
+ * Seller API
10
+
11
+ These permission levels are granted during your app application process based on your app type.
12
+ To configure omniauth-taobao work with the correct type, please use something like this (omniauth + device example in devise.rb file):
13
+
14
+ ```
15
+ config.omniauth :taobao, "Your_APP_Key", "Your_APP_Secret", :strategy_class => OmniAuth::Strategies::Taobao, :client_options => {:user_type => :seller}
16
+
17
+ ```
18
+
19
+ The ```:user_type``` option can be one of ```:default```,```:buyer``` and ```:seller```.
20
+
21
+ #### User Get Info Response
22
+
23
+ Different API Permission levels needs to use different API to obtain user's info.
24
+
25
+ The documentation for these API can be found [here](http://open.taobao.com/doc/api_cat_detail.htm?spm=0.0.0.0.JJ4lrk&cat_id=1&category_id=102)
26
+
27
+ omniauth-taobao will chose the proper API method based on your ```:user_type``` option.
28
+
29
+ #### Sample API Response (For Seller API)
30
+
31
+ ```
32
+ --- !ruby/hash:OmniAuth::AuthHash
33
+ provider: taobao
34
+ uid:
35
+ info: !ruby/hash:OmniAuth::AuthHash::InfoHash
36
+ uid:
37
+ nickname: UserNickName
38
+ email:
39
+ user_info: !ruby/hash:OmniAuth::AuthHash
40
+ alipay_bind: bind
41
+ consumer_protection: true/false
42
+ nick: UserNickName
43
+ seller_credit: !ruby/hash:OmniAuth::AuthHash
44
+ good_num: 7
45
+ level: 1
46
+ score: 7
47
+ total_num: 7
48
+ sex: m
49
+ status: normal
50
+ type: C
51
+ user_id: 1212121212
52
+ extra: !ruby/hash:OmniAuth::AuthHash
53
+ user_hash: !ruby/hash:OmniAuth::AuthHash
54
+ alipay_bind: bind
55
+ consumer_protection: true
56
+ nick: UserNickName
57
+ seller_credit: !ruby/hash:OmniAuth::AuthHash
58
+ good_num: 7
59
+ level: 1
60
+ score: 7
61
+ total_num: 7
62
+ sex: m
63
+ status: normal
64
+ type: C
65
+ user_id: 1212121212
66
+ credentials: !ruby/hash:OmniAuth::AuthHash
67
+ token: Token
68
+ refresh_token: refresh_token
69
+ expires_at: 13722222220
70
+ expires: true
71
+ extra: !ruby/hash:OmniAuth::AuthHash {}
72
+ ```
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,2 @@
1
+ require "omniauth-taobao/version"
2
+ require "omniauth/strategies/taobao"
@@ -0,0 +1,5 @@
1
+ module Omniauth
2
+ module Taobao
3
+ VERSION = "1.0.1"
4
+ end
5
+ end
@@ -0,0 +1,75 @@
1
+ # lots of stuff taken from https://github.com/intridea/omniauth/blob/0-3-stable/oa-oauth/lib/omniauth/strategies/oauth2/taobao.rb
2
+ require 'omniauth-oauth2'
3
+ module OmniAuth
4
+ module Strategies
5
+ class Taobao < OmniAuth::Strategies::OAuth2
6
+ USER_METHODS = {
7
+ :default => 'taobao.user.get',
8
+ :buyer => 'taobao.user.buyer.get',
9
+ :seller => 'taobao.user.seller.get'
10
+ }
11
+
12
+ USER_RESPONSE = {
13
+ :default => 'user_get_response',
14
+ :buyer => 'user_buyer_get_response',
15
+ :seller => 'user_seller_get_response'
16
+ }
17
+
18
+ option :client_options, {
19
+ :authorize_url => 'https://oauth.taobao.com/authorize',
20
+ :token_url => 'https://oauth.taobao.com/token',
21
+ }
22
+ def request_phase
23
+ options[:state] ||= '1'
24
+ super
25
+ end
26
+
27
+ uid { raw_info['uid'] }
28
+
29
+ info do
30
+ {
31
+ 'uid' => raw_info['uid'],
32
+ 'nickname' => raw_info['nick'],
33
+ 'email' => raw_info['email'],
34
+ 'user_info' => raw_info,
35
+ 'extra' => {
36
+ 'user_hash' => raw_info,
37
+ },
38
+ }
39
+ end
40
+
41
+ def raw_info
42
+ url = 'http://gw.api.taobao.com/router/rest'
43
+
44
+ user_type = options.client_options.user_type || :default
45
+ query_param = {
46
+ :app_key => options.client_id,
47
+
48
+ # TODO to be moved in options
49
+ # TODO add more default fields (http://my.open.taobao.com/apidoc/index.htm#categoryId:1-dataStructId:3)
50
+ :fields => 'user_id,uid,nick,sex,buyer_credit,seller_credit,location,created,last_visit,birthday,type,status,alipay_no,alipay_account,alipay_account,email,consumer_protection,alipay_bind',
51
+ :format => 'json',
52
+ :method => USER_METHODS[user_type],
53
+ :session => @access_token.token,
54
+ :sign_method => 'md5',
55
+ :timestamp => Time.now.strftime('%Y-%m-%d %H:%M:%S'),
56
+ :v => '2.0'
57
+ }
58
+ query_param = generate_sign(query_param)
59
+ res = Net::HTTP.post_form(URI.parse(url), query_param)
60
+ response = MultiJson.decode(res.body)
61
+ raise OmniAuth::Error.new(response['error_response']) if response.has_key?('error_response')
62
+ @raw_info ||= response[USER_RESPONSE[user_type]]['user']
63
+ rescue ::Errno::ETIMEDOUT
64
+ raise ::Timeout::Error
65
+ end
66
+
67
+ def generate_sign(params)
68
+ # params.sort.collect { |k, v| "#{k}#{v}" }
69
+ str = options.client_secret + params.sort {|a,b| "#{a[0]}"<=>"#{b[0]}"}.flatten.join + options.client_secret
70
+ params['sign'] = Digest::MD5.hexdigest(str).upcase!
71
+ params
72
+ end
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,26 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "omniauth-taobao/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "omniauth-taobao"
7
+ s.version = Omniauth::Taobao::VERSION
8
+ s.authors = ["Scott Ballantyne"]
9
+ s.email = ["ussballantyne@gmail.com"]
10
+ s.homepage = ""
11
+ s.summary = %q{an omniauth strategy for taobao}
12
+ s.description = %q{an omniauth strategy for taobao}
13
+
14
+ s.rubyforge_project = "omniauth-taobao"
15
+ s.add_dependency 'omniauth', '~> 1.1.4'
16
+ s.add_dependency 'omniauth-oauth2', '~> 1.1.1'
17
+
18
+ s.files = `git ls-files`.split("\n")
19
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
20
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
21
+ s.require_paths = ["lib"]
22
+
23
+ # specify any dependencies here; for example:
24
+ # s.add_development_dependency "rspec"
25
+ # s.add_runtime_dependency "rest-client"
26
+ end
metadata ADDED
@@ -0,0 +1,85 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: omniauth-taobao
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Scott Ballantyne
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-06-30 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: omniauth
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 1.1.4
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: 1.1.4
30
+ - !ruby/object:Gem::Dependency
31
+ name: omniauth-oauth2
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ~>
36
+ - !ruby/object:Gem::Version
37
+ version: 1.1.1
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: 1.1.1
46
+ description: an omniauth strategy for taobao
47
+ email:
48
+ - ussballantyne@gmail.com
49
+ executables: []
50
+ extensions: []
51
+ extra_rdoc_files: []
52
+ files:
53
+ - .gitignore
54
+ - Gemfile
55
+ - README.md
56
+ - Rakefile
57
+ - lib/omniauth-taobao.rb
58
+ - lib/omniauth-taobao/version.rb
59
+ - lib/omniauth/strategies/taobao.rb
60
+ - omniauth-taobao.gemspec
61
+ homepage: ''
62
+ licenses: []
63
+ post_install_message:
64
+ rdoc_options: []
65
+ require_paths:
66
+ - lib
67
+ required_ruby_version: !ruby/object:Gem::Requirement
68
+ none: false
69
+ requirements:
70
+ - - ! '>='
71
+ - !ruby/object:Gem::Version
72
+ version: '0'
73
+ required_rubygems_version: !ruby/object:Gem::Requirement
74
+ none: false
75
+ requirements:
76
+ - - ! '>='
77
+ - !ruby/object:Gem::Version
78
+ version: '0'
79
+ requirements: []
80
+ rubyforge_project: omniauth-taobao
81
+ rubygems_version: 1.8.25
82
+ signing_key:
83
+ specification_version: 3
84
+ summary: an omniauth strategy for taobao
85
+ test_files: []