xoauth 0.2.5 → 0.2.6

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9ff36db4fe2bd2c912ff958062f467afccd84cd8
4
- data.tar.gz: 2c101b864a19b76e600f7daea968c60b5e0ac1f1
3
+ metadata.gz: a716f73ea3176bb4780244190b31e8d1df2be885
4
+ data.tar.gz: 964292a77efdb330133bf38fb36ce20ec90aeba5
5
5
  SHA512:
6
- metadata.gz: 3484f1c7bef635ab0281791228b833c85b4dbdeae9c528b14d3e332f4da290a7f3df60b9389fe9590e587dd667240915f7231bbb82604b2a91d2cb33752f19ac
7
- data.tar.gz: da580e963aeee725068c8aff2ab3e2355e8883f2ea844a30927f69be99b9885f9a3e9897be184057242339be74a526ff2b92e7c3559f367cc51cfa8f96f9660a
6
+ metadata.gz: 92f7ea7e579ef9cea6bfcebfcaad37b2b63388d4a2ca56ccdf6ec05670a40327d32ab02b504da0d889d39ceb5437cd25c74c5116d7a5dc3b696ac14fc08efcf5
7
+ data.tar.gz: c8e367a6ac675f5cd4e88a9163ec843f77819c449db189f90e2250388a5517bd7eb16ee87cd6b11c948872ca45be84e01cdc85f367306a48a8ac09b12a7912e6
data/README.md CHANGED
@@ -1,13 +1,13 @@
1
1
  # Oauth
2
2
 
3
- TODO: Write a gem description
3
+ Chinese Social network (weibo/qq/weixin currently) authentication with mongoid.
4
4
 
5
5
  ## Installation
6
6
 
7
7
  Add this line to your application's Gemfile:
8
8
 
9
9
  ```ruby
10
- gem 'oauth'
10
+ gem 'xoauth', :require => 'oauth'
11
11
  ```
12
12
 
13
13
  And then execute:
@@ -16,15 +16,40 @@ And then execute:
16
16
 
17
17
  Or install it yourself as:
18
18
 
19
- $ gem install oauth
19
+ $ gem install xoauth
20
20
 
21
21
  ## Usage
22
22
 
23
- TODO: Write usage instructions here
23
+ ```ruby
24
+ class User
25
+ include Mongoid::Document
26
+ include Mongoid::Xoauth
27
+
28
+ xoauth weibo: {'appid'=> '1112', 'secret'=> '123dffd'}
29
+ end
30
+ ```
31
+
32
+ Then we can use the following methods:
33
+
34
+ ```ruby
35
+ # get the found user or nil
36
+ User.find_by_oauth_uid(uid, Oauth::Weibo)
37
+
38
+ # authorize url
39
+ Oauth::Weibo.authorize_url
40
+
41
+ # detail of code: {access_token, uid, created_at, expires_in}
42
+ # can be used to initialize Oauth::Weibo
43
+ Oauth::Weibo.detail_of_code(code)
44
+
45
+ # fetch the detail infomation of the oauth client
46
+ Oauth::Weibo#fetch_info!
47
+
48
+ ```
24
49
 
25
50
  ## Contributing
26
51
 
27
- 1. Fork it ( https://github.com/[my-github-username]/oauth/fork )
52
+ 1. Fork it ( https://github.com/Slacken/xoauth/fork )
28
53
  2. Create your feature branch (`git checkout -b my-new-feature`)
29
54
  3. Commit your changes (`git commit -am 'Add some feature'`)
30
55
  4. Push to the branch (`git push origin my-new-feature`)
@@ -15,14 +15,26 @@ module Mongoid
15
15
  # config oauths
16
16
  params.each_pair{|key, param| Oauth::Configure[key.to_s] = param}
17
17
  end
18
- end
19
18
 
20
- def find_by_oauth_uid(uid, klass)
21
- where('oauths.uid' => uid.to_s, 'oauths._type' => klass.to_s).first
19
+ def find_by_oauth(oauth)
20
+ where('oauths.uid' => oauth.uid, 'oauths._type' => oauth.class.to_s).first
21
+ end
22
22
  end
23
23
 
24
24
  def oauth(klass)
25
25
  self.oauths.find_by(_type: klass.to_s) # "Oauth::#{name.to_s.capitalize}"
26
26
  end
27
+
28
+ def refresh_oauth(oauth)
29
+ auth = self.oauth(oauth.class)
30
+ if auth.access_token == oauth.access_token
31
+ # check expires_in
32
+ else
33
+ %w{access_token created_at expires_in refresh_token}.each do |key|
34
+ auth[key] = oauth[key]
35
+ end
36
+ end
37
+ auth
38
+ end
27
39
  end
28
40
  end
data/lib/oauth/info.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  module Oauth
2
2
  class Info
3
3
  include Mongoid::Document
4
- belongs_to :oauth, class_name: 'Oauth::Provider', inverse_of: :info
4
+ has_one :oauth, class_name: 'Oauth::Provider', inverse_of: :info
5
5
 
6
6
  field :data, type: Hash, default: {}
7
7
  end
@@ -5,6 +5,16 @@ module Oauth
5
5
  api_access('get_user_info')
6
6
  end
7
7
 
8
+ def basic_info
9
+ info && {
10
+ "name" => info.data["name"],
11
+ "avatar" => info.data["avatar_hd"] || info.data["avatar_large"],
12
+ "gender" => info.data["gender"],
13
+ "location" => info.data["location"],
14
+ "description" => info.data["description"]
15
+ }
16
+ end
17
+
8
18
  def api_access(api, http_params = {}, http_method = 'get')
9
19
  url = 'https://graph.qq.com/user/' + api
10
20
  http_params.merge!({"access_token" => access_token, "openid"=> uid, "oauth_consumer_key" => Configure['qq']['appid']})
@@ -24,14 +34,14 @@ module Oauth
24
34
  end
25
35
  end
26
36
 
27
- def authorize_url
37
+ def authorize_url(params = {})
28
38
  get_params = {
29
39
  response_type: 'code',
30
40
  client_id: Configure['qq']['appid'],
31
41
  redirect_uri: Configure['qq']['callback'],
32
42
  state: 1,
33
43
  scope: 'get_user_info,get_info,do_like'
34
- }
44
+ }.merge(params)
35
45
  "https://graph.qq.com/oauth2.0/authorize?#{URI.encode_www_form(get_params)}"
36
46
  end
37
47
 
@@ -46,7 +56,6 @@ module Oauth
46
56
  response = getJSON('https://graph.qq.com/oauth2.0/token', get_params)
47
57
  if response # access_token=xxx&expires_in=7776000&refresh_token=xxx
48
58
  detail = Hash[response.split('&').map{|q| q.split('=')}]
49
- detail["created_at"] = Time.now
50
59
  detail['uid'] = openid(detail["access_token"])
51
60
  if detail['uid']
52
61
  detail
@@ -1,9 +1,8 @@
1
1
  module Oauth
2
2
  class Weibo < Provider
3
3
 
4
- def follow(uid = nil)
5
- uid = Configure['weibo']['official'] if uid.nil?
6
- api_access('friendships/create', {'uid'=> uid}, 'post')
4
+ def follow(uid)
5
+ api_access('friendships/create', {'uid' => uid}, 'post')
7
6
  end
8
7
 
9
8
  def publish(content)
@@ -14,6 +13,16 @@ module Oauth
14
13
  api_access('users/show',{'uid' => uid})
15
14
  end
16
15
 
16
+ def basic_info
17
+ info && {
18
+ "name" => info.data["name"],
19
+ "avatar" => info.data["avatar_hd"] || info.data["avatar_large"],
20
+ "gender" => info.data["gender"],
21
+ "location" => info.data["location"],
22
+ "description" => info.data["description"]
23
+ }
24
+ end
25
+
17
26
  def api_access(api, http_params, http_method = 'get')
18
27
  return nil if expired? # expired
19
28
  url = 'https://api.weibo.com/2/' + api + '.json'
@@ -39,13 +48,13 @@ module Oauth
39
48
  end
40
49
  end
41
50
 
42
- def authorize_url
51
+ def authorize_url(params = {})
43
52
  get_params = {
44
53
  'client_id' => Configure['weibo']['appid'],
45
54
  'redirect_uri' => Configure['weibo']['callback'],
46
55
  'response_type' => 'code',
47
56
  'display' => 'default' # for different divice, default|mobile|wap|client|apponweibo
48
- }
57
+ }.merge(params)
49
58
  "https://api.weibo.com/oauth2/authorize?#{URI.encode_www_form(get_params)}";
50
59
  end
51
60
 
@@ -59,10 +68,7 @@ module Oauth
59
68
  'redirect_uri' => Configure['weibo']['callback']
60
69
  }
61
70
  response = postJSON(url,post_params)
62
- if response
63
- response["created_at"] = Time.now
64
- response.delete('remind_in')
65
- end
71
+ response.delete('remind_in') if response
66
72
  response
67
73
  end
68
74
  end
@@ -1,5 +1,4 @@
1
1
  require 'net/http'
2
- require 'net/https'
3
2
  require 'uri'
4
3
  require 'json'
5
4
 
@@ -8,21 +7,17 @@ module Oauth
8
7
  include Mongoid::Document
9
8
  field :access_token
10
9
  field :uid, type: String
11
- field :created_at, type: Time
10
+ field :created_at, type: Time, default: ->{ Time.now }
12
11
  field :expires_in, type: Integer
13
12
  field :refresh_token
14
13
 
15
14
  embedded_in :oauthable, polymorphic: true, inverse_of: :oauth
16
- has_one :info, class_name: 'Oauth::Info', inverse_of: :oauth
15
+ belongs_to :info, class_name: 'Oauth::Info', inverse_of: :oauth
17
16
 
18
17
  def fetch_info!
19
18
  return nil if expired?
20
19
  info = fetch_info
21
- if info
22
- self.info = Info.new(data: info)
23
- self.save
24
- end
25
- self.info
20
+ info && self.info = Oauth::Info.create(data: info)
26
21
  end
27
22
 
28
23
  def expired?
@@ -40,13 +35,12 @@ module Oauth
40
35
 
41
36
  def request(url, request_params, method = 'get', format = nil)
42
37
  uri = URI(url)
43
- klass = (uri.scheme == 'https' ? Net::HTTPS : Net::HTTP)
44
38
  begin
45
39
  if method == 'get'
46
40
  uri.query = (uri.query.nil? ? '' : (uri.query + "&")) + URI.encode_www_form(request_params)
47
- response = klass.get_response(uri)
41
+ response = Net::HTTP.get_response(uri)
48
42
  else
49
- response = klass.post_form(uri, request_params)
43
+ response = Net::HTTP.post_form(uri, request_params)
50
44
  end
51
45
  rescue Exception => e
52
46
  puts e.message
data/lib/oauth/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Oauth
2
- VERSION = "0.2.5"
2
+ VERSION = "0.2.6"
3
3
  end
data/lib/oauth.rb CHANGED
@@ -7,4 +7,5 @@ end
7
7
 
8
8
  require "oauth/version"
9
9
  require "oauth/provider"
10
+ require "oauth/info"
10
11
  require "oauth/configure"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: xoauth
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.5
4
+ version: 0.2.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - binz
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-01-16 00:00:00.000000000 Z
11
+ date: 2015-03-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler