pusher 0.5.3 → 0.6.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.
- data/README.md +9 -0
- data/Rakefile +1 -0
- data/VERSION +1 -1
- data/lib/pusher.rb +1 -0
- data/lib/pusher/channel.rb +19 -3
- data/lib/pusher/json.rb +15 -0
- data/lib/pusher/request.rb +1 -9
- data/pusher.gemspec +3 -3
- data/spec/channel_spec.rb +47 -0
- metadata +5 -5
- data/CHANGELOG +0 -11
data/README.md
CHANGED
@@ -38,6 +38,15 @@ To avoid blocking in a typical web application, if you are running inside eventm
|
|
38
38
|
# error is a pusher exception
|
39
39
|
}
|
40
40
|
|
41
|
+
Private channels
|
42
|
+
-----------------------
|
43
|
+
The Pusher Gem also deals with signing requests for authenticated private channels. A quick Rails controller example:
|
44
|
+
|
45
|
+
reponse = Pusher['private-my_channel'].authenticate(params[:socket_id])
|
46
|
+
render :json => response
|
47
|
+
|
48
|
+
Read more about private channels in [the docs](http://pusherapp.com/docs/private_channels).
|
49
|
+
|
41
50
|
Copyright
|
42
51
|
---------
|
43
52
|
|
data/Rakefile
CHANGED
@@ -15,6 +15,7 @@ begin
|
|
15
15
|
gem.add_dependency "crack"
|
16
16
|
gem.add_dependency "ruby-hmac"
|
17
17
|
gem.add_dependency 'signature'
|
18
|
+
# gem.add_dependency 'em-http-request', ">= 0.2.7"
|
18
19
|
gem.add_development_dependency "rspec", ">= 1.2.9"
|
19
20
|
gem.add_development_dependency "webmock"
|
20
21
|
# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.6.0
|
data/lib/pusher.rb
CHANGED
data/lib/pusher/channel.rb
CHANGED
@@ -61,17 +61,33 @@ module Pusher
|
|
61
61
|
rescue StandardError => e
|
62
62
|
handle_error e
|
63
63
|
end
|
64
|
-
|
65
|
-
|
64
|
+
|
65
|
+
# Auth string is:
|
66
|
+
# if custom data provided:
|
67
|
+
# socket_id:channel_name:[JSON-encoded custom data]
|
68
|
+
# if no custom data:
|
69
|
+
# socket_id:channel_name
|
70
|
+
def socket_auth(socket_id, custom_string = nil)
|
66
71
|
raise "Invalid socket_id" if socket_id.nil? || socket_id.empty?
|
72
|
+
raise 'Custom argument must be a string' unless custom_string.nil? || custom_string.kind_of?(String)
|
67
73
|
|
68
|
-
string_to_sign =
|
74
|
+
string_to_sign = [socket_id, name, custom_string].compact.map{|e|e.to_s}.join(':')
|
69
75
|
Pusher.logger.debug "Signing #{string_to_sign}"
|
70
76
|
token = Pusher.authentication_token
|
71
77
|
signature = HMAC::SHA256.hexdigest(token.secret, string_to_sign)
|
72
78
|
|
73
79
|
return "#{token.key}:#{signature}"
|
74
80
|
end
|
81
|
+
|
82
|
+
# Custom data is sent to server as JSON-encoded string in the :data key
|
83
|
+
# If :data present, server must include it in auth check
|
84
|
+
def authenticate(socket_id, custom_data = nil)
|
85
|
+
custom_data = Pusher::JSON.generate(custom_data) if custom_data
|
86
|
+
auth = socket_auth(socket_id, custom_data)
|
87
|
+
r = {:auth => auth}
|
88
|
+
r[:channel_data] = custom_data if custom_data
|
89
|
+
r
|
90
|
+
end
|
75
91
|
|
76
92
|
private
|
77
93
|
|
data/lib/pusher/json.rb
ADDED
data/lib/pusher/request.rb
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
require 'signature'
|
2
2
|
require 'digest/md5'
|
3
|
-
require 'json'
|
4
3
|
|
5
4
|
module Pusher
|
6
5
|
class Request
|
@@ -17,7 +16,7 @@ module Pusher
|
|
17
16
|
data
|
18
17
|
else
|
19
18
|
begin
|
20
|
-
|
19
|
+
Pusher::JSON.generate(data)
|
21
20
|
rescue => e
|
22
21
|
Pusher.logger.error("Could not convert #{data.inspect} into JSON")
|
23
22
|
raise e
|
@@ -31,12 +30,5 @@ module Pusher
|
|
31
30
|
@query = params.merge(auth_hash)
|
32
31
|
end
|
33
32
|
|
34
|
-
def self.turn_into_json(data)
|
35
|
-
if Object.const_defined?('ActiveSupport')
|
36
|
-
ActiveSupport::JSON.encode(data)
|
37
|
-
else
|
38
|
-
JSON.generate(data)
|
39
|
-
end
|
40
|
-
end
|
41
33
|
end
|
42
34
|
end
|
data/pusher.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{pusher}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.6.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["New Bamboo"]
|
12
|
-
s.date = %q{2010-
|
12
|
+
s.date = %q{2010-08-09}
|
13
13
|
s.description = %q{Wrapper for pusherapp.com REST api}
|
14
14
|
s.email = %q{support@pusherapp.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -19,13 +19,13 @@ Gem::Specification.new do |s|
|
|
19
19
|
s.files = [
|
20
20
|
".document",
|
21
21
|
".gitignore",
|
22
|
-
"CHANGELOG",
|
23
22
|
"LICENSE",
|
24
23
|
"README.md",
|
25
24
|
"Rakefile",
|
26
25
|
"VERSION",
|
27
26
|
"lib/pusher.rb",
|
28
27
|
"lib/pusher/channel.rb",
|
28
|
+
"lib/pusher/json.rb",
|
29
29
|
"lib/pusher/request.rb",
|
30
30
|
"pusher.gemspec",
|
31
31
|
"spec/channel_spec.rb",
|
data/spec/channel_spec.rb
CHANGED
@@ -235,5 +235,52 @@ describe Pusher::Channel do
|
|
235
235
|
}.should raise_error
|
236
236
|
end
|
237
237
|
end
|
238
|
+
|
239
|
+
describe 'with extra string argument' do
|
240
|
+
|
241
|
+
it 'should be a string or nil' do
|
242
|
+
lambda {
|
243
|
+
@channel.socket_auth('socketid', 'boom')
|
244
|
+
}.should_not raise_error
|
245
|
+
|
246
|
+
lambda {
|
247
|
+
@channel.socket_auth('socketid', 123)
|
248
|
+
}.should raise_error
|
249
|
+
|
250
|
+
lambda {
|
251
|
+
@channel.socket_auth('socketid', nil)
|
252
|
+
}.should_not raise_error
|
253
|
+
|
254
|
+
lambda {
|
255
|
+
@channel.socket_auth('socketid', {})
|
256
|
+
}.should raise_error
|
257
|
+
end
|
258
|
+
|
259
|
+
it "should return an authentication string given a socket id and custom args" do
|
260
|
+
auth = @channel.socket_auth('socketid', 'foobar')
|
261
|
+
|
262
|
+
auth.should == "12345678900000001:#{HMAC::SHA256.hexdigest(Pusher.secret, "socketid:test_channel:foobar")}"
|
263
|
+
end
|
264
|
+
|
265
|
+
end
|
266
|
+
end
|
267
|
+
|
268
|
+
describe '#authenticate' do
|
269
|
+
|
270
|
+
before :each do
|
271
|
+
@channel = Pusher['test_channel']
|
272
|
+
@custom_data = {:uid => 123, :info => {:name => 'Foo'}}
|
273
|
+
end
|
274
|
+
|
275
|
+
it 'should return a hash with signature including custom data and data as json string' do
|
276
|
+
Pusher::JSON.stub!(:generate).with(@custom_data).and_return 'a json string'
|
277
|
+
|
278
|
+
response = @channel.authenticate('socketid', @custom_data)
|
279
|
+
|
280
|
+
response.should == {
|
281
|
+
:auth => "12345678900000001:#{HMAC::SHA256.hexdigest(Pusher.secret, "socketid:test_channel:a json string")}",
|
282
|
+
:channel_data => 'a json string'
|
283
|
+
}
|
284
|
+
end
|
238
285
|
end
|
239
286
|
end
|
metadata
CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
6
|
- 0
|
7
|
-
-
|
8
|
-
-
|
9
|
-
version: 0.
|
7
|
+
- 6
|
8
|
+
- 0
|
9
|
+
version: 0.6.0
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- New Bamboo
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-
|
17
|
+
date: 2010-08-09 00:00:00 +01:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -103,13 +103,13 @@ extra_rdoc_files:
|
|
103
103
|
files:
|
104
104
|
- .document
|
105
105
|
- .gitignore
|
106
|
-
- CHANGELOG
|
107
106
|
- LICENSE
|
108
107
|
- README.md
|
109
108
|
- Rakefile
|
110
109
|
- VERSION
|
111
110
|
- lib/pusher.rb
|
112
111
|
- lib/pusher/channel.rb
|
112
|
+
- lib/pusher/json.rb
|
113
113
|
- lib/pusher/request.rb
|
114
114
|
- pusher.gemspec
|
115
115
|
- spec/channel_spec.rb
|
data/CHANGELOG
DELETED
@@ -1,11 +0,0 @@
|
|
1
|
-
* master *
|
2
|
-
|
3
|
-
* Pusher v0.5.1 (20th May, 2010) *
|
4
|
-
|
5
|
-
* Use ActiveSupport::JSON.encode instead of #to_json to avoid conflicts with JSON gem. [OL]
|
6
|
-
* Support loading Pusher credentials from a PUSHER_URL environment variable. [ML]
|
7
|
-
|
8
|
-
* Pusher v0.5.2 (25th May, 2010) *
|
9
|
-
|
10
|
-
* Bugfix: required uri correctly
|
11
|
-
* Bugfix: channel objects not being reused
|