stream-ruby 2.5.8 → 2.5.9
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 +4 -4
- data/README.md +4 -3
- data/lib/stream.rb +1 -1
- data/lib/stream/base.rb +6 -6
- data/lib/stream/batch.rb +3 -3
- data/lib/stream/client.rb +65 -51
- data/lib/stream/exceptions.rb +1 -1
- data/lib/stream/feed.rb +30 -30
- data/lib/stream/signedrequest.rb +17 -16
- data/lib/stream/signer.rb +9 -9
- data/lib/stream/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1a89b73bd4cda76d4266cf20ec867a3c96428b55
|
4
|
+
data.tar.gz: c80d98f021dfb1aab797a43bcf0f1b6484d36b0d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 32099413dc479ffccb0d4c21da3c4150ca3a0af4907f0333a661cff9eed5a7efb01abf351105d5d92cabac4f7ae9e83a18c96ea2361891f510dc2a5cc0e5451f
|
7
|
+
data.tar.gz: 3f6f59e178336340c907ffb5d00f400b6905448413ab20787b128ee2e760a1fe8531ffa700e3d35ad6b6540ee26fcd3d2ad46ca43ef17bdbd4afe9a16595914b
|
data/README.md
CHANGED
@@ -9,15 +9,16 @@ Note there is also a higher level [Ruby on Rails - Stream integration](https://g
|
|
9
9
|
|
10
10
|
You can sign up for a Stream account at https://getstream.io/get_started.
|
11
11
|
|
12
|
-
|
13
|
-
|
14
|
-
We will support the following versions of Ruby:
|
12
|
+
#### Ruby version requirements and support
|
15
13
|
|
14
|
+
This API Client project requires Ruby 2.2.8 at a minimum. We will support the following versions:
|
16
15
|
- 2.2.8
|
17
16
|
- 2.3.1
|
18
17
|
- 2.3.5
|
19
18
|
- 2.4.2
|
20
19
|
|
20
|
+
See the [Travis configuration](.travis.yml) for details of how it is built and tested.
|
21
|
+
|
21
22
|
### Installation
|
22
23
|
|
23
24
|
```bash
|
data/lib/stream.rb
CHANGED
@@ -1 +1 @@
|
|
1
|
-
require
|
1
|
+
require 'stream/base'
|
data/lib/stream/base.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
1
|
+
require 'json'
|
2
|
+
require 'stream/client'
|
3
|
+
require 'stream/errors'
|
4
|
+
require 'stream/version'
|
5
|
+
require 'stream/signer'
|
6
6
|
|
7
7
|
module Stream
|
8
8
|
class << self
|
@@ -11,7 +11,7 @@ module Stream
|
|
11
11
|
end
|
12
12
|
|
13
13
|
def get_feed_slug_and_id(feed_id)
|
14
|
-
feed_id.sub(
|
14
|
+
feed_id.sub(':', '')
|
15
15
|
end
|
16
16
|
end
|
17
17
|
end
|
data/lib/stream/batch.rb
CHANGED
@@ -19,9 +19,9 @@ module Stream
|
|
19
19
|
def follow_many(follows, activity_copy_limit = nil)
|
20
20
|
query_params = {}
|
21
21
|
unless activity_copy_limit.nil?
|
22
|
-
query_params[
|
22
|
+
query_params['activity_copy_limit'] = activity_copy_limit
|
23
23
|
end
|
24
|
-
make_signed_request(:post,
|
24
|
+
make_signed_request(:post, '/follow_many/', query_params, follows)
|
25
25
|
end
|
26
26
|
|
27
27
|
#
|
@@ -37,7 +37,7 @@ module Stream
|
|
37
37
|
:feeds => feeds,
|
38
38
|
:activity => activity_data
|
39
39
|
}
|
40
|
-
make_signed_request(:post,
|
40
|
+
make_signed_request(:post, '/feed/add_to_many/', {}, data)
|
41
41
|
end
|
42
42
|
end
|
43
43
|
end
|
data/lib/stream/client.rb
CHANGED
@@ -1,10 +1,11 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require
|
4
|
-
require
|
1
|
+
require 'faraday'
|
2
|
+
require 'stream/errors'
|
3
|
+
require 'stream/feed'
|
4
|
+
require 'stream/signer'
|
5
5
|
|
6
6
|
module Stream
|
7
|
-
|
7
|
+
STREAM_URL_COM_RE = %r{https\:\/\/(?<key>\w+)\:(?<secret>\w+)@((api\.)|((?<location>[-\w]+)\.))?(?<api_hostname>stream-io-api\.com)\/[\w=-\?%&]+app_id=(?<app_id>\d+)}i
|
8
|
+
STREAM_URL_IO_RE = %r{https\:\/\/(?<key>\w+)\:(?<secret>\w+)@((api\.)|((?<location>[-\w]+)\.))?(?<api_hostname>getstream\.io)\/[\w=-\?%&]+app_id=(?<app_id>\d+)}i
|
8
9
|
|
9
10
|
class Client
|
10
11
|
attr_reader :api_key
|
@@ -13,8 +14,8 @@ module Stream
|
|
13
14
|
attr_reader :client_options
|
14
15
|
|
15
16
|
if RUBY_VERSION.to_f >= 2.1
|
16
|
-
require
|
17
|
-
require
|
17
|
+
require 'stream/batch'
|
18
|
+
require 'stream/signedrequest'
|
18
19
|
|
19
20
|
include Stream::SignedRequest
|
20
21
|
include Stream::Batch
|
@@ -31,17 +32,25 @@ module Stream
|
|
31
32
|
# @example initialise the client to connect to EU-West location
|
32
33
|
# Stream::Client.new('my_key', 'my_secret', 'my_app_id', :location => 'us-east')
|
33
34
|
#
|
34
|
-
def initialize(api_key =
|
35
|
-
if ENV[
|
36
|
-
matches = Stream::
|
37
|
-
api_key = matches[
|
38
|
-
api_secret = matches[
|
39
|
-
app_id = matches[
|
40
|
-
opts[:location] = matches[
|
35
|
+
def initialize(api_key = '', api_secret = '', app_id = nil, opts = {})
|
36
|
+
if ENV['STREAM_URL'] =~ Stream::STREAM_URL_COM_RE && (api_key.nil? || api_key.empty?)
|
37
|
+
matches = Stream::STREAM_URL_COM_RE.match(ENV['STREAM_URL'])
|
38
|
+
api_key = matches['key']
|
39
|
+
api_secret = matches['secret']
|
40
|
+
app_id = matches['app_id']
|
41
|
+
opts[:location] = matches['location']
|
42
|
+
opts[:api_hostname] = matches['api_hostname']
|
43
|
+
elsif ENV['STREAM_URL'] =~ Stream::STREAM_URL_IO_RE && (api_key.nil? || api_key.empty?)
|
44
|
+
matches = Stream::STREAM_URL_IO_RE.match(ENV['STREAM_URL'])
|
45
|
+
api_key = matches['key']
|
46
|
+
api_secret = matches['secret']
|
47
|
+
app_id = matches['app_id']
|
48
|
+
opts[:location] = matches['location']
|
49
|
+
opts[:api_hostname] = matches['api_hostname']
|
41
50
|
end
|
42
51
|
|
43
52
|
if api_key.nil? || api_key.empty?
|
44
|
-
raise ArgumentError,
|
53
|
+
raise ArgumentError, 'empty api_key parameter and missing or invalid STREAM_URL env variable'
|
45
54
|
end
|
46
55
|
|
47
56
|
@api_key = api_key
|
@@ -50,10 +59,11 @@ module Stream
|
|
50
59
|
@signer = Stream::Signer.new(api_secret)
|
51
60
|
|
52
61
|
@client_options = {
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
62
|
+
api_version: opts.fetch(:api_version, 'v1.0'),
|
63
|
+
location: opts.fetch(:location, nil),
|
64
|
+
default_timeout: opts.fetch(:default_timeout, 3),
|
65
|
+
api_key: @api_key,
|
66
|
+
api_hostname: opts.fetch(:api_hostname, 'stream-io-api.com')
|
57
67
|
}
|
58
68
|
end
|
59
69
|
|
@@ -74,12 +84,12 @@ module Stream
|
|
74
84
|
end
|
75
85
|
|
76
86
|
def update_activities(activities)
|
77
|
-
auth_token = Stream::Signer.create_jwt_token(
|
78
|
-
make_request(:post,
|
87
|
+
auth_token = Stream::Signer.create_jwt_token('activities', '*', @api_secret, '*')
|
88
|
+
make_request(:post, '/activities/', auth_token, {}, 'activities' => activities)
|
79
89
|
end
|
80
90
|
|
81
91
|
def get_default_params
|
82
|
-
{
|
92
|
+
{:api_key => @api_key}
|
83
93
|
end
|
84
94
|
|
85
95
|
def get_http_client
|
@@ -87,19 +97,19 @@ module Stream
|
|
87
97
|
end
|
88
98
|
|
89
99
|
def make_query_params(params)
|
90
|
-
Hash[get_default_params.merge(params).sort_by {
|
100
|
+
Hash[get_default_params.merge(params).sort_by {|k, v| k.to_s}]
|
91
101
|
end
|
92
102
|
|
93
103
|
def make_request(method, relative_url, signature, params = {}, data = {}, headers = {})
|
94
|
-
headers[
|
95
|
-
headers[
|
104
|
+
headers['Authorization'] = signature
|
105
|
+
headers['stream-auth-type'] = 'jwt'
|
96
106
|
|
97
107
|
get_http_client.make_http_request(method, relative_url, make_query_params(params), data, headers)
|
98
108
|
end
|
99
109
|
end
|
100
110
|
|
101
111
|
class StreamHTTPClient
|
102
|
-
require
|
112
|
+
require 'faraday'
|
103
113
|
|
104
114
|
attr_reader :conn
|
105
115
|
attr_reader :options
|
@@ -107,14 +117,14 @@ module Stream
|
|
107
117
|
|
108
118
|
def initialize(client_params)
|
109
119
|
@options = client_params
|
110
|
-
location_name =
|
120
|
+
location_name = 'api'
|
111
121
|
unless client_params[:location].nil?
|
112
122
|
location_name = "#{client_params[:location]}-api"
|
113
123
|
end
|
114
124
|
|
115
125
|
protocol = 'https'
|
116
126
|
port = ':443'
|
117
|
-
if @options[:location] ==
|
127
|
+
if @options[:location] == 'qa' || @options[:location] == 'localhost'
|
118
128
|
protocol = 'http'
|
119
129
|
port = ':80'
|
120
130
|
if @options[:location] == 'localhost'
|
@@ -122,8 +132,13 @@ module Stream
|
|
122
132
|
end
|
123
133
|
end
|
124
134
|
|
135
|
+
api_hostname = 'stream-io-api.com'
|
136
|
+
if @options[:api_hostname]
|
137
|
+
api_hostname = @options[:api_hostname]
|
138
|
+
end
|
139
|
+
|
125
140
|
@base_path = "/api/#{@options[:api_version]}"
|
126
|
-
base_url = "#{protocol}://#{location_name}
|
141
|
+
base_url = "#{protocol}://#{location_name}.#{api_hostname}#{port}#{@base_path}"
|
127
142
|
|
128
143
|
@conn = Faraday.new(:url => base_url) do |faraday|
|
129
144
|
# faraday.request :url_encoded
|
@@ -136,21 +151,21 @@ module Stream
|
|
136
151
|
end
|
137
152
|
|
138
153
|
def make_http_request(method, relative_url, params = nil, data = nil, headers = nil)
|
139
|
-
headers[
|
140
|
-
headers[
|
141
|
-
params[
|
154
|
+
headers['Content-Type'] = 'application/json'
|
155
|
+
headers['X-Stream-Client'] = "stream-ruby-client-#{Stream::VERSION}"
|
156
|
+
params['api_key'] = @options[:api_key]
|
142
157
|
relative_url = "#{@base_path}#{relative_url}?#{URI.encode_www_form(params)}"
|
143
158
|
body = data.to_json if %w(post put).include? method.to_s
|
144
159
|
response = @conn.run_request(
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
160
|
+
method,
|
161
|
+
relative_url,
|
162
|
+
body,
|
163
|
+
headers
|
149
164
|
)
|
150
165
|
|
151
166
|
case response[:status].to_i
|
152
|
-
|
153
|
-
|
167
|
+
when 200..203
|
168
|
+
return ::JSON.parse(response[:body])
|
154
169
|
end
|
155
170
|
end
|
156
171
|
end
|
@@ -159,21 +174,20 @@ module Stream
|
|
159
174
|
def call(env)
|
160
175
|
@app.call(env).on_complete do |response|
|
161
176
|
case response[:status].to_i
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
177
|
+
when 200..203
|
178
|
+
return response
|
179
|
+
when 401
|
180
|
+
raise StreamApiResponseException, error_message(response, 'Bad feed')
|
181
|
+
when 403
|
182
|
+
raise StreamApiResponseException, error_message(response, 'Bad auth/headers')
|
183
|
+
when 404
|
184
|
+
raise StreamApiResponseException, error_message(response, 'url not found')
|
185
|
+
when 204...600
|
186
|
+
raise StreamApiResponseException, error_message(response, _build_error_message(response.body))
|
172
187
|
end
|
173
188
|
end
|
174
189
|
end
|
175
190
|
|
176
|
-
|
177
191
|
def initialize(app)
|
178
192
|
super app
|
179
193
|
@parser = nil
|
@@ -184,8 +198,8 @@ module Stream
|
|
184
198
|
def _build_error_message(response)
|
185
199
|
response = JSON.parse(response)
|
186
200
|
msg = "#{response['exception']} details: #{response['detail']}"
|
187
|
-
if response.key?(
|
188
|
-
response[
|
201
|
+
if response.key?('exception_fields')
|
202
|
+
response['exception_fields'].map do |field, messages|
|
189
203
|
msg << "\n#{field}: #{messages}"
|
190
204
|
end
|
191
205
|
end
|
data/lib/stream/exceptions.rb
CHANGED
@@ -1,2 +1,2 @@
|
|
1
1
|
warn "Requiring 'stream/exceptions' is deprecated. Use 'stream/errors' instead."
|
2
|
-
require
|
2
|
+
require 'stream/errors'
|
data/lib/stream/feed.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
require
|
2
|
-
require
|
1
|
+
require 'stream/signer'
|
2
|
+
require 'jwt'
|
3
3
|
|
4
4
|
module Stream
|
5
5
|
class Feed
|
@@ -10,11 +10,11 @@ module Stream
|
|
10
10
|
|
11
11
|
def initialize(client, feed_slug, user_id, token)
|
12
12
|
unless valid_feed_slug feed_slug
|
13
|
-
raise StreamInputData,
|
13
|
+
raise StreamInputData, 'feed_slug can only contain alphanumeric characters plus underscores'
|
14
14
|
end
|
15
15
|
|
16
16
|
unless valid_user_id user_id
|
17
|
-
raise StreamInputData,
|
17
|
+
raise StreamInputData, 'user_id can only contain alphanumeric characters plus underscores and dashes'
|
18
18
|
end
|
19
19
|
|
20
20
|
@id = "#{feed_slug}:#{user_id}"
|
@@ -27,7 +27,7 @@ module Stream
|
|
27
27
|
end
|
28
28
|
|
29
29
|
def readonly_token
|
30
|
-
create_jwt_token(
|
30
|
+
create_jwt_token('*', 'read')
|
31
31
|
end
|
32
32
|
|
33
33
|
def valid_feed_slug(feed_slug)
|
@@ -41,19 +41,19 @@ module Stream
|
|
41
41
|
def get(params = {})
|
42
42
|
uri = "/feed/#{@feed_url}/"
|
43
43
|
if params[:mark_read] && params[:mark_read].is_a?(Array)
|
44
|
-
params[:mark_read] = params[:mark_read].join(
|
44
|
+
params[:mark_read] = params[:mark_read].join(',')
|
45
45
|
end
|
46
46
|
if params[:mark_seen] && params[:mark_seen].is_a?(Array)
|
47
|
-
params[:mark_seen] = params[:mark_seen].join(
|
47
|
+
params[:mark_seen] = params[:mark_seen].join(',')
|
48
48
|
end
|
49
|
-
auth_token = create_jwt_token(
|
49
|
+
auth_token = create_jwt_token('feed', 'read')
|
50
50
|
|
51
51
|
@client.make_request(:get, uri, auth_token, params)
|
52
52
|
end
|
53
53
|
|
54
54
|
def sign_to_field(to)
|
55
55
|
to.map do |feed_id|
|
56
|
-
feed_slug, user_id = feed_id.split(
|
56
|
+
feed_slug, user_id = feed_id.split(':')
|
57
57
|
feed = @client.feed(feed_slug, user_id)
|
58
58
|
"#{feed.id} #{feed.token}"
|
59
59
|
end
|
@@ -62,7 +62,7 @@ module Stream
|
|
62
62
|
def add_activity(activity_data)
|
63
63
|
uri = "/feed/#{@feed_url}/"
|
64
64
|
activity_data[:to] &&= sign_to_field(activity_data[:to])
|
65
|
-
auth_token = create_jwt_token(
|
65
|
+
auth_token = create_jwt_token('feed', 'write')
|
66
66
|
|
67
67
|
@client.make_request(:post, uri, auth_token, {}, activity_data)
|
68
68
|
end
|
@@ -72,8 +72,8 @@ module Stream
|
|
72
72
|
activities.each do |activity|
|
73
73
|
activity[:to] &&= sign_to_field(activity[:to])
|
74
74
|
end
|
75
|
-
data = {
|
76
|
-
auth_token = create_jwt_token(
|
75
|
+
data = {:activities => activities}
|
76
|
+
auth_token = create_jwt_token('feed', 'write')
|
77
77
|
|
78
78
|
@client.make_request(:post, uri, auth_token, {}, data)
|
79
79
|
end
|
@@ -85,8 +85,8 @@ module Stream
|
|
85
85
|
def remove_activity(activity_id, foreign_id = false)
|
86
86
|
uri = "/feed/#{@feed_url}/#{activity_id}/"
|
87
87
|
params = {}
|
88
|
-
params = {
|
89
|
-
auth_token = create_jwt_token(
|
88
|
+
params = {foreign_id: 1} if foreign_id
|
89
|
+
auth_token = create_jwt_token('feed', 'delete')
|
90
90
|
|
91
91
|
@client.make_request(:delete, uri, auth_token, params)
|
92
92
|
end
|
@@ -96,14 +96,14 @@ module Stream
|
|
96
96
|
end
|
97
97
|
|
98
98
|
def update_activities(activities)
|
99
|
-
auth_token = create_jwt_token(
|
99
|
+
auth_token = create_jwt_token('activities', '*', '*')
|
100
100
|
|
101
|
-
@client.make_request(:post,
|
101
|
+
@client.make_request(:post, '/activities/', auth_token, {}, 'activities' => activities)
|
102
102
|
end
|
103
103
|
|
104
104
|
def delete
|
105
105
|
uri = "/feed/#{@feed_url}/"
|
106
|
-
auth_token = create_jwt_token(
|
106
|
+
auth_token = create_jwt_token('feed', 'delete')
|
107
107
|
|
108
108
|
@client.make_request(:delete, uri, auth_token)
|
109
109
|
end
|
@@ -114,11 +114,11 @@ module Stream
|
|
114
114
|
activity_copy_limit = 1000 if activity_copy_limit > 1000
|
115
115
|
|
116
116
|
follow_data = {
|
117
|
-
|
118
|
-
|
119
|
-
|
117
|
+
target: "#{target_feed_slug}:#{target_user_id}",
|
118
|
+
target_token: @client.feed(target_feed_slug, target_user_id).token,
|
119
|
+
activity_copy_limit: activity_copy_limit
|
120
120
|
}
|
121
|
-
auth_token = create_jwt_token(
|
121
|
+
auth_token = create_jwt_token('follower', 'write')
|
122
122
|
|
123
123
|
@client.make_request(:post, uri, auth_token, {}, follow_data)
|
124
124
|
end
|
@@ -126,10 +126,10 @@ module Stream
|
|
126
126
|
def followers(offset = 0, limit = 25)
|
127
127
|
uri = "/feed/#{@feed_url}/followers/"
|
128
128
|
params = {
|
129
|
-
|
130
|
-
|
129
|
+
offset: offset,
|
130
|
+
limit: limit
|
131
131
|
}
|
132
|
-
auth_token = create_jwt_token(
|
132
|
+
auth_token = create_jwt_token('follower', 'read')
|
133
133
|
|
134
134
|
@client.make_request(:get, uri, auth_token, params)
|
135
135
|
end
|
@@ -137,20 +137,20 @@ module Stream
|
|
137
137
|
def following(offset = 0, limit = 25, filter = [])
|
138
138
|
uri = "/feed/#{@feed_url}/follows/"
|
139
139
|
params = {
|
140
|
-
|
141
|
-
|
142
|
-
|
140
|
+
offset: offset,
|
141
|
+
limit: limit,
|
142
|
+
filter: filter.join(',')
|
143
143
|
}
|
144
|
-
auth_token = create_jwt_token(
|
144
|
+
auth_token = create_jwt_token('follower', 'read')
|
145
145
|
|
146
146
|
@client.make_request(:get, uri, auth_token, params)
|
147
147
|
end
|
148
148
|
|
149
149
|
def unfollow(target_feed_slug, target_user_id, keep_history = false)
|
150
150
|
uri = "/feed/#{@feed_url}/follows/#{target_feed_slug}:#{target_user_id}/"
|
151
|
-
auth_token = create_jwt_token(
|
151
|
+
auth_token = create_jwt_token('follower', 'delete')
|
152
152
|
params = {}
|
153
|
-
params[
|
153
|
+
params['keep_history'] = true if keep_history
|
154
154
|
@client.make_request(:delete, uri, auth_token, params)
|
155
155
|
end
|
156
156
|
|
data/lib/stream/signedrequest.rb
CHANGED
@@ -1,11 +1,12 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require
|
1
|
+
require 'http_signatures'
|
2
|
+
require 'net/http'
|
3
|
+
require 'time'
|
4
4
|
|
5
5
|
module Stream
|
6
6
|
module SignedRequest
|
7
7
|
module ClassMethods
|
8
|
-
def supports_signed_requests;
|
8
|
+
def supports_signed_requests;
|
9
|
+
end
|
9
10
|
end
|
10
11
|
|
11
12
|
def self.included(klass)
|
@@ -15,26 +16,26 @@ module Stream
|
|
15
16
|
def make_signed_request(method, relative_url, params = {}, data = {})
|
16
17
|
query_params = make_query_params(params)
|
17
18
|
context = HttpSignatures::Context.new(
|
18
|
-
|
19
|
-
|
20
|
-
|
19
|
+
keys: {@api_key => @api_secret},
|
20
|
+
algorithm: 'hmac-sha256',
|
21
|
+
headers: %w((request-target) Date)
|
21
22
|
)
|
22
23
|
method_map = {
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
24
|
+
:get => Net::HTTP::Get,
|
25
|
+
:delete => Net::HTTP::Delete,
|
26
|
+
:put => Net::HTTP::Put,
|
27
|
+
:post => Net::HTTP::Post
|
27
28
|
}
|
28
29
|
request_date = Time.now.rfc822
|
29
30
|
message = method_map[method].new(
|
30
|
-
|
31
|
-
|
31
|
+
"#{get_http_client.base_path}#{relative_url}?#{URI.encode_www_form(query_params)}",
|
32
|
+
'Date' => request_date
|
32
33
|
)
|
33
34
|
context.signer.sign(message)
|
34
35
|
headers = {
|
35
|
-
|
36
|
-
|
37
|
-
|
36
|
+
Authorization: message['Signature'],
|
37
|
+
Date: request_date,
|
38
|
+
'X-Api-Key' => api_key
|
38
39
|
}
|
39
40
|
get_http_client.make_http_request(method, relative_url, query_params, data, headers)
|
40
41
|
end
|
data/lib/stream/signer.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
require
|
2
|
-
require
|
1
|
+
require 'openssl'
|
2
|
+
require 'base64'
|
3
3
|
|
4
4
|
module Stream
|
5
5
|
class Signer
|
@@ -7,11 +7,11 @@ module Stream
|
|
7
7
|
|
8
8
|
def initialize(key)
|
9
9
|
@key = key.to_s
|
10
|
-
@sha1 = OpenSSL::Digest.new(
|
10
|
+
@sha1 = OpenSSL::Digest.new('sha1')
|
11
11
|
end
|
12
12
|
|
13
13
|
def urlsafe_encodeb64(value)
|
14
|
-
value.tr(
|
14
|
+
value.tr('+', '-').tr('/', '_').gsub(/^=+/, '').gsub(/=+$/, '')
|
15
15
|
end
|
16
16
|
|
17
17
|
def sign_message(message)
|
@@ -26,13 +26,13 @@ module Stream
|
|
26
26
|
|
27
27
|
def self.create_jwt_token(resource, action, api_secret, feed_id = nil, user_id = nil)
|
28
28
|
payload = {
|
29
|
-
|
30
|
-
|
29
|
+
resource: resource,
|
30
|
+
action: action
|
31
31
|
}
|
32
|
-
payload[
|
33
|
-
payload[
|
32
|
+
payload['feed_id'] = feed_id if feed_id
|
33
|
+
payload['user_id'] = user_id if user_id
|
34
34
|
|
35
|
-
JWT.encode(payload, api_secret,
|
35
|
+
JWT.encode(payload, api_secret, 'HS256')
|
36
36
|
end
|
37
37
|
end
|
38
38
|
end
|
data/lib/stream/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: stream-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.5.
|
4
|
+
version: 2.5.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tommaso Barbugli
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2017-
|
12
|
+
date: 2017-10-19 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: faraday
|
@@ -141,7 +141,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
141
141
|
version: '0'
|
142
142
|
requirements: []
|
143
143
|
rubyforge_project:
|
144
|
-
rubygems_version: 2.
|
144
|
+
rubygems_version: 2.6.13
|
145
145
|
signing_key:
|
146
146
|
specification_version: 4
|
147
147
|
summary: A gem that provides a client interface for getstream.io
|