pusher 1.4.3 → 2.0.1

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4101c5a5932482beeedbb64514332771698b5c462f951d318f5b0412a379da1e
4
- data.tar.gz: 10912c158ead0794e8b8ba7cc68d02e8ce4165458abd7cec6dd48d3583feadca
3
+ metadata.gz: 1ec4402d063ad4e8193f92bee0a9116987cd1388e3f21be49b7bfbe62ad4dbab
4
+ data.tar.gz: 0f974393c92fba1afbae6b85faf96d6950932cc0b24b538d1493300ec1e51e0d
5
5
  SHA512:
6
- metadata.gz: acdc1eb1c1630f04ab0e5de74c9d62c11bf1f9588421d1e130a641c7ee31a547e727c693c4a3a11bd035d800f0ba8721106f1b322bd36e5e97cde7a0c4dbbe43
7
- data.tar.gz: 1692589eb319a5fa54560807af603e52ba368897e91363a81184dcdfa3cc3a5b120ecf2f87dea9c56d8e2ee2d689bf8cb3ccc1f6dc36db2095a0d338363b553c
6
+ metadata.gz: d4f6e5cc6dc5a02db77200c18244e07dee27bc52abd3e4c376642b56e330d5d4bf86494c393ddeb340a38054c45ab3358eafc5a3d2dd0b8f17f471a8b6ba283d
7
+ data.tar.gz: ad18ed1ce95a46e383b9af71b38b528cae273083deafca6f3d187f4586a27d8a900c719be612a76822ef30b58b8e41ce15fac540f15f0f7904ce9276dd138b2c
data/CHANGELOG.md CHANGED
@@ -1,139 +1,125 @@
1
- 1.4.3 / 2020-10-28
2
- ==================
1
+ # Changelog
2
+
3
+ ## 2.0.1
4
+
5
+ * [CHANGED] Only include lib and essential docs in gem.
6
+
7
+ ## 2.0.0
3
8
 
4
- * Remove newline from end of base64 encoded strings, some decoders don't like
9
+ * [CHANGED] Use TLS by default.
10
+ * [REMOVED] Support for Ruby 2.4 and 2.5.
11
+ * [FIXED] Handle empty or nil configuration.
12
+ * [REMOVED] Legacy Push Notification integration.
13
+ * [ADDED] Stalebot and Github actions.
14
+
15
+ ## 1.4.3
16
+
17
+ * [FIXED] Remove newline from end of base64 encoded strings, some decoders don't like
5
18
  them.
6
19
 
7
- 1.4.2 / 2020-10-20
20
+ ## 1.4.2
8
21
  ==================
9
22
 
10
- * Return `shared_secret` to support authenticating encrypted channels. Thanks
23
+ * [FIXED] Return `shared_secret` to support authenticating encrypted channels. Thanks
11
24
  @Benjaminpjacobs
12
25
 
13
- 1.4.1 / 2020-10-05
14
- ==================
26
+ ## 1.4.1
15
27
 
16
- * Remove rbnacl from dependencies so we don't get errors when it isn't
28
+ * [CHANGED] Remove rbnacl from dependencies so we don't get errors when it isn't
17
29
  required. Thanks @y-yagi!
18
30
 
19
- 1.4.0 / 2020-09-29
20
- ==================
31
+ ## 1.4.0
21
32
 
22
- * Support for end-to-end encryption.
33
+ * [ADDED] Support for end-to-end encryption.
23
34
 
24
- 1.3.3 / 2019-07-02
25
- ==================
35
+ ## 1.3.3
26
36
 
27
- * Rewording to clarify "Pusher Channels" or simply "Channels" product name.
37
+ * [CHANGED] Rewording to clarify "Pusher Channels" or simply "Channels" product name.
28
38
 
29
- 1.3.2 / 2018-10-17
30
- ==================
39
+ ## 1.3.2
31
40
 
32
- * Return a specific error for "Request Entity Too Large" (body over 10KB).
33
- * Add a `use_tls` option for SSL (defaults to false).
34
- * Add a `from_url` client method (in addition to existing `from_env` option).
35
- * Improved documentation and fixed typos.
36
- * Add Ruby 2.4 to test matrix.
41
+ * [FIXED] Return a specific error for "Request Entity Too Large" (body over 10KB).
42
+ * [ADDED] Add a `use_tls` option for SSL (defaults to false).
43
+ * [ADDED] Add a `from_url` client method (in addition to existing `from_env` option).
44
+ * [CHANGED] Improved documentation and fixed typos.
45
+ * [ADDED] Add Ruby 2.4 to test matrix.
37
46
 
38
- 1.3.1 / 2017-03-15
39
- ==================
47
+ ## 1.3.1
40
48
 
41
- * Added missing client batch methods to default client delegations
42
- * Document raised exception in the `authenticate` method
43
- * Fixes em-http-request from using v2.5.0 of `addressable` breaking builds.
49
+ * [FIXED] Added missing client batch methods to default client delegations
50
+ * [CHANGED] Document raised exception in the `authenticate` method
51
+ * [FIXED] Fixes em-http-request from using v2.5.0 of `addressable` breaking builds.
44
52
 
45
- 1.3.0 / 2016-08-23
46
- ==================
53
+ ## 1.3.0
47
54
 
48
- * Add support for sending push notifications on up to 10 interests.
55
+ * [ADDED] Add support for sending push notifications on up to 10 interests.
49
56
 
50
- 1.2.1 / 2016-08-22
51
- ==================
57
+ ## 1.2.1
52
58
 
53
- * Fixes Rails 5 compatibility. Use duck-typing to detect request object
59
+ * [FIXED] Fixes Rails 5 compatibility. Use duck-typing to detect request object
54
60
 
55
- 1.2.0 / 2016-08-15
56
- ==================
61
+ ## 1.2.0
57
62
 
58
- * Minor release for Native notifications
63
+ * [CHANGED] Minor release for Native notifications
59
64
 
60
- 1.2.0.rc1 / 2016-07-18
61
- ==================
65
+ ## 1.2.0.rc1
62
66
 
63
- * Add support for Native notifications
67
+ * [ADDED] Add support for Native notifications
64
68
 
65
- 1.1.0 / 2016-05-20
66
- ==================
69
+ ## 1.1.0
67
70
 
68
- * Add support for batch events
71
+ * [ADDED] Add support for batch events
69
72
 
70
- 1.0.0 / 2016-05-19
71
- ==================
73
+ ## 1.0.0
72
74
 
73
- No breaking changes, this release is just to follow semver and show that we
75
+ * [CHANGED] No breaking changes, this release is just to follow semver and show that we
74
76
  are stable.
75
77
 
76
- 0.18.0 / 2016-05-15
77
- ==================
78
+ ## 0.18.0
78
79
 
79
- * Introduce `Pusher::Client.from_env`
80
- * Improve error handling on missing config
80
+ * [ADDED] Introduce `Pusher::Client.from_env`
81
+ * [FIXED] Improve error handling on missing config
81
82
 
82
- 0.17.0 / 2016-02-22
83
- ==================
83
+ ## 0.17.0
84
84
 
85
- * Introduce the `cluster` option.
85
+ * [ADDED] Introduce the `cluster` option.
86
86
 
87
- 0.16.0 / 2016-01-21
88
- ==================
87
+ ## 0.16.0
89
88
 
90
- * Bump httpclient version to 2.7
91
- * Ruby 1.8.7 is not supported anymore.
89
+ * [CHANGED] Bump httpclient version to 2.7
90
+ * [REMOVED] Ruby 1.8.7 is not supported anymore.
92
91
 
93
- 0.15.2 / 2015-12-03
94
- ==================
92
+ ## 0.15.2
95
93
 
96
- * Documented `Pusher.channel_info`, `Pusher.channels`
97
- * Added `Pusher.channel_users`
94
+ * [CHANGED] Documented `Pusher.channel_info`, `Pusher.channels`
95
+ * [ADDED] Added `Pusher.channel_users`
98
96
 
99
- 0.15.1 / 2015-11-03
100
- ==================
97
+ ## 0.15.1
101
98
 
102
- * Fixed a bug where the `authenticate` method added in 0.15.0 wasn't exposed on the Pusher class.
99
+ * [FIXED] Fixed a bug where the `authenticate` method added in 0.15.0 wasn't exposed on the Pusher class.
103
100
 
104
- 0.15.0 / 2015-11-02
105
- ==================
101
+ ## 0.15.0
106
102
 
107
- * Added `Pusher.authenticate` method for authenticating private and presence channels.
103
+ * [ADDED] Added `Pusher.authenticate` method for authenticating private and presence channels.
108
104
  This is prefered over the older `Pusher['a_channel'].authenticate(...)` style.
109
105
 
110
- 0.14.6 / 2015-09-29
111
- ==================
112
- * Updated to use the `pusher-signature` gem instead of `signature`.
113
- This resolves namespace related issues.
114
-
115
- 0.14.5 / 2015-05-11
116
- ==================
117
-
118
- * SECURITY: Prevent auth delegation trough crafted socket IDs
106
+ ## 0.14.6
119
107
 
120
- 0.14.4 / 2015-01-20
121
- ==================
108
+ * [CHANGED] Updated to use the `pusher-signature` gem instead of `signature`.
109
+ This resolves namespace related issues.
122
110
 
123
- * SECURITY: Prevent timing attack, update signature to v0.1.8
124
- * SECURITY: Prevent POODLE. Disable SSLv3, update httpclient to v2.5
125
- * Fix channel name character limit.
126
- * Adds support for listing users on a presence channel
111
+ ## 0.14.5
127
112
 
128
- 0.14.3 / 2015-01-20
129
- ==================
113
+ * [SECURITY] Prevent auth delegation trough crafted socket IDs
130
114
 
131
- Yanked, bad release
115
+ ## 0.14.4
132
116
 
133
- 0.14.2 / 2014-10-16
134
- ==================
117
+ * [SECURITY] Prevent timing attack, update signature to v0.1.8
118
+ * [SECURITY] Prevent POODLE. Disable SSLv3, update httpclient to v2.5
119
+ * [FIXED] Fix channel name character limit.
120
+ * [ADDED] Adds support for listing users on a presence channel
135
121
 
136
- First release with a changelog !
122
+ ## 0.14.2
137
123
 
138
- * Bump httpclient to v2.4. See #62 (POODLE SSL)
139
- * Fix limited channel count at README.md. Thanks @tricknotes
124
+ * [CHANGED] Bump httpclient to v2.4. See #62 (POODLE SSL)
125
+ * [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.rb CHANGED
@@ -28,9 +28,7 @@ module Pusher
28
28
  extend Forwardable
29
29
 
30
30
  def_delegators :default_client, :scheme, :host, :port, :app_id, :key, :secret, :http_proxy
31
- def_delegators :default_client, :notification_host, :notification_scheme
32
31
  def_delegators :default_client, :scheme=, :host=, :port=, :app_id=, :key=, :secret=, :http_proxy=
33
- def_delegators :default_client, :notification_host=, :notification_scheme=
34
32
 
35
33
  def_delegators :default_client, :authentication_token, :url, :cluster
36
34
  def_delegators :default_client, :encrypted=, :url=, :cluster=
@@ -66,4 +64,3 @@ require 'pusher/channel'
66
64
  require 'pusher/request'
67
65
  require 'pusher/resource'
68
66
  require 'pusher/webhook'
69
- require 'pusher/native_notification/client'
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.strict_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
 
@@ -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]]