cloudimage 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +12 -1
- data/README.md +32 -0
- data/lib/cloudimage/client.rb +22 -8
- data/lib/cloudimage/params.rb +27 -0
- data/lib/cloudimage/uri.rb +41 -10
- data/lib/cloudimage/version.rb +1 -1
- metadata +6 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: abb64d67ac6a4a0d7e87cd0758c94497b1c31a96f4dcfc9a4d10d2b66e4460b6
|
4
|
+
data.tar.gz: f12f312eea0653ee858bcc0c124a842a574ee6e63b820832c93f275687d463e3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ec3ede4d88539362085fe46726453aa9fca339bb875a2071c897d4797a093aef6caec2805e2927f363d0ea27f21ef319634513fc855e748b76366399840cb6aa
|
7
|
+
data.tar.gz: d292ff52e7d4219bdbf3a0668c22f9c26da414bc187246eeb97caf550c80762a54462f5752da08312f94233caa87c5a09c156519e94093e1e3d0ee833cf4093b
|
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,17 @@
|
|
1
1
|
## master
|
2
2
|
|
3
|
-
## 0.
|
3
|
+
## 0.2.0 (2020-06-28)
|
4
|
+
|
5
|
+
- URL signatures.
|
6
|
+
[#6](https://github.com/scaleflex/cloudimage-rb/pull/6) (@janklimo)
|
7
|
+
- Added the remaining API params so that they can be used as helpers.
|
8
|
+
[#7](https://github.com/scaleflex/cloudimage-rb/pull/7) (@janklimo)
|
9
|
+
- We don't run `rubocop` on `truffleruby` anymore.
|
10
|
+
It [is not officially supported](https://docs.rubocop.org/rubocop/compatibility.html)
|
11
|
+
and leads to [unexpected issues](https://github.com/scaleflex/cloudimage-rb/runs/815208955?check_suite_focus=true).
|
12
|
+
[#7](https://github.com/scaleflex/cloudimage-rb/pull/7) (@janklimo)
|
13
|
+
|
14
|
+
## 0.1.0 (2020-06-09)
|
4
15
|
|
5
16
|
- Introduce base models: `Cloudimage::Client`, and `Cloudimage::URI`. Generate
|
6
17
|
URLs via `to_url` method. Add support for image resizing params.
|
data/README.md
CHANGED
@@ -14,7 +14,9 @@ Supports Ruby `2.4` and above, `JRuby`, and `TruffleRuby`.
|
|
14
14
|
- [Chainable helpers](#chainable-helpers)
|
15
15
|
- [Aliases](#aliases)
|
16
16
|
- [Custom helpers](#custom-helpers)
|
17
|
+
- [Security](#security)
|
17
18
|
- [Development](#development)
|
19
|
+
- [TODOs](#todos)
|
18
20
|
- [Contributing](#contributing)
|
19
21
|
- [License](#license)
|
20
22
|
- [Code of Conduct](#code-of-conduct)
|
@@ -49,6 +51,15 @@ object:
|
|
49
51
|
client = Cloudimage::Client.new(token: 'mysecrettoken')
|
50
52
|
```
|
51
53
|
|
54
|
+
Cloudimage client accepts the following options:
|
55
|
+
|
56
|
+
| Option | Required? | Additional info |
|
57
|
+
| ------------------ | --------- | --------------------------------------------------- |
|
58
|
+
| `token` | Yes | |
|
59
|
+
| `salt` | No | See [Security](#security). |
|
60
|
+
| `signature_length` | No | Integer value in the range `6..40`. Defaults to 18. |
|
61
|
+
| `api_version` | No | Defaults to the current stable version. |
|
62
|
+
|
52
63
|
Calling `path` on the client object returns an instance of `Cloudimage::URI`.
|
53
64
|
It accepts path to the image as a string and we we will use it to build
|
54
65
|
Cloudimage URLs.
|
@@ -108,6 +119,20 @@ need to accept arguments and will be translated into `param=1` in the final URL.
|
|
108
119
|
For a list of custom helpers available to you, please consult
|
109
120
|
[`Cloudimage::CustomHelpers`](lib/cloudimage/custom_helpers.rb) module.
|
110
121
|
|
122
|
+
### Security
|
123
|
+
|
124
|
+
If `salt` is defined, all URLs will be signed.
|
125
|
+
|
126
|
+
You can control the length of the generated signature by specifying `signature_length`
|
127
|
+
when initializing the client.
|
128
|
+
|
129
|
+
```ruby
|
130
|
+
client = Cloudimage::Client.new(token: 'mysecrettoken', salt: 'mysecretsalt', signature_length: 10)
|
131
|
+
uri = client.path('/assets/image.png')
|
132
|
+
uri.w(200).h(400).to_url
|
133
|
+
# => "https://mysecrettoken.cloudimg.io/v7/assets/image.png?h=400&w=200&ci_sign=79cfbc458b"
|
134
|
+
```
|
135
|
+
|
111
136
|
## Development
|
112
137
|
|
113
138
|
After checking out the repo, run `bin/setup` to install dependencies.
|
@@ -115,6 +140,13 @@ Then, run `bundle exec rake` to run the tests. You can also run
|
|
115
140
|
`bin/console` for an interactive prompt that will allow you to
|
116
141
|
experiment.
|
117
142
|
|
143
|
+
### TODOs
|
144
|
+
|
145
|
+
- URL sealing
|
146
|
+
- Add support for custom CNAMEs
|
147
|
+
- `srcset` generation
|
148
|
+
- Purge cache API
|
149
|
+
|
118
150
|
## Contributing
|
119
151
|
|
120
152
|
Bug reports and pull requests are welcome. This project is intended
|
data/lib/cloudimage/client.rb
CHANGED
@@ -6,30 +6,44 @@ module Cloudimage
|
|
6
6
|
class InvalidConfig < StandardError; end
|
7
7
|
|
8
8
|
class Client
|
9
|
-
attr_reader :
|
9
|
+
attr_reader :config
|
10
10
|
|
11
11
|
API_VERSION = 'v7'
|
12
|
+
DEFAULT_SIGNATURE_LENGTH = 18
|
12
13
|
|
13
|
-
def initialize(
|
14
|
-
@
|
14
|
+
def initialize(**options)
|
15
|
+
@config = {}
|
16
|
+
@config[:token] = options[:token]
|
17
|
+
@config[:salt] = options[:salt]
|
18
|
+
@config[:signature_length] =
|
19
|
+
options[:signature_length] || DEFAULT_SIGNATURE_LENGTH
|
20
|
+
@config[:api_version] = API_VERSION
|
15
21
|
|
16
22
|
ensure_valid_config
|
17
23
|
end
|
18
24
|
|
19
25
|
def path(path)
|
20
|
-
URI.new(
|
26
|
+
URI.new(path, **config)
|
21
27
|
end
|
22
28
|
|
23
29
|
private
|
24
30
|
|
25
|
-
def
|
26
|
-
|
31
|
+
def ensure_valid_config
|
32
|
+
ensure_valid_token
|
33
|
+
ensure_valid_signature_length
|
27
34
|
end
|
28
35
|
|
29
|
-
def
|
30
|
-
return unless token.
|
36
|
+
def ensure_valid_token
|
37
|
+
return unless config[:token].nil?
|
31
38
|
|
32
39
|
raise InvalidConfig, 'Please specify your Cloudimage customer token.'
|
33
40
|
end
|
41
|
+
|
42
|
+
def ensure_valid_signature_length
|
43
|
+
return if config[:salt].nil?
|
44
|
+
return if (6..40).cover? config[:signature_length]
|
45
|
+
|
46
|
+
raise InvalidConfig, 'Signature length must be must be 6-40 characters.'
|
47
|
+
end
|
34
48
|
end
|
35
49
|
end
|
data/lib/cloudimage/params.rb
CHANGED
@@ -18,18 +18,45 @@ module Cloudimage
|
|
18
18
|
bg_colourise
|
19
19
|
bg_img_fit
|
20
20
|
bg_opacity
|
21
|
+
blur
|
22
|
+
blur_faces
|
21
23
|
br_px
|
24
|
+
bright
|
22
25
|
ci_info
|
26
|
+
contrast
|
27
|
+
doc_page
|
28
|
+
f
|
29
|
+
force_format
|
23
30
|
func
|
24
31
|
gravity
|
32
|
+
gray
|
33
|
+
grey
|
25
34
|
h
|
26
35
|
height
|
36
|
+
optipress
|
27
37
|
org_if_sml
|
38
|
+
p
|
39
|
+
pixelate
|
40
|
+
pixellate
|
41
|
+
process
|
42
|
+
q
|
28
43
|
r
|
44
|
+
radius
|
29
45
|
sharp
|
30
46
|
tl_px
|
31
47
|
trim
|
32
48
|
w
|
49
|
+
wat
|
50
|
+
wat_color
|
51
|
+
wat_colour
|
52
|
+
wat_url
|
53
|
+
wat_font
|
54
|
+
wat_fontsize
|
55
|
+
wat_gravity
|
56
|
+
wat_opacity
|
57
|
+
wat_pad
|
58
|
+
wat_scale
|
59
|
+
wat_text
|
33
60
|
width
|
34
61
|
].freeze
|
35
62
|
end
|
data/lib/cloudimage/uri.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require 'digest'
|
4
|
+
|
3
5
|
require_relative 'params'
|
4
6
|
require_relative 'custom_helpers'
|
5
7
|
|
@@ -8,12 +10,12 @@ module Cloudimage
|
|
8
10
|
include Params
|
9
11
|
include CustomHelpers
|
10
12
|
|
11
|
-
attr_reader :uri, :params
|
13
|
+
attr_reader :uri, :params, :config
|
12
14
|
|
13
|
-
def initialize(
|
14
|
-
|
15
|
-
@uri = Addressable::URI.parse(base_url + path)
|
15
|
+
def initialize(path, **config)
|
16
|
+
@config = config
|
16
17
|
@params = {}
|
18
|
+
@uri = build_uri_from(path)
|
17
19
|
end
|
18
20
|
|
19
21
|
PARAMS.each do |param|
|
@@ -32,16 +34,45 @@ module Cloudimage
|
|
32
34
|
alias_method from, to
|
33
35
|
end
|
34
36
|
|
35
|
-
def to_url(extra_params
|
36
|
-
|
37
|
-
|
38
|
-
uri.to_s
|
37
|
+
def to_url(**extra_params)
|
38
|
+
set_uri_params(**extra_params)
|
39
|
+
sign_url
|
39
40
|
end
|
40
41
|
|
41
42
|
private
|
42
43
|
|
43
|
-
def
|
44
|
-
|
44
|
+
def base_url
|
45
|
+
"https://#{config[:token]}.cloudimg.io"
|
46
|
+
end
|
47
|
+
|
48
|
+
def base_url_with_api_version
|
49
|
+
"#{base_url}/#{config[:api_version]}"
|
50
|
+
end
|
51
|
+
|
52
|
+
def build_uri_from(path)
|
53
|
+
formatted_path = path.start_with?('/') ? path : "/#{path}"
|
54
|
+
Addressable::URI.parse(base_url_with_api_version + formatted_path)
|
55
|
+
end
|
56
|
+
|
57
|
+
def set_uri_params(**extra_params)
|
58
|
+
url_params = params.merge(**extra_params)
|
59
|
+
return unless url_params.any?
|
60
|
+
|
61
|
+
uri.query_values = url_params
|
62
|
+
end
|
63
|
+
|
64
|
+
def sign_url
|
65
|
+
url = uri.to_s
|
66
|
+
|
67
|
+
return url if config[:salt].nil?
|
68
|
+
|
69
|
+
url + "#{uri.query_values ? '&' : '?'}ci_sign=#{signature}"
|
70
|
+
end
|
71
|
+
|
72
|
+
def signature
|
73
|
+
path = uri.to_s.sub(base_url_with_api_version, '')
|
74
|
+
digest = Digest::SHA1.hexdigest(config[:salt] + path)
|
75
|
+
digest[0..(config[:signature_length] - 1)]
|
45
76
|
end
|
46
77
|
end
|
47
78
|
end
|
data/lib/cloudimage/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cloudimage
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jan Klimo
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-06-
|
11
|
+
date: 2020-06-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: addressable
|
@@ -51,7 +51,7 @@ metadata:
|
|
51
51
|
changelog_uri: https://github.com/scaleflex/cloudimage-rb/blob/master/CHANGELOG.md
|
52
52
|
source_code_uri: https://github.com/scaleflex/cloudimage-rb
|
53
53
|
documentation_uri: https://docs.cloudimage.io/go/cloudimage-documentation-v7/en/introduction
|
54
|
-
post_install_message:
|
54
|
+
post_install_message:
|
55
55
|
rdoc_options: []
|
56
56
|
require_paths:
|
57
57
|
- lib
|
@@ -66,8 +66,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
66
66
|
- !ruby/object:Gem::Version
|
67
67
|
version: '0'
|
68
68
|
requirements: []
|
69
|
-
rubygems_version: 3.1.
|
70
|
-
signing_key:
|
69
|
+
rubygems_version: 3.1.4
|
70
|
+
signing_key:
|
71
71
|
specification_version: 4
|
72
72
|
summary: Official API wrapper for Cloudimage's API.
|
73
73
|
test_files: []
|