tus-server 2.1.1 → 2.1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 69d128e57072bd02cb340fa74fadce8b325a8163bfae16d96acfa17770ae2bd1
4
- data.tar.gz: 46fd5fba0d0fde85385564ad46aa1ad71ed16dcb84022d7947a7970ac1bf40e0
3
+ metadata.gz: c0caef3d7cfbadc9b74678f99e687c0fe51bfbbab77acece73e9e1332aaa8661
4
+ data.tar.gz: 8be7b8e4ef8c2c6a5bc58ca11417c88b743b54252da7a3481f3866a591ef5abf
5
5
  SHA512:
6
- metadata.gz: 02df94c40fe475de5c3b9e23e0089a827aed7f8970a6c248abe8e64106b5d4babb5f957bfadfe7571e16eaf41ba50f0d5c3d9cfcdf63e8567cf0e9e79318ffec
7
- data.tar.gz: 47d2d27bbb014e489d6393af0d5e03c2583f78cb4d913c0d19a664150754f7de4d77bf21313c24072538b11735ad10a98c45ec8daa6f84324a0dad331aa0dfc8
6
+ metadata.gz: 65e6d0496407297529e55063bbb27036d08697a986291dd08299e8994bbbeb6329d15dac4fa6a1137364e126379ae2fcd8c23df5500e0cb8c5e60074265070ae
7
+ data.tar.gz: b3328632108adeaf10761b3df9ab6ad9e957fe48a4b4ab92cccfaa36221f0c99be142af08ced374cbf1ab460e0b6622f0d964be55636683438b9c473e3533263
@@ -1,4 +1,8 @@
1
- ## 2.1.1 (2018-15-26)
1
+ ## 2.1.2 (2018-10-21)
2
+
3
+ * Make tus-ruby-server fully work with non-rewindable Rack input (@janko-m)
4
+
5
+ ## 2.1.1 (2018-05-26)
2
6
 
3
7
  * Rename `:download_url` option to `:redirect_download` (@janko-m)
4
8
 
data/README.md CHANGED
@@ -258,6 +258,55 @@ can for example change the `:endpoint` to use S3's accelerate host:
258
258
  Tus::Storage::S3.new(endpoint: "https://s3-accelerate.amazonaws.com", **options)
259
259
  ```
260
260
 
261
+ ### Google Cloud Storage, Microsoft Azure Blob Storage
262
+
263
+ While tus-ruby-server doesn't currently ship with integrations for Google Cloud
264
+ Storage or Microsoft Azure Blob Storage, you can still use these services via
265
+ **[Minio]**.
266
+
267
+ Minio is an open source distributed object storage server that implements the
268
+ Amazon S3 API and provides gateways for [GCP][minio gcp] and [Azure][minio
269
+ azure]. This means it's possible to use the existing S3 tus-ruby-server
270
+ integration to point to the Minio server, which will then in turn forward those
271
+ calls to GCP or Azure.
272
+
273
+ Let's begin by installing Minio via Homebrew:
274
+
275
+ ```sh
276
+ $ brew install minio/stable/minio
277
+ ```
278
+
279
+ And starting the Minio server as a gateway to GCP or Azure:
280
+
281
+ ```sh
282
+ # Google Cloud Storage
283
+ $ export GOOGLE_APPLICATION_CREDENTIALS=/path/credentials.json
284
+ $ export MINIO_ACCESS_KEY=minioaccesskey
285
+ $ export MINIO_SECRET_KEY=miniosecretkey
286
+ $ minio gateway gcs yourprojectid
287
+ ```
288
+ ```sh
289
+ # Microsoft Azure Blob Storage
290
+ $ export MINIO_ACCESS_KEY=azureaccountname
291
+ $ export MINIO_SECRET_KEY=azureaccountkey
292
+ $ minio gateway azure
293
+ ```
294
+
295
+ Now follow the displayed link to open the Minio web UI and create a bucket in
296
+ which you want your files to be stored. Once you've done that, you can
297
+ initialize `Tus::Storage::S3` to point to your Minio server and bucket:
298
+
299
+ ```rb
300
+ Tus::Storage::S3.new(
301
+ access_key_id: "<MINIO_ACCESS_KEY>", # "AccessKey" value
302
+ secret_access_key: "<MINIO_SECRET_KEY>", # "SecretKey" value
303
+ endpoint: "<MINIO_ENDPOINT>", # "Endpoint" value
304
+ bucket: "<MINIO_BUCKET>", # name of the bucket you created
305
+ region: "us-east-1",
306
+ force_path_style: true,
307
+ )
308
+ ```
309
+
261
310
  ### MongoDB GridFS
262
311
 
263
312
  MongoDB has a specification for storing and retrieving large files, called
@@ -391,7 +440,7 @@ Set `MONGO=1` environment variable if you want to also run MongoDB tests.
391
440
 
392
441
  ## Inspiration
393
442
 
394
- The tus-ruby-server was inspired by [rubytus].
443
+ The tus-ruby-server was inspired by [rubytus] and [tusd].
395
444
 
396
445
  ## License
397
446
 
@@ -420,3 +469,7 @@ The tus-ruby-server was inspired by [rubytus].
420
469
  [Rack::Sendfile]: https://www.rubydoc.info/github/rack/rack/master/Rack/Sendfile
421
470
  [`Aws::S3::Object#get`]: https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/S3/Object.html#get-instance_method
422
471
  [shrine resumable walkthrough]: https://github.com/shrinerb/shrine/wiki/Adding-Resumable-Uploads
472
+ [Minio]: https://minio.io
473
+ [minio gcp]: https://minio.io/gcp.html
474
+ [minio azure]: https://minio.io/azure.html
475
+ [tusd]: https://github.com/tus/tusd
@@ -35,6 +35,12 @@ module Tus
35
35
  @pos = 0
36
36
  end
37
37
 
38
+ def rewindable?
39
+ @input.is_a?(Tempfile) || # Puma, Thin
40
+ @input.is_a?(StringIO) || # WEBRick, Puma, Thin
41
+ @input.class.name.end_with?("TeeInput") # Unicorn, Passenger
42
+ end
43
+
38
44
  def close
39
45
  # Rack input shouldn't be closed, we just support the interface
40
46
  end
@@ -10,6 +10,8 @@ require "tus/errors"
10
10
  require "securerandom"
11
11
  require "time"
12
12
 
13
+ require "rack/rewindable_input"
14
+
13
15
  module Tus
14
16
  class Server < Roda
15
17
  SUPPORTED_VERSIONS = ["1.0.0"]
@@ -135,9 +137,13 @@ module Tus
135
137
  validate_content_type!
136
138
  validate_upload_offset!(info)
137
139
  validate_content_length!(request.content_length.to_i, info) if request.content_length
138
- validate_upload_checksum!(input) if request.headers["Upload-Checksum"]
139
140
 
140
141
  begin
142
+ if request.headers["Upload-Checksum"]
143
+ input = Rack::RewindableInput.new(input) unless input.rewindable?
144
+ validate_upload_checksum!(input)
145
+ end
146
+
141
147
  bytes_uploaded = storage.patch_file(uid, input, info.to_h)
142
148
  rescue Tus::MaxSizeExceeded
143
149
  validate_content_length!(input.pos, info)
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |gem|
2
2
  gem.name = "tus-server"
3
- gem.version = "2.1.1"
3
+ gem.version = "2.1.2"
4
4
 
5
5
  gem.required_ruby_version = ">= 2.2"
6
6
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tus-server
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.1
4
+ version: 2.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Janko Marohnić
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-05-26 00:00:00.000000000 Z
11
+ date: 2018-10-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: roda