Compare commits

..

2 Commits

Author SHA1 Message Date
a5da2fbd40
Add Gitea action for CI
Some checks reported warnings
Tests / test (6, 2.7) (pull_request) Has been cancelled
Tests / test (6, 3.0) (pull_request) Has been cancelled
Tests / test (6, 3.1) (pull_request) Has been cancelled
Tests / test (7, 2.7) (pull_request) Has been cancelled
Tests / test (7, 3.0) (pull_request) Has been cancelled
Tests / test (7, 3.1) (pull_request) Has been cancelled
2023-11-21 15:45:13 +01:00
df1a3e6512
Add Drone CI config
Some checks failed
continuous-integration/drone Build is failing
2023-11-21 15:38:15 +01:00
8 changed files with 92 additions and 53 deletions

View File

@ -2,15 +2,8 @@ kind: pipeline
name: default name: default
steps: steps:
- name: specs - name: test
image: ruby image: ruby
environment:
REDIS_HOST: redis
commands: commands:
- cp config.yml.erb.example config.yml.erb
- bundle install --jobs=3 --retry=3 - bundle install --jobs=3 --retry=3
- bundle exec rake test - rake test
services:
- name: redis
image: redis

33
.gitea/workflows/ruby.yml Normal file
View File

@ -0,0 +1,33 @@
name: Tests
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
permissions:
contents: read
jobs:
test:
runs-on: ubuntu-latest
strategy:
matrix:
ruby-version: ['2.7', '3.0', '3.1']
redis-version: [6, 7]
steps:
- uses: actions/checkout@v3
- name: Set up Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: ${{ matrix.ruby-version }}
bundler-cache: true # runs 'bundle install' and caches installed gems automatically
- name: Start Redis
uses: supercharge/redis-github-action@1.4.0
with:
redis-version: ${{ matrix.redis-version }}
- name: Configure
run: cp config.yml.erb.example config.yml.erb
- name: Run tests
run: bundle exec rake test

33
.github/workflows/ruby.yml vendored Normal file
View File

@ -0,0 +1,33 @@
name: Tests
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
permissions:
contents: read
jobs:
test:
runs-on: ubuntu-latest
strategy:
matrix:
ruby-version: ['2.7', '3.0', '3.1']
redis-version: [6, 7]
steps:
- uses: actions/checkout@v3
- name: Set up Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: ${{ matrix.ruby-version }}
bundler-cache: true # runs 'bundle install' and caches installed gems automatically
- name: Start Redis
uses: supercharge/redis-github-action@1.4.0
with:
redis-version: ${{ matrix.redis-version }}
- name: Configure
run: cp config.yml.erb.example config.yml.erb
- name: Run tests
run: bundle exec rake test

View File

@ -6,8 +6,9 @@ gem "activesupport", "~> 6.1.0"
gem "redis", "~> 4.6.0" gem "redis", "~> 4.6.0"
gem "rest-client", "~> 2.1.0" gem "rest-client", "~> 2.1.0"
gem "aws-sigv4", "~> 1.0.0" gem "aws-sigv4", "~> 1.0.0"
# Remove require when we can update to 3.0, which sets the new storage
# format to columnar by default. Increases performance
gem "mime-types" gem "mime-types"
gem "rainbows"
group :test do group :test do
gem 'rake' gem 'rake'
@ -19,5 +20,6 @@ group :test do
end end
group :staging, :production do group :staging, :production do
gem "rainbows"
gem "sentry-raven", require: false gem "sentry-raven", require: false
end end

View File

@ -1,55 +1,21 @@
[![Build Status](https://drone.kosmos.org/api/badges/5apps/liquor-cabinet/status.svg)](https://drone.kosmos.org/5apps/liquor-cabinet) [![Build Status](https://github.com/5apps/liquor-cabinet/actions/workflows/ruby.yml/badge.svg)](https://github.com/5apps/liquor-cabinet/actions/workflows/ruby.yml)
# Liquor Cabinet # Liquor Cabinet
Liquor Cabinet is where Frank stores all his stuff. It's a Liquor Cabinet is where Frank stores all his stuff. It's a
[remoteStorage](https://remotestorage.io) HTTP API, based on Sinatra. The [remoteStorage](https://remotestorage.io) HTTP API, based on Sinatra. The
metadata and OAuth tokens are stored in Redis, and metadata and OAuth tokens are stored in Redis, and documents can be stored in
documents/files can be stored in anything that supports anything that supports the storage API of either Openstack Swift or Amazon S3.
the S3 object storage API.
Liquor Cabinet only implements the storage API part of the remoteStorage Liquor Cabinet only implements the storage API part of the remoteStorage
protocol, but does not include the Webfinger and OAuth parts. It is meant to be 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 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. OAuth dialog for remoteStorage authorizations and persist the tokens in Redis.
There is an [open-source accounts management
app](https://gitea.kosmos.org/kosmos/akkounts/) by the Kosmos project, which
comes with a built-in remoteStorage dashboard and is compatible with Liquor
Cabinet.
If you have any questions about this program, please [post to the RS If you have any questions about this program, please [post to the RS
forums](https://community.remotestorage.io/c/server-development), and we'll forums](https://community.remotestorage.io/c/server-development), and we'll
gladly answer them. gladly answer them.
## System requirements
* [Ruby](https://www.ruby-lang.org/en/) and [Bundler](https://bundler.io/)
* [Redis](https://redis.io/)
* S3-compatible object storage (e.g. [Garage](https://garagehq.deuxfleurs.fr/)
or [MinIO](https://min.io/) for self-hosting)
## Setup
1. Check the `config.yml.erb.example` file. Either copy it to `config.yml.erb`
and use the enviroment variables it contains, or create/deploy your own
config YAML file with custom values.
2. Install dependencies: `bundle install`
## Development
Running the test suite:
bundle exec rake test
Running the app:
bundle exec rainbows
## Deployment
_TODO document options_
## Contributing ## Contributing
We love pull requests. If you want to submit a patch: We love pull requests. If you want to submit a patch:

View File

@ -431,9 +431,9 @@ module RemoteStorage
end end
end end
def escape(str) def escape(url)
# We want spaces to turn into %20 and slashes to stay slashes # We want spaces to turn into %20 and slashes to stay slashes
CGI::escape(str).gsub('+', '%20').gsub('%2F', '/') CGI::escape(url).gsub('+', '%20').gsub('%2F', '/')
end end
def redis def redis

View File

@ -15,8 +15,7 @@ module RemoteStorage
service: 's3', service: 's3',
region: settings.s3["region"], region: settings.s3["region"],
access_key_id: settings.s3["access_key_id"].to_s, access_key_id: settings.s3["access_key_id"].to_s,
secret_access_key: settings.s3["secret_key_id"].to_s, secret_access_key: settings.s3["secret_key_id"].to_s
uri_escape_path: false
) )
end end
@ -30,8 +29,6 @@ module RemoteStorage
headers = { "Content-Type" => content_type } headers = { "Content-Type" => content_type }
auth_headers = auth_headers_for("PUT", url, headers, data) auth_headers = auth_headers_for("PUT", url, headers, data)
# TODO check if put was successful, e.g. it's returning a 413 directly
# if the back-end does, too (missing CORS headers in that case)
res = RestClient.put(url, data, headers.merge(auth_headers)) res = RestClient.put(url, data, headers.merge(auth_headers))
return [ return [
@ -85,6 +82,10 @@ module RemoteStorage
signature.headers signature.headers
end end
def uri_escape(s)
CGI.escape(s).gsub('%5B', '[').gsub('%5D', ']')
end
def base_url def base_url
@base_url ||= settings.s3["endpoint"] @base_url ||= settings.s3["endpoint"]
end end

11
run-dev.sh Executable file
View File

@ -0,0 +1,11 @@
#!/bin/bash
RACK_ENV=development \
REDIS_HOST=localhost \
REDIS_PORT=6379 \
REDIS_DB=1 \
S3_ENDPOINT='http://localhost:9000' \
S3_ACCESS_KEY='dev-key' \
S3_SECRET_KEY='123456789' \
S3_BUCKET=remotestorage \
bundle exec rackup -p 4567