uploadcare-ruby 4.4.0 → 4.4.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +6 -0
- data/CHANGELOG.md +16 -2
- data/README.md +69 -38
- data/lib/uploadcare/client/addons_client.rb +13 -0
- data/lib/uploadcare/entity/conversion/base_converter.rb +1 -1
- data/lib/uploadcare/entity/file.rb +5 -0
- data/lib/uploadcare/exception/auth_error.rb +8 -0
- data/lib/uploadcare/param/authentication_header.rb +12 -0
- data/lib/uploadcare/ruby/version.rb +1 -1
- data/lib/uploadcare/signed_url_generators/{amakai_generator.rb → akamai_generator.rb} +16 -6
- data/lib/uploadcare.rb +3 -1
- metadata +5 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1cd6e50f0d12bc1cd65c531fa7e5656e41149433c042aedeb5d8899425ae6e53
|
4
|
+
data.tar.gz: baa9f7cc358eba65895e608073d2ad188bc68ff1b5a44b8c51e6d5b2e72fc8bb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: eab5bac3add563b090d18e7f82e2c7c852e95ff0d99530f8a3d25ec2d9eb47f1d146d38fc3dec9335af3bb9cebb74079b5fb27d3f46c7c1971d892185607df06
|
7
|
+
data.tar.gz: 2edc0a691512ac31210f5fada71d7515c59ac8305c5a522e04f2f90924af313cdba4707860e8bb6d1aaeec4053cff0869f0f5f14a458d33832c57587d3ab9822
|
data/.rubocop.yml
CHANGED
@@ -4,6 +4,8 @@ AllCops:
|
|
4
4
|
|
5
5
|
Layout/LineLength:
|
6
6
|
Max: 120
|
7
|
+
Exclude:
|
8
|
+
- 'spec/**/*'
|
7
9
|
|
8
10
|
Lint/IneffectiveAccessModifier:
|
9
11
|
Enabled: false
|
@@ -20,6 +22,10 @@ Metrics/BlockLength:
|
|
20
22
|
- 'spec/**/*'
|
21
23
|
- 'uploadcare-ruby.gemspec'
|
22
24
|
|
25
|
+
Metrics/ModuleLength:
|
26
|
+
Exclude:
|
27
|
+
- 'spec/**/*'
|
28
|
+
|
23
29
|
Metrics/MethodLength:
|
24
30
|
Max: 20
|
25
31
|
|
data/CHANGELOG.md
CHANGED
@@ -1,8 +1,22 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## 4.4.1 — 2024-04-27
|
4
|
+
|
5
|
+
### Added
|
6
|
+
* Added `AWS Rekognition Moderation` Add-On.
|
7
|
+
* Added an optional `wildcard` boolean parameter to the `generate_url` method of `AkamaiGenerator`.
|
8
|
+
|
9
|
+
### Changed
|
10
|
+
* File attribute `datetime_stored` is deprecated and will warn on usage from `File` object properties.
|
11
|
+
|
12
|
+
### Fixed
|
13
|
+
|
14
|
+
* Throw `AuthError` if current public key or secret key config are empty when accessing any of the APIs.
|
15
|
+
* `AmakaiGenerator` has been renamed to `AkamaiGenerator` to fix typo in class name.
|
16
|
+
|
3
17
|
## 4.4.0 — 2024-03-09
|
4
18
|
|
5
|
-
### Breaking
|
19
|
+
### Breaking
|
6
20
|
|
7
21
|
* Drop support of unmaintainable Ruby versions < 3.x.
|
8
22
|
|
@@ -68,7 +82,7 @@ Add support of new ruby versions
|
|
68
82
|
### Breaking Сhanges
|
69
83
|
|
70
84
|
- Drop support of unmaintainable Ruby versions (2.4, 2.5, 2.6).
|
71
|
-
- Replace unmaintainable `api_struct` with `uploadcare-api_struct`
|
85
|
+
- Replace unmaintainable `api_struct` with `uploadcare-api_struct`
|
72
86
|
|
73
87
|
### Added
|
74
88
|
|
data/README.md
CHANGED
@@ -95,7 +95,7 @@ Using Uploadcare is simple, and here are the basics of handling files.
|
|
95
95
|
```ruby
|
96
96
|
@file_to_upload = File.open("your-file.png")
|
97
97
|
|
98
|
-
@uc_file = Uploadcare::Uploader.upload(@file_to_upload)
|
98
|
+
@uc_file = Uploadcare::Uploader.upload(@file_to_upload, store: "auto")
|
99
99
|
|
100
100
|
@uc_file.uuid
|
101
101
|
# => "dc99200d-9bd6-4b43-bfa9-aa7bfaefca40"
|
@@ -105,13 +105,15 @@ Using Uploadcare is simple, and here are the basics of handling files.
|
|
105
105
|
# => "https://ucarecdn.com/dc99200d-9bd6-4b43-bfa9-aa7bfaefca40/your-file.png"
|
106
106
|
```
|
107
107
|
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
108
|
+
The `store` option can have these possible values:
|
109
|
+
- `true`: mark the uploaded file as stored.
|
110
|
+
- `false`: do not mark the uploaded file as stored and remove it after 24 hours.
|
111
|
+
- `"auto"`: defers the choice of storage behavior to the [auto-store setting](https://app.uploadcare.com/projects/-/settings/#storage) for your Uploadcare project. This is the default behavior.
|
112
|
+
|
113
|
+
Your might then want to store or delete the uploaded file.
|
112
114
|
|
113
115
|
```ruby
|
114
|
-
# that's how you store a file
|
116
|
+
# that's how you store a file, if you have uploaded the file using store: false and changed your mind later
|
115
117
|
@uc_file.store
|
116
118
|
# => #<Uploadcare::Api::File ...
|
117
119
|
|
@@ -128,16 +130,16 @@ Uploadcare supports multiple ways to upload files:
|
|
128
130
|
# Smart upload - detects type of passed object and picks appropriate upload method
|
129
131
|
# If you have a large file (more than 100Mb / 10485760 bytes), the uploader will automatically process it with a multipart upload
|
130
132
|
|
131
|
-
Uploadcare::Uploader.upload("https://placekitten.com/96/139")
|
133
|
+
Uploadcare::Uploader.upload("https://placekitten.com/96/139", store: "auto")
|
132
134
|
```
|
133
135
|
|
134
136
|
There are explicit ways to select upload type:
|
135
137
|
|
136
138
|
```ruby
|
137
139
|
files = [File.open("1.jpg"), File.open("1.jpg")]
|
138
|
-
Uploadcare::Uploader.upload_files(files)
|
140
|
+
Uploadcare::Uploader.upload_files(files, store: 'auto')
|
139
141
|
|
140
|
-
Uploadcare::Uploader.upload_from_url("https://placekitten.com/96/139")
|
142
|
+
Uploadcare::Uploader.upload_from_url("https://placekitten.com/96/139", store: "auto")
|
141
143
|
```
|
142
144
|
It is possible to track progress of the upload-from-URL process. To do that, you should specify the `async` option and get a token:
|
143
145
|
|
@@ -188,11 +190,12 @@ Options available in a block:
|
|
188
190
|
|
189
191
|
#### Uploading options
|
190
192
|
|
191
|
-
You can override
|
193
|
+
You can override [auto-store setting](https://app.uploadcare.com/projects/-/settings/#storage) from your Uploadcare project for each upload request:
|
192
194
|
|
193
195
|
```ruby
|
194
|
-
@api.upload(files, store: true)
|
195
|
-
@api.
|
196
|
+
@api.upload(files, store: true) # mark the uploaded file as stored.
|
197
|
+
@api.upload(files, store: false) # do not mark the uploaded file as stored and remove it after 24 hours.
|
198
|
+
@api.upload_from_url(url, store: "auto") # defers the choice of storage behavior to the auto-store setting.
|
196
199
|
```
|
197
200
|
|
198
201
|
You can upload file with custom metadata, for example `subsystem` and `pet`:
|
@@ -208,10 +211,10 @@ Entities are representations of objects in Uploadcare cloud.
|
|
208
211
|
|
209
212
|
#### File
|
210
213
|
|
211
|
-
File entity contains its metadata. It also supports `include` param to include additional fields to the file object, such as: "appdata".
|
214
|
+
File entity contains its metadata. It also supports `include` param to include additional fields to the file object, such as: "appdata".
|
212
215
|
|
213
216
|
```ruby
|
214
|
-
@file = Uploadcare::File.file("
|
217
|
+
@file = Uploadcare::File.file("FILE_UUID", include: "appdata")
|
215
218
|
{
|
216
219
|
"datetime_removed"=>nil,
|
217
220
|
"datetime_stored"=>"2018-11-26T12:49:10.477888Z",
|
@@ -219,11 +222,11 @@ File entity contains its metadata. It also supports `include` param to include a
|
|
219
222
|
"is_image"=>true,
|
220
223
|
"is_ready"=>true,
|
221
224
|
"mime_type"=>"image/jpeg",
|
222
|
-
"original_file_url"=>"https://ucarecdn.com/
|
225
|
+
"original_file_url"=>"https://ucarecdn.com/FILE_UUID/pineapple.jpg",
|
223
226
|
"original_filename"=>"pineapple.jpg",
|
224
227
|
"size"=>642,
|
225
|
-
"url"=>"https://api.uploadcare.com/files/
|
226
|
-
"uuid"=>"
|
228
|
+
"url"=>"https://api.uploadcare.com/files/FILE_UUID/",
|
229
|
+
"uuid"=>"FILE_UUID",
|
227
230
|
"variations"=>nil,
|
228
231
|
"content_info"=>{
|
229
232
|
"mime"=>{
|
@@ -322,7 +325,7 @@ File entity contains its metadata. It also supports `include` param to include a
|
|
322
325
|
The File object is also can be converted if it is a document or a video file. Imagine, you have a document file:
|
323
326
|
|
324
327
|
```ruby
|
325
|
-
@file = Uploadcare::File.file("
|
328
|
+
@file = Uploadcare::File.file("FILE_UUID")
|
326
329
|
```
|
327
330
|
|
328
331
|
To convert it to an another file, just do:
|
@@ -437,16 +440,16 @@ As an example, you could store unique file identifier from your system.
|
|
437
440
|
|
438
441
|
```ruby
|
439
442
|
# Get file's metadata keys and values.
|
440
|
-
Uploadcare::FileMetadata.index('
|
443
|
+
Uploadcare::FileMetadata.index('FILE_UUID')
|
441
444
|
|
442
445
|
# Get the value of a single metadata key.
|
443
|
-
Uploadcare::FileMetadata.show('
|
446
|
+
Uploadcare::FileMetadata.show('FILE_UUID', 'KEY')
|
444
447
|
|
445
448
|
# Update the value of a single metadata key. If the key does not exist, it will be created.
|
446
|
-
Uploadcare::FileMetadata.update('
|
449
|
+
Uploadcare::FileMetadata.update('FILE_UUID', 'KEY', 'VALUE')
|
447
450
|
|
448
451
|
# Delete a file's metadata key.
|
449
|
-
Uploadcare::FileMetadata.delete('
|
452
|
+
Uploadcare::FileMetadata.delete('FILE_UUID', 'KEY')
|
450
453
|
```
|
451
454
|
|
452
455
|
#### Group
|
@@ -470,6 +473,7 @@ Uploadcare::Group.rest_info(group.id)
|
|
470
473
|
|
471
474
|
# group can be deleted by group ID.
|
472
475
|
Uploadcare::Group.delete(group.id)
|
476
|
+
# Note: This operation only removes the group object itself. All the files that were part of the group are left as is.
|
473
477
|
```
|
474
478
|
|
475
479
|
#### GroupList
|
@@ -552,37 +556,50 @@ An `Add-On` is an application implemented by Uploadcare that accepts uploaded fi
|
|
552
556
|
##### AWS Rekognition
|
553
557
|
|
554
558
|
```ruby
|
555
|
-
# Execute AWS Rekognition Add-On for a given target to detect labels in an image.
|
556
|
-
|
559
|
+
# Execute AWS Rekognition Add-On for a given target to detect labels in an image.
|
560
|
+
# Note: Detected labels are stored in the file's appdata.
|
561
|
+
Uploadcare::Addons.ws_rekognition_detect_labels('FILE_UUID')
|
557
562
|
|
558
563
|
# Check the status of AWS Rekognition.
|
559
564
|
Uploadcare::Addons.ws_rekognition_detect_labels_status('RETURNED_ID_FROM_WS_REKOGNITION_DETECT_LABELS')
|
560
565
|
```
|
561
566
|
|
567
|
+
##### AWS Rekognition Moderation
|
568
|
+
|
569
|
+
```ruby
|
570
|
+
# Execute AWS Rekognition Moderation Add-On for a given target to detect moderation labels in an image.
|
571
|
+
# Note: Detected moderation labels are stored in the file's appdata.
|
572
|
+
|
573
|
+
Uploadcare::Addons.ws_rekognition_detect_moderation_labels('FILE_UUID')
|
574
|
+
|
575
|
+
# Check the status of an Add-On execution request that had been started using the Execute Add-On operation.
|
576
|
+
Uploadcare::Addons.ws_rekognition_detect_moderation_labels_status('RETURNED_ID_FROM_WS_REKOGNITION_DETECT_MODERATION_LABELS')
|
577
|
+
```
|
578
|
+
|
562
579
|
##### ClamAV
|
563
580
|
|
564
581
|
```ruby
|
565
582
|
# ClamAV virus checking Add-On for a given target.
|
566
|
-
Uploadcare::Addons.uc_clamav_virus_scan('
|
583
|
+
Uploadcare::Addons.uc_clamav_virus_scan('FILE_UUID')
|
567
584
|
|
568
|
-
#
|
569
|
-
Uploadcare::Addons.uc_clamav_virus_scan('
|
585
|
+
# Check and purge infected file.
|
586
|
+
Uploadcare::Addons.uc_clamav_virus_scan('FILE_UUID', purge_infected: true )
|
570
587
|
|
571
|
-
# Check the status
|
588
|
+
# Check the status of an Add-On execution request that had been started using the Execute Add-On operation.
|
572
589
|
Uploadcare::Addons.uc_clamav_virus_scan_status('RETURNED_ID_FROM_UC_CLAMAV_VIRUS_SCAN')
|
573
590
|
```
|
574
591
|
|
575
592
|
##### Remove.bg
|
576
593
|
|
577
594
|
```ruby
|
578
|
-
#
|
579
|
-
Uploadcare::Addons.remove_bg('
|
595
|
+
# Execute remove.bg background image removal Add-On for a given target.
|
596
|
+
Uploadcare::Addons.remove_bg('FILE_UUID')
|
580
597
|
|
581
598
|
# You can pass optional parameters.
|
582
599
|
# See the full list of parameters here: https://uploadcare.com/api-refs/rest-api/v0.7.0/#operation/removeBgExecute
|
583
|
-
Uploadcare::Addons.remove_bg('
|
600
|
+
Uploadcare::Addons.remove_bg('FILE_UUID', crop: true, type_level: '2')
|
584
601
|
|
585
|
-
# Check the status of
|
602
|
+
# Check the status of an Add-On execution request that had been started using the Execute Add-On operation.
|
586
603
|
Uploadcare::Addons.remove_bg_status('RETURNED_ID_FROM_REMOVE_BG')
|
587
604
|
```
|
588
605
|
|
@@ -821,15 +838,29 @@ More examples and options can be found [here](https://uploadcare.com/docs/transf
|
|
821
838
|
|
822
839
|
You can use custom domain and CDN provider to deliver files with authenticated URLs (see [original documentation](https://uploadcare.com/docs/security/secure_delivery/)).
|
823
840
|
|
824
|
-
To generate authenticated URL from the library, you should choose `Uploadcare::SignedUrlGenerators::
|
841
|
+
To generate authenticated URL from the library, you should choose `Uploadcare::SignedUrlGenerators::AkamaiGenerator` (or create your own generator implementation):
|
842
|
+
|
825
843
|
```ruby
|
826
|
-
generator = Uploadcare::SignedUrlGenerators::
|
844
|
+
generator = Uploadcare::SignedUrlGenerators::AkamaiGenerator.new(cdn_host: 'example.com', secret_key: 'secret_key')
|
845
|
+
# Optional parameters: ttl: 300, algorithm: 'sha256'
|
827
846
|
generator.generate_url(uuid, acl = optional)
|
828
847
|
|
829
|
-
generator.generate_url("a7d5645e-5cd7-4046-819f-a6a2933bafe3")
|
830
|
-
https://example.com/a7d5645e-5cd7-4046-819f-a6a2933bafe3/?token=exp=1649405263~acl=/a7d5645e-5cd7-4046-819f-a6a2933bafe3/~hmac=a989cae5342f17013677f5a0e6577fc5594cc4e238fb4c95eda36634eb47018b
|
831
|
-
|
832
|
-
https://
|
848
|
+
generator.generate_url("a7d5645e-5cd7-4046-819f-a6a2933bafe3")
|
849
|
+
# https://example.com/a7d5645e-5cd7-4046-819f-a6a2933bafe3/?token=exp=1649405263~acl=/a7d5645e-5cd7-4046-819f-a6a2933bafe3/~hmac=a989cae5342f17013677f5a0e6577fc5594cc4e238fb4c95eda36634eb47018b
|
850
|
+
|
851
|
+
# You can pass in ACL as a second parameter to generate_url. See https://uploadcare.com/docs/security/secure-delivery/#authenticated-urls for supported acl formats
|
852
|
+
generator.generate_url("a7d5645e-5cd7-4046-819f-a6a2933bafe3", '/*/')
|
853
|
+
# https://example.com/a7d5645e-5cd7-4046-819f-a6a2933bafe3/?token=exp=1649405263~acl=/*/~hmac=3ce1152c6af8864b36d4dc721f08ca3cf0b3a20278d7f849e82c6c930d48ccc1
|
854
|
+
|
855
|
+
# Optionally you can use wildcard: true to generate a wildcard acl token
|
856
|
+
generator.generate_url("a7d5645e-5cd7-4046-819f-a6a2933bafe3", wildcard: true)
|
857
|
+
# https://example.com/a7d5645e-5cd7-4046-819f-a6a2933bafe3/?token=exp=1714233449~acl=/a7d5645e-5cd7-4046-819f-a6a2933bafe3/*~hmac=a568ee2a85dd90a8a8a1ef35ea0cc0ef0acb84fe81990edd3a06eacf10a52b4e
|
858
|
+
|
859
|
+
# You can also pass in a custom ttl and algorithm to AkamaiGenerator
|
860
|
+
generator = Uploadcare::SignedUrlGenerators::AkamaiGenerator.new(cdn_host: 'example.com', secret_key: 'secret_key', ttl: 10)
|
861
|
+
generator.generate_url("a7d5645e-5cd7-4046-819f-a6a2933bafe3")
|
862
|
+
# This generates a URL that expires in 10 seconds
|
863
|
+
# https://example.com/a7d5645e-5cd7-4046-819f-a6a2933bafe3/?token=exp=1714233277~acl=/a7d5645e-5cd7-4046-819f-a6a2933bafe3/~hmac=f25343104aeced3004d2cc4d49807d8d7c732300b54b154c319da5283a871a71
|
833
864
|
```
|
834
865
|
## Useful links
|
835
866
|
|
@@ -46,6 +46,19 @@ module Uploadcare
|
|
46
46
|
get(uri: "/addons/remove_bg/execute/status/#{query_params(uuid)}")
|
47
47
|
end
|
48
48
|
|
49
|
+
# Execute AWS Rekognition Moderation Add-On for a given target to detect labels in an image.
|
50
|
+
# @see https://uploadcare.com/api-refs/rest-api/v0.7.0/#tag/Add-Ons/operation/awsRekognitionDetectModerationLabelsExecute
|
51
|
+
def ws_rekognition_detect_moderation_labels(uuid)
|
52
|
+
content = { target: uuid }.to_json
|
53
|
+
post(uri: '/addons/aws_rekognition_detect_moderation_labels/execute/', content: content)
|
54
|
+
end
|
55
|
+
|
56
|
+
# Check the status of an Add-On execution request that had been started using the Execute Add-On operation.
|
57
|
+
# @see https://uploadcare.com/api-refs/rest-api/v0.7.0/#tag/Add-Ons/operation/awsRekognitionDetectModerationLabelsExecutionStatus
|
58
|
+
def ws_rekognition_detect_moderation_labels_status(uuid)
|
59
|
+
get(uri: "/addons/aws_rekognition_detect_moderation_labels/execute/status/#{query_params(uuid)}")
|
60
|
+
end
|
61
|
+
|
49
62
|
private
|
50
63
|
|
51
64
|
def query_params(uuid)
|
@@ -9,7 +9,7 @@ module Uploadcare
|
|
9
9
|
class << self
|
10
10
|
# Converts files
|
11
11
|
#
|
12
|
-
# @param
|
12
|
+
# @param params [Array] of hashes with params or [Hash]
|
13
13
|
# @option options [Boolean] :store whether to store file on servers.
|
14
14
|
def convert(params, options = {})
|
15
15
|
files_params = params.is_a?(Hash) ? [params] : params
|
@@ -15,6 +15,11 @@ module Uploadcare
|
|
15
15
|
|
16
16
|
attr_entity(*RESPONSE_PARAMS)
|
17
17
|
|
18
|
+
def datetime_stored
|
19
|
+
Uploadcare.config.logger&.warn 'datetime_stored property has been deprecated, and will be removed without a replacement in future.' # rubocop:disable Layout/LineLength
|
20
|
+
@entity.datetime_stored
|
21
|
+
end
|
22
|
+
|
18
23
|
# gets file's uuid - even if it's only initialized with url
|
19
24
|
# @returns [String]
|
20
25
|
def uuid
|
@@ -11,6 +11,7 @@ module Uploadcare
|
|
11
11
|
class AuthenticationHeader
|
12
12
|
# @see https://uploadcare.com/docs/api_reference/rest/requests_auth/#auth-uploadcare
|
13
13
|
def self.call(options = {})
|
14
|
+
validate_auth_config
|
14
15
|
case Uploadcare.config.auth_type
|
15
16
|
when 'Uploadcare'
|
16
17
|
SecureAuthHeader.call(options)
|
@@ -20,6 +21,17 @@ module Uploadcare
|
|
20
21
|
raise ArgumentError, "Unknown auth_scheme: '#{Uploadcare.config.auth_type}'"
|
21
22
|
end
|
22
23
|
end
|
24
|
+
|
25
|
+
def self.validate_auth_config
|
26
|
+
raise AuthError, 'Public Key is blank.' if is_blank?(Uploadcare.config.public_key)
|
27
|
+
raise AuthError, 'Secret Key is blank.' if is_blank?(Uploadcare.config.secret_key)
|
28
|
+
end
|
29
|
+
|
30
|
+
# rubocop:disable Naming/PredicateName
|
31
|
+
def self.is_blank?(value)
|
32
|
+
value.nil? || value.empty?
|
33
|
+
end
|
34
|
+
# rubocop:enable Naming/PredicateName
|
23
35
|
end
|
24
36
|
end
|
25
37
|
end
|
@@ -4,20 +4,21 @@ require_relative 'base_generator'
|
|
4
4
|
|
5
5
|
module Uploadcare
|
6
6
|
module SignedUrlGenerators
|
7
|
-
class
|
7
|
+
class AkamaiGenerator < Uploadcare::SignedUrlGenerators::BaseGenerator
|
8
8
|
UUID_REGEX = '[a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89aAbB][a-f0-9]{3}-[a-f0-9]{12}'
|
9
9
|
TEMPLATE = 'https://{cdn_host}/{uuid}/?token=exp={expiration}{delimiter}acl={acl}{delimiter}hmac={token}'
|
10
10
|
|
11
|
-
def generate_url(uuid, acl = uuid)
|
11
|
+
def generate_url(uuid, acl = uuid, wildcard: false)
|
12
12
|
raise ArgumentError, 'Must contain valid UUID' unless valid?(uuid)
|
13
13
|
|
14
|
+
formatted_acl = build_acl(uuid, acl, wildcard: wildcard)
|
14
15
|
expire = build_expire
|
15
|
-
signature = build_signature(expire,
|
16
|
+
signature = build_signature(expire, formatted_acl)
|
16
17
|
|
17
18
|
TEMPLATE.gsub('{delimiter}', delimiter)
|
18
19
|
.sub('{cdn_host}', sanitized_string(cdn_host))
|
19
20
|
.sub('{uuid}', sanitized_string(uuid))
|
20
|
-
.sub('{acl}',
|
21
|
+
.sub('{acl}', formatted_acl)
|
21
22
|
.sub('{expiration}', expire)
|
22
23
|
.sub('{token}', signature)
|
23
24
|
end
|
@@ -32,13 +33,22 @@ module Uploadcare
|
|
32
33
|
'~'
|
33
34
|
end
|
34
35
|
|
36
|
+
def build_acl(uuid, acl, wildcard: false)
|
37
|
+
if wildcard
|
38
|
+
"/#{sanitized_string(uuid)}/*"
|
39
|
+
else
|
40
|
+
"/#{sanitized_string(acl)}/"
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
35
44
|
def build_expire
|
36
45
|
(Time.now.to_i + ttl).to_s
|
37
46
|
end
|
38
47
|
|
39
48
|
def build_signature(expire, acl)
|
40
|
-
signature = ["exp=#{expire}", "acl
|
41
|
-
|
49
|
+
signature = ["exp=#{expire}", "acl=#{acl}"].join(delimiter)
|
50
|
+
secret_key_bin = Array(secret_key.gsub(/\s/, '')).pack('H*')
|
51
|
+
OpenSSL::HMAC.hexdigest(algorithm, secret_key_bin, signature)
|
42
52
|
end
|
43
53
|
|
44
54
|
# rubocop:disable Style/SlicingWithRange
|
data/lib/uploadcare.rb
CHANGED
@@ -7,6 +7,7 @@ require 'ruby/version'
|
|
7
7
|
require 'exception/throttle_error'
|
8
8
|
require 'exception/request_error'
|
9
9
|
require 'exception/retry_error'
|
10
|
+
require 'exception/auth_error'
|
10
11
|
|
11
12
|
# Entities
|
12
13
|
require 'entity/entity'
|
@@ -25,7 +26,7 @@ require 'param/webhook_signature_verifier'
|
|
25
26
|
require 'api/api'
|
26
27
|
|
27
28
|
# SignedUrlGenerators
|
28
|
-
require 'signed_url_generators/
|
29
|
+
require 'signed_url_generators/akamai_generator'
|
29
30
|
require 'signed_url_generators/base_generator'
|
30
31
|
|
31
32
|
# Ruby wrapper for Uploadcare API
|
@@ -49,4 +50,5 @@ module Uploadcare
|
|
49
50
|
setting :upload_threads, default: 2 # used for multiupload only ATM
|
50
51
|
setting :framework_data, default: ''
|
51
52
|
setting :file_chunk_size, default: 100
|
53
|
+
setting :logger, default: Logger.new($stdout)
|
52
54
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: uploadcare-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.4.
|
4
|
+
version: 4.4.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- "@dmitrijivanchenko (Dmitrij Ivanchenko), @T0mbery (Andrey Aksenov)"
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: exe
|
11
11
|
cert_chain: []
|
12
|
-
date: 2024-
|
12
|
+
date: 2024-04-28 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: mimemagic
|
@@ -130,6 +130,7 @@ files:
|
|
130
130
|
- lib/uploadcare/entity/project.rb
|
131
131
|
- lib/uploadcare/entity/uploader.rb
|
132
132
|
- lib/uploadcare/entity/webhook.rb
|
133
|
+
- lib/uploadcare/exception/auth_error.rb
|
133
134
|
- lib/uploadcare/exception/conversion_error.rb
|
134
135
|
- lib/uploadcare/exception/request_error.rb
|
135
136
|
- lib/uploadcare/exception/retry_error.rb
|
@@ -145,7 +146,7 @@ files:
|
|
145
146
|
- lib/uploadcare/param/user_agent.rb
|
146
147
|
- lib/uploadcare/param/webhook_signature_verifier.rb
|
147
148
|
- lib/uploadcare/ruby/version.rb
|
148
|
-
- lib/uploadcare/signed_url_generators/
|
149
|
+
- lib/uploadcare/signed_url_generators/akamai_generator.rb
|
149
150
|
- lib/uploadcare/signed_url_generators/base_generator.rb
|
150
151
|
- uploadcare-ruby.gemspec
|
151
152
|
homepage: https://uploadcare.com/
|
@@ -176,7 +177,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
176
177
|
- !ruby/object:Gem::Version
|
177
178
|
version: '0'
|
178
179
|
requirements: []
|
179
|
-
rubygems_version: 3.5.
|
180
|
+
rubygems_version: 3.5.9
|
180
181
|
signing_key:
|
181
182
|
specification_version: 4
|
182
183
|
summary: Ruby wrapper for uploadcare API
|