rack-googlemarketplace 0.0.1.pre

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
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --colour
2
+ --format progress
data/Gemfile ADDED
@@ -0,0 +1,5 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in rack-google-marketplace.gemspec
4
+ gemspec
5
+
data/Guardfile ADDED
@@ -0,0 +1,6 @@
1
+ guard 'rspec', :version => 2 do
2
+ watch(%r{^spec/.+_spec\.rb$})
3
+ watch(%r{^lib/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
4
+ watch('spec/spec_helper.rb') { "spec" }
5
+ end
6
+
data/Rakefile ADDED
@@ -0,0 +1,6 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task :default => :spec
data/config.ru ADDED
@@ -0,0 +1,7 @@
1
+ ENV["RACK_ENV"] ||= 'development'
2
+ require "rack/googlemarketplace"
3
+
4
+ use Rack::Reloader
5
+ use Rack::GoogleMarketplace
6
+
7
+ run lambda { |env| [ 200, { "Content-Type" => "text/html" }, [] ] }
@@ -0,0 +1,80 @@
1
+ require "rack"
2
+ require "rack/openid"
3
+
4
+ module Rack
5
+ class GoogleMarketplace
6
+ attr_accessor :domain_param, :session_key
7
+
8
+ def initialize app, &block
9
+ @app = app
10
+
11
+ # Set default values
12
+ @domain_param ||= "domain"
13
+ @session_key ||= "user_id"
14
+ @return_to ||= "/"
15
+
16
+ yield self if block_given?
17
+ end
18
+
19
+ # Duplicate self on call to make code thread safe
20
+ def call env
21
+ dup._call env
22
+ end
23
+
24
+ def _call env
25
+ status, headers, response = @app.call env
26
+ request = Rack::Request.new env
27
+ session = env["rack.session"]
28
+ @domain = request[domain_param]
29
+
30
+ if env["PATH_INFO"] == "/login" and @domain
31
+ status = 401
32
+ headers["WWW-Authenticate"] = Rack::OpenID.build_header(
33
+ :identifier => identifier,
34
+ :return_to => "/?#{query({@domain_param => @domain})}",
35
+ :required => ax_required,
36
+ :method => "post"
37
+ )
38
+ elsif resp = env["rack.openid.response"] and @domain
39
+ if resp.status == :success
40
+ user = {}
41
+ user[:email] = ax_response ax_schema("contact/email")
42
+ user[:first_name] = ax_response ax_schema("namePerson/first")
43
+ user[:last_name] = ax_response ax_schema("namePerson/last")
44
+
45
+ env["rack.googlemarketplace.openid_response"] = resp
46
+ env["rack.googlemarketplace.user"] = user
47
+ env["rack.googlemarketplace.domain"] = @domain
48
+ end
49
+ status = 302
50
+ headers["Location"] = @return_to
51
+ end
52
+
53
+ [ status, headers, response ]
54
+ end
55
+
56
+ def identifier
57
+ "https://www.google.com/accounts/o8/site-xrds?hd=#{@domain}"
58
+ end
59
+
60
+ def ax_required
61
+ [ ax_schema("contact/email"),
62
+ ax_schema("namePerson/first"),
63
+ ax_schema("namePerson/last") ]
64
+ end
65
+
66
+ def ax_response resp
67
+ OpenID::AX::FetchResponse.from_success_response(resp)
68
+ end
69
+
70
+ private
71
+ def ax_schema path
72
+ "http://axschema.org/#{path}"
73
+ end
74
+
75
+ def query(params = {})
76
+ Rack::Utils.build_query params
77
+ end
78
+ end
79
+ end
80
+
@@ -0,0 +1,30 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+
4
+ Gem::Specification.new do |s|
5
+ s.name = "rack-googlemarketplace"
6
+ s.version = "0.0.1.pre"
7
+ s.authors = ["Erlend Finvåg"]
8
+ s.email = ["erlend.finvag@gmail.com"]
9
+ s.homepage = "http://github.com/erlend/rack-googlemarketplace"
10
+ s.summary = %q{Write a gem summary}
11
+ s.description = %q{Write a gem description}
12
+
13
+ s.rubyforge_project = "rack-googlemarketplace"
14
+
15
+ s.files = `git ls-files`.split("\n")
16
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
17
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
18
+ s.require_paths = ["lib/rack"]
19
+
20
+ # specify any dependencies here; for example:
21
+ s.add_development_dependency "rspec", "~> 2.8"
22
+ s.add_development_dependency "rake", "~> 0.9"
23
+ s.add_development_dependency "rack-test", "~> 0.6"
24
+ s.add_development_dependency "sinatra", "~> 1.3"
25
+ s.add_development_dependency "guard-rspec"
26
+
27
+ s.add_runtime_dependency "oauth", "~> 0.4.5"
28
+ s.add_runtime_dependency "rack-openid", "~> 1.3.1"
29
+ s.add_runtime_dependency "ruby-openid-apps-discovery", "1.2.0"
30
+ end
@@ -0,0 +1,72 @@
1
+ require File.dirname(__FILE__) + "/spec_helper"
2
+
3
+ describe "rack-google-marketplace" do
4
+ include Rack::Test::Methods
5
+
6
+ def app
7
+ @app ||= Rack::Builder.new do
8
+ use Rack::GoogleMarketplace do |config|
9
+ config.domain_param = "domain_name"
10
+ end
11
+
12
+ run lambda { |env| [ 200, {}, [ "Hello" ] ] }
13
+ end
14
+ end
15
+
16
+ # Do nothing
17
+ describe "GET", "/" do
18
+ before { get "/" }
19
+ subject { last_response }
20
+
21
+ its(:status) { should eq(200) }
22
+ its(:body) { should eq("Hello") }
23
+ end
24
+
25
+ # Initialize and authenticate
26
+ describe "GET", "/login" do
27
+ before { get "/login?domain_name=wepack.no" }
28
+ subject { last_response }
29
+
30
+ its(:status) { should eq(401) }
31
+
32
+ describe "WWW-Authenticate header" do
33
+ subject { Rack::OpenID.parse_header(
34
+ last_response.headers["WWW-Authenticate"]) }
35
+
36
+ it { should include("identifier") }
37
+ it { should include("method") }
38
+ it { should include("required") }
39
+ it { should include("return_to") }
40
+
41
+ it "should have the correct identifier" do
42
+ subject["identifier"].should eq("https://www.google.com/accounts/o8/site-xrds?hd=wepack.no")
43
+ end
44
+
45
+ it "should have the return_to method" do
46
+ subject["method"].should eq("post")
47
+ end
48
+
49
+ pending "should have the correct realm" do
50
+ subject["realm"].should eq("https://localhost:9000")
51
+ end
52
+
53
+ it "should have the correct return_to" do
54
+ subject["return_to"].should eq("/?domain_name=wepack.no")
55
+ end
56
+
57
+ it "should have the correct required" do
58
+ subject["required"].should include("http://axschema.org/contact/email")
59
+ subject["required"].should include("http://axschema.org/namePerson/first")
60
+ subject["required"].should include("http://axschema.org/namePerson/last")
61
+ end
62
+ end
63
+ end
64
+
65
+ # Sign in
66
+ describe "POST" do
67
+ before { post "/?domain_name=wepack.no" }
68
+ subject { last_response }
69
+
70
+ its(:status) { should eq(200) }
71
+ end
72
+ end
@@ -0,0 +1,11 @@
1
+ ENV["RACK_ENV"] ||= 'test'
2
+ require "rspec"
3
+ require "rack/test"
4
+ require "rack/googlemarketplace"
5
+
6
+ RSpec.configure do |config|
7
+ config.include(Rack::Test::Methods)
8
+ config.treat_symbols_as_metadata_keys_with_true_values = true
9
+ config.filter_run focus: true
10
+ config.run_all_when_everything_filtered = true
11
+ end
metadata ADDED
@@ -0,0 +1,148 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rack-googlemarketplace
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1.pre
5
+ prerelease: 6
6
+ platform: ruby
7
+ authors:
8
+ - Erlend Finvåg
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-01-17 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rspec
16
+ requirement: &70162351295720 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: '2.8'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: *70162351295720
25
+ - !ruby/object:Gem::Dependency
26
+ name: rake
27
+ requirement: &70162351295220 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ~>
31
+ - !ruby/object:Gem::Version
32
+ version: '0.9'
33
+ type: :development
34
+ prerelease: false
35
+ version_requirements: *70162351295220
36
+ - !ruby/object:Gem::Dependency
37
+ name: rack-test
38
+ requirement: &70162351294760 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ~>
42
+ - !ruby/object:Gem::Version
43
+ version: '0.6'
44
+ type: :development
45
+ prerelease: false
46
+ version_requirements: *70162351294760
47
+ - !ruby/object:Gem::Dependency
48
+ name: sinatra
49
+ requirement: &70162351294300 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: '1.3'
55
+ type: :development
56
+ prerelease: false
57
+ version_requirements: *70162351294300
58
+ - !ruby/object:Gem::Dependency
59
+ name: guard-rspec
60
+ requirement: &70162351293920 !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ! '>='
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
66
+ type: :development
67
+ prerelease: false
68
+ version_requirements: *70162351293920
69
+ - !ruby/object:Gem::Dependency
70
+ name: oauth
71
+ requirement: &70162351293380 !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ~>
75
+ - !ruby/object:Gem::Version
76
+ version: 0.4.5
77
+ type: :runtime
78
+ prerelease: false
79
+ version_requirements: *70162351293380
80
+ - !ruby/object:Gem::Dependency
81
+ name: rack-openid
82
+ requirement: &70162351292880 !ruby/object:Gem::Requirement
83
+ none: false
84
+ requirements:
85
+ - - ~>
86
+ - !ruby/object:Gem::Version
87
+ version: 1.3.1
88
+ type: :runtime
89
+ prerelease: false
90
+ version_requirements: *70162351292880
91
+ - !ruby/object:Gem::Dependency
92
+ name: ruby-openid-apps-discovery
93
+ requirement: &70162351292420 !ruby/object:Gem::Requirement
94
+ none: false
95
+ requirements:
96
+ - - =
97
+ - !ruby/object:Gem::Version
98
+ version: 1.2.0
99
+ type: :runtime
100
+ prerelease: false
101
+ version_requirements: *70162351292420
102
+ description: Write a gem description
103
+ email:
104
+ - erlend.finvag@gmail.com
105
+ executables: []
106
+ extensions: []
107
+ extra_rdoc_files: []
108
+ files:
109
+ - .gitignore
110
+ - .rspec
111
+ - Gemfile
112
+ - Guardfile
113
+ - Rakefile
114
+ - config.ru
115
+ - lib/rack/googlemarketplace.rb
116
+ - rack-googlemarketplace.gemspec
117
+ - spec/googlemarketplace_spec.rb
118
+ - spec/spec_helper.rb
119
+ homepage: http://github.com/erlend/rack-googlemarketplace
120
+ licenses: []
121
+ post_install_message:
122
+ rdoc_options: []
123
+ require_paths:
124
+ - lib/rack
125
+ required_ruby_version: !ruby/object:Gem::Requirement
126
+ none: false
127
+ requirements:
128
+ - - ! '>='
129
+ - !ruby/object:Gem::Version
130
+ version: '0'
131
+ segments:
132
+ - 0
133
+ hash: -4323997729412537861
134
+ required_rubygems_version: !ruby/object:Gem::Requirement
135
+ none: false
136
+ requirements:
137
+ - - ! '>'
138
+ - !ruby/object:Gem::Version
139
+ version: 1.3.1
140
+ requirements: []
141
+ rubyforge_project: rack-googlemarketplace
142
+ rubygems_version: 1.8.6
143
+ signing_key:
144
+ specification_version: 3
145
+ summary: Write a gem summary
146
+ test_files:
147
+ - spec/googlemarketplace_spec.rb
148
+ - spec/spec_helper.rb