OpenS3
OpenS3 is a storage API that whilst presently contains its own API will eventually mimmic that of Amazon's S3 serivce.
Details!
The server is a pure rack application and can use any rack compatible server such as Thin or Unicorn. Authentication is currently token based.
Configuration
The configuration is based on a YAML file:
---
dir: ./storage
address: 0.0.0.0
port: 8000
token: TestKey
server: thin
dir sets the data directory, port sets the port where the server should
listen and token sets the string which, after being SHA512'ed, will be the
token. address defines the interface to bind to, along with server
specifying which rack compatible server to start with, by default Thin will be
used.
You can also configure this via command line
opens3 -p 8000 -d ./storage -t SomeToken
But using a config file is highly recommended:
opens3 -c my_config_file.yml
The SHA512 token will be shown on the console on launch.
API
Basic Upload form and Info
GET / for the upload form
GET /info for the info form, which only contains the hostname
Upload
POST /upload: You'll need to set the file to the file param, the previously
mentioned token on the token param and the bucket param for the bucket
(it'll be auto created if it doesn't exists).
Download and listing
GET /list: You'll need to specify the token param with the token and the
bucket param with the bucket you'd wish to list
GET /file: You'll need to specify a name param with the wanted filename, a
bucket param with the bucket of the file, a token param with the access
token, and a expire param with the epoch time (Time.now.to_i in Ruby) of
link expiration.
Errors
- 100: The path doesn't exists
- 101: The file was not found
- 102: The file already exists (not used since the upload replaces the current file)
- 103: Bucket not found
- 104: Bucket not specified
- 105: The link has expired
- 106: Wrong token
- 107: No file specified on the upload method
- 108: Incorrect method (verb)
Responses
All the responses will be on JSON format.
GET /info will return something like {"hostname":"localhost:8000"}
GET /list will return an array with all the bucket files like
["avatar.png","twitter_newbird_blue.pdf"]
GET /file will automatically force the file download if all the params are correct
POST /upload will return this if the upload was correct
{"saved":true,"url":"/file?name=twitter_newbird_blue.pdf&bucket=ddd"}
Any error will be in this format: {"error":true,"type":error_code} where
error_code will always be an Integer
Disclaimer
This is presently alpha, it might contain bugs.
License
Copyright (C) 2012 Pablo Merino, Squeeks
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.