diff options
| author | Sean Fridman <mail@seanfridman.com> | 2015-12-12 16:21:35 +0100 |
|---|---|---|
| committer | Sean Fridman <mail@seanfridman.com> | 2015-12-12 16:21:35 +0100 |
| commit | eb2d4cd758eb06abfe9387a33f1e0f0898980d0d (patch) | |
| tree | c927f97a6a43b0254af5fc7f386c30af9aa9c9a7 | |
| parent | 59d9b7e777b1b684aae6d85951c95d29450aee12 (diff) | |
Implement Twitter service
| -rw-r--r-- | app/index.js | 15 | ||||
| -rw-r--r-- | app/node_modules/okserver/index.js | 7 | ||||
| -rw-r--r-- | app/node_modules/okservices/oks3/index.js (renamed from app/node_modules/okservices/index.js) | 17 | ||||
| -rw-r--r-- | app/node_modules/okservices/oks3/package.json | 15 | ||||
| -rw-r--r-- | app/node_modules/okservices/oktwitter/Readme.md | 6 | ||||
| -rw-r--r-- | app/node_modules/okservices/oktwitter/index.js | 48 | ||||
| -rw-r--r-- | app/node_modules/okservices/oktwitter/package.json | 13 | ||||
| -rw-r--r-- | app/node_modules/okservices/package.json | 7 | ||||
| -rw-r--r-- | package.json | 2 |
9 files changed, 109 insertions, 21 deletions
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/oks3/index.js index fbbdbfd..bd0915e 100644 --- a/app/node_modules/okservices/index.js +++ b/app/node_modules/okservices/oks3/index.js @@ -1,12 +1,13 @@ var skipper = require('skipper'); +var skipperS3 = require('skipper-s3') -function OKImageService(options) { - if (!(this instanceof OKImageService)) return new OKImageService(options); +function OKS3(options) { + if (!(this instanceof OKS3)) return new OKS3(options); options = options || {}; if (!options.express) - throw new Error('Express not provided to OKImageService'); + throw new Error('Express not provided to OKS3'); if (!options.s3) - throw new Error('S3 configuration not provided to OKImageService'); + throw new Error('S3 configuration not provided to OKS3'); var express = options.express; var router = express.Router(); @@ -17,7 +18,7 @@ function OKImageService(options) { // 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'), + adapter: skipperS3, key: options.s3.key, secret: options.s3.secret, bucket: options.s3.bucket, @@ -34,10 +35,8 @@ function OKImageService(options) { this._middleware = router; } -OKImageService.prototype.middleware = function() { +OKS3.prototype.middleware = function() { return this._middleware; }; -module.exports = { - OKImageService: OKImageService -}; +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" } diff --git a/package.json b/package.json index f91a986..8587ab7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "okcms", - "version": "0.1.12", + "version": "0.1.13", "description": "great", "main": "app/index.js", "scripts": { |
