pusher 1.4.3 → 2.0.1

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: 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]]