opensesame 0.1.2 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +15 -0
- data/README.md +11 -1
- data/app/controllers/open_sesame/sessions_controller.rb +6 -2
- data/lib/open_sesame.rb +8 -2
- data/lib/open_sesame/configuration.rb +23 -8
- data/lib/open_sesame/devise.rb +13 -0
- data/lib/open_sesame/engine.rb +12 -16
- data/lib/open_sesame/failure/devise_app.rb +1 -1
- data/lib/open_sesame/github_auth.rb +17 -1
- data/lib/open_sesame/github_warden.rb +6 -2
- data/lib/open_sesame/helpers/controller_helper.rb +1 -1
- data/lib/open_sesame/member.rb +52 -19
- data/lib/open_sesame/version.rb +1 -1
- data/spec/dummy/app/models/user.rb +8 -0
- data/spec/dummy/config/initializers/devise.rb +267 -0
- data/spec/dummy/config/initializers/opensesame.rb +5 -4
- data/spec/dummy/config/locales/devise.en.yml +59 -0
- data/spec/dummy/config/routes.rb +2 -0
- data/spec/dummy/db/development.sqlite3 +0 -0
- data/spec/dummy/db/migrate/20140410210424_devise_create_users.rb +42 -0
- data/spec/dummy/db/schema.rb +19 -1
- data/spec/dummy/db/test.sqlite3 +0 -0
- data/spec/dummy/log/development.log +153 -0
- data/spec/dummy/log/test.log +77170 -0
- data/spec/dummy/tmp/cache/assets/C72/560/sprockets%2F454956b6f70061da46ea7e27111c1008 +0 -0
- data/spec/dummy/tmp/cache/assets/C96/3A0/sprockets%2F97c9391b36c4982d0c9fc0807276627f +0 -0
- data/spec/dummy/tmp/cache/assets/CA9/460/sprockets%2F948e48dc820b40d8161dd1460b2064b9 +0 -0
- data/spec/dummy/tmp/cache/assets/CB9/D50/sprockets%2F2945a991966bdb26e54c2d48a63d6225 +0 -0
- data/spec/dummy/tmp/cache/assets/CFC/F00/sprockets%2F031f4282e0b852bc633f0bad24e56c63 +0 -0
- data/spec/dummy/tmp/cache/assets/D08/BA0/sprockets%2F796774ff7a0a9a7f394dd67d369c8693 +0 -0
- data/spec/dummy/tmp/cache/assets/D4C/C80/sprockets%2F3555b9b1ef17e63f54c7f2a819a2ce88 +0 -0
- data/spec/dummy/tmp/cache/assets/D4E/1B0/sprockets%2Ff7cbd26ba1d28d48de824f0e94586655 +0 -0
- data/spec/dummy/tmp/cache/assets/D60/A00/sprockets%2F47747aad6a9bcc1d57003331c30e6cfd +0 -0
- data/spec/dummy/tmp/cache/assets/D61/6B0/sprockets%2Faa0ef972a2d713f5b0096ead0e9a0681 +0 -0
- data/spec/dummy/tmp/cache/assets/D6D/F40/sprockets%2F071c809d0cdd0bbad45a1b9f8d718858 +0 -0
- data/spec/dummy/tmp/cache/assets/D9D/E40/sprockets%2F81ceef9ff2401a52fa3d5777afa0348b +0 -0
- data/spec/dummy/tmp/cache/assets/E04/890/sprockets%2F2f5173deea6c795b8fdde723bb4b63af +0 -0
- data/spec/lib/open_sesame/configuration_spec.rb +9 -4
- data/spec/lib/open_sesame/github_warden_spec.rb +13 -8
- data/spec/lib/open_sesame/member_spec.rb +9 -25
- data/spec/lib/open_sesame/sessions_spec.rb +4 -5
- data/spec/spec_helper.rb +7 -5
- data/spec/support/capybara.rb +15 -11
- data/spec/support/request_helpers.rb +1 -1
- data/spec/support/vcr.rb +3 -2
- data/spec/vcr/1.9/member/retrieves_attributes_from_github.yml +491 -0
- data/spec/vcr/1.9/member/returns_nil_if_no_github_member_found.yml +185 -0
- data/spec/vcr/1.9/member/serialize_from_session_returns_member_from_given_member_id.yml +491 -0
- data/spec/vcr/1.9/member/serialize_into_session_returns_given_member_id_in_array.yml +491 -0
- data/spec/vcr/1.9/session/allows_auto_login.yml +491 -0
- data/spec/vcr/1.9/session/enforces_opensesame_login.yml +491 -0
- data/spec/vcr/1.9/session/skips_auto_login_if_just_logged_out.yml +491 -0
- data/spec/vcr/2.0/member/retrieves_attributes_from_github.yml +208 -0
- data/spec/vcr/2.0/member/returns_nil_if_no_github_member_found.yml +67 -0
- data/spec/vcr/2.0/member/serialize_from_session_returns_member_from_given_member_id.yml +208 -0
- data/spec/vcr/2.0/member/serialize_into_session_returns_given_member_id_in_array.yml +208 -0
- data/spec/vcr/2.0/session/allows_auto_login.yml +208 -0
- data/spec/vcr/2.0/session/enforces_opensesame_login.yml +208 -0
- data/spec/vcr/2.0/session/skips_auto_login_if_just_logged_out.yml +208 -0
- metadata +141 -81
- data/spec/vcr/member/retrieves_attributes_from_github.yml +0 -46
- data/spec/vcr/member/returns_nil_if_no_github_member_found.yml +0 -46
- data/spec/vcr/member/serialize_from_session_returns_member_from_given_member_id.yml +0 -89
- data/spec/vcr/member/serialize_into_session_returns_given_member_id_in_array.yml +0 -46
- data/spec/vcr/session/allows_auto_login.yml +0 -132
- data/spec/vcr/session/enforces_opensesame_login.yml +0 -132
- data/spec/vcr/session/skips_auto_login_if_just_logged_out.yml +0 -175
- data/spec/vcr/session/tries_auto_login_and_ends_up_on_opensesame_page_after_failure.yml +0 -46
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -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.
|
16
|
-
configuration.
|
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.
|
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("/", {},
|
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("/", {},
|
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("/", {},
|
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("
|
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("/", {},
|
37
|
-
OpenSesame::Member.should_receive(:find).with("
|
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
|
-
|
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(
|
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(
|
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([
|
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.
|
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 => :
|
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
|
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(
|
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
|
-
|
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 }
|
data/spec/support/capybara.rb
CHANGED
@@ -1,16 +1,12 @@
|
|
1
|
-
require '
|
2
|
-
|
1
|
+
require 'open_sesame/member'
|
2
|
+
require 'omniauth'
|
3
3
|
module CapybaraHelper
|
4
4
|
|
5
|
-
def setup_for_github_login(
|
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" =>
|
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,
|
27
|
+
RSpec.configuration.send :include, GeneralHelper
|
28
|
+
RSpec.configuration.send :include, CapybaraHelper, :type => :feature
|
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
|
-
|
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
|