rpx_now 0.6.4 → 0.6.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -33,9 +33,15 @@ View
33
33
  #'mywebsite' is your subdomain/realm on RPX
34
34
  <%=RPXNow.embed_code('mywebsite',rpx_token_sessions_url)%>
35
35
  OR
36
- <%=RPXNow.popup_code('Login here...','mywebsite',rpx_token_sessions_url,:language=>'de')%>
36
+ <%=RPXNow.popup_code('Login here...', 'mywebsite', rpx_token_sessions_url, options)%>
37
37
 
38
- `popup_code` can also be called with `:unobstrusive=>true`
38
+ Options
39
+ :language=>'en' # rpx tries to detect the users language, but you may overwrite it [possible languages](https://rpxnow.com/docs#sign-in_localization)
40
+ :default_provider=>'google' # [possible default providers](https://rpxnow.com/docs#sign-in_default_provider)
41
+ :flags=>'show_provider_list' # [possible flags](https://rpxnow.com/docs#sign-in_interface)
42
+
43
+ `popup_code` can also be called with `:unobstrusive=>true`, to still get a nice popup include `RPXNow.popup_source('mywebsite',rpx_token_sessions_url, [options])` somewhere else.
44
+ Options like :language / :flags should be given for both.
39
45
 
40
46
  Environment
41
47
  -----------
@@ -50,6 +56,8 @@ Environment
50
56
 
51
57
  Controller
52
58
  ----------
59
+ skip_before_filter :verify_authenticity_token, :only => [:rpx_token] # RPX does not pass Rails form tokens...
60
+
53
61
  # user_data
54
62
  # found: {:name=>'John Doe', :username => 'john', :email=>'john@doe.com', :identifier=>'blug.google.com/openid/dsdfsdfs3f3'}
55
63
  # not found: nil (can happen with e.g. invalid tokens)
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.6.4
1
+ 0.6.5
@@ -64,18 +64,20 @@ module RPXNow
64
64
  end
65
65
  alias get_contacts contacts
66
66
 
67
- def embed_code(subdomain,url,options={})
68
- options = {:width => '400', :height => '240', :language => 'en'}.merge(options)
67
+ # iframe for rpx login
68
+ # options: :width, :height, :language, :flags
69
+ def embed_code(subdomain, url, options={})
70
+ options = {:width => '400', :height => '240'}.merge(options)
69
71
  <<-EOF
70
- <iframe src="https://#{subdomain}.#{Api::HOST}/openid/embed?token_url=#{url}&language_preference=#{options[:language]}"
72
+ <iframe src="#{Api.host(subdomain)}/openid/embed?#{embed_params(url, options)}"
71
73
  scrolling="no" frameBorder="no" style="width:#{options[:width]}px;height:#{options[:height]}px;">
72
74
  </iframe>
73
75
  EOF
74
76
  end
75
77
 
78
+ # popup window for rpx login
79
+ # options: :language / :flags / :unobtrusive
76
80
  def popup_code(text, subdomain, url, options = {})
77
- options = options.dup
78
- options[:language] ||= 'en'
79
81
  if options[:unobtrusive]
80
82
  unobtrusive_popup_code(text, subdomain, url, options)
81
83
  else
@@ -83,12 +85,39 @@ module RPXNow
83
85
  end
84
86
  end
85
87
 
86
- def extract_version!(options)
87
- options.delete(:api_version) || api_version
88
+ # javascript for popup
89
+ # only needed in combination with popup_code(x,y,z, :unobtrusive => true)
90
+ def popup_source(subdomain, url, options={})
91
+ <<-EOF
92
+ <script src="#{Api.host}/openid/v#{extract_version(options)}/widget" type="text/javascript"></script>
93
+ <script type="text/javascript">
94
+ //<![CDATA[
95
+ RPXNOW.token_url = '#{url}';
96
+ RPXNOW.realm = '#{subdomain}';
97
+ RPXNOW.overlay = true;
98
+ #{ "RPXNOW.language_preference = '#{options[:language]}';" if options[:language] }
99
+ #{ "RPXNOW.default_provider = '#{options[:default_provider]}';" if options[:default_provider] }
100
+ #{ "RPXNOW.flags = '#{options[:flags]}';" if options[:flags] }
101
+ //]]>
102
+ </script>
103
+ EOF
104
+ end
105
+
106
+ def extract_version(options)
107
+ options[:api_version] || api_version
88
108
  end
89
109
 
90
110
  private
91
111
 
112
+ def self.embed_params(url, options)
113
+ {
114
+ :token_url => url,
115
+ :language_preference => options[:language],
116
+ :flags => options[:flags],
117
+ :default_provider => options[:default_provider]
118
+ }.map{|k,v| "#{k}=#{v}" if v}.compact.join('&')
119
+ end
120
+
92
121
  def self.parse_user_data(response)
93
122
  user_data = response['profile']
94
123
  data = {}
@@ -101,27 +130,12 @@ module RPXNow
101
130
  end
102
131
 
103
132
  def unobtrusive_popup_code(text, subdomain, url, options={})
104
- version = extract_version! options
105
- %Q(<a class="rpxnow" href="https://#{subdomain}.#{Api::HOST}/openid/v#{version}/signin?token_url=#{url}&language_preference=#{options[:language]}">#{text}</a>)
133
+ %Q(<a class="rpxnow" href="#{Api.host(subdomain)}/openid/v#{extract_version(options)}/signin?#{embed_params(url, options)}">#{text}</a>)
106
134
  end
107
135
 
108
136
  def obtrusive_popup_code(text, subdomain, url, options = {})
109
- version = extract_version! options
110
- <<-EOF
111
- <a class="rpxnow" onclick="return false;" href="https://#{subdomain}.#{Api::HOST}/openid/v#{version}/signin?token_url=#{url}">
112
- #{text}
113
- </a>
114
- <script src="https://#{Api::HOST}/openid/v#{version}/widget" type="text/javascript"></script>
115
- <script type="text/javascript">
116
- //<![CDATA[
117
- RPXNOW.token_url = "#{url}";
118
-
119
- RPXNOW.realm = "#{subdomain}";
120
- RPXNOW.overlay = true;
121
- RPXNOW.language_preference = '#{options[:language]}';
122
- //]]>
123
- </script>
124
- EOF
137
+ unobtrusive_popup_code(text, subdomain, url, options) +
138
+ popup_source(subdomain, url, options)
125
139
  end
126
140
 
127
141
  class ServerError < RuntimeError; end #backwards compatibility / catch all
@@ -8,12 +8,23 @@ module RPXNow
8
8
  SSL_CERT = File.join(File.dirname(__FILE__), '..', '..', 'certs', 'ssl_cert.pem')
9
9
 
10
10
  def self.call(method, data)
11
- version = RPXNow.extract_version! data
11
+ data = data.dup
12
+ version = RPXNow.extract_version(data)
13
+ data.delete(:api_version)
14
+
12
15
  path = "/api/v#{version}/#{method}"
13
16
  response = request(path, {:apiKey => RPXNow.api_key}.merge(data))
14
17
  parse_response(response)
15
18
  end
16
19
 
20
+ def self.host(subdomain=nil)
21
+ if subdomain
22
+ "https://#{subdomain}.#{Api::HOST}"
23
+ else
24
+ "https://#{Api::HOST}"
25
+ end
26
+ end
27
+
17
28
  private
18
29
 
19
30
  def self.request(path, data)
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{rpx_now}
8
- s.version = "0.6.4"
8
+ s.version = "0.6.5"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Michael Grosser"]
12
- s.date = %q{2009-10-09}
12
+ s.date = %q{2009-10-11}
13
13
  s.email = %q{grosser.michael@gmail.com}
14
14
  s.extra_rdoc_files = [
15
15
  "README.markdown"
@@ -76,10 +76,10 @@ describe RPXNow do
76
76
  RPXNow.embed_code('xxx','my_url').should =~ /token_url=my_url/
77
77
  end
78
78
 
79
- it "defaults to English" do
80
- RPXNow.embed_code('xxx', 'my_url').should =~ /language_preference=en/
79
+ it "defaults to no language" do
80
+ RPXNow.embed_code('xxx', 'my_url').should_not =~ /language_preference/
81
81
  end
82
-
82
+
83
83
  it "has a changeable language" do
84
84
  RPXNow.embed_code('xxx', 'my_url', :language => 'es').should =~ /language_preference=es/
85
85
  end
@@ -114,9 +114,9 @@ describe RPXNow do
114
114
 
115
115
  describe 'unobstrusive' do
116
116
  it "can build an unobtrusive widget" do
117
- expected = %Q(<a class="rpxnow" href="https://subdomain.rpxnow.com/openid/v2/signin?token_url=http://fake.domain.com/&language_preference=en">sign on</a>)
117
+ expected = %Q(<a class="rpxnow" href="https://subdomain.rpxnow.com/openid/v2/signin?token_url=http://fake.domain.com/">sign on</a>)
118
118
  actual = RPXNow.popup_code('sign on', 'subdomain', 'http://fake.domain.com/', :unobtrusive => true)
119
- expected.should == actual
119
+ actual.should == expected
120
120
  end
121
121
 
122
122
  it "can change api version" do
@@ -124,7 +124,15 @@ describe RPXNow do
124
124
  end
125
125
 
126
126
  it "can change language" do
127
- RPXNow.popup_code('x', 'y', 'z', :unobtrusive => true, :language => 'XX').should include("&language_preference=XX")
127
+ RPXNow.popup_code('x', 'y', 'z', :unobtrusive => true, :language => 'XX').should include("language_preference=XX")
128
+ end
129
+
130
+ it "can add flags" do
131
+ RPXNow.popup_code('x', 'y', 'z', :unobtrusive => true, :flags => 'test').should include("flags=test")
132
+ end
133
+
134
+ it "can add default_provider" do
135
+ RPXNow.popup_code('x', 'y', 'z', :unobtrusive => true, :default_provider => 'test').should include("default_provider=test")
128
136
  end
129
137
  end
130
138
 
@@ -136,12 +144,34 @@ describe RPXNow do
136
144
  RPXNow.popup_code('x','y','z').should =~ %r(/openid/v2/signin)
137
145
  end
138
146
 
139
- it "defaults to english" do
140
- RPXNow.popup_code('x','y','z').should =~ /RPXNOW.language_preference = 'en'/
147
+ describe 'language' do
148
+ it "defaults to no language" do
149
+ RPXNow.popup_code('x','y','z').should_not =~ /RPXNOW.language_preference/
150
+ end
151
+
152
+ it "has a changeable language" do
153
+ RPXNow.popup_code('x','y','z', :language=>'de').should =~ /RPXNOW.language_preference = 'de'/
154
+ end
141
155
  end
142
-
143
- it "has a changeable language" do
144
- RPXNow.popup_code('x','y','z',:language=>'de').should =~ /RPXNOW.language_preference = 'de'/
156
+
157
+ describe 'flags' do
158
+ it "defaults to no language" do
159
+ RPXNow.popup_code('x','y','z').should_not =~ /RPXNOW.flags/
160
+ end
161
+
162
+ it "can have flags" do
163
+ RPXNow.popup_code('x','y','z', :flags=>'test').should =~ /RPXNOW.flags = 'test'/
164
+ end
165
+ end
166
+
167
+ describe 'default_provider' do
168
+ it "defaults to no provider" do
169
+ RPXNow.popup_code('x','y','z').should_not =~ /RPXNOW.default_provider/
170
+ end
171
+
172
+ it "can have default_provider" do
173
+ RPXNow.popup_code('x','y','z', :default_provider=>'test').should =~ /RPXNOW.default_provider = 'test'/
174
+ end
145
175
  end
146
176
  end
147
177
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rpx_now
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.4
4
+ version: 0.6.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Grosser
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-10-09 00:00:00 +02:00
12
+ date: 2009-10-11 00:00:00 +02:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency