From eb2d4cd758eb06abfe9387a33f1e0f0898980d0d Mon Sep 17 00:00:00 2001 From: Sean Fridman Date: Sat, 12 Dec 2015 16:21:35 +0100 Subject: Implement Twitter service --- app/index.js | 15 +++++-- app/node_modules/okserver/index.js | 7 +++- app/node_modules/okservices/index.js | 43 ------------------- app/node_modules/okservices/oks3/index.js | 42 +++++++++++++++++++ app/node_modules/okservices/oks3/package.json | 15 +++++++ app/node_modules/okservices/oktwitter/Readme.md | 6 +++ app/node_modules/okservices/oktwitter/index.js | 48 ++++++++++++++++++++++ app/node_modules/okservices/oktwitter/package.json | 13 ++++++ app/node_modules/okservices/package.json | 7 +--- 9 files changed, 142 insertions(+), 54 deletions(-) delete mode 100644 app/node_modules/okservices/index.js create mode 100644 app/node_modules/okservices/oks3/index.js create mode 100644 app/node_modules/okservices/oks3/package.json create mode 100644 app/node_modules/okservices/oktwitter/Readme.md create mode 100644 app/node_modules/okservices/oktwitter/index.js create mode 100644 app/node_modules/okservices/oktwitter/package.json (limited to 'app') diff --git a/app/index.js b/app/index.js index 2507dd2..6a1c74f 100644 --- a/app/index.js +++ b/app/index.js @@ -13,7 +13,8 @@ var OKResource = require('okresource') var OKTemplate = require('oktemplate'); var OKServer = require('okserver'); var OKSchema = require('okschema'); -var OKImageService = require('okservices').OKImageService; +var OKS3Service = require('okservices/oks3'); +var OKTwitterService = require('okservices/oktwitter') require('dotenv').load(); @@ -92,12 +93,19 @@ function OKCMS(options) { // Create services if (serviceConfig.s3) { - var imageService = OKImageService({ + var s3Service = OKS3Service({ express: express, s3: serviceConfig.s3, }); } + if (serviceConfig.twitter) { + var twitterService = OKTwitterService({ + express: express, + credentials: serviceConfig.twitter, + }) + } + var server = this._server = new OKServer({ express: express, app: app, @@ -108,7 +116,8 @@ function OKCMS(options) { adminRoot: adminRoot, adminPath: adminPath, services: { - image: imageService + s3: s3Service, + twitter: twitterService, }, errorHandler: errorHandler }); diff --git a/app/node_modules/okserver/index.js b/app/node_modules/okserver/index.js index 6d0ed17..ee1b4fb 100644 --- a/app/node_modules/okserver/index.js +++ b/app/node_modules/okserver/index.js @@ -59,8 +59,11 @@ function OKServer(options) { // Application router app.use(router); // Add services - if (services.image) { - app.use('/_services/image', services.image.middleware()); + if (services.s3) { + app.use('/_services/image', services.s3.middleware()); + } + if (services.twitter) { + app.use('/_services/twitter', services.twitter.middleware()) } // Make sure this lady is last. Checks whether the desired // route has a trailing-slash counterpart and redirects there diff --git a/app/node_modules/okservices/index.js b/app/node_modules/okservices/index.js deleted file mode 100644 index fbbdbfd..0000000 --- a/app/node_modules/okservices/index.js +++ /dev/null @@ -1,43 +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, - dirname: options.s3.dirname, - maxBytes: options.s3.maxbytes, - 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/oks3/index.js b/app/node_modules/okservices/oks3/index.js new file mode 100644 index 0000000..bd0915e --- /dev/null +++ b/app/node_modules/okservices/oks3/index.js @@ -0,0 +1,42 @@ +var skipper = require('skipper'); +var skipperS3 = require('skipper-s3') + +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'); + 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: skipperS3, + key: options.s3.key, + secret: options.s3.secret, + bucket: options.s3.bucket, + dirname: options.s3.dirname, + maxBytes: options.s3.maxbytes, + headers: { + 'x-amz-acl': 'public-read' + } + }, function (err, uploadedFiles) { + res.json(uploadedFiles); + }); + }); + + 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..982fbfe --- /dev/null +++ b/app/node_modules/okservices/oks3/package.json @@ -0,0 +1,15 @@ +{ + "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": { + "skipper": "^0.5.7", + "skipper-s3": "^0.5.5" + } +} 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/package.json b/app/node_modules/okservices/package.json index 2c95325..2669a49 100644 --- a/app/node_modules/okservices/package.json +++ b/app/node_modules/okservices/package.json @@ -6,10 +6,5 @@ "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, - "author": "OKFocus", - "license": "None", - "dependencies": { - "skipper": "^0.5.7", - "skipper-s3": "^0.5.5" - } + "author": "OKFocus" } -- cgit v1.2.3-70-g09d2