warden-github 0.0.7 → 0.0.8

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,4 @@
1
+ coverage
2
+ .bundle
3
+ pkg
4
+ .DS_Store
data/Gemfile ADDED
@@ -0,0 +1,23 @@
1
+ source 'http://rubygems.org'
2
+
3
+ group :runtime do
4
+ gem 'warden', '~>1.0.4'
5
+ gem 'oauth2', '~>0.4.1'
6
+ gem 'json', '>=1.0.0'
7
+ end
8
+
9
+ group :test do
10
+ gem 'rake'
11
+ gem 'rspec', '~>1.3.0', :require => 'spec'
12
+ gem 'rcov'
13
+ gem 'sinatra', '~>1.0', :require => 'sinatra/base'
14
+ gem 'shotgun'
15
+ gem 'webrat', '~>0.7.0'
16
+ gem 'bundler', '~>1.0'
17
+ gem 'randexp', '>=0.1.4'
18
+ gem 'ruby-debug'
19
+ gem 'addressable', '~>2.2.0', :require => 'addressable/uri'
20
+ gem 'rack-test', '~>0.5.3', :require => 'rack/test'
21
+ end
22
+
23
+ # vim:ft=ruby
data/README.md CHANGED
@@ -11,4 +11,4 @@ The Extension in Action
11
11
  =======================
12
12
  % gem install bundler
13
13
  % bundle install
14
- % GH_CLIENT_ID="<from GH>" GH_SECRET="<from GH>" bundle exec rackup
14
+ % GITHUB_CLIENT_ID="<from GH>" GITHUB_CLIENT_SECRET="<from GH>" bundle exec rackup
data/Rakefile ADDED
@@ -0,0 +1,21 @@
1
+ require 'rake/gempackagetask'
2
+ require 'rubygems/specification'
3
+ require 'date'
4
+ require 'bundler'
5
+
6
+ require 'lib/warden-github/version'
7
+
8
+ task :default => [:spec]
9
+
10
+ require 'spec/rake/spectask'
11
+ desc "Run specs"
12
+ Spec::Rake::SpecTask.new do |t|
13
+ t.spec_files = FileList['spec/**/*_spec.rb']
14
+ t.spec_opts = %w(-fs --color)
15
+ t.spec_opts << '--loadby' << 'random'
16
+
17
+ t.rcov_opts << '--exclude' << 'spec,.bundle,.rvm'
18
+ t.rcov = ENV.has_key?('NO_RCOV') ? ENV['NO_RCOV'] != 'true' : true
19
+ t.rcov_opts << '--text-summary'
20
+ t.rcov_opts << '--sort' << 'coverage' << '--sort-reverse'
21
+ end
data/config.ru ADDED
@@ -0,0 +1,20 @@
1
+ ENV['RACK_ENV'] ||= 'development'
2
+
3
+ begin
4
+ require File.expand_path('../.bundle/environment', __FILE__)
5
+ rescue LoadError
6
+ require "rubygems"
7
+ require "bundler"
8
+ Bundler.setup
9
+ end
10
+
11
+ Bundler.require(:runtime, :test)
12
+ require "ruby-debug"
13
+
14
+ $LOAD_PATH << File.dirname(__FILE__) + '/lib'
15
+ require File.expand_path(File.join(File.dirname(__FILE__), 'lib', 'warden-github'))
16
+ require File.expand_path(File.join(File.dirname(__FILE__), 'spec', 'app'))
17
+
18
+ run Example.app
19
+
20
+ # vim:ft=ruby
@@ -1,5 +1,5 @@
1
1
  module Warden
2
2
  module Github
3
- VERSION = "0.0.7"
3
+ VERSION = "0.0.8"
4
4
  end
5
5
  end
data/spec/app.rb ADDED
@@ -0,0 +1,58 @@
1
+ module Example
2
+ class App < Sinatra::Base
3
+ enable :sessions
4
+ enable :raise_errors
5
+ disable :show_exceptions
6
+
7
+ use Warden::Manager do |manager|
8
+ manager.default_strategies :github
9
+ manager.failure_app = BadAuthentication
10
+
11
+ manager[:github_client_id] = ENV['GITHUB_CLIENT_ID'] || 'ee9aa24b64d82c21535a'
12
+ manager[:github_secret] = ENV['GITHUB_CLIENT_SECRET'] || 'ed8ff0c54067aefb808dab1ca265865405d08d6f'
13
+
14
+ manager[:github_scopes] = 'email,offline_access'
15
+ manager[:github_callback_url] = '/auth/github/callback'
16
+ end
17
+
18
+ helpers do
19
+ def ensure_authenticated
20
+ unless env['warden'].authenticate!
21
+ throw(:warden)
22
+ end
23
+ end
24
+
25
+ def user
26
+ env['warden'].user
27
+ end
28
+ end
29
+
30
+ get '/' do
31
+ ensure_authenticated
32
+ "Hello There, #{user.name}!"
33
+ end
34
+
35
+ get '/auth/github/callback' do
36
+ ensure_authenticated
37
+ redirect '/'
38
+ end
39
+
40
+ get '/logout' do
41
+ env['warden'].logout
42
+ "Peace!"
43
+ end
44
+ end
45
+
46
+ class BadAuthentication < Sinatra::Base
47
+ get '/unauthenticated' do
48
+ status 403
49
+ "Unable to authenticate, sorry bud."
50
+ end
51
+ end
52
+
53
+ def self.app
54
+ @app ||= Rack::Builder.new do
55
+ run App
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,18 @@
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+
3
+ describe "Warden::Github" do
4
+ it "requesting an url that requires authentication redirects to github" do
5
+ response = get "/"
6
+
7
+ uri = Addressable::URI.parse(response.headers["Location"])
8
+
9
+ uri.scheme.should eql('https')
10
+ uri.host.should eql('github.com')
11
+
12
+ params = uri.query_values
13
+ params['type'].should eql('web_server')
14
+ params['scope'].should eql('email,offline_access,repo,gist')
15
+ params['client_id'].should match(/\w{20}/)
16
+ params['redirect_uri'].should eql('http://example.org/auth/github/callback')
17
+ end
18
+ end
@@ -0,0 +1,32 @@
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+
3
+ describe "Warden::Github::Oauth::Proxy" do
4
+ before(:all) do
5
+ sha = Digest::SHA1.hexdigest(Time.now.to_s)
6
+ @proxy = Warden::Github::Oauth::Proxy.new(sha[0..19], sha[0..39],
7
+ 'email,offline_access,repo', 'http://example.org/auth/github/callback')
8
+ end
9
+
10
+ it "returns an authorize url" do
11
+ uri = Addressable::URI.parse(@proxy.authorize_url)
12
+
13
+ uri.scheme.should eql('https')
14
+ uri.host.should eql('github.com')
15
+
16
+ params = uri.query_values
17
+ params['type'].should eql('web_server')
18
+ params['scope'].should eql('email,offline_access,repo')
19
+ params['client_id'].should match(/\w{20}/)
20
+ params['redirect_uri'].should eql('http://example.org/auth/github/callback')
21
+ end
22
+
23
+ it "has a client object" do
24
+ @proxy.client.should_not be_nil
25
+ end
26
+
27
+ it "returns access tokens" do
28
+ pending "this hits the network" do
29
+ lambda { @proxy.access_token_for(/\w{20}/.gen) }.should_not raise_error
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,24 @@
1
+ Bundler.require(:default, :runtime, :test)
2
+
3
+ require File.join(File.dirname(__FILE__), '..', 'lib', 'warden-github')
4
+ require File.join(File.dirname(__FILE__), 'app')
5
+
6
+ require 'pp'
7
+
8
+ Webrat.configure do |config|
9
+ config.mode = :rack
10
+ config.application_port = 4567
11
+ end
12
+
13
+ Spec::Runner.configure do |config|
14
+ config.include(Rack::Test::Methods)
15
+ config.include(Webrat::Methods)
16
+ config.include(Webrat::Matchers)
17
+
18
+ config.before(:each) do
19
+ end
20
+
21
+ def app
22
+ Example.app
23
+ end
24
+ end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: warden-github
3
3
  version: !ruby/object:Gem::Version
4
- hash: 17
5
- prerelease: false
4
+ hash: 15
5
+ prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 7
10
- version: 0.0.7
9
+ - 8
10
+ version: 0.0.8
11
11
  platform: ruby
12
12
  authors:
13
13
  - Corey Donohoe
@@ -15,72 +15,186 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-11-08 00:00:00 -08:00
18
+ date: 2011-05-16 00:00:00 -07:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
22
- version_requirements: &id001 !ruby/object:Gem::Requirement
22
+ name: json
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
23
25
  none: false
24
26
  requirements:
25
27
  - - ~>
26
28
  - !ruby/object:Gem::Version
27
- hash: 31
29
+ hash: 5
28
30
  segments:
29
- - 0
30
- - 10
31
- version: "0.10"
32
- requirement: *id001
31
+ - 1
32
+ - 5
33
+ version: "1.5"
33
34
  type: :runtime
35
+ version_requirements: *id001
36
+ - !ruby/object:Gem::Dependency
34
37
  name: warden
35
38
  prerelease: false
36
- - !ruby/object:Gem::Dependency
37
- version_requirements: &id002 !ruby/object:Gem::Requirement
39
+ requirement: &id002 !ruby/object:Gem::Requirement
38
40
  none: false
39
41
  requirements:
40
42
  - - ~>
41
43
  - !ruby/object:Gem::Version
42
- hash: 15
44
+ hash: 31
43
45
  segments:
46
+ - 1
44
47
  - 0
45
- - 0
46
- - 8
47
- version: 0.0.8
48
- requirement: *id002
48
+ - 4
49
+ version: 1.0.4
49
50
  type: :runtime
51
+ version_requirements: *id002
52
+ - !ruby/object:Gem::Dependency
50
53
  name: oauth2
51
54
  prerelease: false
55
+ requirement: &id003 !ruby/object:Gem::Requirement
56
+ none: false
57
+ requirements:
58
+ - - ~>
59
+ - !ruby/object:Gem::Version
60
+ hash: 13
61
+ segments:
62
+ - 0
63
+ - 4
64
+ - 1
65
+ version: 0.4.1
66
+ type: :runtime
67
+ version_requirements: *id003
52
68
  - !ruby/object:Gem::Dependency
53
- version_requirements: &id003 !ruby/object:Gem::Requirement
69
+ name: rake
70
+ prerelease: false
71
+ requirement: &id004 !ruby/object:Gem::Requirement
54
72
  none: false
55
73
  requirements:
56
74
  - - ">="
57
75
  - !ruby/object:Gem::Version
58
- hash: 23
76
+ hash: 3
77
+ segments:
78
+ - 0
79
+ version: "0"
80
+ type: :development
81
+ version_requirements: *id004
82
+ - !ruby/object:Gem::Dependency
83
+ name: rspec
84
+ prerelease: false
85
+ requirement: &id005 !ruby/object:Gem::Requirement
86
+ none: false
87
+ requirements:
88
+ - - ~>
89
+ - !ruby/object:Gem::Version
90
+ hash: 27
59
91
  segments:
60
92
  - 1
93
+ - 3
61
94
  - 0
95
+ version: 1.3.0
96
+ type: :development
97
+ version_requirements: *id005
98
+ - !ruby/object:Gem::Dependency
99
+ name: shotgun
100
+ prerelease: false
101
+ requirement: &id006 !ruby/object:Gem::Requirement
102
+ none: false
103
+ requirements:
104
+ - - ">="
105
+ - !ruby/object:Gem::Version
106
+ hash: 3
107
+ segments:
62
108
  - 0
63
- version: 1.0.0
64
- requirement: *id003
65
- type: :runtime
66
- name: json
109
+ version: "0"
110
+ type: :development
111
+ version_requirements: *id006
112
+ - !ruby/object:Gem::Dependency
113
+ name: bundler
114
+ prerelease: false
115
+ requirement: &id007 !ruby/object:Gem::Requirement
116
+ none: false
117
+ requirements:
118
+ - - ~>
119
+ - !ruby/object:Gem::Version
120
+ hash: 15
121
+ segments:
122
+ - 1
123
+ - 0
124
+ version: "1.0"
125
+ type: :development
126
+ version_requirements: *id007
127
+ - !ruby/object:Gem::Dependency
128
+ name: addressable
129
+ prerelease: false
130
+ requirement: &id008 !ruby/object:Gem::Requirement
131
+ none: false
132
+ requirements:
133
+ - - ~>
134
+ - !ruby/object:Gem::Version
135
+ hash: 7
136
+ segments:
137
+ - 2
138
+ - 2
139
+ - 0
140
+ version: 2.2.0
141
+ type: :development
142
+ version_requirements: *id008
143
+ - !ruby/object:Gem::Dependency
144
+ name: rack-test
67
145
  prerelease: false
68
- description: A warden extension that integrates with github oauth
69
- email: atmos@atmos.org
146
+ requirement: &id009 !ruby/object:Gem::Requirement
147
+ none: false
148
+ requirements:
149
+ - - ~>
150
+ - !ruby/object:Gem::Version
151
+ hash: 13
152
+ segments:
153
+ - 0
154
+ - 5
155
+ - 3
156
+ version: 0.5.3
157
+ type: :development
158
+ version_requirements: *id009
159
+ - !ruby/object:Gem::Dependency
160
+ name: ruby-debug
161
+ prerelease: false
162
+ requirement: &id010 !ruby/object:Gem::Requirement
163
+ none: false
164
+ requirements:
165
+ - - ">="
166
+ - !ruby/object:Gem::Version
167
+ hash: 3
168
+ segments:
169
+ - 0
170
+ version: "0"
171
+ type: :development
172
+ version_requirements: *id010
173
+ description: A warden strategy for easy oauth integration with github
174
+ email:
175
+ - atmos@atmos.org
70
176
  executables: []
71
177
 
72
178
  extensions: []
73
179
 
74
- extra_rdoc_files:
75
- - LICENSE
180
+ extra_rdoc_files: []
181
+
76
182
  files:
183
+ - .gitignore
184
+ - Gemfile
77
185
  - LICENSE
78
186
  - README.md
187
+ - Rakefile
188
+ - config.ru
189
+ - lib/warden-github.rb
79
190
  - lib/warden-github/proxy.rb
80
191
  - lib/warden-github/strategy.rb
81
192
  - lib/warden-github/user.rb
82
193
  - lib/warden-github/version.rb
83
- - lib/warden-github.rb
194
+ - spec/app.rb
195
+ - spec/oauth_spec.rb
196
+ - spec/proxy_spec.rb
197
+ - spec/spec_helper.rb
84
198
  has_rdoc: true
85
199
  homepage: http://github.com/atmos/warden-github
86
200
  licenses: []
@@ -110,10 +224,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
110
224
  version: "0"
111
225
  requirements: []
112
226
 
113
- rubyforge_project:
114
- rubygems_version: 1.3.7
227
+ rubyforge_project: warden-github
228
+ rubygems_version: 1.6.2
115
229
  signing_key:
116
230
  specification_version: 3
117
- summary: A warden extension that integrates with github oauth
118
- test_files: []
119
-
231
+ summary: A warden strategy for easy oauth integration with github
232
+ test_files:
233
+ - spec/app.rb
234
+ - spec/oauth_spec.rb
235
+ - spec/proxy_spec.rb
236
+ - spec/spec_helper.rb