remi-rack-oauth 0.1.0

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.
Files changed (6) hide show
  1. data/README.rdoc +11 -0
  2. data/Rakefile +68 -0
  3. data/VERSION +1 -0
  4. data/lib/rack-oauth.rb +132 -0
  5. data/lib/rack/oauth.rb +1 -0
  6. metadata +57 -0
@@ -0,0 +1,11 @@
1
+ = Rack::OAuth
2
+
3
+ Rack::OAuth is a Rack middleware for easily integration OAuth into your web applications.
4
+
5
+ == Installation
6
+
7
+ ... coming soon ...
8
+
9
+ == Usage
10
+
11
+ ... coming soon ...
@@ -0,0 +1,68 @@
1
+ require 'rake'
2
+ require 'rubygems'
3
+ require 'rake/rdoctask'
4
+ require 'spec/rake/spectask'
5
+
6
+ puts "\nGem: rack-oauth\n\n"
7
+
8
+ begin
9
+ require 'jeweler'
10
+ Jeweler::Tasks.new do |s|
11
+ s.name = 'rack-oauth'
12
+ s.summary = 'Rack Middleware for OAuth Authorization'
13
+ s.email = 'remi@remitaylor.com'
14
+ s.homepage = 'http://github.com/remi/rack-oauth'
15
+ s.description = 'Rack Middleware for OAuth Authorization'
16
+ s.authors = %w( remi )
17
+ s.files = FileList['[A-Z]*', '{lib,spec,bin,examples}/**/*']
18
+ # s.add_dependency 'person-gemname'
19
+ # s.executables << 'script'
20
+ # s.rubyforge_project = 'gemname'
21
+ s.extra_rdoc_files = %w( README.rdoc )
22
+ end
23
+ rescue LoadError
24
+ puts "Jeweler not available. Install it with: sudo gem install technicalpickles-jeweler -s http://gems.github.com"
25
+ end
26
+
27
+ Spec::Rake::SpecTask.new do |t|
28
+ t.spec_files = FileList['spec/**/*_spec.rb']
29
+ end
30
+
31
+ desc "Run all examples with RCov"
32
+ Spec::Rake::SpecTask.new('rcov') do |t|
33
+ t.spec_files = FileList['spec/**/*_spec.rb']
34
+ t.rcov = true
35
+ end
36
+
37
+ # require 'hanna'
38
+ # require 'darkfish-rdoc'
39
+
40
+ Rake::RDocTask.new do |rdoc|
41
+ rdoc.rdoc_dir = 'rdoc'
42
+ rdoc.title = 'rack-oauth'
43
+ rdoc.options << '--line-numbers' << '--inline-source'
44
+ # rdoc.options += ["--template=#{`allison --path`}"] # sudo gem install allison
45
+ # rdoc.options += %w( -f darkfish ) # sudo gem install darkfish-rdoc
46
+ # rdoc.options += %w( -T hanna ) # sudo gem install mislav-hanna
47
+ rdoc.options += %w( -m README.rdoc ) # the initial page displayed
48
+ rdoc.rdoc_files.include('README.rdoc')
49
+ rdoc.rdoc_files.include('lib/**/*.rb')
50
+ end
51
+
52
+ desc 'Confirm that gemspec is $SAFE'
53
+ task :safe do
54
+ require 'yaml'
55
+ require 'rubygems/specification'
56
+ data = File.read('rack-oauth.gemspec')
57
+ spec = nil
58
+ if data !~ %r{!ruby/object:Gem::Specification}
59
+ Thread.new { spec = eval("$SAFE = 3\n#{data}") }.join
60
+ else
61
+ spec = YAML.load(data)
62
+ end
63
+ spec.validate
64
+ puts spec
65
+ puts "OK"
66
+ end
67
+
68
+ task :default => :spec
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.1.0
@@ -0,0 +1,132 @@
1
+ require 'rubygems'
2
+ require 'rack'
3
+ require 'oauth'
4
+
5
+ puts "HI!"
6
+
7
+ module Rack #:nodoc:
8
+
9
+ # Rack Middleware for integrating OAuth into your application
10
+ #
11
+ # Note: this *requires* that a Rack::Session middleware be enabled
12
+ #
13
+ class OAuth
14
+
15
+ DEFAULT_OPTIONS = {
16
+ :login_path => '/oauth_login',
17
+ :callback_path => '/oauth_callback',
18
+ :redirect_to => '/oauth_complete',
19
+ :session_key => 'oauth_user',
20
+ :rack_session => 'rack.session',
21
+ :json_parser => lambda {|json_string| require 'json'; JSON.parse(json_string); }
22
+ }
23
+
24
+ # [internal] the URL that should initiate OAuth and redirect to the OAuth provider's login page
25
+ attr_accessor :login_path
26
+ alias login login_path
27
+ alias login= login_path=
28
+
29
+ # [internal] the URL that the OAuth provider should callback to after OAuth login is complete
30
+ attr_accessor :callback_path
31
+ alias callback callback_path
32
+ alias callback= callback_path=
33
+
34
+ # [external] the URL that Rack::OAuth should redirect to after the OAuth has been completed (part of your app)
35
+ attr_accessor :redirect_to
36
+ alias redirect redirect_to
37
+ alias redirect= redirect_to=
38
+
39
+ # the name of the Session key to use to store user account information (if OAuth completed OK)
40
+ attr_accessor :session_key
41
+
42
+ # the name of the Rack env variable used for the session
43
+ attr_accessor :rack_session
44
+
45
+ # [required] Your OAuth consumer key
46
+ attr_accessor :consumer_key
47
+ alias key consumer_key
48
+ alias key= consumer_key=
49
+
50
+ # [required] Your OAuth consumer secret
51
+ attr_accessor :consumer_secret
52
+ alias secret consumer_secret
53
+ alias secret= consumer_secret=
54
+
55
+ # [required] The site you want to request OAuth for, eg. 'http://twitter.com'
56
+ attr_accessor :consumer_site
57
+ alias site consumer_site
58
+ alias site= consumer_site=
59
+
60
+ # a Proc that accepts a JSON string and returns a Ruby object. Defaults to using the 'json' gem, if available.
61
+ attr_accessor :json_parser
62
+
63
+ def initialize app, options = {}
64
+ @app = app
65
+
66
+ DEFAULT_OPTIONS.each {|name, value| send "#{name}=", value }
67
+ options.each {|name, value| send "#{name}=", value } if options
68
+
69
+ raise_validation_exception unless valid?
70
+ end
71
+
72
+ def call env
73
+ case env['PATH_INFO']
74
+ when login_path; do_login env
75
+ when callback_path; do_callback env
76
+ else; @app.call env
77
+ end
78
+ end
79
+
80
+ def do_login env
81
+ request = consumer.get_request_token :oauth_callback => ::File.join("http://#{ env['HTTP_HOST'] }", callback_path)
82
+ session(env)[:oauth_request_token] = request.token
83
+ session(env)[:oauth_request_secret] = request.secret
84
+ [ 302, {'Location' => request.authorize_url}, [] ]
85
+ end
86
+
87
+ def do_callback env
88
+ request = ::OAuth::RequestToken.new consumer, session(env)[:oauth_request_token], session(env)[:oauth_request_secret]
89
+ access = request.get_access_token :oauth_verifier => Rack::Request.new(env).params['oauth_verifier']
90
+ response = consumer.request :get, '/account/verify_credentials.json', access, :scheme => :query_string
91
+
92
+ # put the user information received (json -> ruby) in the session
93
+ session(env)[session_key] = json_parser.call response.body if response
94
+
95
+ [ 302, {'Location' => redirect_to}, [] ]
96
+ end
97
+
98
+ protected
99
+
100
+ def consumer
101
+ @consumer ||= ::OAuth::Consumer.new consumer_key, consumer_secret, :site => consumer_site
102
+ end
103
+
104
+ def valid?
105
+ @errors = []
106
+ @errors << ":consumer_key option is required" unless consumer_key
107
+ @errors << ":consumer_secret option is required" unless consumer_secret
108
+ @errors << ":consumer_site option is required" unless consumer_site
109
+ @errors.empty?
110
+ end
111
+
112
+ def raise_validation_exception
113
+ raise @errors.join(', ')
114
+ end
115
+
116
+ def session env
117
+ raise "Rack env['rack.session'] is nil ... has a Rack::Session middleware be enabled? " +
118
+ "use :rack_session for custom key" if env[rack_session].nil?
119
+ env[rack_session]
120
+ end
121
+
122
+ end
123
+
124
+ module Auth #:nodoc:
125
+
126
+ class OAuth
127
+
128
+ end
129
+
130
+ end
131
+
132
+ end
@@ -0,0 +1 @@
1
+ require 'rack-oauth'
metadata ADDED
@@ -0,0 +1,57 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: remi-rack-oauth
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - remi
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-06-23 00:00:00 -07:00
13
+ default_executable:
14
+ dependencies: []
15
+
16
+ description: Rack Middleware for OAuth Authorization
17
+ email: remi@remitaylor.com
18
+ executables: []
19
+
20
+ extensions: []
21
+
22
+ extra_rdoc_files:
23
+ - README.rdoc
24
+ files:
25
+ - README.rdoc
26
+ - Rakefile
27
+ - VERSION
28
+ - lib/rack-oauth.rb
29
+ - lib/rack/oauth.rb
30
+ has_rdoc: false
31
+ homepage: http://github.com/remi/rack-oauth
32
+ post_install_message:
33
+ rdoc_options:
34
+ - --charset=UTF-8
35
+ require_paths:
36
+ - lib
37
+ required_ruby_version: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ version: "0"
42
+ version:
43
+ required_rubygems_version: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: "0"
48
+ version:
49
+ requirements: []
50
+
51
+ rubyforge_project:
52
+ rubygems_version: 1.2.0
53
+ signing_key:
54
+ specification_version: 3
55
+ summary: Rack Middleware for OAuth Authorization
56
+ test_files: []
57
+