theirix/omnifiles

View on GitHub
README.md

Summary

Maintainability
Test Coverage
# OmniFiles

[![Gem Version](https://img.shields.io/gem/v/omnifiles.svg)](https://rubygems.org/gems/omnifiles)
[![Code Climate](https://codeclimate.com/github/theirix/omnifiles/badges/gpa.svg)](https://codeclimate.com/github/theirix/omnifiles)
[![Dependency Status](https://gemnasium.com/theirix/omnifiles.svg)](https://gemnasium.com/theirix/omnifiles)

File storage and shortener server.

OmniFiles is built with Sinatra and Rack and uses an Mongo database to store shortened
urls and statistics.

## Installation

OmniFiles is a Sinatra/Rack application and can be used as a gem or as a server in local directory.

### As a gem

1. Install a gem

        gem install omnifiles

2. Point an env variable `OMNIFILES_SETTINGS` to location of a settings file `/path/to/settings.yaml` (see Configurarion).

3. Start an app as a Thin server

        OMNIFILES_SETTINGS=/path/to/settings.yaml omnifiles
Of course, you can provide any additional Thin options at command line:

        OMNIFILES_SETTINGS=/path/to/settings.yaml omnifiles -p 3000
Or at config file (see Thin documentation):

        OMNIFILES_SETTINGS=/path/to/settings.yaml omnifiles -C /path/to/thin.yaml


## As a rack app

OmniFiles can be started using `config.ru` with you favourite Rack server.

1. Clone a git repo

2. Install dependencies

        bundle install

3. Point an env variable `OMNIFILES_SETTINGS` to location of a settings file `/path/to/settings.yaml` (see Configurarion).

4. Start Rack app

        rackup

## Configuration

Settings file template can be found at `config/settings.yaml.example`.

If you prefer production Rack environment, please use `production` instead of `development` section in the config.
Also specify `-E production` at `omnifiles` (actially Thin) command line.

If you prefer to run omnifiles as a daemon, don't forget to set log and pid location. Author prefer to follow XDG and place all the files at the `~/.local/share/omnifiles`, including the database. So one can use following command line:

    OMNIFILES_SETTINGS=$HOME/.local/share/omnifiles/settings.yaml omnifiles start -d -a 127.0.0.1 -p 3000 \
      -l $HOME/.local/share/omnifiles/omnifiles.log \
      -P $HOME/.local/share/omnifiles/omnifiles.pid

Complex Thin options can be hidden in Thin config.yaml file:

    OMNIFILES_SETTINGS=$HOME/.local/share/omnifiles/settings.yaml omnifiles start -C $HOME/.local/share/omnifiles/thin.yaml

Note that OmniFiles and Thin configs are two distinct configs.

## Usage

1. Storing files.
OmniFiles can store files by issuing an authenticated POST form request:

        % curl --digest -u user:secret -F "file=@/path/to/file.jpg" 'http://localhost:3000/store'
        http://localhost:3000/f/e63A12
Or you can post a file just as a binary POST data:

        % curl --digest -u user:secret -H "Content-Type: application/octet-stream" --data-binary "@/path/to/file.jpg" 'http://localhost:3000/store'
        http://localhost:3000/f/e63A12
OmniFiles returns a short url in response so you can just issue following command to save URL in clipboard

        % curl --digest -u user:secret -F "file=@/path/to/file.jpg" 'http://localhost:3000/store' | pbcopy

2. Accessing files.
Just access given URL:

        % curl http://localhost:3000/f/e63A12
OmniFiles remembers MIME type and composes a correct typed response.
Header `X-Original-Filename` contains escaped original filename.

3. Viewing statistics.
OmniFiles provides file access statistics using authenticated requests.
Visit an url using web browser or curl.

        http://localhost:3000/stat/e63A12

3. Control panel.
Viewing and deleting stored files can be performed at control panel:

        http://localhost:3000/stat

## License information

Please consult with the LICENSE.txt for license information. It is MIT by the way.