nodebb-plugin-s3-uploads
Advanced tools
Comparing version 0.1.0 to 0.2.0
14
index.js
@@ -1,2 +0,1 @@ | ||
var Package = require("./package.json"); | ||
@@ -100,3 +99,3 @@ | ||
plugin.handleUpload = function (image, callback) { | ||
if(!image || (!image.base64 && !image.file && !image.url)){ | ||
if(!image || !image.path){ | ||
winston.error(image); | ||
@@ -106,13 +105,4 @@ return callback(makeError("Invalid image data from plugin hook 'filter:uploadImage'")); | ||
// TODO: Figure out why we'd get an image.url request | ||
if(image.url){ | ||
return callback(makeError("Currently does not support URL based image uploads")); | ||
} | ||
fs.readFile(image.path, putObject); | ||
if(image.base64){ | ||
putObject(null, new Buffer(image.base64, "base64")); | ||
}else if(image.file){ | ||
fs.readFile(image.file, putObject); | ||
} | ||
function putObject(err, buffer){ | ||
@@ -119,0 +109,0 @@ // Error from FS module: |
{ | ||
"name": "nodebb-plugin-s3-uploads", | ||
"version": "0.1.0", | ||
"version": "0.2.0", | ||
"description": "A plugin for NodeBB to take file uploads and store them on S3", | ||
@@ -21,2 +21,5 @@ "main": "index.js", | ||
"author": "Micheil Smith <micheil@kano.me>", | ||
"contributors": [ | ||
"Barış Soner Uşaklı <barisusakli@gmail.com>" | ||
], | ||
"license": "MIT", | ||
@@ -23,0 +26,0 @@ "bugs": { |
{ | ||
"id": "nodebb-plugin-s3-uploads", | ||
"minver": "0.3.2", | ||
"name": "S3 Uploads Plugin", | ||
@@ -4,0 +5,0 @@ "description": "A plugin that takes file uploads and store them on S3", |
@@ -1,4 +0,58 @@ | ||
nodebb-plugin-s3-uploads | ||
======================== | ||
# NodeBB S3 Uploads Plugin | ||
A plugin for NodeBB to take file uploads and store them on S3 | ||
| Dependency | Version Requirement | | ||
| -------------- |:-----------------------:| | ||
| NodeBB | >= 0.3.2 or [a909a253](https://github.com/designcreateplay/NodeBB/commit/a909a253931c20427c14c777c1bb6629a79d449d) | | ||
A plugin for NodeBB to take file uploads and store them on S3, uses the `filter:uploadImage` hook in NodeBB. | ||
## S3 Uploads Configuration | ||
You can configure this plugin via a combination of the below, for instance, you can use **instance meta-data** and **environment variables** in combination. You can also configure via the NodeBB Admin panel, which will result in the Bucket and Credentials being stored in the NodeBB Database. | ||
If you decide to use the Database storage for Credentials, then they will take precedence over both Environment Variables and Instance Meta-data, the full load order is: | ||
1. Database | ||
2. Environment Variables | ||
3. Instance Meta-data | ||
For instance, for [talk.kano.me](http://talk.kano.me), we store the Bucket name in an Environment Variable, and the Credentials are discovered automatically with the Security Token Service. | ||
### Environment Variables | ||
``` | ||
export AWS_ACCESS_KEY_ID="xxxxx" | ||
export AWS_SECRET_ACCESS_KEY="yyyyy" | ||
export S3_UPLOADS_BUCKET="zzzz" | ||
``` | ||
### Instance Meta-data | ||
To use Instance Meta-data, you'll need to setup role delegation, see the following links for more information: | ||
* [EC2 Documentation: Instance Metadata and User Data](http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AESDG-chapter-instancedata.html) | ||
* [IAM Documentation: Assuming a Role](http://docs.aws.amazon.com/IAM/latest/UserGuide/roles-assume-role.html) | ||
* [IAM Documentation: EC2 Role Example](http://docs.aws.amazon.com/IAM/latest/UserGuide/role-usecase-ec2app.html) | ||
* [STS Documentation: Delegation](http://docs.aws.amazon.com/STS/latest/UsingSTS/sts_delegate.html) | ||
**NOTE:** You'll need to pass in the `Bucket` as either an **Environment Variable** or as a **Database Backed Variable**. | ||
If you need help, create an [issue on Github](https://github.com/KanoComputing/nodebb-plugin-s3-uploads/issues/), and @[miksago](https://github.com/miksago) will try to help you out. | ||
### Database Backed Variables | ||
From the NodeBB Admin panel, you can configure the following settings to be stored in the Database: | ||
* `bucket` — The S3 bucket to upload into | ||
* `accessKeyId` — The AWS Access Key Id | ||
* `secretAccessKey` — The AWS Secret Access Key | ||
**NOTE: Storing your AWS Credentials in the database is bad practice, and you really shouldn't do it.** | ||
We highly recommend using either **Environment Variables** or **Instance Meta-data** instead. | ||
## Caveats | ||
* Currently all uploads are stored in S3 keyed by a UUID and file extension, as such, if a user uploads multiple avatars, all versions will still exist in S3. This is a known issue and may require some sort of cron job to scan for old uploads that are no longer referenced in order for those objects to be deleted from S3. |
14592
59
198