diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md
index c58cffd8c..7cfcfc793 100644
--- a/.github/CONTRIBUTING.md
+++ b/.github/CONTRIBUTING.md
@@ -10,8 +10,6 @@ This project uses [editor config](http://editorconfig.org/), please make sure to
* [Git](http://git-scm.com/)
* [node.js](http://nodejs.org/) *(see [`./package.json`](https://github.com/OpenUserJs/OpenUserJS.org/blob/master/package.json) engines for specific requirements)*
* [MongoDB](http://www.mongodb.org/) (Optional. The project is preconfigured to use a dev DB on [MongoLab](https://mongolab.com/).)
-* [Ruby](https://www.ruby-lang.org/) (required to run [FakeS3](https://github.com/jubos/fake-s3/))
-* [FakeS3](https://github.com/jubos/fake-s3) (required to store libraries/scripts without [AWS S3](http://aws.amazon.com/s3/)) handled by [bundler](https://github.com/bundler/bundler)
#### GitHub Fork Setup
diff --git a/.gitignore b/.gitignore
index 3cf6ab945..d168ab0dd 100644
--- a/.gitignore
+++ b/.gitignore
@@ -20,6 +20,8 @@ data
package-lock.json
Gemfile.lock
+S3rver
+
fakeS3
dev/fakeS3
diff --git a/Gemfile b/Gemfile
deleted file mode 100644
index 3612774eb..000000000
--- a/Gemfile
+++ /dev/null
@@ -1,2 +0,0 @@
-source 'https://rubygems.org'
-gem 'fakes3', '2.0.0'
diff --git a/README.md b/README.md
index da5cb0544..76cca364e 100644
--- a/README.md
+++ b/README.md
@@ -6,7 +6,6 @@ Repository | Reference | Recent Version
:--- | :---: | :---
[nodejs][nodeGHUrl] | [Documentation][nodejsDOCUrl] |
[CHANGELOG][nodejsReleasesUrl]
[npm][npmGHUrl] | [Documentation][npmDOCUrl] | [![npm][npmNPMVersionImage]][npmNPMUrl] [CHANGELOG][npmGHReleasesUrl]
-[bundler][bundlerGHUrl] | [Documentation][bundlerDOCUrl] | [![GEM version][bundlerGEMVersionImage]][bundlerGEMUrl] [CHANGELOG][bundlerGHReleasesUrl]
### Contributing
@@ -38,7 +37,6 @@ Repository | Reference | Recent Version
[express-brute-mongo][express-brute-mongoGHUrl]
⋔ [`MongoDBv3.x`][express-brute-mongoGHMongoDBv3.xUrl] | [Documentation][express-brute-mongoDOCUrl] | [![NPM version][express-brute-mongoNPMVersionImage]][express-brute-mongoNPMUrl]
[express-minify][express-minifyGHUrl] | [Documentation][express-minifyDOCUrl] | [![NPM version][express-minifyNPMVersionImage]][express-minifyNPMUrl]
[express-session][express-sessionGHUrl] | [Documentation][express-sessionDOCUrl] | [![NPM version][express-sessionNPMVersionImage]][express-sessionNPMUrl]
-[fakes3][fakes3GHUrl] | [Documentation][fakes3DOCUrl] | [![GEM version][fakes3GEMVersionImage]][fakes3GEMUrl]
[font-awesome][font-awesomeGHUrl] | [Documentation][font-awesomeDOCUrl] | [![NPM version][font-awesomeNPMVersionImage]][font-awesomeNPMUrl]
[formidable][formidableGHUrl] | [Documentation][formidableDOCUrl] | [![NPM version][formidableNPMVersionImage]][formidableNPMUrl]
[git-rev][git-revGHUrl] | [Documentation][git-revDOCUrl] | [![NPM version][git-revNPMVersionImage]][git-revNPMUrl]
@@ -75,6 +73,7 @@ Repository | Reference | Recent Version
[pegjs][pegjsGHUrl] | [Documentation][pegjsDOCUrl] | [![NPM version][pegjsNPMVersionImage]][pegjsNPMUrl]
[request][requestGHUrl] | [Documentation][requestDOCUrl] | [![NPM version][requestNPMVersionImage]][requestNPMUrl]
[rfc2047][rfc2047GHUrl] | [Documentation][rfc2047DOCUrl] | [![NPM version][rfc2047NPMVersionImage]][rfc2047NPMUrl]
+[S3rver][s3rverGHUrl] | [Documentation][s3rverDOCUrl] | [![NPM version][s3rverNPMVersionImage]][s3rverNPMUrl]
[sanitize-html][sanitize-htmlGHUrl] | [Documentation][sanitize-htmlDOCUrl] | [![NPM version][sanitize-htmlNPMVersionImage]][sanitize-htmlNPMUrl]
[select2][select2GHUrl] | [Documentation][select2DOCUrl] | [![NPM version][select2NPMVersionImage]][select2NPMUrl]
[select2-bootstrap-css][select2-bootstrap-cssGHUrl] | [Documentation][select2-bootstrap-cssDOCUrl] | [![NPM version][select2-bootstrap-cssNPMVersionImage]][select2-bootstrap-cssNPMUrl]
@@ -166,12 +165,6 @@ Outdated dependencies list can also be achieved with `$ npm --depth 0 outdated`
[bootstrap-markdownNPMUrl]: https://www.npmjs.com/package/bootstrap-markdown
[bootstrap-markdownNPMVersionImage]: https://img.shields.io/npm/v/bootstrap-markdown.svg?style=flat
-[bundlerGHUrl]: https://github.com/bundler/bundler
-[bundlerDOCUrl]: http://bundler.io/
-[bundlerGEMUrl]: http://rubygems.org/gems/bundler
-[bundlerGEMVersionImage]: http://img.shields.io/gem/v/bundler.svg?style=flat
-[bundlerGHReleasesUrl]: https://github.com/bundler/bundler/blob/master/CHANGELOG.md
-
[clipboardGHUrl]: https://github.com/zenorocha/clipboard.js
[clipboardDOCUrl]: https://github.com/zenorocha/clipboard.js/blob/master/readme.md
[clipboardNPMUrl]: https://www.npmjs.com/package/clipboard
@@ -218,11 +211,6 @@ Outdated dependencies list can also be achieved with `$ npm --depth 0 outdated`
[express-sessionNPMUrl]: https://www.npmjs.com/package/express-session
[express-sessionNPMVersionImage]: https://img.shields.io/npm/v/express-session.svg?style=flat
-[fakes3GHUrl]: https://github.com/jubos/fake-s3
-[fakes3DOCUrl]: http://www.rubydoc.info/gems/fakes3
-[fakes3GEMUrl]: http://rubygems.org/gems/fakes3
-[fakes3GEMVersionImage]: http://img.shields.io/gem/v/fakes3.svg?style=flat
-
[font-awesomeGHUrl]: https://github.com/FortAwesome/Font-Awesome
[font-awesomeDOCUrl]: http://fontawesome.io/
[font-awesomeNPMUrl]: https://www.npmjs.com/package/font-awesome
@@ -417,6 +405,11 @@ Outdated dependencies list can also be achieved with `$ npm --depth 0 outdated`
[rfc2047NPMUrl]: https://www.npmjs.com/package/rfc2047
[rfc2047NPMVersionImage]: https://img.shields.io/npm/v/rfc2047.svg?style=flat
+[s3rverGHUrl]: https://github.com/jamhall/s3rver
+[s3rverDOCUrl]: https://github.com/jamhall/s3rver/blob/master/README.md
+[s3rverNPMUrl]: https://www.npmjs.com/package/s3rver
+[s3rverNPMVersionImage]: https://img.shields.io/npm/v/s3rver.svg?style=flat
+
[sanitize-htmlGHUrl]: https://github.com/punkave/sanitize-html
[sanitize-htmlDOCUrl]: https://github.com/punkave/sanitize-html/blob/master/README.md
[sanitize-htmlNPMUrl]: https://www.npmjs.com/package/sanitize-html
diff --git a/controllers/scriptStorage.js b/controllers/scriptStorage.js
index f33c753f2..854f699df 100644
--- a/controllers/scriptStorage.js
+++ b/controllers/scriptStorage.js
@@ -11,12 +11,14 @@ var statusError = require('../libs/debug').statusError;
//--- Dependency inclusions
var fs = require('fs');
var util = require('util');
+var http = require('http');
var _ = require('underscore');
var crypto = require('crypto');
var request = require('request');
var stream = require('stream');
var peg = require('pegjs');
var AWS = require('aws-sdk');
+var S3rver = require('s3rver');
var UglifyJS = require("uglify-es");
var rfc2047 = require('rfc2047');
var mediaType = require('media-type');
@@ -114,24 +116,64 @@ var parsers = (function () {
exports.parsers = parsers;
var bucketName = 'OpenUserJS.org';
+if (isDev) {
+ bucketName = bucketName.toLowerCase(); // NOTE: *S3rver* requirement
+}
var DEV_AWS_URL = null;
+var devAWSURL = null;
+var serverS3 = null;
if (isPro) {
AWS.config.update({
region: 'us-east-1'
});
} else {
- // You need to install (and ruby too): https://github.com/jubos/fake-s3
- // Then run the fakes3.sh script or: fakes3 -r fakeS3 -p 10001
DEV_AWS_URL = process.env.DEV_AWS_URL || 'http://localhost:10001';
AWS.config.update({
accessKeyId: 'fakeId',
secretAccessKey: 'fakeKey',
httpOptions: {
proxy: DEV_AWS_URL,
- agent: require('http').globalAgent // TODO: Move this up eventually
+ agent: http.globalAgent
+ }
+ });
+
+ devAWSURL = new URL(DEV_AWS_URL);
+
+ serverS3 = new S3rver({
+ hostname: devAWSURL.hostname,
+ port: devAWSURL.port,
+ directory: './S3rver' // WATCHPOINT: Technically this should be `..` Is probably upstream issue
+ }).run(function (aErr) {
+ if (aErr) {
+ console.error([
+ colors.red('ERROR: S3rver not initialized'),
+ aErr
+ ].join('\n'));
+ return;
}
+ console.log(colors.green('S3rver initialized'));
+
+ var s3 = new AWS.S3();
+ s3.createBucket({ Bucket: bucketName }, function (aErr) {
+ if (aErr) {
+ switch (aErr.statusCode) {
+ case 409:
+ console.log(colors.green('Default dev S3 bucket already exists'));
+ break;
+ default:
+ console.error([
+ colors.red('Error creating default dev S3 bucket'),
+ aErr
+ ].join('\n'));
+ // fallthrough
+ }
+ return;
+ } else {
+ console.log(colors.green('Created default dev S3 bucket'));
+ }
+ });
});
}
diff --git a/controllers/user.js b/controllers/user.js
index 5292e01cc..59671edfe 100644
--- a/controllers/user.js
+++ b/controllers/user.js
@@ -1952,7 +1952,7 @@ function getExistingScript(aReq, aOptions, aAuthedUser, aCallback) {
'S3 GET (chunking indirect) ',
aErr.code,
'for', installNameBase + (isLib ? '.js' : '.user.js'),
- 'in the', bucketName, 'bucket\n' +
+ 'in the S3 bucket\n' +
JSON.stringify(aErr, null, ' ') + '\n' +
aErr.stack
);
diff --git a/dev/postinstall.js b/dev/postinstall.js
index a21bad071..d76d41b56 100644
--- a/dev/postinstall.js
+++ b/dev/postinstall.js
@@ -26,123 +26,6 @@ var tasks = [
aCallback(null, ['$ ' + cmd + '\n' + colors.gray(aStdout)]);
});
},
- function (aStdouts, aCallback) {
- var cmd = 'ruby -v';
-
- exec(cmd, function (aErr, aStdout, aStderr) {
- if (aErr) {
- aCallback(aErr);
- return;
- }
-
- aStdouts.push('$ ' + cmd + '\n' + colors.gray(aStdout));
- aCallback(null, aStdouts);
- });
- },
- function (aStdouts, aCallback) {
- var cmd = 'bundler -v';
-
- exec(cmd, function (aErr, aStdout, aStderr) {
- if (aErr) {
- if (aErr.code === 127) {
-// aStdouts.push('$ ' + cmd + '\n' + colors.gray(aStdout));
- aCallback(null, false, aStdouts);
- return;
- } else {
- aCallback(aErr);
- return;
- }
- }
-
-// aStdouts.push('$ ' + cmd + '\n' + colors.gray(aStdout));
- aCallback(null, true, aStdouts);
- });
- },
- function (aSkip, aStdouts, aCallback) {
- var cmd = 'sudo gem install bundler -v 1.16.4';
-
- if (aSkip) {
- aCallback(null, aStdouts);
- return;
- }
-
- console.log(colors.cyan('Installing *bundler* gem as global...'));
-
- exec(cmd, function (aErr, aStdout, aStderr) {
- if (aErr) {
- aCallback(aErr);
- return;
- }
-
-// aStdouts.push('$ ' + cmd + '\n' + colors.gray(aStdout));
- aCallback(null, aStdouts);
- });
- },
- function (aStdouts, aCallback) {
- var cmd = 'bundler outdated';
-
- exec(cmd, function (aErr, aStdout, aStderr) {
- if (aErr) {
- if (aErr.code === 7) {
-// aStdouts.push('$ ' + cmd + '\n' + colors.gray(aStdout));
- aCallback(null, false, aStdouts);
- return;
- } else {
- aCallback(aErr);
- return;
- }
- }
-
-// aStdouts.push('$ ' + cmd + '\n' + colors.gray(aStdout));
- aCallback(null, true, aStdouts);
- });
- },
- function (aSkip, aStdouts, aCallback) {
- var cmd = 'bundler install';
-
- if (aSkip) {
- aCallback(null, aStdouts);
- return;
- }
-
- console.log(colors.cyan('Installing bundled gem(s) as global...'));
-
- exec(cmd, function (aErr, aStdout, aStderr) {
- if (aErr) {
- aCallback(aErr);
- return;
- }
-
-// aStdouts.push('$ ' + cmd + '\n' + colors.gray(aStdout));
- aCallback(null, aStdouts);
- });
- },
- function (aStdouts, aCallback) {
- var cmd = 'gem list';
-
- exec(cmd, function (aErr, aStdout, aStderr) {
- if (aErr) {
- aCallback(aErr);
- return;
- }
-
- aStdouts.push('$ ' + cmd + '\n' + colors.gray(aStdout));
- aCallback(null, aStdouts);
- });
- },
- function (aStdouts, aCallback) {
- var cmd = 'gem outdated';
-
- exec(cmd, function (aErr, aStdout, aStderr) {
- if (aErr) {
- aCallback(aErr);
- return;
- }
-
- aStdouts.push('$ ' + cmd + '\n' + colors.gray(aStdout));
- aCallback(null, aStdouts);
- });
- },
function (aStdouts, aCallback) {
var cmd = 'npm -v';
diff --git a/package.json b/package.json
index a64b5b433..50a03db75 100644
--- a/package.json
+++ b/package.json
@@ -68,6 +68,9 @@
"underscore": "1.9.1",
"useragent": "2.3.0"
},
+ "devDependencies": {
+ "s3rver": "2.2.6"
+ },
"optionalDependencies": {
"kerberos": "1.0.0"
},