Compare commits

34 Commits

Author SHA1 Message Date
ce5f938938 Merge branch 'master' into stable 2022-05-13 19:30:43 +02:00
Greg Karékinian
2434c6e0b2 Merge branch 'master' into stable 2020-04-16 12:50:09 +02:00
Greg Karékinian
92e9e048a2 Merge branch 'master' into stable 2019-08-01 11:39:53 +02:00
Greg Karékinian
62f7d8790a Merge branch 'master' into stable 2019-02-07 11:02:05 +01:00
Greg Karékinian
acecb370c6 Merge branch 'master' into stable 2018-11-26 12:30:47 +01:00
Greg Karékinian
fbd8e994fb Merge branch 'master' into stable 2018-07-19 15:48:32 +02:00
Greg Karékinian
fa8a829ed9 Merge branch 'master' into stable 2018-05-23 11:14:48 +02:00
Greg Karékinian
eca4f1e1d7 Merge branch 'master' into stable 2018-01-05 13:46:28 +01:00
Greg Karékinian
eb7f39374c Merge branch 'master' into stable 2018-01-03 22:13:27 +01:00
Greg Karékinian
29c0d58c2a Merge branch 'master' into stable 2017-07-05 23:59:32 +02:00
Greg Karékinian
1b116cf65e Merge branch 'master' into stable 2016-12-15 18:19:48 +01:00
Greg Karékinian
28a6d1700b Merge branch 'master' into stable 2016-09-16 11:25:50 +02:00
Garret Alfert
4111cbdddf Merge branch 'master' into stable 2016-09-08 15:04:26 +02:00
Garret Alfert
04197a517e Merge branch 'master' into stable 2016-08-08 15:54:07 +02:00
Greg Karékinian
6a3181482d Merge branch 'master' into stable 2016-07-23 14:35:11 +02:00
Greg Karékinian
7110f8c315 Merge branch 'master' into stable 2016-07-21 15:13:22 +02:00
Garret Alfert
3fafac0d2d Merge branch 'master' into stable 2016-06-03 16:26:50 +02:00
Garret Alfert
51c1d0937a Merge branch 'master' into stable 2016-03-07 14:37:50 +01:00
Garret Alfert
c3d3e79bd7 Merge branch 'master' into stable 2016-03-04 23:13:24 +01:00
Garret Alfert
396a102755 Merge branch 'master' into stable 2016-03-03 12:00:19 +01:00
Greg Karékinian
6347433184 Fix .travis.yml file 2016-02-11 17:22:14 +01:00
Greg Karékinian
962a908a7a Force legacy Blue Box build for now on Travis 2016-02-11 17:22:02 +01:00
Greg Karékinian
d4b4b619e2 Change the way to load the Redis config to allow clusters 2016-02-11 16:49:03 +01:00
Greg Karékinian
1ce856919e Merge branch 'master' into stable 2015-11-24 15:38:15 +01:00
Greg Karékinian
64e6dc7992 Merge branch 'master' into stable 2015-09-30 16:22:20 +02:00
Greg Karékinian
031ce9453c Merge branch 'master' into stable 2015-09-29 15:04:48 +02:00
Greg Karékinian
9c1e19deb3 Merge branch 'master' into stable 2015-09-07 10:45:12 +02:00
Greg Karékinian
c40bb0ebf5 Merge branch 'master' into stable 2015-07-03 17:51:22 +02:00
Greg Karékinian
ca80b64111 Fix a regression with ETag and If-None-Match 2015-06-30 15:28:16 +02:00
Greg Karékinian
2a4d148cbb Really fix the directory listing for a user's root 2015-06-30 15:28:15 +02:00
Greg Karékinian
6430a4b605 Generate an ETag for a container's root 2015-06-30 15:28:15 +02:00
Greg Karékinian
9dda344b26 Fix root directory listing
It was flattened by accident

Refs #62
2015-06-30 15:28:07 +02:00
Greg Karékinian
207bb0efde Revert "Revert "Fix listing of a user's root directory""
This reverts commit 3ce3efd0fc.
2015-06-30 15:27:29 +02:00
Greg Karékinian
3ce3efd0fc Revert "Fix listing of a user's root directory"
This reverts commit 1cf99377dc.
2015-06-29 21:42:21 +02:00
10 changed files with 101 additions and 90 deletions

View File

@@ -11,11 +11,13 @@ permissions:
jobs: jobs:
test: test:
runs-on: ubuntu-latest runs-on: ubuntu-latest
strategy: strategy:
matrix: matrix:
ruby-version: ['2.7', '3.0', '3.1'] ruby-version: ['2.5', '2.6', '2.7']
redis-version: [6, 7] redis-version: [4, 5, 6]
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v3
- name: Set up Ruby - name: Set up Ruby
@@ -28,6 +30,6 @@ jobs:
with: with:
redis-version: ${{ matrix.redis-version }} redis-version: ${{ matrix.redis-version }}
- name: Configure - name: Configure
run: cp config.yml.erb.example config.yml.erb run: cp config.yml.example.s3 config.yml
- name: Run tests - name: Run tests
run: bundle exec rake test run: bundle exec rake test

1
.gitignore vendored
View File

@@ -1,5 +1,4 @@
config.yml config.yml
config.yml.erb
cs_credentials.json cs_credentials.json
pids pids
.bundle .bundle

View File

@@ -2,8 +2,8 @@ source "https://rubygems.org"
gem "sinatra", "~> 2.2.0" gem "sinatra", "~> 2.2.0"
gem "sinatra-contrib", "~> 2.2.0" gem "sinatra-contrib", "~> 2.2.0"
gem "activesupport", "~> 6.1.0" gem "activesupport", "~> 6.0.5"
gem "rest-client", "~> 2.1.0" gem "rest-client", "~> 2.1.0" # Fixes a memory leak in Ruby 2.4
gem "redis", "~> 4.6.0" gem "redis", "~> 4.6.0"
# Remove require when we can update to 3.0, which sets the new storage # Remove require when we can update to 3.0, which sets the new storage
# format to columnar by default. Increases performance # format to columnar by default. Increases performance
@@ -12,8 +12,8 @@ gem "mime-types"
group :test do group :test do
gem 'rake' gem 'rake'
gem 'rack-test' gem 'rack-test'
gem 'purdytest', :require => false
gem 'm' gem 'm'
gem 'minitest'
gem 'minitest-stub_any_instance' gem 'minitest-stub_any_instance'
gem 'webmock' gem 'webmock'
end end

View File

@@ -1,102 +1,102 @@
GEM GEM
remote: https://rubygems.org/ remote: https://rubygems.org/
specs: specs:
activesupport (6.1.7.6) activesupport (6.0.5)
concurrent-ruby (~> 1.0, >= 1.0.2) concurrent-ruby (~> 1.0, >= 1.0.2)
i18n (>= 1.6, < 2) i18n (>= 0.7, < 2)
minitest (>= 5.1) minitest (~> 5.1)
tzinfo (~> 2.0) tzinfo (~> 1.1)
zeitwerk (~> 2.3) zeitwerk (~> 2.2, >= 2.2.2)
addressable (2.8.5) addressable (2.8.0)
public_suffix (>= 2.0.2, < 6.0) public_suffix (>= 2.0.2, < 5.0)
base64 (0.1.1) concurrent-ruby (1.1.10)
concurrent-ruby (1.2.2) crack (0.4.3)
crack (0.4.5) safe_yaml (~> 1.0.0)
rexml
domain_name (0.5.20190701) domain_name (0.5.20190701)
unf (>= 0.0.5, < 1.0.0) unf (>= 0.0.5, < 1.0.0)
faraday (2.7.11) faraday (0.17.0)
base64 multipart-post (>= 1.2, < 3)
faraday-net_http (>= 2.0, < 3.1) hashdiff (1.0.0)
ruby2_keywords (>= 0.0.4)
faraday-net_http (3.0.2)
hashdiff (1.0.1)
http-accept (1.7.0) http-accept (1.7.0)
http-cookie (1.0.5) http-cookie (1.0.3)
domain_name (~> 0.5) domain_name (~> 0.5)
i18n (1.14.1) i18n (1.10.0)
concurrent-ruby (~> 1.0) concurrent-ruby (~> 1.0)
kgio (2.11.4) kgio (2.11.2)
m (1.6.2) m (1.5.1)
method_source (>= 0.6.7) method_source (>= 0.6.7)
rake (>= 0.9.2.2) rake (>= 0.9.2.2)
method_source (1.0.0) method_source (0.9.2)
mime-types (3.5.1) mime-types (3.3)
mime-types-data (~> 3.2015) mime-types-data (~> 3.2015)
mime-types-data (3.2023.1003) mime-types-data (3.2019.1009)
minitest (5.20.0) minitest (5.13.0)
minitest-stub_any_instance (1.0.3) minitest-stub_any_instance (1.0.2)
multi_json (1.15.0) multi_json (1.15.0)
mustermann (2.0.2) multipart-post (2.1.1)
mustermann (1.1.1)
ruby2_keywords (~> 0.0.1) ruby2_keywords (~> 0.0.1)
netrc (0.11.0) netrc (0.11.0)
public_suffix (5.0.3) public_suffix (4.0.1)
rack (2.2.8) purdytest (2.0.0)
rack-protection (2.2.4) minitest (~> 5.5)
rack (2.2.3)
rack-protection (2.2.0)
rack rack
rack-test (2.1.0) rack-test (1.1.0)
rack (>= 1.3) rack (>= 1.0, < 3)
rainbows (5.2.1) rainbows (5.2.0)
kgio (~> 2.5) kgio (~> 2.5)
rack (>= 1.1, < 3.0) rack (>= 1.1, < 3.0)
unicorn (~> 5.1) unicorn (~> 5.1)
raindrops (0.20.1) raindrops (0.19.0)
rake (13.0.6) rake (13.0.1)
redis (4.6.0) redis (4.6.0)
rest-client (2.1.0) rest-client (2.1.0)
http-accept (>= 1.7.0, < 2.0) http-accept (>= 1.7.0, < 2.0)
http-cookie (>= 1.0.2, < 2.0) http-cookie (>= 1.0.2, < 2.0)
mime-types (>= 1.16, < 4.0) mime-types (>= 1.16, < 4.0)
netrc (~> 0.8) netrc (~> 0.8)
rexml (3.2.6)
ruby2_keywords (0.0.5) ruby2_keywords (0.0.5)
sentry-raven (3.1.2) safe_yaml (1.0.5)
faraday (>= 1.0) sentry-raven (2.12.3)
sinatra (2.2.4) faraday (>= 0.7.6, < 1.0)
mustermann (~> 2.0) sinatra (2.2.0)
mustermann (~> 1.0)
rack (~> 2.2) rack (~> 2.2)
rack-protection (= 2.2.4) rack-protection (= 2.2.0)
tilt (~> 2.0) tilt (~> 2.0)
sinatra-contrib (2.2.4) sinatra-contrib (2.2.0)
multi_json multi_json
mustermann (~> 2.0) mustermann (~> 1.0)
rack-protection (= 2.2.4) rack-protection (= 2.2.0)
sinatra (= 2.2.4) sinatra (= 2.2.0)
tilt (~> 2.0) tilt (~> 2.0)
tilt (2.3.0) thread_safe (0.3.6)
tzinfo (2.0.6) tilt (2.0.10)
concurrent-ruby (~> 1.0) tzinfo (1.2.9)
thread_safe (~> 0.1)
unf (0.1.4) unf (0.1.4)
unf_ext unf_ext
unf_ext (0.0.8.2) unf_ext (0.0.7.6)
unicorn (5.8.0) unicorn (5.5.1)
kgio (~> 2.6) kgio (~> 2.6)
raindrops (~> 0.7) raindrops (~> 0.7)
webmock (3.19.1) webmock (3.7.6)
addressable (>= 2.8.0) addressable (>= 2.3.6)
crack (>= 0.3.2) crack (>= 0.3.2)
hashdiff (>= 0.4.0, < 2.0.0) hashdiff (>= 0.4.0, < 2.0.0)
zeitwerk (2.6.12) zeitwerk (2.5.4)
PLATFORMS PLATFORMS
ruby ruby
DEPENDENCIES DEPENDENCIES
activesupport (~> 6.1.0) activesupport (~> 6.0.5)
m m
mime-types mime-types
minitest
minitest-stub_any_instance minitest-stub_any_instance
purdytest
rack-test rack-test
rainbows rainbows
rake rake
@@ -108,4 +108,4 @@ DEPENDENCIES
webmock webmock
BUNDLED WITH BUNDLED WITH
2.3.7 1.16.0

View File

@@ -1,17 +0,0 @@
development: &defaults
maintenance: false
redis:
host: <%= ENV["REDIS_HOST"] || "localhost" %>
port: <%= ENV["REDIS_PORT"] || "6379" %>
s3: &s3_defaults
endpoint: <%= ENV["S3_ENDPOINT"] || "http://127.0.0.1:9000" %>
region: <%= ENV["S3_REGION"] %>
access_key_id: <%= ENV["S3_ACCESS_KEY"] || "minioadmin" %>
secret_key_id: <%= ENV["S3_SECRET_KEY"] || "minioadmin" %>
bucket: <%= ENV["S3_BUCKET"] || "rs-development" %>
test:
<<: *defaults
staging:
<<: *defaults
production:
<<: *defaults

26
config.yml.example.s3 Normal file
View File

@@ -0,0 +1,26 @@
development: &defaults
maintenance: false
s3:
endpoint: "https://some-endpoint"
region: "region"
access_key_id: ""
secret_key_id: ""
bucket: "test-bucket"
redis:
host: localhost
port: 6379
test:
<<: *defaults
s3:
endpoint: "https://some-endpoint"
region: "region"
access_key_id: ""
secret_key_id: ""
bucket: "test-bucket"
staging:
<<: *defaults
production:
<<: *defaults

View File

@@ -1,8 +1,8 @@
require "remote_storage/rest_provider" require "remote_storage/rest_provider"
require "digest" require "digest"
require "base64" require "base64"
require "cgi"
require "openssl" require "openssl"
require "webrick/httputils"
module RemoteStorage module RemoteStorage
class S3 class S3
@@ -92,7 +92,7 @@ module RemoteStorage
end end
def uri_escape(s) def uri_escape(s)
CGI.escape(s).gsub('%5B', '[').gsub('%5D', ']') WEBrick::HTTPUtils.escape(s).gsub('%5B', '[').gsub('%5D', ']')
end end
def generate_s3_signature(http_verb, md5, content_type, date, url) def generate_s3_signature(http_verb, md5, content_type, date, url)
@@ -106,7 +106,7 @@ module RemoteStorage
end end
def container_url_for(user) def container_url_for(user)
"#{base_url}/#{settings.s3["bucket"]}/#{user}" "#{base_url}#{settings.s3["bucket"]}/#{user}"
end end
end end

View File

@@ -18,7 +18,7 @@ class LiquorCabinet < Sinatra::Base
register Sinatra::ConfigFile register Sinatra::ConfigFile
set :environments, %w{development test production staging} set :environments, %w{development test production staging}
config_file 'config.yml.erb' config_file 'config.yml'
end end
configure :development do configure :development do

View File

@@ -2,7 +2,7 @@ require_relative "../spec_helper"
describe "S3 provider" do describe "S3 provider" do
def container_url_for(user) def container_url_for(user)
"#{app.settings.s3["endpoint"]}/#{app.settings.s3["bucket"]}/#{user}" "#{app.settings.s3["endpoint"]}#{app.settings.s3["bucket"]}/#{user}"
end end
def storage_class def storage_class

View File

@@ -8,6 +8,7 @@ require_relative '../liquor-cabinet'
require 'minitest/autorun' require 'minitest/autorun'
require "minitest/stub_any_instance" require "minitest/stub_any_instance"
require 'rack/test' require 'rack/test'
require 'purdytest'
require "redis" require "redis"
require "rest_client" require "rest_client"
require "ostruct" require "ostruct"
@@ -35,22 +36,22 @@ if app.settings.respond_to? :redis
end end
end end
Minitest::Spec.class_eval do MiniTest::Spec.class_eval do
def self.shared_examples def self.shared_examples
@shared_examples ||= {} @shared_examples ||= {}
end end
end end
module Minitest::Spec::SharedExamples module MiniTest::Spec::SharedExamples
def shared_examples_for(desc, &block) def shared_examples_for(desc, &block)
Minitest::Spec.shared_examples[desc] = block MiniTest::Spec.shared_examples[desc] = block
end end
def it_behaves_like(desc) def it_behaves_like(desc)
self.instance_eval(&Minitest::Spec.shared_examples[desc]) self.instance_eval(&MiniTest::Spec.shared_examples[desc])
end end
end end
Object.class_eval { include(Minitest::Spec::SharedExamples) } Object.class_eval { include(MiniTest::Spec::SharedExamples) }
require_relative 'shared_examples' require_relative 'shared_examples'