opensesame 0.1.2 → 0.2.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 (68) hide show
  1. checksums.yaml +15 -0
  2. data/README.md +11 -1
  3. data/app/controllers/open_sesame/sessions_controller.rb +6 -2
  4. data/lib/open_sesame.rb +8 -2
  5. data/lib/open_sesame/configuration.rb +23 -8
  6. data/lib/open_sesame/devise.rb +13 -0
  7. data/lib/open_sesame/engine.rb +12 -16
  8. data/lib/open_sesame/failure/devise_app.rb +1 -1
  9. data/lib/open_sesame/github_auth.rb +17 -1
  10. data/lib/open_sesame/github_warden.rb +6 -2
  11. data/lib/open_sesame/helpers/controller_helper.rb +1 -1
  12. data/lib/open_sesame/member.rb +52 -19
  13. data/lib/open_sesame/version.rb +1 -1
  14. data/spec/dummy/app/models/user.rb +8 -0
  15. data/spec/dummy/config/initializers/devise.rb +267 -0
  16. data/spec/dummy/config/initializers/opensesame.rb +5 -4
  17. data/spec/dummy/config/locales/devise.en.yml +59 -0
  18. data/spec/dummy/config/routes.rb +2 -0
  19. data/spec/dummy/db/development.sqlite3 +0 -0
  20. data/spec/dummy/db/migrate/20140410210424_devise_create_users.rb +42 -0
  21. data/spec/dummy/db/schema.rb +19 -1
  22. data/spec/dummy/db/test.sqlite3 +0 -0
  23. data/spec/dummy/log/development.log +153 -0
  24. data/spec/dummy/log/test.log +77170 -0
  25. data/spec/dummy/tmp/cache/assets/C72/560/sprockets%2F454956b6f70061da46ea7e27111c1008 +0 -0
  26. data/spec/dummy/tmp/cache/assets/C96/3A0/sprockets%2F97c9391b36c4982d0c9fc0807276627f +0 -0
  27. data/spec/dummy/tmp/cache/assets/CA9/460/sprockets%2F948e48dc820b40d8161dd1460b2064b9 +0 -0
  28. data/spec/dummy/tmp/cache/assets/CB9/D50/sprockets%2F2945a991966bdb26e54c2d48a63d6225 +0 -0
  29. data/spec/dummy/tmp/cache/assets/CFC/F00/sprockets%2F031f4282e0b852bc633f0bad24e56c63 +0 -0
  30. data/spec/dummy/tmp/cache/assets/D08/BA0/sprockets%2F796774ff7a0a9a7f394dd67d369c8693 +0 -0
  31. data/spec/dummy/tmp/cache/assets/D4C/C80/sprockets%2F3555b9b1ef17e63f54c7f2a819a2ce88 +0 -0
  32. data/spec/dummy/tmp/cache/assets/D4E/1B0/sprockets%2Ff7cbd26ba1d28d48de824f0e94586655 +0 -0
  33. data/spec/dummy/tmp/cache/assets/D60/A00/sprockets%2F47747aad6a9bcc1d57003331c30e6cfd +0 -0
  34. data/spec/dummy/tmp/cache/assets/D61/6B0/sprockets%2Faa0ef972a2d713f5b0096ead0e9a0681 +0 -0
  35. data/spec/dummy/tmp/cache/assets/D6D/F40/sprockets%2F071c809d0cdd0bbad45a1b9f8d718858 +0 -0
  36. data/spec/dummy/tmp/cache/assets/D9D/E40/sprockets%2F81ceef9ff2401a52fa3d5777afa0348b +0 -0
  37. data/spec/dummy/tmp/cache/assets/E04/890/sprockets%2F2f5173deea6c795b8fdde723bb4b63af +0 -0
  38. data/spec/lib/open_sesame/configuration_spec.rb +9 -4
  39. data/spec/lib/open_sesame/github_warden_spec.rb +13 -8
  40. data/spec/lib/open_sesame/member_spec.rb +9 -25
  41. data/spec/lib/open_sesame/sessions_spec.rb +4 -5
  42. data/spec/spec_helper.rb +7 -5
  43. data/spec/support/capybara.rb +15 -11
  44. data/spec/support/request_helpers.rb +1 -1
  45. data/spec/support/vcr.rb +3 -2
  46. data/spec/vcr/1.9/member/retrieves_attributes_from_github.yml +491 -0
  47. data/spec/vcr/1.9/member/returns_nil_if_no_github_member_found.yml +185 -0
  48. data/spec/vcr/1.9/member/serialize_from_session_returns_member_from_given_member_id.yml +491 -0
  49. data/spec/vcr/1.9/member/serialize_into_session_returns_given_member_id_in_array.yml +491 -0
  50. data/spec/vcr/1.9/session/allows_auto_login.yml +491 -0
  51. data/spec/vcr/1.9/session/enforces_opensesame_login.yml +491 -0
  52. data/spec/vcr/1.9/session/skips_auto_login_if_just_logged_out.yml +491 -0
  53. data/spec/vcr/2.0/member/retrieves_attributes_from_github.yml +208 -0
  54. data/spec/vcr/2.0/member/returns_nil_if_no_github_member_found.yml +67 -0
  55. data/spec/vcr/2.0/member/serialize_from_session_returns_member_from_given_member_id.yml +208 -0
  56. data/spec/vcr/2.0/member/serialize_into_session_returns_given_member_id_in_array.yml +208 -0
  57. data/spec/vcr/2.0/session/allows_auto_login.yml +208 -0
  58. data/spec/vcr/2.0/session/enforces_opensesame_login.yml +208 -0
  59. data/spec/vcr/2.0/session/skips_auto_login_if_just_logged_out.yml +208 -0
  60. metadata +141 -81
  61. data/spec/vcr/member/retrieves_attributes_from_github.yml +0 -46
  62. data/spec/vcr/member/returns_nil_if_no_github_member_found.yml +0 -46
  63. data/spec/vcr/member/serialize_from_session_returns_member_from_given_member_id.yml +0 -89
  64. data/spec/vcr/member/serialize_into_session_returns_given_member_id_in_array.yml +0 -46
  65. data/spec/vcr/session/allows_auto_login.yml +0 -132
  66. data/spec/vcr/session/enforces_opensesame_login.yml +0 -132
  67. data/spec/vcr/session/skips_auto_login_if_just_logged_out.yml +0 -175
  68. data/spec/vcr/session/tries_auto_login_and_ends_up_on_opensesame_page_after_failure.yml +0 -46
@@ -12,8 +12,13 @@ describe OpenSesame::Configuration do
12
12
 
13
13
  it "github sets github client credentials" do
14
14
  configuration.github "client_id", "client_secret"
15
- configuration.github_client[:id].should == "client_id"
16
- configuration.github_client[:secret].should == "client_secret"
15
+ configuration.github_application[:client_id].should == "client_id"
16
+ configuration.github_application[:client_secret].should == "client_secret"
17
+ end
18
+
19
+ it "github sets github token credentials" do
20
+ configuration.github_access_token "access_token"
21
+ configuration.github_application[:access_token].should == "access_token"
17
22
  end
18
23
 
19
24
  it "mounted_at sets mount_prefix" do
@@ -35,7 +40,7 @@ describe OpenSesame::Configuration do
35
40
  configuration.github "client_id", "client_secret"
36
41
  configuration.should_not be_valid
37
42
 
38
- configuration.github_client = nil
43
+ configuration.github_application = nil
39
44
  configuration.mounted_at "/foobar"
40
45
  configuration.should_not be_valid
41
46
  end
@@ -76,4 +81,4 @@ describe OpenSesame::Configuration do
76
81
  end
77
82
 
78
83
  end
79
- end
84
+ end
@@ -1,9 +1,14 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe OpenSesame::GithubWarden do
4
-
5
4
  let(:strategy) { OpenSesame::GithubWarden.new(@env_with_params) }
6
5
 
6
+ def auth_hash(auth = { "provider" => "github" })
7
+ {
8
+ 'omniauth.auth' => OmniAuth::AuthHash.new(auth)
9
+ }
10
+ end
11
+
7
12
  it "is not valid without omniauth hash" do
8
13
  @env_with_params = env_with_params("/", {}, 'omniauth.auth' => nil)
9
14
  strategy.valid?.should be_false
@@ -15,30 +20,30 @@ describe OpenSesame::GithubWarden do
15
20
  end
16
21
 
17
22
  it "is valid with github provider in omniauth hash" do
18
- @env_with_params = env_with_params("/", {}, 'omniauth.auth' => { "provider" => "github" })
23
+ @env_with_params = env_with_params("/", {}, auth_hash)
19
24
  strategy.valid?.should be_true
20
25
  end
21
26
 
22
27
  it "returns omniauth auth_hash" do
23
- @env_with_params = env_with_params("/", {}, 'omniauth.auth' => { "provider" => "github" })
28
+ @env_with_params = env_with_params("/", {}, auth_hash)
24
29
  strategy.auth_hash.should eq("provider" => "github")
25
30
  end
26
31
 
27
32
  it "authenticates successfully when OpenSesame::Member is found" do
28
- @env_with_params = env_with_params("/", {}, 'omniauth.auth' => { "provider" => "github", "uid" => "123" })
33
+ @env_with_params = env_with_params("/", {}, auth_hash("provider" => "github", "uid" => "123", "info" => { "nickname" => "rickybobby" }))
29
34
 
30
- OpenSesame::Member.should_receive(:find).with("123").and_return(OpenSesame::Member.new(:id => "123"))
35
+ OpenSesame::Member.should_receive(:find).with("rickybobby").and_return(OpenSesame::Member.new(:login => "rickybobby"))
31
36
  strategy.authenticate!
32
37
  strategy.result.should == :success
33
38
  end
34
39
 
35
40
  it "fails authentication when OpenSesame::Member is not found" do
36
- @env_with_params = env_with_params("/", {}, 'omniauth.auth' => { "provider" => "github", "uid" => "123" })
37
- OpenSesame::Member.should_receive(:find).with("123").and_return(nil)
41
+ @env_with_params = env_with_params("/", {}, auth_hash("provider" => "github", "uid" => "123", "info" => { "nickname" => "rickybobby" }))
42
+ OpenSesame::Member.should_receive(:find).with("rickybobby").and_return(nil)
38
43
 
39
44
  strategy.authenticate!
40
45
  strategy.result.should == :failure
41
46
  strategy.message.should == 'Sorry, you do not have access'
42
47
  end
43
48
 
44
- end
49
+ end
@@ -1,13 +1,14 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe OpenSesame::Member, :vcr, :record => :new_episodes do
4
- ROSSTA_GITHUB_ID = 11673
4
+
5
+ let(:github_login) { user_attributes[:login] }
6
+ let(:github_id) { user_attributes[:id] }
5
7
 
6
8
  describe "self.find" do
7
9
  it "retrieves attributes from github" do
8
- member = OpenSesame::Member.find(ROSSTA_GITHUB_ID)
10
+ member = OpenSesame::Member.find(github_login)
9
11
  member.should be_a(OpenSesame::Member)
10
- member.id.should == ROSSTA_GITHUB_ID
11
12
  member.login.should == 'rossta'
12
13
  end
13
14
 
@@ -16,36 +17,19 @@ describe OpenSesame::Member, :vcr, :record => :new_episodes do
16
17
  member = OpenSesame::Member.find(nonexisting_id)
17
18
  member.should be_nil
18
19
  end
19
-
20
- context "github api" do
21
- let(:github_api) { mock('Octokit') }
22
-
23
- before do
24
- OpenSesame::Member.stub!(:github_api => github_api)
25
- end
26
-
27
- it "looks up organization member for given id" do
28
- github_api.should_receive(:organization_members).with(OpenSesame.organization_name).and_return([])
29
- OpenSesame::Member.find(123)
30
- end
31
-
32
- it "skips lookup if no id given" do
33
- github_api.should_not_receive(:organization_members)
34
- OpenSesame::Member.find(nil)
35
- end
36
- end
37
20
  end
38
21
 
39
22
  describe "warden serialization" do
40
- let(:member) { OpenSesame::Member.find(ROSSTA_GITHUB_ID) }
23
+ let(:member) { OpenSesame::Member.find(github_login) }
41
24
 
42
25
  it "serialize_into_session returns given member.id in array" do
43
- OpenSesame::Member.serialize_into_session(member).should eq([ROSSTA_GITHUB_ID])
26
+ OpenSesame::Member.serialize_into_session(member).should eq([github_login])
44
27
  end
45
28
 
46
29
  it "serialize_from_session returns member from given member id" do
47
- OpenSesame::Member.serialize_from_session(ROSSTA_GITHUB_ID).should eq(member)
30
+ OpenSesame::Member.serialize_into_session(member)
31
+ OpenSesame::Member.serialize_from_session(github_login).should eq(member)
48
32
  end
49
33
  end
50
34
 
51
- end
35
+ end
@@ -1,7 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe "Session", :vcr, :record => :new_episodes, :type => :request do
4
-
3
+ describe "Session", :vcr, :record => :new_episodes, :type => :feature do
5
4
  context "successful login" do
6
5
  before { setup_for_github_login }
7
6
 
@@ -16,7 +15,7 @@ describe "Session", :vcr, :record => :new_episodes, :type => :request do
16
15
  end
17
16
 
18
17
  describe "auto login" do
19
- before { OpenSesame.stub!(:auto_access_provider).and_return('github') }
18
+ before { OpenSesame.stub(:auto_access_provider => 'github') }
20
19
 
21
20
  it "allows auto login" do
22
21
  visit root_path
@@ -39,10 +38,10 @@ describe "Session", :vcr, :record => :new_episodes, :type => :request do
39
38
  end
40
39
 
41
40
  it "tries auto login and ends up on opensesame page after failure" do
42
- setup_for_github_login(mock('NonUser', :id => "123"))
41
+ setup_for_github_login(id: "123", login: "rickybobby")
43
42
  visit root_path
44
43
  page.should have_content "Login"
45
44
  page.should_not have_content "Welcome Home"
46
45
  end
47
46
 
48
- end
47
+ end
data/spec/spec_helper.rb CHANGED
@@ -8,13 +8,15 @@ require 'capybara/rspec'
8
8
 
9
9
  ENGINE_RAILS_ROOT=File.join(File.dirname(__FILE__), '../')
10
10
 
11
- # Requires supporting ruby files with custom matchers and macros, etc,
12
- # in spec/support/ and its subdirectories.
13
- Dir[File.join(ENGINE_RAILS_ROOT, "spec/support/**/*.rb")].each {|f| require f }
14
-
15
11
  OmniAuth.config.test_mode = true
16
12
 
17
13
  RSpec.configure do |config|
18
14
  config.use_transactional_fixtures = true
19
15
  config.infer_base_class_for_anonymous_controllers = false
20
- end
16
+
17
+ config.before :each do
18
+ OpenSesame::Member.reset
19
+ end
20
+ end
21
+
22
+ Dir[File.join(ENGINE_RAILS_ROOT, "spec/support/**/*.rb")].each {|f| require f }
@@ -1,16 +1,12 @@
1
- require 'octokit'
2
-
1
+ require 'open_sesame/member'
2
+ require 'omniauth'
3
3
  module CapybaraHelper
4
4
 
5
- def setup_for_github_login(user = test_user)
6
- OmniAuth.config.mock_auth[:github] = {
5
+ def setup_for_github_login(attributes = user_attributes)
6
+ OmniAuth.config.mock_auth[:github] = OmniAuth::AuthHash.new \
7
7
  "provider" => 'github',
8
- "uid" => test_user.id
9
- }
10
- end
11
-
12
- def test_user
13
- Octokit.user('rossta')
8
+ "uid" => attributes[:id],
9
+ "info" => { "nickname" => attributes[:login] }
14
10
  end
15
11
 
16
12
  def login_with_github
@@ -18,7 +14,15 @@ module CapybaraHelper
18
14
  visit root_path
19
15
  click_link 'github'
20
16
  end
17
+ end
18
+
19
+ module GeneralHelper
20
+
21
+ def user_attributes
22
+ { :login => 'rossta', :id => 11673 }
23
+ end
21
24
 
22
25
  end
23
26
 
24
- RSpec.configuration.send :include, CapybaraHelper, :type => :request
27
+ RSpec.configuration.send :include, GeneralHelper
28
+ RSpec.configuration.send :include, CapybaraHelper, :type => :feature
@@ -58,4 +58,4 @@ module RequestHelpers
58
58
  end # session
59
59
  end
60
60
 
61
- RSpec.configuration.send(:include, RequestHelpers)
61
+ RSpec.configuration.send(:include, RequestHelpers)
data/spec/support/vcr.rb CHANGED
@@ -3,7 +3,8 @@ require 'vcr'
3
3
  require 'fakeweb'
4
4
 
5
5
  VCR.configure do |c|
6
- c.cassette_library_dir = 'spec/vcr'
6
+ ruby_major_minor = RUBY_VERSION.split('.')[0,2].join('.')
7
+ c.cassette_library_dir = "spec/vcr/#{ruby_major_minor}"
7
8
  c.allow_http_connections_when_no_cassette = true
8
9
  c.hook_into :fakeweb
9
10
  end
@@ -19,4 +20,4 @@ RSpec.configure do |c|
19
20
  end
20
21
  VCR.use_cassette(name, :record => example.metadata[:record]) { example.call }
21
22
  end
22
- end
23
+ end
@@ -0,0 +1,491 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://api.github.com/orgs/challengepost/members/rossta?client_id=65c6c34afdfc113d4698&client_secret=59c44f344f9c45b4f15b03935bb2cc0501d40e46
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ accept:
11
+ - application/vnd.github.beta+json
12
+ user-agent:
13
+ - Octokit Ruby Gem 2.3.1
14
+ accept-encoding:
15
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
16
+ response:
17
+ status:
18
+ code: 302
19
+ message: Found
20
+ headers:
21
+ server:
22
+ - GitHub.com
23
+ date:
24
+ - Fri, 11 Apr 2014 14:54:42 GMT
25
+ content-type:
26
+ - text/html;charset=utf-8
27
+ connection:
28
+ - close
29
+ status:
30
+ - 302 Found
31
+ x-ratelimit-limit:
32
+ - '5000'
33
+ x-ratelimit-remaining:
34
+ - '4941'
35
+ x-ratelimit-reset:
36
+ - '1397230923'
37
+ location:
38
+ - https://api.github.com/organizations/199945/public_members/rossta
39
+ x-xss-protection:
40
+ - 1; mode=block
41
+ x-frame-options:
42
+ - deny
43
+ content-security-policy:
44
+ - default-src 'none'
45
+ content-length:
46
+ - '0'
47
+ access-control-allow-credentials:
48
+ - 'true'
49
+ access-control-expose-headers:
50
+ - ETag, Link, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset,
51
+ X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval
52
+ access-control-allow-origin:
53
+ - ! '*'
54
+ x-github-request-id:
55
+ - 324A188A:0140:383519:53480232
56
+ strict-transport-security:
57
+ - max-age=31536000
58
+ x-content-type-options:
59
+ - nosniff
60
+ vary:
61
+ - Accept-Encoding
62
+ x-served-by:
63
+ - c436b2b44345c72ff906059f604991e7
64
+ body:
65
+ encoding: US-ASCII
66
+ string: ''
67
+ http_version: '1.1'
68
+ recorded_at: Fri, 11 Apr 2014 14:54:52 GMT
69
+ - request:
70
+ method: get
71
+ uri: https://api.github.com/organizations/199945/public_members/rossta?client_id=65c6c34afdfc113d4698&client_secret=59c44f344f9c45b4f15b03935bb2cc0501d40e46
72
+ body:
73
+ encoding: US-ASCII
74
+ string: ''
75
+ headers:
76
+ accept:
77
+ - application/vnd.github.beta+json
78
+ user-agent:
79
+ - Octokit Ruby Gem 2.3.1
80
+ accept-encoding:
81
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
82
+ response:
83
+ status:
84
+ code: 204
85
+ message: No Content
86
+ headers:
87
+ server:
88
+ - GitHub.com
89
+ date:
90
+ - Fri, 11 Apr 2014 14:54:42 GMT
91
+ connection:
92
+ - close
93
+ status:
94
+ - 204 No Content
95
+ x-ratelimit-limit:
96
+ - '5000'
97
+ x-ratelimit-remaining:
98
+ - '4940'
99
+ x-ratelimit-reset:
100
+ - '1397230923'
101
+ x-github-media-type:
102
+ - github.beta; format=json
103
+ x-xss-protection:
104
+ - 1; mode=block
105
+ x-frame-options:
106
+ - deny
107
+ content-security-policy:
108
+ - default-src 'none'
109
+ access-control-allow-credentials:
110
+ - 'true'
111
+ access-control-expose-headers:
112
+ - ETag, Link, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset,
113
+ X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval
114
+ access-control-allow-origin:
115
+ - ! '*'
116
+ x-github-request-id:
117
+ - 324A188A:0140:383563:53480232
118
+ strict-transport-security:
119
+ - max-age=31536000
120
+ x-content-type-options:
121
+ - nosniff
122
+ vary:
123
+ - Accept-Encoding
124
+ x-served-by:
125
+ - 3061975e1f37121b3751604ad153c687
126
+ body:
127
+ encoding: US-ASCII
128
+ string: ''
129
+ http_version: '1.1'
130
+ recorded_at: Fri, 11 Apr 2014 14:54:53 GMT
131
+ - request:
132
+ method: get
133
+ uri: https://api.github.com/users/rossta?client_id=65c6c34afdfc113d4698&client_secret=59c44f344f9c45b4f15b03935bb2cc0501d40e46
134
+ body:
135
+ encoding: US-ASCII
136
+ string: ''
137
+ headers:
138
+ accept:
139
+ - application/vnd.github.beta+json
140
+ user-agent:
141
+ - Octokit Ruby Gem 2.3.1
142
+ accept-encoding:
143
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
144
+ response:
145
+ status:
146
+ code: 200
147
+ message: !binary |-
148
+ T0s=
149
+ headers:
150
+ !binary "c2VydmVy":
151
+ - !binary |-
152
+ R2l0SHViLmNvbQ==
153
+ !binary "ZGF0ZQ==":
154
+ - !binary |-
155
+ RnJpLCAxMSBBcHIgMjAxNCAxNDo1NDo0MyBHTVQ=
156
+ !binary "Y29udGVudC10eXBl":
157
+ - !binary |-
158
+ YXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOA==
159
+ !binary "dHJhbnNmZXItZW5jb2Rpbmc=":
160
+ - !binary |-
161
+ Y2h1bmtlZA==
162
+ !binary "Y29ubmVjdGlvbg==":
163
+ - !binary |-
164
+ Y2xvc2U=
165
+ !binary "c3RhdHVz":
166
+ - !binary |-
167
+ MjAwIE9L
168
+ !binary "eC1yYXRlbGltaXQtbGltaXQ=":
169
+ - !binary |-
170
+ NTAwMA==
171
+ !binary "eC1yYXRlbGltaXQtcmVtYWluaW5n":
172
+ - !binary |-
173
+ NDkzOQ==
174
+ !binary "eC1yYXRlbGltaXQtcmVzZXQ=":
175
+ - !binary |-
176
+ MTM5NzIzMDkyMw==
177
+ !binary "Y2FjaGUtY29udHJvbA==":
178
+ - !binary |-
179
+ cHVibGljLCBtYXgtYWdlPTYwLCBzLW1heGFnZT02MA==
180
+ !binary "bGFzdC1tb2RpZmllZA==":
181
+ - !binary |-
182
+ VGh1LCAxMCBBcHIgMjAxNCAyMjo0MDoxOCBHTVQ=
183
+ !binary "ZXRhZw==":
184
+ - !binary |-
185
+ ImY4ZmY0OWMzMWJiZTFhMTk3ZTJmYmJiYjg2YWQ1ZWRhIg==
186
+ !binary "dmFyeQ==":
187
+ - !binary |-
188
+ QWNjZXB0
189
+ - !binary |-
190
+ QWNjZXB0LUVuY29kaW5n
191
+ !binary "eC1naXRodWItbWVkaWEtdHlwZQ==":
192
+ - !binary |-
193
+ Z2l0aHViLmJldGE7IGZvcm1hdD1qc29u
194
+ !binary "eC14c3MtcHJvdGVjdGlvbg==":
195
+ - !binary |-
196
+ MTsgbW9kZT1ibG9jaw==
197
+ !binary "eC1mcmFtZS1vcHRpb25z":
198
+ - !binary |-
199
+ ZGVueQ==
200
+ !binary "Y29udGVudC1zZWN1cml0eS1wb2xpY3k=":
201
+ - !binary |-
202
+ ZGVmYXVsdC1zcmMgJ25vbmUn
203
+ !binary "YWNjZXNzLWNvbnRyb2wtYWxsb3ctY3JlZGVudGlhbHM=":
204
+ - !binary |-
205
+ dHJ1ZQ==
206
+ !binary "YWNjZXNzLWNvbnRyb2wtZXhwb3NlLWhlYWRlcnM=":
207
+ - !binary |-
208
+ RVRhZywgTGluaywgWC1HaXRIdWItT1RQLCBYLVJhdGVMaW1pdC1MaW1pdCwg
209
+ WC1SYXRlTGltaXQtUmVtYWluaW5nLCBYLVJhdGVMaW1pdC1SZXNldCwgWC1P
210
+ QXV0aC1TY29wZXMsIFgtQWNjZXB0ZWQtT0F1dGgtU2NvcGVzLCBYLVBvbGwt
211
+ SW50ZXJ2YWw=
212
+ !binary "YWNjZXNzLWNvbnRyb2wtYWxsb3ctb3JpZ2lu":
213
+ - !binary |-
214
+ Kg==
215
+ !binary "eC1naXRodWItcmVxdWVzdC1pZA==":
216
+ - !binary |-
217
+ MzI0QTE4OEE6MDEzRToxQzQ2QkU6NTM0ODAyMzI=
218
+ !binary "c3RyaWN0LXRyYW5zcG9ydC1zZWN1cml0eQ==":
219
+ - !binary |-
220
+ bWF4LWFnZT0zMTUzNjAwMA==
221
+ !binary "eC1jb250ZW50LXR5cGUtb3B0aW9ucw==":
222
+ - !binary |-
223
+ bm9zbmlmZg==
224
+ !binary "eC1zZXJ2ZWQtYnk=":
225
+ - !binary |-
226
+ OTcxYWY0MDM5MGFjNDM5OGZjZGQ0NWM4ZGFiMGZiZTc=
227
+ !binary "Y29udGVudC1lbmNvZGluZw==":
228
+ - !binary |-
229
+ Z3ppcA==
230
+ body:
231
+ encoding: ASCII-8BIT
232
+ string: !binary |-
233
+ H4sIAAAAAAAAA5VUwW6jMBT8lcjnpDYkAcplK/W40h5W3cP2EhkwYNXYyDaJ
234
+ sqj/vmOg2TbSHjiBzcy88fMbRqJMIzXJiTXOeU62RFYkj6Ik3W8JP3PP7Wmw
235
+ CoDW+97llM6b7qGRvh2KwQlbGu2F9g+l6ehAJ+43CDV24QdFUrAoeeRpVmfH
236
+ 6DGJ2TGrkv1+n/KKRYe0SkC4q9PLpcYsjEKO3ly2vlN3xmZDE/gGq41S5gLm
237
+ /SH+L05vHFia36VuVvPBGanxrUD/YP09NEQ6v8bIhB9peJxkFRRwQ9aKaoWZ
238
+ hQErFw0XI7WiN5PUULjSyt5Lo9eY+sKDjrEN1/IPX6sDngM92FlTfsKDJ86Y
239
+ uDXEmTDS3sozL6+hBVaUQp7RztVid0xo+WsvMOW/cNWhudKLE6+6kKyaKye2
240
+ RPMuAH4iZpvvvK6FLoRtJjQmtuf6umQMEStbrpTQTTjrFCuACgT1HyIM+BtU
241
+ lo/KlNMFAPBDXDa/jX3bPEt/DY3quAzx/WA8NWFj4bXSCl4oGFtcFtKQXA9K
242
+ bUk/FEqWp7nheRLfdqaxJHmcfsQD8cKSfUoLlvh9lBD3aC/3qB8zlu3YcRen
243
+ L1EGch4lr7A39NVnTHTYscMuYi9xnB9YHmWv5P0vcuBjWqQEAAA=
244
+ http_version: !binary |-
245
+ MS4x
246
+ recorded_at: Fri, 11 Apr 2014 14:54:53 GMT
247
+ - request:
248
+ method: get
249
+ uri: https://api.github.com/orgs/challengepost/members/rossta?client_id=dummy_app_id&client_secret=dummy_secret
250
+ body:
251
+ encoding: US-ASCII
252
+ string: ''
253
+ headers:
254
+ accept:
255
+ - application/vnd.github.beta+json
256
+ user-agent:
257
+ - Octokit Ruby Gem 2.7.2
258
+ accept-encoding:
259
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
260
+ response:
261
+ status:
262
+ code: 302
263
+ message: Found
264
+ headers:
265
+ server:
266
+ - GitHub.com
267
+ date:
268
+ - Fri, 11 Apr 2014 18:48:55 GMT
269
+ content-type:
270
+ - text/html;charset=utf-8
271
+ connection:
272
+ - close
273
+ status:
274
+ - 302 Found
275
+ x-ratelimit-limit:
276
+ - '60'
277
+ x-ratelimit-remaining:
278
+ - '21'
279
+ x-ratelimit-reset:
280
+ - '1397243650'
281
+ location:
282
+ - https://api.github.com/organizations/199945/public_members/rossta
283
+ x-xss-protection:
284
+ - 1; mode=block
285
+ x-frame-options:
286
+ - deny
287
+ content-security-policy:
288
+ - default-src 'none'
289
+ content-length:
290
+ - '0'
291
+ access-control-allow-credentials:
292
+ - 'true'
293
+ access-control-expose-headers:
294
+ - ETag, Link, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset,
295
+ X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval
296
+ access-control-allow-origin:
297
+ - ! '*'
298
+ x-github-request-id:
299
+ - 324A188A:0141:A5E654:53483917
300
+ strict-transport-security:
301
+ - max-age=31536000
302
+ x-content-type-options:
303
+ - nosniff
304
+ vary:
305
+ - Accept-Encoding
306
+ x-served-by:
307
+ - a1d8c69b807c8e21f06cad9da377d1b0
308
+ body:
309
+ encoding: US-ASCII
310
+ string: ''
311
+ http_version: '1.1'
312
+ recorded_at: Fri, 11 Apr 2014 18:49:05 GMT
313
+ - request:
314
+ method: get
315
+ uri: https://api.github.com/organizations/199945/public_members/rossta?client_id=dummy_app_id&client_secret=dummy_secret
316
+ body:
317
+ encoding: US-ASCII
318
+ string: ''
319
+ headers:
320
+ accept:
321
+ - application/vnd.github.beta+json
322
+ user-agent:
323
+ - Octokit Ruby Gem 2.7.2
324
+ accept-encoding:
325
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
326
+ response:
327
+ status:
328
+ code: 204
329
+ message: No Content
330
+ headers:
331
+ server:
332
+ - GitHub.com
333
+ date:
334
+ - Fri, 11 Apr 2014 18:48:55 GMT
335
+ connection:
336
+ - close
337
+ status:
338
+ - 204 No Content
339
+ x-ratelimit-limit:
340
+ - '60'
341
+ x-ratelimit-remaining:
342
+ - '20'
343
+ x-ratelimit-reset:
344
+ - '1397243650'
345
+ x-github-media-type:
346
+ - github.beta; format=json
347
+ x-xss-protection:
348
+ - 1; mode=block
349
+ x-frame-options:
350
+ - deny
351
+ content-security-policy:
352
+ - default-src 'none'
353
+ access-control-allow-credentials:
354
+ - 'true'
355
+ access-control-expose-headers:
356
+ - ETag, Link, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset,
357
+ X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval
358
+ access-control-allow-origin:
359
+ - ! '*'
360
+ x-github-request-id:
361
+ - 324A188A:013F:645122:53483917
362
+ strict-transport-security:
363
+ - max-age=31536000
364
+ x-content-type-options:
365
+ - nosniff
366
+ vary:
367
+ - Accept-Encoding
368
+ x-served-by:
369
+ - 132026e9262a0093e437f99db5f1e499
370
+ body:
371
+ encoding: US-ASCII
372
+ string: ''
373
+ http_version: '1.1'
374
+ recorded_at: Fri, 11 Apr 2014 18:49:05 GMT
375
+ - request:
376
+ method: get
377
+ uri: https://api.github.com/users/rossta?client_id=dummy_app_id&client_secret=dummy_secret
378
+ body:
379
+ encoding: US-ASCII
380
+ string: ''
381
+ headers:
382
+ accept:
383
+ - application/vnd.github.beta+json
384
+ user-agent:
385
+ - Octokit Ruby Gem 2.7.2
386
+ accept-encoding:
387
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
388
+ response:
389
+ status:
390
+ code: 200
391
+ message: !binary |-
392
+ T0s=
393
+ headers:
394
+ !binary "c2VydmVy":
395
+ - !binary |-
396
+ R2l0SHViLmNvbQ==
397
+ !binary "ZGF0ZQ==":
398
+ - !binary |-
399
+ RnJpLCAxMSBBcHIgMjAxNCAxODo0ODo1NSBHTVQ=
400
+ !binary "Y29udGVudC10eXBl":
401
+ - !binary |-
402
+ YXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOA==
403
+ !binary "dHJhbnNmZXItZW5jb2Rpbmc=":
404
+ - !binary |-
405
+ Y2h1bmtlZA==
406
+ !binary "Y29ubmVjdGlvbg==":
407
+ - !binary |-
408
+ Y2xvc2U=
409
+ !binary "c3RhdHVz":
410
+ - !binary |-
411
+ MjAwIE9L
412
+ !binary "eC1yYXRlbGltaXQtbGltaXQ=":
413
+ - !binary |-
414
+ NjA=
415
+ !binary "eC1yYXRlbGltaXQtcmVtYWluaW5n":
416
+ - !binary |-
417
+ MTk=
418
+ !binary "eC1yYXRlbGltaXQtcmVzZXQ=":
419
+ - !binary |-
420
+ MTM5NzI0MzY1MA==
421
+ !binary "Y2FjaGUtY29udHJvbA==":
422
+ - !binary |-
423
+ cHVibGljLCBtYXgtYWdlPTYwLCBzLW1heGFnZT02MA==
424
+ !binary "bGFzdC1tb2RpZmllZA==":
425
+ - !binary |-
426
+ RnJpLCAxMSBBcHIgMjAxNCAxNzozODo0NSBHTVQ=
427
+ !binary "ZXRhZw==":
428
+ - !binary |-
429
+ Ijc5OGM3MDA2NDBjMjcyN2JhYzNlNmMzYTM4NzIzY2MyIg==
430
+ !binary "dmFyeQ==":
431
+ - !binary |-
432
+ QWNjZXB0
433
+ - !binary |-
434
+ QWNjZXB0LUVuY29kaW5n
435
+ !binary "eC1naXRodWItbWVkaWEtdHlwZQ==":
436
+ - !binary |-
437
+ Z2l0aHViLmJldGE7IGZvcm1hdD1qc29u
438
+ !binary "eC14c3MtcHJvdGVjdGlvbg==":
439
+ - !binary |-
440
+ MTsgbW9kZT1ibG9jaw==
441
+ !binary "eC1mcmFtZS1vcHRpb25z":
442
+ - !binary |-
443
+ ZGVueQ==
444
+ !binary "Y29udGVudC1zZWN1cml0eS1wb2xpY3k=":
445
+ - !binary |-
446
+ ZGVmYXVsdC1zcmMgJ25vbmUn
447
+ !binary "YWNjZXNzLWNvbnRyb2wtYWxsb3ctY3JlZGVudGlhbHM=":
448
+ - !binary |-
449
+ dHJ1ZQ==
450
+ !binary "YWNjZXNzLWNvbnRyb2wtZXhwb3NlLWhlYWRlcnM=":
451
+ - !binary |-
452
+ RVRhZywgTGluaywgWC1HaXRIdWItT1RQLCBYLVJhdGVMaW1pdC1MaW1pdCwg
453
+ WC1SYXRlTGltaXQtUmVtYWluaW5nLCBYLVJhdGVMaW1pdC1SZXNldCwgWC1P
454
+ QXV0aC1TY29wZXMsIFgtQWNjZXB0ZWQtT0F1dGgtU2NvcGVzLCBYLVBvbGwt
455
+ SW50ZXJ2YWw=
456
+ !binary "YWNjZXNzLWNvbnRyb2wtYWxsb3ctb3JpZ2lu":
457
+ - !binary |-
458
+ Kg==
459
+ !binary "eC1naXRodWItcmVxdWVzdC1pZA==":
460
+ - !binary |-
461
+ MzI0QTE4OEE6MDE0MDo4NzYwQjQ6NTM0ODM5MTc=
462
+ !binary "c3RyaWN0LXRyYW5zcG9ydC1zZWN1cml0eQ==":
463
+ - !binary |-
464
+ bWF4LWFnZT0zMTUzNjAwMA==
465
+ !binary "eC1jb250ZW50LXR5cGUtb3B0aW9ucw==":
466
+ - !binary |-
467
+ bm9zbmlmZg==
468
+ !binary "eC1zZXJ2ZWQtYnk=":
469
+ - !binary |-
470
+ MzA2MTk3NWUxZjM3MTIxYjM3NTE2MDRhZDE1M2M2ODc=
471
+ !binary "Y29udGVudC1lbmNvZGluZw==":
472
+ - !binary |-
473
+ Z3ppcA==
474
+ body:
475
+ encoding: ASCII-8BIT
476
+ string: !binary |-
477
+ H4sIAAAAAAAAA5VUwW6jMBT8lcjnpMaQAOWylXpcaQ+r7mF7iQwYsGpsZJtE
478
+ 2aj/vmOg2TbSHjiBzcy88fMbrkSZVmpSEGuc85xsiaxJwViaJVvCT9xzexyt
479
+ AqDzfnAFpfOme2il78ZydMJWRnuh/UNlejrSifsNQq1d+EGRlBFLH3mWN/mB
480
+ PaZxdMjrNEmSjNcR22d1CsJdnUEuNWZhFHL05rLzvbozNhuawDdYY5QyZzDv
481
+ D/F/cXrjwNL8LnW7mg/OlRrfCfQP1t9DQ6Tza4xM+CsNj6OsgwJuyFpRrzCz
482
+ MGDlrOHiSq0YzCQ1lq6ycvDS6DWmvvCgY2zLtfzD1+qA50APdtaUn/DgiRMm
483
+ bg1xJlzpYOWJV5fQAisqIU9o52qxOya0/GUQmPJfuOrQXOnFkdd9SFbDlRNb
484
+ onkfAD8Rs8133jRCl8K2ExoTO3B9WTKGiFUdV0roNpx1ihVAJYL6DxEG/A0q
485
+ y0dlqukCAPghzpvfxr5tnqW/hEb1XIb4fjCe2rCx8DppBS8VjC0uS2lIoUel
486
+ tmQYSyWr49zwIo1vO9NYkiLOPuKBeGEZfUoLlvh9VBD3aC/3qB9HUb6LDrs4
487
+ e2E5yAVLX2FvHOrPGLbfRfsdYy8sK5K82B9eyftfYYSe+6QEAAA=
488
+ http_version: !binary |-
489
+ MS4x
490
+ recorded_at: Fri, 11 Apr 2014 18:49:05 GMT
491
+ recorded_with: VCR 2.9.0