uploadcare-ruby 4.4.0 → 4.4.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 +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
|