Compare commits
34 Commits
273768ea69
...
stable
| Author | SHA1 | Date | |
|---|---|---|---|
|
ce5f938938
|
|||
|
|
2434c6e0b2 | ||
|
|
92e9e048a2 | ||
|
|
62f7d8790a | ||
|
|
acecb370c6 | ||
|
|
fbd8e994fb | ||
|
|
fa8a829ed9 | ||
|
|
eca4f1e1d7 | ||
|
|
eb7f39374c | ||
|
|
29c0d58c2a | ||
|
|
1b116cf65e | ||
|
|
28a6d1700b | ||
|
|
4111cbdddf | ||
|
|
04197a517e | ||
|
|
6a3181482d | ||
|
|
7110f8c315 | ||
|
|
3fafac0d2d | ||
|
|
51c1d0937a | ||
|
|
c3d3e79bd7 | ||
|
|
396a102755 | ||
|
|
6347433184 | ||
|
|
962a908a7a | ||
|
|
d4b4b619e2 | ||
|
|
1ce856919e | ||
|
|
64e6dc7992 | ||
|
|
031ce9453c | ||
|
|
9c1e19deb3 | ||
|
|
c40bb0ebf5 | ||
|
|
ca80b64111 | ||
|
|
2a4d148cbb | ||
|
|
6430a4b605 | ||
|
|
9dda344b26 | ||
|
|
207bb0efde | ||
|
|
3ce3efd0fc |
8
.github/workflows/ruby.yml
vendored
8
.github/workflows/ruby.yml
vendored
@@ -11,11 +11,13 @@ permissions:
|
||||
|
||||
jobs:
|
||||
test:
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
ruby-version: ['2.7', '3.0', '3.1']
|
||||
redis-version: [6, 7]
|
||||
ruby-version: ['2.5', '2.6', '2.7']
|
||||
redis-version: [4, 5, 6]
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- name: Set up Ruby
|
||||
@@ -28,6 +30,6 @@ jobs:
|
||||
with:
|
||||
redis-version: ${{ matrix.redis-version }}
|
||||
- name: Configure
|
||||
run: cp config.yml.erb.example config.yml.erb
|
||||
run: cp config.yml.example.s3 config.yml
|
||||
- name: Run tests
|
||||
run: bundle exec rake test
|
||||
|
||||
1
.gitignore
vendored
1
.gitignore
vendored
@@ -1,5 +1,4 @@
|
||||
config.yml
|
||||
config.yml.erb
|
||||
cs_credentials.json
|
||||
pids
|
||||
.bundle
|
||||
|
||||
14
Dockerfile
14
Dockerfile
@@ -1,14 +0,0 @@
|
||||
# FROM ruby:3.1.4
|
||||
FROM ruby:2.7.8
|
||||
|
||||
WORKDIR /liquorcabinet
|
||||
ENV RACK_ENV=staging
|
||||
|
||||
COPY Gemfile Gemfile.lock /liquorcabinet/
|
||||
RUN bundle install
|
||||
COPY . /liquorcabinet
|
||||
COPY ./config.yml.erb.example /liquorcabinet/config.yml.erb
|
||||
|
||||
EXPOSE 4567
|
||||
|
||||
CMD ["bundle", "exec", "rainbows", "--listen", "0.0.0.0:4567"]
|
||||
6
Gemfile
6
Gemfile
@@ -2,8 +2,8 @@ source "https://rubygems.org"
|
||||
|
||||
gem "sinatra", "~> 2.2.0"
|
||||
gem "sinatra-contrib", "~> 2.2.0"
|
||||
gem "activesupport", "~> 6.1.0"
|
||||
gem "rest-client", "~> 2.1.0"
|
||||
gem "activesupport", "~> 6.0.5"
|
||||
gem "rest-client", "~> 2.1.0" # Fixes a memory leak in Ruby 2.4
|
||||
gem "redis", "~> 4.6.0"
|
||||
# Remove require when we can update to 3.0, which sets the new storage
|
||||
# format to columnar by default. Increases performance
|
||||
@@ -12,8 +12,8 @@ gem "mime-types"
|
||||
group :test do
|
||||
gem 'rake'
|
||||
gem 'rack-test'
|
||||
gem 'purdytest', :require => false
|
||||
gem 'm'
|
||||
gem 'minitest'
|
||||
gem 'minitest-stub_any_instance'
|
||||
gem 'webmock'
|
||||
end
|
||||
|
||||
112
Gemfile.lock
112
Gemfile.lock
@@ -1,102 +1,102 @@
|
||||
GEM
|
||||
remote: https://rubygems.org/
|
||||
specs:
|
||||
activesupport (6.1.7.6)
|
||||
activesupport (6.0.5)
|
||||
concurrent-ruby (~> 1.0, >= 1.0.2)
|
||||
i18n (>= 1.6, < 2)
|
||||
minitest (>= 5.1)
|
||||
tzinfo (~> 2.0)
|
||||
zeitwerk (~> 2.3)
|
||||
addressable (2.8.5)
|
||||
public_suffix (>= 2.0.2, < 6.0)
|
||||
base64 (0.1.1)
|
||||
concurrent-ruby (1.2.2)
|
||||
crack (0.4.5)
|
||||
rexml
|
||||
i18n (>= 0.7, < 2)
|
||||
minitest (~> 5.1)
|
||||
tzinfo (~> 1.1)
|
||||
zeitwerk (~> 2.2, >= 2.2.2)
|
||||
addressable (2.8.0)
|
||||
public_suffix (>= 2.0.2, < 5.0)
|
||||
concurrent-ruby (1.1.10)
|
||||
crack (0.4.3)
|
||||
safe_yaml (~> 1.0.0)
|
||||
domain_name (0.5.20190701)
|
||||
unf (>= 0.0.5, < 1.0.0)
|
||||
faraday (2.7.11)
|
||||
base64
|
||||
faraday-net_http (>= 2.0, < 3.1)
|
||||
ruby2_keywords (>= 0.0.4)
|
||||
faraday-net_http (3.0.2)
|
||||
hashdiff (1.0.1)
|
||||
faraday (0.17.0)
|
||||
multipart-post (>= 1.2, < 3)
|
||||
hashdiff (1.0.0)
|
||||
http-accept (1.7.0)
|
||||
http-cookie (1.0.5)
|
||||
http-cookie (1.0.3)
|
||||
domain_name (~> 0.5)
|
||||
i18n (1.14.1)
|
||||
i18n (1.10.0)
|
||||
concurrent-ruby (~> 1.0)
|
||||
kgio (2.11.4)
|
||||
m (1.6.2)
|
||||
kgio (2.11.2)
|
||||
m (1.5.1)
|
||||
method_source (>= 0.6.7)
|
||||
rake (>= 0.9.2.2)
|
||||
method_source (1.0.0)
|
||||
mime-types (3.5.1)
|
||||
method_source (0.9.2)
|
||||
mime-types (3.3)
|
||||
mime-types-data (~> 3.2015)
|
||||
mime-types-data (3.2023.1003)
|
||||
minitest (5.20.0)
|
||||
minitest-stub_any_instance (1.0.3)
|
||||
mime-types-data (3.2019.1009)
|
||||
minitest (5.13.0)
|
||||
minitest-stub_any_instance (1.0.2)
|
||||
multi_json (1.15.0)
|
||||
mustermann (2.0.2)
|
||||
multipart-post (2.1.1)
|
||||
mustermann (1.1.1)
|
||||
ruby2_keywords (~> 0.0.1)
|
||||
netrc (0.11.0)
|
||||
public_suffix (5.0.3)
|
||||
rack (2.2.8)
|
||||
rack-protection (2.2.4)
|
||||
public_suffix (4.0.1)
|
||||
purdytest (2.0.0)
|
||||
minitest (~> 5.5)
|
||||
rack (2.2.3)
|
||||
rack-protection (2.2.0)
|
||||
rack
|
||||
rack-test (2.1.0)
|
||||
rack (>= 1.3)
|
||||
rainbows (5.2.1)
|
||||
rack-test (1.1.0)
|
||||
rack (>= 1.0, < 3)
|
||||
rainbows (5.2.0)
|
||||
kgio (~> 2.5)
|
||||
rack (>= 1.1, < 3.0)
|
||||
unicorn (~> 5.1)
|
||||
raindrops (0.20.1)
|
||||
rake (13.0.6)
|
||||
raindrops (0.19.0)
|
||||
rake (13.0.1)
|
||||
redis (4.6.0)
|
||||
rest-client (2.1.0)
|
||||
http-accept (>= 1.7.0, < 2.0)
|
||||
http-cookie (>= 1.0.2, < 2.0)
|
||||
mime-types (>= 1.16, < 4.0)
|
||||
netrc (~> 0.8)
|
||||
rexml (3.2.6)
|
||||
ruby2_keywords (0.0.5)
|
||||
sentry-raven (3.1.2)
|
||||
faraday (>= 1.0)
|
||||
sinatra (2.2.4)
|
||||
mustermann (~> 2.0)
|
||||
safe_yaml (1.0.5)
|
||||
sentry-raven (2.12.3)
|
||||
faraday (>= 0.7.6, < 1.0)
|
||||
sinatra (2.2.0)
|
||||
mustermann (~> 1.0)
|
||||
rack (~> 2.2)
|
||||
rack-protection (= 2.2.4)
|
||||
rack-protection (= 2.2.0)
|
||||
tilt (~> 2.0)
|
||||
sinatra-contrib (2.2.4)
|
||||
sinatra-contrib (2.2.0)
|
||||
multi_json
|
||||
mustermann (~> 2.0)
|
||||
rack-protection (= 2.2.4)
|
||||
sinatra (= 2.2.4)
|
||||
mustermann (~> 1.0)
|
||||
rack-protection (= 2.2.0)
|
||||
sinatra (= 2.2.0)
|
||||
tilt (~> 2.0)
|
||||
tilt (2.3.0)
|
||||
tzinfo (2.0.6)
|
||||
concurrent-ruby (~> 1.0)
|
||||
thread_safe (0.3.6)
|
||||
tilt (2.0.10)
|
||||
tzinfo (1.2.9)
|
||||
thread_safe (~> 0.1)
|
||||
unf (0.1.4)
|
||||
unf_ext
|
||||
unf_ext (0.0.8.2)
|
||||
unicorn (5.8.0)
|
||||
unf_ext (0.0.7.6)
|
||||
unicorn (5.5.1)
|
||||
kgio (~> 2.6)
|
||||
raindrops (~> 0.7)
|
||||
webmock (3.19.1)
|
||||
addressable (>= 2.8.0)
|
||||
webmock (3.7.6)
|
||||
addressable (>= 2.3.6)
|
||||
crack (>= 0.3.2)
|
||||
hashdiff (>= 0.4.0, < 2.0.0)
|
||||
zeitwerk (2.6.12)
|
||||
zeitwerk (2.5.4)
|
||||
|
||||
PLATFORMS
|
||||
ruby
|
||||
|
||||
DEPENDENCIES
|
||||
activesupport (~> 6.1.0)
|
||||
activesupport (~> 6.0.5)
|
||||
m
|
||||
mime-types
|
||||
minitest
|
||||
minitest-stub_any_instance
|
||||
purdytest
|
||||
rack-test
|
||||
rainbows
|
||||
rake
|
||||
@@ -108,4 +108,4 @@ DEPENDENCIES
|
||||
webmock
|
||||
|
||||
BUNDLED WITH
|
||||
2.3.7
|
||||
1.16.0
|
||||
|
||||
@@ -12,9 +12,10 @@ protocol, but does not include the Webfinger and OAuth parts. It is meant to be
|
||||
added to existing systems and user accounts, so you will have to add your own
|
||||
OAuth dialog for remoteStorage authorizations and persist the tokens in Redis.
|
||||
|
||||
If you have any questions about this program, please [post to the RS
|
||||
If you have any questions about this program, drop by #remotestorage on
|
||||
Freenode, or [post to the RS
|
||||
forums](https://community.remotestorage.io/c/server-development), and we'll
|
||||
gladly answer them.
|
||||
happily answer them.
|
||||
|
||||
## Contributing
|
||||
|
||||
@@ -22,5 +23,5 @@ We love pull requests. If you want to submit a patch:
|
||||
|
||||
* Fork the project.
|
||||
* Make your feature addition or bug fix.
|
||||
* Write specs for it. This is important so nobody breaks it in a future version.
|
||||
* Write specs for it. This is important so nobody breaks it in a future version unintentionally.
|
||||
* Push to your fork and send a pull request.
|
||||
|
||||
@@ -1,18 +0,0 @@
|
||||
development: &defaults
|
||||
maintenance: false
|
||||
redis:
|
||||
host: <%= ENV["REDIS_HOST"] || "localhost" %>
|
||||
port: <%= ENV["REDIS_PORT"] || "6379" %>
|
||||
db: <%= ENV["REDIS_DB"] || 0 %>
|
||||
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
26
config.yml.example.s3
Normal 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
|
||||
@@ -1,8 +1,8 @@
|
||||
require "remote_storage/rest_provider"
|
||||
require "digest"
|
||||
require "base64"
|
||||
require "cgi"
|
||||
require "openssl"
|
||||
require "webrick/httputils"
|
||||
|
||||
module RemoteStorage
|
||||
class S3
|
||||
@@ -92,7 +92,7 @@ module RemoteStorage
|
||||
end
|
||||
|
||||
def uri_escape(s)
|
||||
CGI.escape(s).gsub('%5B', '[').gsub('%5D', ']')
|
||||
WEBrick::HTTPUtils.escape(s).gsub('%5B', '[').gsub('%5D', ']')
|
||||
end
|
||||
|
||||
def generate_s3_signature(http_verb, md5, content_type, date, url)
|
||||
@@ -106,7 +106,7 @@ module RemoteStorage
|
||||
end
|
||||
|
||||
def container_url_for(user)
|
||||
"#{base_url}/#{settings.s3["bucket"]}/#{user}"
|
||||
"#{base_url}#{settings.s3["bucket"]}/#{user}"
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@ class LiquorCabinet < Sinatra::Base
|
||||
|
||||
register Sinatra::ConfigFile
|
||||
set :environments, %w{development test production staging}
|
||||
config_file 'config.yml.erb'
|
||||
config_file 'config.yml'
|
||||
end
|
||||
|
||||
configure :development do
|
||||
|
||||
@@ -2,7 +2,7 @@ require_relative "../spec_helper"
|
||||
|
||||
describe "S3 provider" do
|
||||
def container_url_for(user)
|
||||
"#{app.settings.s3["endpoint"]}/#{app.settings.s3["bucket"]}/#{user}"
|
||||
"#{app.settings.s3["endpoint"]}#{app.settings.s3["bucket"]}/#{user}"
|
||||
end
|
||||
|
||||
def storage_class
|
||||
|
||||
@@ -8,6 +8,7 @@ require_relative '../liquor-cabinet'
|
||||
require 'minitest/autorun'
|
||||
require "minitest/stub_any_instance"
|
||||
require 'rack/test'
|
||||
require 'purdytest'
|
||||
require "redis"
|
||||
require "rest_client"
|
||||
require "ostruct"
|
||||
@@ -35,22 +36,22 @@ if app.settings.respond_to? :redis
|
||||
end
|
||||
end
|
||||
|
||||
Minitest::Spec.class_eval do
|
||||
MiniTest::Spec.class_eval do
|
||||
def self.shared_examples
|
||||
@shared_examples ||= {}
|
||||
end
|
||||
end
|
||||
|
||||
module Minitest::Spec::SharedExamples
|
||||
module MiniTest::Spec::SharedExamples
|
||||
def shared_examples_for(desc, &block)
|
||||
Minitest::Spec.shared_examples[desc] = block
|
||||
MiniTest::Spec.shared_examples[desc] = block
|
||||
end
|
||||
|
||||
def it_behaves_like(desc)
|
||||
self.instance_eval(&Minitest::Spec.shared_examples[desc])
|
||||
self.instance_eval(&MiniTest::Spec.shared_examples[desc])
|
||||
end
|
||||
end
|
||||
|
||||
Object.class_eval { include(Minitest::Spec::SharedExamples) }
|
||||
Object.class_eval { include(MiniTest::Spec::SharedExamples) }
|
||||
|
||||
require_relative 'shared_examples'
|
||||
|
||||
Reference in New Issue
Block a user