oauth_china 0.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,5 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
5
+ nbproject/*
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in oauth_china.gemspec
4
+ gemspec
data/README ADDED
@@ -0,0 +1,45 @@
1
+ 一.简介:
2
+ OAuth gem for rails,支持豆瓣,新浪微薄,qq微薄
3
+
4
+ 二.安装:
5
+ $ gem install oauth_china
6
+
7
+ 三.使用:
8
+
9
+ 1. 在Gemfile里添加:
10
+
11
+ gem 'oauth_china'
12
+
13
+ 2. 添加配置文件
14
+
15
+ config/oauth/douban.yml
16
+ config/oauth/sina.yml
17
+ config/oauth/qq.yml
18
+
19
+ 例子:
20
+
21
+ development:
22
+ key: "you api key"
23
+ secret: "your secret"
24
+ url: "http://yoursite.com"
25
+ callback: "http://localhost:3000/your_callback_url"
26
+ production:
27
+ key: "you api key"
28
+ secret: "your secret"
29
+ url: "http://yoursite.com"
30
+ callback: "http://localhost:3000/your_callback_url"
31
+
32
+ 3.Example
33
+ if params[:oauth_token]
34
+ sina = OauthChina::Sina.load(Rails.cache.read(params[:oauth_token]))
35
+ sina.authorize(:oauth_verifier => params[:oauth_verifier])
36
+ #resp0 = sina.get("http://api.douban.com/people/%40me")
37
+ #resp1 = sina.get("http://open.t.qq.com/api/user/info?format=json")
38
+ resp = sina.get("/account/verify_credentials.xml")
39
+ render :text => resp.body
40
+ else
41
+ sina = OauthChina::Sina.new
42
+ url = sina.authorize_url
43
+ Rails.cache.write(sina.oauth_token, sina.dump)
44
+ redirect_to url
45
+ end
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
@@ -0,0 +1,29 @@
1
+ module OauthChina
2
+ class Douban < OauthChina::OAuth
3
+
4
+ def initialize(*args)
5
+ self.consumer_options = {
6
+ :signature_method => "HMAC-SHA1",
7
+ :site => "http://www.douban.com",
8
+ :scheme => :header,
9
+ :request_token_path => '/service/auth/request_token',
10
+ :access_token_path => '/service/auth/access_token',
11
+ :authorize_path => '/service/auth/authorize',
12
+ :realm => url
13
+ }
14
+ super(*args)
15
+ end
16
+
17
+ def name
18
+ :douban
19
+ end
20
+
21
+ def authorized?
22
+ #TODO
23
+ end
24
+
25
+ def destroy
26
+ #TODO
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,34 @@
1
+ module OauthChina
2
+ class QQ < OauthChina::OAuth
3
+
4
+ def initialize(*args)
5
+ self.consumer_options = {
6
+ :site => "https://open.t.qq.com",
7
+ :request_token_path => "/cgi-bin/request_token",
8
+ :access_token_path => "/cgi-bin/access_token",
9
+ :authorize_path => "/cgi-bin/authorize",
10
+ :http_method => :get,
11
+ :scheme => :query_string,
12
+ :nonce => nonce,
13
+ :realm => url
14
+ }
15
+ super(*args)
16
+ end
17
+
18
+ def name
19
+ :qq
20
+ end
21
+
22
+ def nonce
23
+ Base64.encode64(OpenSSL::Random.random_bytes(32)).gsub(/\W/, '')[0, 32]
24
+ end
25
+
26
+ def authorized?
27
+ #TODO
28
+ end
29
+
30
+ def destroy
31
+ #TODO
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,27 @@
1
+ module OauthChina
2
+ class Sina < OauthChina::OAuth
3
+
4
+ def initialize(*args)
5
+ self.consumer_options = {
6
+ :site => 'http://api.t.sina.com.cn',
7
+ :request_token_path => '/oauth/request_token',
8
+ :access_token_path => '/oauth/access_token',
9
+ :authorize_path => '/oauth/authorize',
10
+ :realm => url
11
+ }
12
+ super(*args)
13
+ end
14
+
15
+ def name
16
+ :sina
17
+ end
18
+
19
+ def authorized?
20
+ #TODO
21
+ end
22
+
23
+ def destroy
24
+ #TODO
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,3 @@
1
+ module OauthChina
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,81 @@
1
+ require 'rubygems'
2
+ require 'oauth'
3
+
4
+ module OauthChina
5
+
6
+ class OAuth
7
+
8
+ CONFIG = {}
9
+
10
+ attr_accessor :request_token, :access_token, :consumer_options
11
+
12
+ delegate :get, :post, :put, :delete, :to => :access_token
13
+
14
+ def initialize(request_token = nil, request_token_secret = nil)
15
+ if request_token && request_token_secret
16
+ self.request_token = ::OAuth::RequestToken.new(consumer, request_token, request_token_secret)
17
+ else
18
+ self.request_token = consumer.get_request_token(:oauth_callback => self.callback)
19
+ end
20
+ end
21
+
22
+ #每次认证等唯一标志
23
+ def oauth_token
24
+ request_token.params[:oauth_token]
25
+ end
26
+
27
+ def consumer
28
+ @consumer ||= ::OAuth::Consumer.new(key, secret, consumer_options)
29
+ end
30
+
31
+ def self.load(data)
32
+ a_token = data[:access_token]
33
+ a_token_secret = data[:access_token_secret]
34
+
35
+ oauth = self.new(data[:request_token], data[:request_token_secret])
36
+ oauth.access_token = ::OAuth::AccessToken.new(consumer, a_token, a_token_secret) if a_token
37
+ oauth
38
+ end
39
+
40
+ def dump
41
+ {
42
+ :request_token => request_token.token,
43
+ :request_token_secret => request_token.secret,
44
+ :access_token => access_token.nil? ? nil : access_token.token,
45
+ :access_token_secret => access_token.nil? ? nil : access_token.secret
46
+ }
47
+ end
48
+
49
+ def key; config['key']; end
50
+ def secret; config['secret']; end
51
+ def url; config['url']; end
52
+ def callback; config["callback"]; end
53
+
54
+ def config
55
+ CONFIG[self.name] ||= lambda do
56
+ require 'yaml'
57
+ filename = "#{Rails.root}/config/oauth/#{self.name}.yml"
58
+ file = File.open(filename)
59
+ yaml = YAML.load(file)
60
+ return yaml[Rails.env]
61
+ end.call
62
+ end
63
+
64
+ def authorize_url
65
+ @authorize_url ||= request_token.authorize_url(:oauth_callback => URI.encode(callback))
66
+ end
67
+
68
+ #QQ和新浪OAuth需要verifier参数,豆瓣不需要
69
+ def authorize(options = {})
70
+ return unless self.access_token.nil?
71
+ a_token = self.request_token.get_access_token(options)
72
+ self.access_token ||= ::OAuth::AccessToken.new(consumer, a_token.token, a_token.secret)
73
+ end
74
+
75
+ end
76
+
77
+
78
+ autoload :Sina, 'oauth_china/strategies/sina'
79
+ autoload :Douban, 'oauth_china/strategies/douban'
80
+ autoload :QQ, 'oauth_china/strategies/qq'
81
+ end
@@ -0,0 +1,22 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "oauth_china/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "oauth_china"
7
+ s.version = OauthChina::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ["Hooopo"]
10
+ s.email = ["hoooopo@gmail.com"]
11
+ s.homepage = ""
12
+ s.summary = %q{新浪,豆瓣,腾讯等国内微薄OAuth认证}
13
+ s.description = %q{新浪,豆瓣,腾讯等国内微薄OAuth认证}
14
+
15
+ s.rubyforge_project = "oauth_china"
16
+
17
+ s.files = `git ls-files`.split("\n")
18
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
19
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
20
+ s.require_paths = ["lib"]
21
+ s.add_development_dependency "oauth"
22
+ end
metadata ADDED
@@ -0,0 +1,96 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: oauth_china
3
+ version: !ruby/object:Gem::Version
4
+ hash: 29
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 1
10
+ version: 0.0.1
11
+ platform: ruby
12
+ authors:
13
+ - Hooopo
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2011-03-20 00:00:00 +08:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: oauth
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ hash: 3
30
+ segments:
31
+ - 0
32
+ version: "0"
33
+ type: :development
34
+ version_requirements: *id001
35
+ description: !binary |
36
+ 5paw5rWq77yM6LGG55Oj77yM6IW+6K6v562J5Zu95YaF5b6u6JaET0F1dGjo
37
+ rqTor4E=
38
+
39
+ email:
40
+ - hoooopo@gmail.com
41
+ executables: []
42
+
43
+ extensions: []
44
+
45
+ extra_rdoc_files: []
46
+
47
+ files:
48
+ - .gitignore
49
+ - Gemfile
50
+ - README
51
+ - Rakefile
52
+ - lib/oauth_china.rb
53
+ - lib/oauth_china/strategies/douban.rb
54
+ - lib/oauth_china/strategies/qq.rb
55
+ - lib/oauth_china/strategies/sina.rb
56
+ - lib/oauth_china/version.rb
57
+ - oauth_china.gemspec
58
+ has_rdoc: true
59
+ homepage: ""
60
+ licenses: []
61
+
62
+ post_install_message:
63
+ rdoc_options: []
64
+
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
+ hash: 3
73
+ segments:
74
+ - 0
75
+ version: "0"
76
+ required_rubygems_version: !ruby/object:Gem::Requirement
77
+ none: false
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ hash: 3
82
+ segments:
83
+ - 0
84
+ version: "0"
85
+ requirements: []
86
+
87
+ rubyforge_project: oauth_china
88
+ rubygems_version: 1.6.2
89
+ signing_key:
90
+ specification_version: 3
91
+ summary: !binary |
92
+ 5paw5rWq77yM6LGG55Oj77yM6IW+6K6v562J5Zu95YaF5b6u6JaET0F1dGjo
93
+ rqTor4E=
94
+
95
+ test_files: []
96
+