uploadcare-ruby 3.2.0 → 3.3.2
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 +15 -0
- data/README.md +23 -7
- data/lib/uploadcare/ruby/version.rb +1 -1
- data/lib/uploadcare/signed_url_generators/amakai_generator.rb +53 -0
- data/lib/uploadcare/signed_url_generators/base_generator.rb +21 -0
- data/lib/uploadcare.rb +31 -14
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d3c7c464a8d89a9451f4205ba7f82b3c270d2431eb2b9cf9e31f64fc0542e032
|
4
|
+
data.tar.gz: 5ee0ef07f9194986eaf3742a5a80d01be38cd69a7e951551b791bcf479cf17f0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6accbd5a9c9c593c252a370947f42756a477cb47d6d1261a54a17df6f7026f9dd5e49ded174718ce159e6f3da9638744c4520673cfc0c81dcac381f129de2016
|
7
|
+
data.tar.gz: c383653917bab7dbc417eeccd16b800066ee07cf3741f3734361b8ae9da2935e369442711071a0ab0453860321b21a7a979265fa2a7f19daaaefb9fd4c5add20
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,18 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## 3.3.2 - 2022-07-18
|
4
|
+
|
5
|
+
- Fixes dry-configurable deprecation warnings
|
6
|
+
|
7
|
+
## 3.3.1 - 2022-04-19
|
8
|
+
|
9
|
+
- Fixed README: `Uploadcare::URLGenerators::AmakaiGenerator` > `Uploadcare::SignedUrlGenerators::AmakaiGenerator`
|
10
|
+
- Autoload generators constants
|
11
|
+
|
12
|
+
## 3.3.0 — 2022-04-08
|
13
|
+
|
14
|
+
- Added `Uploadcare::URLGenerators::AmakaiGenerator`. Use custom domain and CDN provider to deliver files with authenticated URLs
|
15
|
+
|
3
16
|
## 3.2.0 — 2021-11-16
|
4
17
|
|
5
18
|
- Added option `signing_secret` to the `Uploadcare::Webhook`
|
@@ -28,6 +41,7 @@
|
|
28
41
|
- Added CI
|
29
42
|
|
30
43
|
## 3.0.3-dev — 2020-03-13
|
44
|
+
|
31
45
|
- Added better pagination and iterators for `GroupList` & `FileList`
|
32
46
|
|
33
47
|
## 3.0.2-dev — 2020-03-11
|
@@ -46,6 +60,7 @@
|
|
46
60
|
## 3.0.0-dev — 2020-02-18
|
47
61
|
|
48
62
|
### Changed
|
63
|
+
|
49
64
|
- Rewrote gem from scratch
|
50
65
|
|
51
66
|
### Added
|
data/README.md
CHANGED
@@ -119,6 +119,8 @@ Uploadcare supports multiple ways to upload files:
|
|
119
119
|
|
120
120
|
```ruby
|
121
121
|
# Smart upload - detects type of passed object and picks appropriate upload method
|
122
|
+
# If you have a large file (more than 100Mb / 10485760 bytes), the uploader will automatically process it with a multipart upload
|
123
|
+
|
122
124
|
Uploadcare::Uploader.upload("https://placekitten.com/96/139")
|
123
125
|
```
|
124
126
|
|
@@ -659,13 +661,27 @@ Params in the response:
|
|
659
661
|
|
660
662
|
More examples and options can be found [here](https://uploadcare.com/docs/transformations/document-conversion/#document-conversion)
|
661
663
|
|
664
|
+
## Secure delivery
|
665
|
+
|
666
|
+
You can use custom domain and CDN provider to deliver files with authenticated URLs (see [original documentation](https://uploadcare.com/docs/security/secure_delivery/)).
|
667
|
+
|
668
|
+
To generate authenticated URL from the library, you should choose `Uploadcare::SignedUrlGenerators::AmakaiGenerator` (or create your generator implementation):
|
669
|
+
```ruby
|
670
|
+
generator = Uploadcare::SignedUrlGenerators::AmakaiGenerator.new(cdn_host: 'example.com', secret_key: 'secret_key'). Optional parameters: ttl: 300, algorithm: 'sha256'
|
671
|
+
generator.generate_url(uuid, acl = optional)
|
672
|
+
|
673
|
+
generator.generate_url("a7d5645e-5cd7-4046-819f-a6a2933bafe3") ->
|
674
|
+
https://example.com/a7d5645e-5cd7-4046-819f-a6a2933bafe3/?token=exp=1649405263~acl=/a7d5645e-5cd7-4046-819f-a6a2933bafe3/~hmac=a989cae5342f17013677f5a0e6577fc5594cc4e238fb4c95eda36634eb47018b
|
675
|
+
generator.generate_url("a7d5645e-5cd7-4046-819f-a6a2933bafe3", '/*/') ->
|
676
|
+
https://example.com/a7d5645e-5cd7-4046-819f-a6a2933bafe3/?token=exp=1649405263~acl=/*/~hmac=3ce1152c6af8864b36d4dc721f08ca3cf0b3a20278d7f849e82c6c930d48ccc1
|
677
|
+
```
|
662
678
|
## Useful links
|
663
679
|
|
664
680
|
* [Development](https://github.com/uploadcare/uploadcare-ruby/blob/main/DEVELOPMENT.md)
|
665
|
-
* [Uploadcare documentation](https://uploadcare.com/docs/?utm_source=github&utm_medium=referral&utm_campaign=uploadcare-ruby)
|
666
|
-
* [Upload API reference](https://uploadcare.com/api-refs/upload-api/?utm_source=github&utm_medium=referral&utm_campaign=uploadcare-ruby)
|
667
|
-
* [REST API reference](https://uploadcare.com/api-refs/rest-api/?utm_source=github&utm_medium=referral&utm_campaign=uploadcare-ruby)
|
668
|
-
* [Changelog](./CHANGELOG.md)
|
669
|
-
* [Contributing guide](https://github.com/uploadcare/.github/blob/master/CONTRIBUTING.md)
|
670
|
-
* [Security policy](https://github.com/uploadcare/uploadcare-ruby/security/policy)
|
671
|
-
* [Support](https://github.com/uploadcare/.github/blob/master/SUPPORT.md)
|
681
|
+
* [Uploadcare documentation](https://uploadcare.com/docs/?utm_source=github&utm_medium=referral&utm_campaign=uploadcare-ruby)
|
682
|
+
* [Upload API reference](https://uploadcare.com/api-refs/upload-api/?utm_source=github&utm_medium=referral&utm_campaign=uploadcare-ruby)
|
683
|
+
* [REST API reference](https://uploadcare.com/api-refs/rest-api/?utm_source=github&utm_medium=referral&utm_campaign=uploadcare-ruby)
|
684
|
+
* [Changelog](./CHANGELOG.md)
|
685
|
+
* [Contributing guide](https://github.com/uploadcare/.github/blob/master/CONTRIBUTING.md)
|
686
|
+
* [Security policy](https://github.com/uploadcare/uploadcare-ruby/security/policy)
|
687
|
+
* [Support](https://github.com/uploadcare/.github/blob/master/SUPPORT.md)
|
@@ -0,0 +1,53 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'base_generator'
|
4
|
+
|
5
|
+
module Uploadcare
|
6
|
+
module SignedUrlGenerators
|
7
|
+
class AmakaiGenerator < Uploadcare::SignedUrlGenerators::BaseGenerator
|
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
|
+
TEMPLATE = 'https://{cdn_host}/{uuid}/?token=exp={expiration}{delimiter}acl={acl}{delimiter}hmac={token}'
|
10
|
+
|
11
|
+
def generate_url(uuid, acl = uuid)
|
12
|
+
raise ArgumentError, 'Must contain valid UUID' unless valid?(uuid)
|
13
|
+
|
14
|
+
expire = build_expire
|
15
|
+
signature = build_signature(expire, acl)
|
16
|
+
|
17
|
+
TEMPLATE.gsub('{delimiter}', delimiter)
|
18
|
+
.sub('{cdn_host}', sanitized_string(cdn_host))
|
19
|
+
.sub('{uuid}', sanitized_string(uuid))
|
20
|
+
.sub('{acl}', "/#{sanitized_string(acl)}/")
|
21
|
+
.sub('{expiration}', expire)
|
22
|
+
.sub('{token}', signature)
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
def valid?(uuid)
|
28
|
+
uuid.match(UUID_REGEX)
|
29
|
+
end
|
30
|
+
|
31
|
+
def delimiter
|
32
|
+
'~'
|
33
|
+
end
|
34
|
+
|
35
|
+
def build_expire
|
36
|
+
(Time.now.to_i + ttl).to_s
|
37
|
+
end
|
38
|
+
|
39
|
+
def build_signature(expire, acl)
|
40
|
+
signature = ["exp=#{expire}", "acl=/#{sanitized_string(acl)}/"].join(delimiter)
|
41
|
+
OpenSSL::HMAC.hexdigest(algorithm, secret_key, signature)
|
42
|
+
end
|
43
|
+
|
44
|
+
# rubocop:disable Style/SlicingWithRange
|
45
|
+
def sanitized_string(string)
|
46
|
+
string = string[1..-1] if string[0] == '/'
|
47
|
+
string = string[0...-1] if string[-1] == '/'
|
48
|
+
string.strip
|
49
|
+
end
|
50
|
+
# rubocop:enable Style/SlicingWithRange
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Uploadcare
|
4
|
+
module SignedUrlGenerators
|
5
|
+
class BaseGenerator
|
6
|
+
attr_accessor :cdn_host, :ttl, :algorithm
|
7
|
+
attr_reader :secret_key
|
8
|
+
|
9
|
+
def initialize(cdn_host:, secret_key:, ttl: 300, algorithm: 'sha256')
|
10
|
+
@ttl = ttl
|
11
|
+
@algorithm = algorithm
|
12
|
+
@cdn_host = cdn_host
|
13
|
+
@secret_key = secret_key
|
14
|
+
end
|
15
|
+
|
16
|
+
def generate_url
|
17
|
+
raise NotImplementedError, "#{__method__} method not present"
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
data/lib/uploadcare.rb
CHANGED
@@ -23,23 +23,40 @@ require 'param/webhook_signature_verifier'
|
|
23
23
|
# General api
|
24
24
|
require 'api/api'
|
25
25
|
|
26
|
+
# SignedUrlGenerators
|
27
|
+
require 'signed_url_generators/amakai_generator'
|
28
|
+
require 'signed_url_generators/base_generator'
|
29
|
+
|
26
30
|
# Ruby wrapper for Uploadcare API
|
27
31
|
#
|
28
32
|
# @see https://uploadcare.com/docs/api_reference
|
29
33
|
module Uploadcare
|
30
34
|
extend Dry::Configurable
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
setting
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
setting :
|
35
|
+
|
36
|
+
# NOTE: The dry-configurable gem has introduced the `default` keyword argument
|
37
|
+
# and deprecated the positional default argument in v0.13.0, which requires
|
38
|
+
# Ruby >= 2.6.0. In order to provide backwards compatibility and not disable
|
39
|
+
# deprecation warnings, we override the dry-configurable's `setting` DSL method.
|
40
|
+
def self.setting(name, default:, **options, &block)
|
41
|
+
if RUBY_VERSION < '2.6'
|
42
|
+
super name, default, &block
|
43
|
+
else
|
44
|
+
super
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
setting :public_key, default: ENV.fetch('UPLOADCARE_PUBLIC_KEY')
|
49
|
+
setting :secret_key, default: ENV.fetch('UPLOADCARE_SECRET_KEY')
|
50
|
+
setting :auth_type, default: 'Uploadcare'
|
51
|
+
setting :multipart_size_threshold, default: 100 * 1024 * 1024
|
52
|
+
setting :rest_api_root, default: 'https://api.uploadcare.com'
|
53
|
+
setting :upload_api_root, default: 'https://upload.uploadcare.com'
|
54
|
+
setting :max_request_tries, default: 100
|
55
|
+
setting :base_request_sleep, default: 1 # seconds
|
56
|
+
setting :max_request_sleep, default: 60.0 # seconds
|
57
|
+
setting :sign_uploads, default: false
|
58
|
+
setting :upload_signature_lifetime, default: 30 * 60 # seconds
|
59
|
+
setting :max_throttle_attempts, default: 5
|
60
|
+
setting :upload_threads, default: 2 # used for multiupload only ATM
|
61
|
+
setting :framework_data, default: ''
|
45
62
|
end
|
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.2
|
4
|
+
version: 3.3.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stepan Redka
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-07-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: api_struct
|
@@ -216,6 +216,8 @@ files:
|
|
216
216
|
- lib/uploadcare/param/user_agent.rb
|
217
217
|
- lib/uploadcare/param/webhook_signature_verifier.rb
|
218
218
|
- lib/uploadcare/ruby/version.rb
|
219
|
+
- lib/uploadcare/signed_url_generators/amakai_generator.rb
|
220
|
+
- lib/uploadcare/signed_url_generators/base_generator.rb
|
219
221
|
- uploadcare-ruby.gemspec
|
220
222
|
homepage: https://github.com/uploadcare/uploadcare-ruby
|
221
223
|
licenses:
|