uploadcare-ruby 3.1.1 → 3.2.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +21 -16
- data/README.md +61 -13
- data/lib/uploadcare/client/project_client.rb +2 -0
- data/lib/uploadcare/client/webhook_client.rb +3 -1
- data/lib/uploadcare/param/webhook_signature_verifier.rb +23 -0
- data/lib/uploadcare/ruby/version.rb +1 -1
- data/lib/uploadcare.rb +3 -0
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f1c9e31f806af7e05c558fac2f5474b1b79bbe6585437049a2ecca5cc7011b46
|
4
|
+
data.tar.gz: 3da125b462b72f76f1cc52b3d9654354399d4864eba72b34e474c5d9a05ca22b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '06814335c0ac2733f7a71ad0a9f04af2c9e3160d59de4d3d88231403a6e02366a10bb8db9405762d6a2ed70c82fb0185e5e11e59763cc2f04f79a67c89f52718'
|
7
|
+
data.tar.gz: 9c9d034e9d510c0d1839f5b13164a810ee26c58eb75cdcff3aaf6e54aeb6a5f2a0a9c20f2d75d0b6c6f5856eba7a8ccb2b42b7cb4b7ea45f74f5242120bf5534
|
data/CHANGELOG.md
CHANGED
@@ -1,36 +1,41 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
-
## 3.
|
3
|
+
## 3.2.0 — 2021-11-16
|
4
4
|
|
5
|
-
-
|
6
|
-
-
|
5
|
+
- Added option `signing_secret` to the `Uploadcare::Webhook`
|
6
|
+
- Added webhook signature verifier class `Uploadcare::Param::WebhookSignatureVerifier`
|
7
7
|
|
8
|
-
## 3.1.
|
8
|
+
## 3.1.1 — 2021-10-13
|
9
9
|
|
10
|
-
-
|
11
|
-
-
|
12
|
-
- Added an opportunity to add custom logic to large files uploading process
|
10
|
+
- Fixed `Uploadcare::File#store`
|
11
|
+
- Fixed `Uploadcare::File#delete`
|
13
12
|
|
14
|
-
## 3.0
|
13
|
+
## 3.1.0 — 2021-09-21
|
14
|
+
|
15
|
+
- Added documents and videos conversions
|
16
|
+
- Added new attributes to the Entity class (`variations`, `video_info`, `source`, `rekognition_info`)
|
17
|
+
- Added an option to add custom logic to large files uploading process
|
18
|
+
|
19
|
+
## 3.0.5 — 2021-04-15
|
15
20
|
|
16
21
|
- Replace Travis-CI with Github Actions
|
17
22
|
- Automate gem pushing
|
18
23
|
|
19
|
-
## 3.0.4-dev 2020-03-19
|
24
|
+
## 3.0.4-dev — 2020-03-19
|
20
25
|
|
21
|
-
- Added better pagination methods for GroupList & FileList
|
26
|
+
- Added better pagination methods for `GroupList` & `FileList`
|
22
27
|
- Improved documentation and install instructions
|
23
28
|
- Added CI
|
24
29
|
|
25
|
-
## 3.0.3-dev 2020-03-13
|
26
|
-
- Added better pagination and iterators for GroupList & FileList
|
30
|
+
## 3.0.3-dev — 2020-03-13
|
31
|
+
- Added better pagination and iterators for `GroupList` & `FileList`
|
27
32
|
|
28
|
-
## 3.0.2-dev 2020-03-11
|
33
|
+
## 3.0.2-dev — 2020-03-11
|
29
34
|
|
30
|
-
- Expanded File and Group entities
|
35
|
+
- Expanded `File` and `Group` entities
|
31
36
|
- Changed user agent syntax
|
32
37
|
|
33
|
-
## 3.0.1-dev 2020-03-11
|
38
|
+
## 3.0.1-dev — 2020-03-11
|
34
39
|
|
35
40
|
- Added Upload/group functionality
|
36
41
|
- Added user API
|
@@ -38,7 +43,7 @@
|
|
38
43
|
- Isolated clients, entities and concerns
|
39
44
|
- Expanded documentation
|
40
45
|
|
41
|
-
## 3.0.0-dev 2020-02-18
|
46
|
+
## 3.0.0-dev — 2020-02-18
|
42
47
|
|
43
48
|
### Changed
|
44
49
|
- Rewrote gem from scratch
|
data/README.md
CHANGED
@@ -52,7 +52,7 @@ And then execute:
|
|
52
52
|
|
53
53
|
$ bundle
|
54
54
|
|
55
|
-
If already not, create your project in [Uploadcare dashboard](https://uploadcare.com
|
55
|
+
If already not, create your project in [Uploadcare dashboard](https://app.uploadcare.com/?utm_source=github&utm_medium=referral&utm_campaign=uploadcare-ruby) and copy
|
56
56
|
its API keys from there.
|
57
57
|
|
58
58
|
Set your Uploadcare keys in config file or through environment variables:
|
@@ -75,7 +75,10 @@ Uploadcare.config.secret_key = "demoprivatekey"
|
|
75
75
|
|
76
76
|
This section contains practical usage examples. Please note, everything that
|
77
77
|
follows gets way more clear once you've looked through our
|
78
|
-
[docs](https://uploadcare.com/docs/?utm_source=github&utm_medium=referral&utm_campaign=uploadcare-ruby)
|
78
|
+
[docs](https://uploadcare.com/docs/?utm_source=github&utm_medium=referral&utm_campaign=uploadcare-ruby)
|
79
|
+
and [Upload](https://uploadcare.com/api-refs/upload-api/) and [REST](https://uploadcare.com/api-refs/rest-api/) API refs.
|
80
|
+
|
81
|
+
You can also find an example project [here](https://github.com/uploadcare/uploadcare-rails-example).
|
79
82
|
|
80
83
|
### Uploading files
|
81
84
|
#### Uploading and storing a single file
|
@@ -295,8 +298,8 @@ how they should be fetched:
|
|
295
298
|
- **:limit** — Controls page size. Accepts values from 1 to 1000, defaults to 100.
|
296
299
|
- **:stored** — Can be either `true` or `false`. When true, file list will contain only stored files. When false — only not stored.
|
297
300
|
- **:removed** — Can be either `true` or `false`. When true, file list will contain only removed files. When false — all except removed. Defaults to false.
|
298
|
-
- **:ordering** — Controls the order of returned files. Available values: `datetime_updated`, `-datetime_updated`, `size`, `-size`. Defaults to `datetime_uploaded`. More info can be found [here](https://uploadcare.com/
|
299
|
-
- **:from** — Specifies the starting point for a collection. Resulting collection will contain files from the given value and to the end in a direction set by an **ordering** option. When files are ordered by `datetime_updated` in any direction, accepts either a `DateTime` object or an ISO 8601 string. When files are ordered by size, accepts non-negative integers (size in bytes). More info can be found [here](https://uploadcare.com/
|
301
|
+
- **:ordering** — Controls the order of returned files. Available values: `datetime_updated`, `-datetime_updated`, `size`, `-size`. Defaults to `datetime_uploaded`. More info can be found [here](https://uploadcare.com/api-refs/rest-api/v0.6.0/#operation/filesList).
|
302
|
+
- **:from** — Specifies the starting point for a collection. Resulting collection will contain files from the given value and to the end in a direction set by an **ordering** option. When files are ordered by `datetime_updated` in any direction, accepts either a `DateTime` object or an ISO 8601 string. When files are ordered by size, accepts non-negative integers (size in bytes). More info can be found [here](https://uploadcare.com/api-refs/rest-api/v0.6.0/#operation/filesList).
|
300
303
|
|
301
304
|
Options used to create a file list can be accessed through `#options` method.
|
302
305
|
Note that, once set, they don't affect file fetching process anymore and are
|
@@ -369,18 +372,67 @@ https://uploadcare.com/docs/api_reference/rest/webhooks/
|
|
369
372
|
You can use webhooks to provide notifications about your uploads to target urls.
|
370
373
|
This gem lets you create and manage webhooks.
|
371
374
|
|
375
|
+
Each webhook payload can be signed with a secret (the `signing_secret` option) to ensure that the request comes from the expected sender.
|
376
|
+
More info about secure webhooks [here](https://uploadcare.com/docs/security/secure-webhooks/).
|
377
|
+
|
372
378
|
```ruby
|
373
|
-
Uploadcare::Webhook.create(target_url: "https://example.com/listen", event: "file.uploaded", is_active: true)
|
374
|
-
Uploadcare::Webhook.update(<webhook_id>, target_url: "https://newexample.com/listen/new", event: "file.uploaded", is_active: true)
|
379
|
+
Uploadcare::Webhook.create(target_url: "https://example.com/listen", event: "file.uploaded", is_active: true, signing_secret: "some-secret")
|
380
|
+
Uploadcare::Webhook.update(<webhook_id>, target_url: "https://newexample.com/listen/new", event: "file.uploaded", is_active: true, signing_secret: "some-secret")
|
375
381
|
Uploadcare::Webhook.delete("https://example.com/listen")
|
376
382
|
Uploadcare::Webhook.list
|
377
383
|
```
|
378
384
|
|
385
|
+
##### Webhook signature verification
|
386
|
+
|
387
|
+
The gem has a helper class to verify a webhook signature from headers —
|
388
|
+
`Uploadcare::Param::WebhookSignatureVerifier`. This class accepts three
|
389
|
+
important options:
|
390
|
+
|
391
|
+
- **:webhook_body** — this option represents parameters received in the webhook
|
392
|
+
request in the JSON format.
|
393
|
+
**NOTE**: if you're using Rails, you should exclude options `controller`,
|
394
|
+
`action` and `post` from the `webhook_body`.
|
395
|
+
- **:signing_secret** — the secret that was set while creating/updating a
|
396
|
+
webhook. This option can be specified as an ENV var with the name
|
397
|
+
`UC_SIGNING_SECRET` — then no need to send it to the verifier class.
|
398
|
+
- **:x_uc_signature_header** — the content of the `X-Uc-Signature` HTTP header
|
399
|
+
in the webhook request.
|
400
|
+
|
401
|
+
Using the `Uploadcare::Param::WebhookSignatureVerifier` class example:
|
402
|
+
|
403
|
+
```ruby
|
404
|
+
webhook_body = '{...}'
|
405
|
+
|
406
|
+
signing_secret = "12345X"
|
407
|
+
x_uc_signature_header = "v1=9b31c7dd83fdbf4a2e12b19d7f2b9d87d547672a325b9492457292db4f513c70"
|
408
|
+
|
409
|
+
Uploadcare::Param::WebhookSignatureVerifier.valid?(signing_secret: signing_secret, x_uc_signature_header: x_uc_signature_header, webhook_body: webhook_body)
|
410
|
+
```
|
411
|
+
|
412
|
+
You can write your verifier. Example code:
|
413
|
+
|
414
|
+
```ruby
|
415
|
+
webhook_body_json = '{...}'
|
416
|
+
|
417
|
+
signing_secret = ENV['UC_SIGNING_SECRET']
|
418
|
+
x_uc_signature_header = "v1=f4d859ed2fe47b9a4fcc81693d34e58ad12366a841e58a7072c1530483689cc0"
|
419
|
+
|
420
|
+
digest = OpenSSL::Digest.new('sha256')
|
421
|
+
|
422
|
+
calculated_signature = "v1=#{OpenSSL::HMAC.hexdigest(digest, signing_secret.force_encoding("utf-8"), webhook_body_json.force_encoding("utf-8"))}"
|
423
|
+
|
424
|
+
if calculated_signature == x_uc_signature_header
|
425
|
+
puts "WebHook signature matches!"
|
426
|
+
else
|
427
|
+
puts "WebHook signature mismatch!"
|
428
|
+
end
|
429
|
+
```
|
430
|
+
|
379
431
|
#### Project
|
380
432
|
|
381
433
|
`Project` provides basic info about the connected Uploadcare project. That
|
382
434
|
object is also an Hashie::Mash, so every methods out of
|
383
|
-
[these](https://uploadcare.com/
|
435
|
+
[these](https://uploadcare.com/api-refs/rest-api/v0.6.0/#operation/projectInfo) will work.
|
384
436
|
|
385
437
|
```ruby
|
386
438
|
@project = Uploadcare::Project.project
|
@@ -399,8 +451,6 @@ object is also an Hashie::Mash, so every methods out of
|
|
399
451
|
|
400
452
|
##### Video
|
401
453
|
|
402
|
-
Uploadcare can encode video files from all popular formats, adjust their quality, format and dimensions, cut out a video fragment, and generate thumbnails via [REST API](https://uploadcare.com/api-refs/rest-api/v0.6.0/).
|
403
|
-
|
404
454
|
After each video file upload you obtain a file identifier in UUID format.
|
405
455
|
Then you can use this file identifier to convert your video in multiple ways:
|
406
456
|
|
@@ -461,7 +511,7 @@ Params in the response:
|
|
461
511
|
- **original_source** - built path for a particular video with all the conversion operations and parameters.
|
462
512
|
- **token** - a processing job token that can be used to get a [job status](https://uploadcare.com/docs/transformations/video-encoding/#status) (see below).
|
463
513
|
- **uuid** - UUID of your processed video file.
|
464
|
-
- **thumbnails_group_uuid** - holds :uuid-thumb-group, a UUID of a [file group](https://uploadcare.com/api-refs/rest-api/v0.
|
514
|
+
- **thumbnails_group_uuid** - holds :uuid-thumb-group, a UUID of a [file group](https://uploadcare.com/api-refs/rest-api/v0.6.0/#operation/groupsList) with thumbnails for an output video, based on the thumbs [operation](https://uploadcare.com/docs/transformations/video-encoding/#operation-thumbs) parameters.
|
465
515
|
- **problems** - problems related to your processing job, if any.
|
466
516
|
|
467
517
|
To convert multiple videos just add params as a hash for each video to the first argument of the `Uploadcare::VideoConverter#convert` method:
|
@@ -508,12 +558,10 @@ Params in the response:
|
|
508
558
|
- **thumbnails_group_uuid** - holds :uuid-thumb-group, a UUID of a file group with thumbnails for an output video, based on the thumbs operation parameters.
|
509
559
|
- **uuid** - a UUID of your processed video file.
|
510
560
|
|
511
|
-
More examples and options can be found [here](https://uploadcare.com/docs/transformations/video-encoding/#video-encoding)
|
561
|
+
More examples and options can be found [here](https://uploadcare.com/docs/transformations/video-encoding/#video-encoding).
|
512
562
|
|
513
563
|
##### Document
|
514
564
|
|
515
|
-
Uploadcare allows converting documents to the following target formats: doc, docx, xls, xlsx, odt, ods, rtf, txt, pdf, jpg, png. Document Conversion works via our [REST API](https://uploadcare.com/api-refs/rest-api/v0.6.0/).
|
516
|
-
|
517
565
|
After each document file upload you obtain a file identifier in UUID format.
|
518
566
|
Then you can use this file identifier to convert your document to a new format:
|
519
567
|
|
@@ -14,7 +14,9 @@ module Uploadcare
|
|
14
14
|
'target_url': options[:target_url],
|
15
15
|
'event': options[:event] || 'file.uploaded',
|
16
16
|
'is_active': options[:is_active].nil? ? true : options[:is_active]
|
17
|
-
}.
|
17
|
+
}.merge(
|
18
|
+
{ 'signing_secret': options[:signing_secret] }.compact
|
19
|
+
).to_json
|
18
20
|
post(uri: '/webhooks/', content: body)
|
19
21
|
end
|
20
22
|
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'digest/md5'
|
4
|
+
|
5
|
+
module Uploadcare
|
6
|
+
module Param
|
7
|
+
# This object verifies a signature received along with webhook headers
|
8
|
+
class WebhookSignatureVerifier
|
9
|
+
# @see https://uploadcare.com/docs/security/secure-webhooks/
|
10
|
+
def self.valid?(options = {})
|
11
|
+
webhook_body_json = options[:webhook_body]
|
12
|
+
signing_secret = options[:signing_secret] || ENV['UC_SIGNING_SECRET']
|
13
|
+
x_uc_signature_header = options[:x_uc_signature_header]
|
14
|
+
|
15
|
+
digest = OpenSSL::Digest.new('sha256')
|
16
|
+
|
17
|
+
calculated_signature = "v1=#{OpenSSL::HMAC.hexdigest(digest, signing_secret, webhook_body_json)}"
|
18
|
+
|
19
|
+
calculated_signature == x_uc_signature_header
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
data/lib/uploadcare.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: uploadcare-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stepan Redka
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-11-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: api_struct
|
@@ -214,6 +214,7 @@ files:
|
|
214
214
|
- lib/uploadcare/param/upload/signature_generator.rb
|
215
215
|
- lib/uploadcare/param/upload/upload_params_generator.rb
|
216
216
|
- lib/uploadcare/param/user_agent.rb
|
217
|
+
- lib/uploadcare/param/webhook_signature_verifier.rb
|
217
218
|
- lib/uploadcare/ruby/version.rb
|
218
219
|
- uploadcare-ruby.gemspec
|
219
220
|
homepage: https://github.com/uploadcare/uploadcare-ruby
|
@@ -241,7 +242,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
241
242
|
- !ruby/object:Gem::Version
|
242
243
|
version: '0'
|
243
244
|
requirements: []
|
244
|
-
rubygems_version: 3.
|
245
|
+
rubygems_version: 3.0.1
|
245
246
|
signing_key:
|
246
247
|
specification_version: 4
|
247
248
|
summary: Ruby wrapper for uploadcare API
|