pusher 1.4.2 → 2.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 81a153328f0e5452bcdd87e9cd09339464a26679566f1d14f087fee9a29a69b2
4
- data.tar.gz: f5e282e3a9f0d60d441da0ef023073cefa1d4ebd2ada5b7fcb82a258a53c402a
3
+ metadata.gz: b567f2d8e33ab63ee101f1d463ee826ef9deb173509724a0df6996b73fac1249
4
+ data.tar.gz: 9e0e443c7769c8520be0f9f72b2db5d95c9a9f221f0221df48b0eee0267f60a1
5
5
  SHA512:
6
- metadata.gz: 87ed04a2e5bd63cfffd67798066dc9d014d119a00f7b6caad6c7d9a0d1a64c0a251c5f5b9706d883025532758e53f9a5d2f34579b555a206bb341182c624f58d
7
- data.tar.gz: 7776a1f8477dc5d7d33efb0cb46edd3dfe0d77d7c40d691eb8cb525d71998216eb4fc7832b546fb7c43f7ec1bb1db5db32e169ed1d4d1c2cdd1291d89e9f8b73
6
+ metadata.gz: 9b9d18e469e431fd495fee4eadb33ed0f982fbc796033d036fb3366853a72634a88be4b77fd21bd4c1387b02f00b6f635fbc766bb783cb36987fb81415717fb4
7
+ data.tar.gz: 762bb0188b7ee29aa1ff87d235383fc0ca1ded17b251171b091d44d621796faf06b176db4580e2cef6c44c44da8bc5296ec7c3867315faa87ff42a200558425f
data/CHANGELOG.md CHANGED
@@ -1,133 +1,129 @@
1
- 1.4.2 / 2020-10-20
1
+ # Changelog
2
+
3
+ ## 2.0.2
4
+
5
+ * [CHANGED] made encryption_master_key_base64 globally configurable
6
+
7
+ ## 2.0.1
8
+
9
+ * [CHANGED] Only include lib and essential docs in gem.
10
+
11
+ ## 2.0.0
12
+
13
+ * [CHANGED] Use TLS by default.
14
+ * [REMOVED] Support for Ruby 2.4 and 2.5.
15
+ * [FIXED] Handle empty or nil configuration.
16
+ * [REMOVED] Legacy Push Notification integration.
17
+ * [ADDED] Stalebot and Github actions.
18
+
19
+ ## 1.4.3
20
+
21
+ * [FIXED] Remove newline from end of base64 encoded strings, some decoders don't like
22
+ them.
23
+
24
+ ## 1.4.2
2
25
  ==================
3
26
 
4
- * Return `shared_secret` to support authenticating encrypted channels. Thanks
27
+ * [FIXED] Return `shared_secret` to support authenticating encrypted channels. Thanks
5
28
  @Benjaminpjacobs
6
29
 
7
- 1.4.1 / 2020-10-05
8
- ==================
30
+ ## 1.4.1
9
31
 
10
- * Remove rbnacl from dependencies so we don't get errors when it isn't
32
+ * [CHANGED] Remove rbnacl from dependencies so we don't get errors when it isn't
11
33
  required. Thanks @y-yagi!
12
34
 
13
- 1.4.0 / 2020-09-29
14
- ==================
35
+ ## 1.4.0
15
36
 
16
- * Support for end-to-end encryption.
37
+ * [ADDED] Support for end-to-end encryption.
17
38
 
18
- 1.3.3 / 2019-07-02
19
- ==================
39
+ ## 1.3.3
20
40
 
21
- * Rewording to clarify "Pusher Channels" or simply "Channels" product name.
41
+ * [CHANGED] Rewording to clarify "Pusher Channels" or simply "Channels" product name.
22
42
 
23
- 1.3.2 / 2018-10-17
24
- ==================
43
+ ## 1.3.2
25
44
 
26
- * Return a specific error for "Request Entity Too Large" (body over 10KB).
27
- * Add a `use_tls` option for SSL (defaults to false).
28
- * Add a `from_url` client method (in addition to existing `from_env` option).
29
- * Improved documentation and fixed typos.
30
- * Add Ruby 2.4 to test matrix.
45
+ * [FIXED] Return a specific error for "Request Entity Too Large" (body over 10KB).
46
+ * [ADDED] Add a `use_tls` option for SSL (defaults to false).
47
+ * [ADDED] Add a `from_url` client method (in addition to existing `from_env` option).
48
+ * [CHANGED] Improved documentation and fixed typos.
49
+ * [ADDED] Add Ruby 2.4 to test matrix.
31
50
 
32
- 1.3.1 / 2017-03-15
33
- ==================
51
+ ## 1.3.1
34
52
 
35
- * Added missing client batch methods to default client delegations
36
- * Document raised exception in the `authenticate` method
37
- * Fixes em-http-request from using v2.5.0 of `addressable` breaking builds.
53
+ * [FIXED] Added missing client batch methods to default client delegations
54
+ * [CHANGED] Document raised exception in the `authenticate` method
55
+ * [FIXED] Fixes em-http-request from using v2.5.0 of `addressable` breaking builds.
38
56
 
39
- 1.3.0 / 2016-08-23
40
- ==================
57
+ ## 1.3.0
41
58
 
42
- * Add support for sending push notifications on up to 10 interests.
59
+ * [ADDED] Add support for sending push notifications on up to 10 interests.
43
60
 
44
- 1.2.1 / 2016-08-22
45
- ==================
61
+ ## 1.2.1
46
62
 
47
- * Fixes Rails 5 compatibility. Use duck-typing to detect request object
63
+ * [FIXED] Fixes Rails 5 compatibility. Use duck-typing to detect request object
48
64
 
49
- 1.2.0 / 2016-08-15
50
- ==================
65
+ ## 1.2.0
51
66
 
52
- * Minor release for Native notifications
67
+ * [CHANGED] Minor release for Native notifications
53
68
 
54
- 1.2.0.rc1 / 2016-07-18
55
- ==================
69
+ ## 1.2.0.rc1
56
70
 
57
- * Add support for Native notifications
71
+ * [ADDED] Add support for Native notifications
58
72
 
59
- 1.1.0 / 2016-05-20
60
- ==================
73
+ ## 1.1.0
61
74
 
62
- * Add support for batch events
75
+ * [ADDED] Add support for batch events
63
76
 
64
- 1.0.0 / 2016-05-19
65
- ==================
77
+ ## 1.0.0
66
78
 
67
- No breaking changes, this release is just to follow semver and show that we
79
+ * [CHANGED] No breaking changes, this release is just to follow semver and show that we
68
80
  are stable.
69
81
 
70
- 0.18.0 / 2016-05-15
71
- ==================
82
+ ## 0.18.0
72
83
 
73
- * Introduce `Pusher::Client.from_env`
74
- * Improve error handling on missing config
84
+ * [ADDED] Introduce `Pusher::Client.from_env`
85
+ * [FIXED] Improve error handling on missing config
75
86
 
76
- 0.17.0 / 2016-02-22
77
- ==================
87
+ ## 0.17.0
78
88
 
79
- * Introduce the `cluster` option.
89
+ * [ADDED] Introduce the `cluster` option.
80
90
 
81
- 0.16.0 / 2016-01-21
82
- ==================
91
+ ## 0.16.0
83
92
 
84
- * Bump httpclient version to 2.7
85
- * Ruby 1.8.7 is not supported anymore.
93
+ * [CHANGED] Bump httpclient version to 2.7
94
+ * [REMOVED] Ruby 1.8.7 is not supported anymore.
86
95
 
87
- 0.15.2 / 2015-12-03
88
- ==================
96
+ ## 0.15.2
89
97
 
90
- * Documented `Pusher.channel_info`, `Pusher.channels`
91
- * Added `Pusher.channel_users`
98
+ * [CHANGED] Documented `Pusher.channel_info`, `Pusher.channels`
99
+ * [ADDED] Added `Pusher.channel_users`
92
100
 
93
- 0.15.1 / 2015-11-03
94
- ==================
101
+ ## 0.15.1
95
102
 
96
- * Fixed a bug where the `authenticate` method added in 0.15.0 wasn't exposed on the Pusher class.
103
+ * [FIXED] Fixed a bug where the `authenticate` method added in 0.15.0 wasn't exposed on the Pusher class.
97
104
 
98
- 0.15.0 / 2015-11-02
99
- ==================
105
+ ## 0.15.0
100
106
 
101
- * Added `Pusher.authenticate` method for authenticating private and presence channels.
107
+ * [ADDED] Added `Pusher.authenticate` method for authenticating private and presence channels.
102
108
  This is prefered over the older `Pusher['a_channel'].authenticate(...)` style.
103
109
 
104
- 0.14.6 / 2015-09-29
105
- ==================
106
- * Updated to use the `pusher-signature` gem instead of `signature`.
107
- This resolves namespace related issues.
108
-
109
- 0.14.5 / 2015-05-11
110
- ==================
111
-
112
- * SECURITY: Prevent auth delegation trough crafted socket IDs
110
+ ## 0.14.6
113
111
 
114
- 0.14.4 / 2015-01-20
115
- ==================
112
+ * [CHANGED] Updated to use the `pusher-signature` gem instead of `signature`.
113
+ This resolves namespace related issues.
116
114
 
117
- * SECURITY: Prevent timing attack, update signature to v0.1.8
118
- * SECURITY: Prevent POODLE. Disable SSLv3, update httpclient to v2.5
119
- * Fix channel name character limit.
120
- * Adds support for listing users on a presence channel
115
+ ## 0.14.5
121
116
 
122
- 0.14.3 / 2015-01-20
123
- ==================
117
+ * [SECURITY] Prevent auth delegation trough crafted socket IDs
124
118
 
125
- Yanked, bad release
119
+ ## 0.14.4
126
120
 
127
- 0.14.2 / 2014-10-16
128
- ==================
121
+ * [SECURITY] Prevent timing attack, update signature to v0.1.8
122
+ * [SECURITY] Prevent POODLE. Disable SSLv3, update httpclient to v2.5
123
+ * [FIXED] Fix channel name character limit.
124
+ * [ADDED] Adds support for listing users on a presence channel
129
125
 
130
- First release with a changelog !
126
+ ## 0.14.2
131
127
 
132
- * Bump httpclient to v2.4. See #62 (POODLE SSL)
133
- * Fix limited channel count at README.md. Thanks @tricknotes
128
+ * [CHANGED] Bump httpclient to v2.4. See #62 (POODLE SSL)
129
+ * [CHANGED] Fix limited channel count at README.md. Thanks @tricknotes
data/README.md CHANGED
@@ -2,7 +2,11 @@
2
2
 
3
3
  This Gem provides a Ruby interface to [the Pusher HTTP API for Pusher Channels](https://pusher.com/docs/channels/library_auth_reference/rest-api).
4
4
 
5
- [![Build Status](https://secure.travis-ci.org/pusher/pusher-http-ruby.svg?branch=master)](http://travis-ci.org/pusher/pusher-http-ruby) [![Gem Version](https://badge.fury.io/rb/pusher.svg)](https://badge.fury.io/rb/pusher)
5
+ [![Build Status](https://github.com/pusher/pusher-http-ruby/workflows/Tests/badge.svg)](https://github.com/pusher/pusher-http-ruby/actions?query=workflow%3ATests+branch%3Amaster) [![Gem](https://img.shields.io/gem/v/pusher)](https://rubygems.org/gems/pusher) [![Gem](https://img.shields.io/gem/dt/pusher)](https://rubygems.org/gems/pusher)
6
+
7
+ ## Supported Platforms
8
+
9
+ * Ruby - supports **Ruby 2.6 or greater**.
6
10
 
7
11
  ## Installation and Configuration
8
12
 
@@ -36,7 +40,7 @@ pusher = Pusher::Client.new(
36
40
  )
37
41
  ```
38
42
 
39
- The `cluster` value will set the `host` to `api-<cluster>.pusher.com`. The `use_tls` value is optional and defaults to `false`. It will set the `scheme` and `port`. Custom `scheme` and `port` values take precendence over `use_tls`.
43
+ The `cluster` value will set the `host` to `api-<cluster>.pusher.com`. The `use_tls` value is optional and defaults to `true`. It will set the `scheme` and `port`. A custom `port` value takes precendence over `use_tls`.
40
44
 
41
45
  If you want to set a custom `host` value for your client then you can do so when instantiating a Pusher Channels client like so:
42
46
 
@@ -79,11 +83,11 @@ If you need to make requests via a HTTP proxy then it can be configured
79
83
  Pusher.http_proxy = 'http://(user):(password)@(host):(port)'
80
84
  ```
81
85
 
82
- By default API requests are made over HTTP. HTTPS can be used by setting `encrypted` to `true`.
86
+ By default API requests are made over HTTPS. HTTP can be used by setting `use_tls` to `false`.
83
87
  Issuing this command is going to reset `port` value if it was previously specified.
84
88
 
85
89
  ``` ruby
86
- Pusher.encrypted = true
90
+ Pusher.use_tls = false
87
91
  ```
88
92
 
89
93
  As of version 0.12, SSL certificates are verified when using the synchronous http client. If you need to disable this behaviour for any reason use:
@@ -295,6 +299,3 @@ pusher.trigger(
295
299
  ```
296
300
 
297
301
  Rationale: the methods in this library map directly to individual Channels HTTP API requests. If we allowed triggering a single event on multiple channels (some encrypted, some unencrypted), then it would require two API requests: one where the event is encrypted to the encrypted channels, and one where the event is unencrypted for unencrypted channels.
298
-
299
- ## Supported Ruby versions
300
- 2.4+
data/lib/pusher/client.rb CHANGED
@@ -1,15 +1,19 @@
1
1
  require 'base64'
2
-
3
2
  require 'pusher-signature'
4
3
 
5
4
  module Pusher
6
5
  class Client
7
- attr_accessor :scheme, :host, :port, :app_id, :key, :secret, :notification_host, :notification_scheme, :encryption_master_key
6
+ attr_accessor :scheme, :host, :port, :app_id, :key, :secret, :encryption_master_key
8
7
  attr_reader :http_proxy, :proxy
9
8
  attr_writer :connect_timeout, :send_timeout, :receive_timeout,
10
9
  :keep_alive_timeout
11
10
 
12
11
  ## CONFIGURATION ##
12
+ DEFAULT_CONNECT_TIMEOUT = 5
13
+ DEFAULT_SEND_TIMEOUT = 5
14
+ DEFAULT_RECEIVE_TIMEOUT = 5
15
+ DEFAULT_KEEP_ALIVE_TIMEOUT = 30
16
+ DEFAULT_CLUSTER = "mt1"
13
17
 
14
18
  # Loads the configuration from an url in the environment
15
19
  def self.from_env(key = 'PUSHER_URL')
@@ -25,51 +29,35 @@ module Pusher
25
29
  end
26
30
 
27
31
  def initialize(options = {})
28
- default_options = {
29
- :scheme => 'http',
30
- :port => 80,
31
- }
32
+ @scheme = "https"
33
+ @port = options[:port] || 443
32
34
 
33
- if options[:use_tls] || options[:encrypted]
34
- default_options[:scheme] = "https"
35
- default_options[:port] = 443
35
+ if options.key?(:encrypted)
36
+ warn "[DEPRECATION] `encrypted` is deprecated and will be removed in the next major version. Use `use_tls` instead."
36
37
  end
37
38
 
38
- merged_options = default_options.merge(options)
39
-
40
- if options.has_key?(:host)
41
- merged_options[:host] = options[:host]
42
- elsif options.has_key?(:cluster)
43
- merged_options[:host] = "api-#{options[:cluster]}.pusher.com"
44
- else
45
- merged_options[:host] = "api.pusherapp.com"
39
+ if options[:use_tls] == false || options[:encrypted] == false
40
+ @scheme = "http"
41
+ @port = options[:port] || 80
46
42
  end
47
43
 
48
- # TODO: Change host name when finalized
49
- merged_options[:notification_host] =
50
- options.fetch(:notification_host, "nativepush-cluster1.pusher.com")
44
+ @app_id = options[:app_id]
45
+ @key = options[:key]
46
+ @secret = options[:secret]
51
47
 
52
- merged_options[:notification_scheme] =
53
- options.fetch(:notification_scheme, "https")
48
+ @host = options[:host]
49
+ @host ||= "api-#{options[:cluster]}.pusher.com" unless options[:cluster].nil? || options[:cluster].empty?
50
+ @host ||= "api-#{DEFAULT_CLUSTER}.pusher.com"
54
51
 
55
- @scheme, @host, @port, @app_id, @key, @secret, @notification_host, @notification_scheme =
56
- merged_options.values_at(
57
- :scheme, :host, :port, :app_id, :key, :secret, :notification_host, :notification_scheme
58
- )
52
+ @encryption_master_key = Base64.strict_decode64(options[:encryption_master_key_base64]) if options[:encryption_master_key_base64]
59
53
 
60
- if options.has_key?(:encryption_master_key_base64)
61
- @encryption_master_key =
62
- Base64.decode64(options[:encryption_master_key_base64])
63
- end
64
-
65
- @http_proxy = nil
66
- self.http_proxy = options[:http_proxy] if options[:http_proxy]
54
+ @http_proxy = options[:http_proxy]
67
55
 
68
56
  # Default timeouts
69
- @connect_timeout = 5
70
- @send_timeout = 5
71
- @receive_timeout = 5
72
- @keep_alive_timeout = 30
57
+ @connect_timeout = DEFAULT_CONNECT_TIMEOUT
58
+ @send_timeout = DEFAULT_SEND_TIMEOUT
59
+ @receive_timeout = DEFAULT_RECEIVE_TIMEOUT
60
+ @keep_alive_timeout = DEFAULT_KEEP_ALIVE_TIMEOUT
73
61
  end
74
62
 
75
63
  # @private Returns the authentication token for the client
@@ -83,10 +71,10 @@ module Pusher
83
71
  def url(path = nil)
84
72
  raise ConfigurationError, :app_id unless @app_id
85
73
  URI::Generic.build({
86
- :scheme => @scheme,
87
- :host => @host,
88
- :port => @port,
89
- :path => "/apps/#{@app_id}#{path}"
74
+ scheme: @scheme,
75
+ host: @host,
76
+ port: @port,
77
+ path: "/apps/#{@app_id}#{path}"
90
78
  })
91
79
  end
92
80
 
@@ -110,13 +98,12 @@ module Pusher
110
98
  @http_proxy = http_proxy
111
99
  uri = URI.parse(http_proxy)
112
100
  @proxy = {
113
- :scheme => uri.scheme,
114
- :host => uri.host,
115
- :port => uri.port,
116
- :user => uri.user,
117
- :password => uri.password
101
+ scheme: uri.scheme,
102
+ host: uri.host,
103
+ port: uri.port,
104
+ user: uri.user,
105
+ password: uri.password
118
106
  }
119
- @http_proxy
120
107
  end
121
108
 
122
109
  # Configure whether Pusher API calls should be made over SSL
@@ -136,6 +123,8 @@ module Pusher
136
123
  end
137
124
 
138
125
  def cluster=(cluster)
126
+ cluster = DEFAULT_CLUSTER if cluster.nil? || cluster.empty?
127
+
139
128
  @host = "api-#{cluster}.pusher.com"
140
129
  end
141
130
 
@@ -148,7 +137,7 @@ module Pusher
148
137
  # Set an encryption_master_key to use with private-encrypted channels from
149
138
  # a base64 encoded string.
150
139
  def encryption_master_key_base64=(s)
151
- @encryption_master_key = s ? Base64.decode64(s) : nil
140
+ @encryption_master_key = s ? Base64.strict_decode64(s) : nil
152
141
  end
153
142
 
154
143
  ## INTERACT WITH THE API ##
@@ -330,24 +319,6 @@ module Pusher
330
319
  post_async('/batch_events', trigger_batch_params(events.flatten))
331
320
  end
332
321
 
333
- def notification_client
334
- @notification_client ||=
335
- NativeNotification::Client.new(@app_id, @notification_host, @notification_scheme, self)
336
- end
337
-
338
-
339
- # Send a push notification
340
- #
341
- # POST /apps/[app_id]/notifications
342
- #
343
- # @param interests [Array] An array of interests
344
- # @param message [String] Message to send
345
- # @param options [Hash] Additional platform specific options
346
- #
347
- # @return [Hash]
348
- def notify(interests, data = {})
349
- notification_client.notify(interests, data)
350
- end
351
322
 
352
323
  # Generate the expected response for an authentication endpoint.
353
324
  # See http://pusher.com/docs/authenticating_users for details.
@@ -386,9 +357,9 @@ module Pusher
386
357
 
387
358
  # @private Construct a net/http http client
388
359
  def sync_http_client
389
- @client ||= begin
390
- require 'httpclient'
360
+ require 'httpclient'
391
361
 
362
+ @client ||= begin
392
363
  HTTPClient.new(@http_proxy).tap do |c|
393
364
  c.connect_timeout = @connect_timeout
394
365
  c.send_timeout = @send_timeout
@@ -407,14 +378,14 @@ module Pusher
407
378
  require 'em-http' unless defined?(EventMachine::HttpRequest)
408
379
 
409
380
  connection_opts = {
410
- :connect_timeout => @connect_timeout,
411
- :inactivity_timeout => @receive_timeout,
381
+ connect_timeout: @connect_timeout,
382
+ inactivity_timeout: @receive_timeout,
412
383
  }
413
384
 
414
385
  if defined?(@proxy)
415
386
  proxy_opts = {
416
- :host => @proxy[:host],
417
- :port => @proxy[:port]
387
+ host: @proxy[:host],
388
+ port: @proxy[:port]
418
389
  }
419
390
  if @proxy[:user]
420
391
  proxy_opts[:authorization] = [@proxy[:user], @proxy[:password]]
@@ -483,8 +454,8 @@ module Pusher
483
454
  ciphertext = secret_box.encrypt(nonce, encoded_data)
484
455
 
485
456
  MultiJson.encode({
486
- "nonce" => Base64::encode64(nonce),
487
- "ciphertext" => Base64::encode64(ciphertext),
457
+ "nonce" => Base64::strict_encode64(nonce),
458
+ "ciphertext" => Base64::strict_encode64(ciphertext),
488
459
  })
489
460
  end
490
461