Unverified Commit 63c45766 authored by John Crepezzi's avatar John Crepezzi Committed by GitHub
Browse files

Merge pull request #189 from PassTheMayo/master

Added RethinkDB storage option & fixed config to use proper JSON
parents cfef5882 b31d143b
Loading
Loading
Loading
Loading
+23 −1
Original line number Diff line number Diff line
@@ -174,6 +174,28 @@ forward on GETs.

All of which are optional except `type` with very logical default values.

### RethinkDB

To use the RethinkDB storage system, you must install the `rethinkdbdash` package via npm

`npm install rethinkdbdash`

Once you've done that, your config section should look like this:

``` json
{
  "type": "rethinkdb",
  "host": "127.0.0.1",
  "port": 28015,
  "db": "haste"
}
```

In order for this to work, the database must be pre-created before the script is ran.
Also, you must create an `uploads` table, which will store all the data for uploads.

You can optionally add the `user` and `password` properties to use a user system.

## Author

John Crepezzi <john.crepezzi@gmail.com>
+39 −0
Original line number Diff line number Diff line
const crypto = require('crypto');
const rethink = require('rethinkdbdash');

var RethinkDBStore = (options) => {
  this.client = rethink({
    silent: true,
    host: options.host || '127.0.0.1',
    port: options.port || 28015,
    db: options.db || 'haste',
    user: options.user || 'admin',
    password: options.password || ''
  });
};

RethinkDBStore.md5 = (str) => {
  const md5sum = crypto.createHash('md5');
  md5sum.update(str);
  return md5sum.digest('hex');
};

RethinkDBStore.prototype.set = (key, data, callback) => {
  try {
    this.client.table('uploads').insert({ id: RethinkDBStore.md5(key), data: data }).run((error) =? {
      if (error) return callback(false);
      callback(true);
    });
  } catch (err) {
    callback(false);
  }
};

RethinkDBStore.prototype.get = (key, callback) => {
  this.client.table('uploads').get(RethinkDBStore.md5(key)).run((error, result) => {
    if (error || !result) return callback(false);
    callback(result.data);
  });
};

module.exports = RethinkDBStore;