summaryrefslogtreecommitdiff
path: root/app/node_modules/okservices
diff options
context:
space:
mode:
Diffstat (limited to 'app/node_modules/okservices')
-rw-r--r--app/node_modules/okservices/index.js41
-rwxr-xr-xapp/node_modules/okservices/install.sh1
-rw-r--r--app/node_modules/okservices/oks3/index.js145
-rw-r--r--app/node_modules/okservices/oks3/package.json16
-rw-r--r--app/node_modules/okservices/oks3/upload.js79
-rw-r--r--app/node_modules/okservices/oktwitter/Readme.md6
-rw-r--r--app/node_modules/okservices/oktwitter/index.js48
-rw-r--r--app/node_modules/okservices/oktwitter/package.json13
-rw-r--r--app/node_modules/okservices/okwebhook/index.js83
-rw-r--r--app/node_modules/okservices/okwebhook/package.json11
-rw-r--r--app/node_modules/okservices/package.json8
11 files changed, 404 insertions, 47 deletions
diff --git a/app/node_modules/okservices/index.js b/app/node_modules/okservices/index.js
deleted file mode 100644
index 46f7ffd..0000000
--- a/app/node_modules/okservices/index.js
+++ /dev/null
@@ -1,41 +0,0 @@
-var skipper = require('skipper');
-
-function OKImageService(options) {
- if (!(this instanceof OKImageService)) return new OKImageService(options);
- options = options || {};
- if (!options.express)
- throw new Error('Express not provided to OKImageService');
- if (!options.s3)
- throw new Error('S3 configuration not provided to OKImageService');
- var express = options.express;
-
- var router = express.Router();
-
- router.use(skipper());
-
- router.post('/', function(req, res) {
- // req should have a method `file` on it which is
- // provided by skipper. Use that to do AWS stuff
- req.file('image').upload({
- adapter: require('skipper-s3'),
- key: options.s3.key,
- secret: options.s3.secret,
- bucket: options.s3.bucket,
- headers: {
- 'x-amz-acl': 'public-read'
- }
- }, function (err, uploadedFiles) {
- res.json(uploadedFiles);
- });
- });
-
- this._middleware = router;
-}
-
-OKImageService.prototype.middleware = function() {
- return this._middleware;
-};
-
-module.exports = {
- OKImageService: OKImageService
-};
diff --git a/app/node_modules/okservices/install.sh b/app/node_modules/okservices/install.sh
new file mode 100755
index 0000000..5ffd898
--- /dev/null
+++ b/app/node_modules/okservices/install.sh
@@ -0,0 +1 @@
+for i in ok* ; do cd $i ; npm install; cd .. ; done ; cd ../..
diff --git a/app/node_modules/okservices/oks3/index.js b/app/node_modules/okservices/oks3/index.js
new file mode 100644
index 0000000..cc40b71
--- /dev/null
+++ b/app/node_modules/okservices/oks3/index.js
@@ -0,0 +1,145 @@
+var upload = require("./upload")
+var multer = require('multer')
+
+// Hack to prevent this god-forsaken module from crashing our shit
+var d = require('domain').create()
+d.on('error', function (err) {
+ console.log(err)
+ console.error('Stupid error in S3 upload. Upload probably prematurely canceled')
+})
+
+function OKS3(options) {
+ if (!(this instanceof OKS3)) return new OKS3(options);
+ options = options || {};
+ if (!options.express)
+ throw new Error('Express not provided to OKS3');
+ if (!options.s3)
+ throw new Error('S3 configuration not provided to OKS3');
+
+ if (!options.s3.image) options.s3.image = {}
+ if (!options.s3.audio) options.s3.audio = {}
+ if (!options.s3.video) options.s3.video = {}
+
+ // Make sure maxbytes property is there - it can be a number,
+ // or zero/undefined (for no maximum upload size)
+ if (options.s3.maxbytes) {
+ if (! ('maxbytes' in options.s3.image))
+ options.s3.image.maxbytes = options.s3.maxbytes
+ if (! ('maxbytes' in options.s3.video))
+ options.s3.video.maxbytes = options.s3.maxbytes
+ if (! ('maxbytes' in options.s3.audio))
+ options.s3.audio.maxbytes = options.s3.maxbytes
+ }
+ if (typeof options.s3.image.allowed !== "boolean")
+ options.s3.image.allowed = true
+ if (typeof options.s3.video.allowed !== "boolean")
+ options.s3.video.allowed = false
+ if (typeof options.s3.audio.allowed !== "boolean")
+ options.s3.audio.allowed = false
+
+ upload.init({
+ key: options.s3.key,
+ secret: options.s3.secret,
+ bucket: options.s3.bucket,
+ })
+
+ var express = options.express;
+
+ var router = express.Router();
+
+ var mult = multer()
+
+ router.post('/image', mult.single('image'), function(req, res) {
+ d.run(function () {
+
+ if (! options.s3.image.allowed) {
+ return res.status(500).json({ error: "Image uploading not permitted" })
+ }
+
+ upload.put({
+ file: req.file,
+ preserveFilename: options.s3.image.preserveFilename,
+ dirname: options.s3.dirname,
+ types: {
+ 'image/gif': 'gif',
+ 'image/jpeg': 'jpg',
+ 'image/jpg': 'jpg',
+ 'image/png': 'png',
+ },
+ unacceptable: function(err){
+ res.json({ error: err })
+ },
+ success: function(url){
+ res.json({ url: url })
+ }
+ })
+
+ });
+ });
+
+ router.post('/audio', mult.single('audio'), function(req, res) {
+ d.run(function () {
+
+ if (! options.s3.image.allowed) {
+ return res.status(500).json({ error: "Audio uploading not permitted" })
+ }
+
+ upload.put({
+ file: req.file,
+ preserveFilename: options.s3.audio.preserveFilename,
+ dirname: options.s3.dirname,
+ types: {
+ 'audio/mp3': 'mp3',
+ 'audio/mpeg': 'mp3',
+ 'audio/wav': 'wav',
+ 'audio/flac': 'flac',
+ },
+ unacceptable: function(err){
+ res.json({ error: err })
+ },
+ success: function(url){
+ res.json({ url: url })
+ }
+ })
+
+ });
+ });
+
+ router.post('/video', mult.single('video'), function(req, res) {
+ d.run(function () {
+
+ if (! options.s3.image.allowed) {
+ return res.status(500).json({ error: "Video uploading not permitted" })
+ }
+
+ upload.put({
+ file: req.file,
+ preserveFilename: options.s3.video.preserveFilename,
+ dirname: options.s3.dirname,
+ types: {
+ 'video/mp4': 'mp4',
+ 'video/webm': 'webm',
+ },
+ unacceptable: function(err){
+ res.json({ error: err })
+ },
+ success: function(url){
+ res.json({ url: url })
+ }
+ })
+
+ });
+ });
+
+ function preserveFilename (stream, cb){
+ cb(null, stream.filename)
+ }
+
+ this._middleware = router;
+}
+
+OKS3.prototype.middleware = function() {
+ return this._middleware;
+};
+
+module.exports = OKS3
diff --git a/app/node_modules/okservices/oks3/package.json b/app/node_modules/okservices/oks3/package.json
new file mode 100644
index 0000000..61da414
--- /dev/null
+++ b/app/node_modules/okservices/oks3/package.json
@@ -0,0 +1,16 @@
+{
+ "name": "oks3",
+ "version": "1.0.0",
+ "description": "s3 wassup",
+ "main": "index.js",
+ "scripts": {
+ "test": "echo \"Error: no test specified\" && exit 1"
+ },
+ "author": "OKFocus",
+ "license": "None",
+ "dependencies": {
+ "knox": "^0.9.2",
+ "multer": "^1.1.0",
+ "node-uuid": "^1.4.7"
+ }
+}
diff --git a/app/node_modules/okservices/oks3/upload.js b/app/node_modules/okservices/oks3/upload.js
new file mode 100644
index 0000000..517d5f7
--- /dev/null
+++ b/app/node_modules/okservices/oks3/upload.js
@@ -0,0 +1,79 @@
+
+var knox = require('knox')
+var uuid = require('node-uuid')
+
+var s3
+
+var acceptableuploadTypes = {
+ 'image/gif': 'gif',
+ 'image/jpeg': 'jpg',
+ 'image/jpg': 'jpg',
+ 'image/png': 'png',
+}
+
+module.exports = {}
+
+module.exports.init = function (opt){
+ s3 = knox.createClient({
+ key: opt.key,
+ secret: opt.secret,
+ bucket: opt.bucket,
+ })
+}
+
+module.exports.put = function (opt) {
+ var filename
+ var err
+ var now = new Date()
+
+ var file = opt.file
+
+ var types = opt.types || acceptableuploadTypes
+ var extension = types[file.mimetype]
+
+ if (opt.preserveFilename) {
+ filename = file.originalname
+ }
+ else {
+ filename = uuid.v1() + "." + extension;
+ }
+
+ var remote_path = "/" + opt.dirname + "/" + filename
+
+ if (! extension) {
+ err = "Unacceptable filetype."
+ }
+ else if (opt.maxSize && file.size > opt.maxSize) {
+ err = "File too large. Uploads can be a maximum of " + opt.maxSize + " bytes."
+ }
+
+ if (err) {
+ console.error(">>>", err)
+ opt.unacceptable && opt.unacceptable(err)
+ return
+ }
+
+ opt.acceptable && opt.acceptable(err)
+
+ // console.log("upload >", remote_path)
+ s3.putBuffer(file.buffer, remote_path, {
+ 'Content-Length': file.size,
+ 'Content-Type': file.mimetype,
+ 'x-amz-acl': 'public-read'
+ }, function(err, s3res) {
+ if (err || s3res.statusCode !== 200) {
+ console.error(err);
+ if (s3res && s3res.resume) {
+ s3res.resume()
+ }
+ return;
+ }
+
+ var file_url = s3res.url || s3res.req.url
+
+ opt.success && opt.success(file_url)
+ }).on('error', function(err, s3res){
+ console.error(err)
+ s3res && s3res.resume && s3res.resume()
+ })
+}
diff --git a/app/node_modules/okservices/oktwitter/Readme.md b/app/node_modules/okservices/oktwitter/Readme.md
new file mode 100644
index 0000000..def73db
--- /dev/null
+++ b/app/node_modules/okservices/oktwitter/Readme.md
@@ -0,0 +1,6 @@
+# oktwitter
+
+## Service to allow auth with Twitter API
+
+Requests to this service proxy to the twitter API, adding proper auth
+credentials along the way
diff --git a/app/node_modules/okservices/oktwitter/index.js b/app/node_modules/okservices/oktwitter/index.js
new file mode 100644
index 0000000..ec4945d
--- /dev/null
+++ b/app/node_modules/okservices/oktwitter/index.js
@@ -0,0 +1,48 @@
+var Twit = require('twit')
+
+/**
+ * Proxy to Twitter API adding auth creds
+ * TODO Technically can be abused by anyone right now.
+ * Should add some sort of same origin policy.
+ */
+function OKTwitter (options) {
+ if (!(this instanceof OKTwitter)) return new OKTwitter(options)
+ options = options || {}
+ if (!options.express)
+ throw new Error('Express not provided to OKTwitter');
+ if (!options.credentials)
+ throw new Error('Twitter credentials not provided to OKTwitter');
+
+ var express = options.express
+ var router = express.Router()
+ var creds = options.credentials
+ var twitter = new Twit({
+ consumer_key: creds.consumerKey,
+ consumer_secret: creds.consumerSecret,
+ access_token: creds.accessToken,
+ access_token_secret: creds.accessTokenSecret,
+ })
+
+ router.get('*', function (req, res) {
+ twitter.get(req.path.slice(1), req.query, function (err, data) {
+ if (err) {
+ res.status(err.statusCode)
+ res.send(err.twitterReply)
+ } else {
+ res.json(data)
+ }
+ })
+ })
+
+ router.post('*', function (req, res) {
+ throw new Error('Twitter POST requests not implemented')
+ })
+
+ this._router = router
+}
+
+OKTwitter.prototype.middleware = function () {
+ return this._router
+}
+
+module.exports = OKTwitter
diff --git a/app/node_modules/okservices/oktwitter/package.json b/app/node_modules/okservices/oktwitter/package.json
new file mode 100644
index 0000000..ddee2f9
--- /dev/null
+++ b/app/node_modules/okservices/oktwitter/package.json
@@ -0,0 +1,13 @@
+{
+ "name": "oktwitter",
+ "version": "1.0.0",
+ "description": "Allows auth to Twitter API",
+ "main": "index.js",
+ "scripts": {
+ "test": "echo \"Error: no test specified\" && exit 1"
+ },
+ "author": "OKFocus",
+ "dependencies": {
+ "twit": "^2.1.1"
+ }
+}
diff --git a/app/node_modules/okservices/okwebhook/index.js b/app/node_modules/okservices/okwebhook/index.js
new file mode 100644
index 0000000..d04e662
--- /dev/null
+++ b/app/node_modules/okservices/okwebhook/index.js
@@ -0,0 +1,83 @@
+
+/**
+ * Service which will listen for a Github webhook, fired on push.
+ * This service can be used to rebuild / restart the app automatically
+ * when new code is pushed.
+ */
+
+var crypto = require('crypto')
+var exec = require('child_process').exec
+var path = require('path')
+
+function OKWebhook (options) {
+ if (!(this instanceof OKWebhook)) return new OKWebhook(options)
+ options = options || {}
+ if (!options.express)
+ throw new Error('Express not provided to OKWebhook');
+ if (!options.config)
+ throw new Error('Configuration not provided to OKWebhook');
+ if (options.config.active && !options.config.secret)
+ throw new Error('Github secret not provided to OKWebhook');
+ if (options.config.active && !options.config.command)
+ throw new Error('Build command not provided to OKWebhook');
+
+ var express = options.express
+ var router = express.Router()
+ var config = options.config
+
+ var secret = config.secret
+ var command = config.command
+
+ router.get('/', function (req, res) {
+ res.send('GET not supported')
+ })
+
+ router.post('/', getBody, function (req, res) {
+ if (!config.active)
+ return
+ console.log("OKWebhook received push")
+ var event = req.headers['x-github-event']
+ if (event !== "push") {
+ return res.sendStatus(500)
+ }
+ var sig = req.headers['x-hub-signature'].split('=')[1]
+ var text = req.rawBody
+ var hash = crypto.createHmac('sha1', secret).update(text).digest('hex')
+ if (hash !== sig) {
+ return res.sendStatus(500)
+ }
+ res.sendStatus(200)
+ var cwd = path.dirname(command)
+ exec(command, { cwd: cwd }, function(err, stdout, stderr){
+ // may not fire if process was restarted..
+ console.log(process.env)
+ console.log(stdout)
+ })
+ })
+
+ function getBody (req, res, next) {
+ req.rawBody = ''
+ // req.setEncoding('utf8')
+
+ req.on('data', function(chunk) {
+ req.rawBody += chunk
+ })
+
+ req.on('end', function() {
+ try {
+ req.body = JSON.parse(req.rawBody)
+ } catch (e) {
+ return res.sendStatus(500)
+ }
+ next()
+ })
+ }
+
+ this._router = router
+}
+
+OKWebhook.prototype.middleware = function () {
+ return this._router
+}
+
+module.exports = OKWebhook
diff --git a/app/node_modules/okservices/okwebhook/package.json b/app/node_modules/okservices/okwebhook/package.json
new file mode 100644
index 0000000..0436f01
--- /dev/null
+++ b/app/node_modules/okservices/okwebhook/package.json
@@ -0,0 +1,11 @@
+{
+ "name": "okwebhook",
+ "version": "1.0.0",
+ "description": "webhook to receive pushes from github",
+ "main": "index.js",
+ "scripts": {
+ "test": "echo \"Error: no test specified\" && exit 1"
+ },
+ "author": "okfocus <frontdesk@okfoc.us>",
+ "license": "LNT"
+}
diff --git a/app/node_modules/okservices/package.json b/app/node_modules/okservices/package.json
index f27247b..6231499 100644
--- a/app/node_modules/okservices/package.json
+++ b/app/node_modules/okservices/package.json
@@ -4,12 +4,8 @@
"description": "providing very good services",
"main": "index.js",
"scripts": {
+ "postinstall": "./install.sh",
"test": "echo \"Error: no test specified\" && exit 1"
},
- "author": "OKFocus",
- "license": "None",
- "dependencies": {
- "skipper": "^0.5.5",
- "skipper-s3": "^0.5.5"
- }
+ "author": "OKFocus"
}