Project

OpenS3

0.01
No commit activity in last 3 years
No release in over 3 years
Build your own storage server
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Runtime

>= 0
>= 0
 Project Readme

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.