From 6293a89276c8284e66455d675325915d43538a0d Mon Sep 17 00:00:00 2001 From: Michael Hayes Date: Fri, 28 Mar 2014 17:00:58 -0700 Subject: [PATCH] removed auth --- index.js | 65 ++++---- lib/controllers/auth/index.js | 4 - lib/controllers/auth/register.js | 26 --- lib/controllers/auth/sessions.js | 33 ---- lib/controllers/auth/update.js | 35 ---- lib/controllers/auth/user.js | 20 --- lib/controllers/{packages => }/get_package.js | 10 +- lib/controllers/{packages => }/get_tarball.js | 7 +- lib/controllers/{packages => }/index.js | 0 lib/controllers/{packages => }/publish.js | 13 +- lib/handler.js | 61 +++---- lib/models/Package.js | 9 +- lib/models/SessionStore.js | 24 --- lib/models/User.js | 130 --------------- lib/{responses => respond}/401.js | 8 +- lib/{responses => respond}/404.js | 8 +- lib/{responses => respond}/409.js | 8 +- lib/respond/500.js | 7 + lib/respond/index.js | 40 +++++ lib/respond/json.js | 10 ++ lib/responses/500.js | 7 - lib/responses/index.js | 5 - lib/responses/json.js | 10 -- lib/utils/load.js | 3 +- package.json | 2 +- test/handler.test.js | 10 +- .../index.test.js => Package.test.js} | 8 +- test/models/SessionStore.test.js | 27 ---- test/models/User.test.js | 152 ------------------ test/response.test.js | 34 ++-- 30 files changed, 164 insertions(+), 612 deletions(-) delete mode 100644 lib/controllers/auth/index.js delete mode 100644 lib/controllers/auth/register.js delete mode 100644 lib/controllers/auth/sessions.js delete mode 100644 lib/controllers/auth/update.js delete mode 100644 lib/controllers/auth/user.js rename lib/controllers/{packages => }/get_package.js (70%) rename lib/controllers/{packages => }/get_tarball.js (53%) rename lib/controllers/{packages => }/index.js (100%) rename lib/controllers/{packages => }/publish.js (55%) delete mode 100644 lib/models/SessionStore.js delete mode 100644 lib/models/User.js rename lib/{responses => respond}/401.js (60%) rename lib/{responses => respond}/404.js (58%) rename lib/{responses => respond}/409.js (59%) create mode 100644 lib/respond/500.js create mode 100644 lib/respond/index.js create mode 100644 lib/respond/json.js delete mode 100644 lib/responses/500.js delete mode 100644 lib/responses/index.js delete mode 100644 lib/responses/json.js rename test/models/{Package/index.test.js => Package.test.js} (86%) delete mode 100644 test/models/SessionStore.test.js delete mode 100644 test/models/User.test.js diff --git a/index.js b/index.js index 236916d..a56f2de 100644 --- a/index.js +++ b/index.js @@ -1,54 +1,47 @@ -var SessionStore = require('./lib/models/SessionStore') - , packages = require('./lib/controllers/packages') - , auth = require('./lib/controllers/auth') +var controllers = require('./lib/controllers') , handler = require('./lib/handler') , logging = require('./lib/logging') - , ns = require('./lib/context').ns + , context = require('./lib/context') , Router = require('unpm-router') , http = require('http') module.exports = setup function setup(config) { - return ns.run(function(context) { - unpm.call(context, ns, config) + return context.ns.run(function(new_context) { + unpm.call(new_context, context.ns, config) }) } function unpm(ns, config) { var router = Router(config.base_pathname) + , self = this handler = ns.bind(handler) - this.sessions = config.sessions || SessionStore() - this.server = http.createServer(handler) - this.log = logging(config) - this.port = config.port || 8123 - this.backend = config.backend - this.handler = handler - this.router = router - this.config = config - this.middleware = [] - - // auth - router.add('GET', routes.get_user, auth.user) - router.add('PUT', routes.register, auth.register) - router.add('PUT', routes.update_user, auth.update) - router.add('POST', routes.session, auth.sessions.create) - - // packages - router.add('PUT', routes.publish, packages.publish) - router.add('GET', routes.get_tarball, packages.get_tarball) - router.add('GET', routes.get_package, packages.get_package) -} + self.server = http.createServer(handler) + self.log = logging(config) + self.port = config.port || 8123 + self.handler = handler + self.get_context = {} + self.router = router + self.config = config + self.middleware = [] + self.backend = {} + + Object.keys(config.backend).forEach(function(key) { + self.backend[key] = function() { + var args = [].slice.call(arguments) + + if(typeof args[args.length - 1] === 'function') { + args.push(ns.bind(args.pop())) + } + + return config.backend[key].apply(self.backend, args) + } + }) -var routes = { - index: '/' - , get_package: '/:name/:version?' - , get_user: '/-/user/org.couchdb.user:*' - , get_tarball: '/:name/-/*-*.tgz' - , publish: '/:name' - , session: '/_session' - , register: '/-/user/org.couchdb.user:*' - , update_user: '/-/user/org.couchdb.user:*/*' + router.add('PUT', '/:name', controllers.publish) + router.add('GET', '/:name/-/*-*.tgz', controllers.get_tarball) + router.add('GET', '/:name/:version?', controllers.get_package) } diff --git a/lib/controllers/auth/index.js b/lib/controllers/auth/index.js deleted file mode 100644 index ca2958e..0000000 --- a/lib/controllers/auth/index.js +++ /dev/null @@ -1,4 +0,0 @@ -module.exports.update = require('./update') -module.exports.sessions = require('./sessions') -module.exports.register = require('./register') -module.exports.user = require('./user') diff --git a/lib/controllers/auth/register.js b/lib/controllers/auth/register.js deleted file mode 100644 index 3077eac..0000000 --- a/lib/controllers/auth/register.js +++ /dev/null @@ -1,26 +0,0 @@ -var responses = require('../../responses') - , guard = require('../../utils/guard') - , User = require('../../models/User') - , load = require('../../utils/load') - -module.exports = req_handler - -function req_handler(req, res, route, respond) { - var username = route.splats[0] - - load(req, guard(register, respond)) - - function register(data) { - User.find(username, function(err, user) { - if(user) { - return responses.conflict(req, res) - } - - User.create(username, data, guard(created, respond)) - }) - } - - function created() { - respond(null, 201, data) - } -} diff --git a/lib/controllers/auth/sessions.js b/lib/controllers/auth/sessions.js deleted file mode 100644 index cc67c05..0000000 --- a/lib/controllers/auth/sessions.js +++ /dev/null @@ -1,33 +0,0 @@ -var responses = require('../../responses') - , guard = require('../../utils/guard') - , User = require('../../models/User') - , context = require('../../context') - , load = require('../../utils/load') - -module.exports.create = session_request - -function session_request(req, res, route, respond) { - load(req, guard(create_session)) - - function create_session(data) { - var sessions = context().sessions - , username = data.username - , password = data.password - - User.auth(username, password, function(err, user) { - if(err || !user) { - return response.unauthorized(req, res) - } - - sessions.set(user, guard(got_session, respond)) - }) - } - - function got_session() { - respond(null, 201, { - 'ok': true - , 'name': username - , 'roles': [] - }) - } -} diff --git a/lib/controllers/auth/update.js b/lib/controllers/auth/update.js deleted file mode 100644 index f6aa23a..0000000 --- a/lib/controllers/auth/update.js +++ /dev/null @@ -1,35 +0,0 @@ -var responses = require('../../responses') - , guard = require('../../utils/guard') - , User = require('../../models/User') - , load = require('../../utils/load') - -module.exports = req_handler - -function req_handler(req, res, route, respond) { - var username = route.splats[0] - - load(req, guard(update, respond)) - - function update(data) { - var pass = new Buffer(req.headers.authorization.split(' ')[1], 'base64') - .toString().split(':')[1] - - User.auth(username, pass, got_user) - - function got_user(err, user) { - if(err || !user) { - return responses.unauthorized(req, res) - } - - User.update(user, data, updated) - } - - function updated(err, user) { - if(err || !user) { - return respond(err) - } - - respond(null, 201, user) - } - } -} diff --git a/lib/controllers/auth/user.js b/lib/controllers/auth/user.js deleted file mode 100644 index 8cc13d2..0000000 --- a/lib/controllers/auth/user.js +++ /dev/null @@ -1,20 +0,0 @@ -var responses = require('../../responses') - , User = require('../../models/User') - -module.exports = get_user - -function get_user(req, res, route, respond) { - var username = route.splats[0] - - User.find(username, function(err, user) { - if(err) { - return respond(err) - } - - if(!username) { - return responses.not_found(req, res) - } - - respond(null, 200, user) - }) -} diff --git a/lib/controllers/packages/get_package.js b/lib/controllers/get_package.js similarity index 70% rename from lib/controllers/packages/get_package.js rename to lib/controllers/get_package.js index b43acc0..c49a388 100644 --- a/lib/controllers/packages/get_package.js +++ b/lib/controllers/get_package.js @@ -1,12 +1,10 @@ -var Package = require('../../models/Package') - , responses = require('../../responses') - , context = require('../../context') +var Package = require('../models/Package') , path = require('path') , url = require('url') module.exports = get_package -function get_package(req, res, route, respond) { +function get_package(context, route, respond) { var version = route.params.version , name = route.params.name @@ -17,14 +15,14 @@ function get_package(req, res, route, respond) { Package.get_version_meta(name, version, return_meta) function return_meta(err, meta) { - var base_url = url.format(context().host) + var base_url = url.format(context.host) if(err) { return respond(err) } if(!meta) { - return responses.not_found(req, res) + return respond.not_found() } Object.keys(meta.versions).forEach(function(version) { diff --git a/lib/controllers/packages/get_tarball.js b/lib/controllers/get_tarball.js similarity index 53% rename from lib/controllers/packages/get_tarball.js rename to lib/controllers/get_tarball.js index 8117770..d3b0b7a 100644 --- a/lib/controllers/packages/get_tarball.js +++ b/lib/controllers/get_tarball.js @@ -1,15 +1,14 @@ -var Package = require('../../models/Package') - , get_context = require('../../context') +var Package = require('../models/Package') module.exports = get_tarball -function get_tarball(req, res, route) { +function get_tarball(context, route) { var version = route.splats[1] , name = route.splats[0] Package.get_tarball(name, version) .on('error', function(err) { - get_context().log.error(err) + context.log.error(err) }) .pipe(res) } diff --git a/lib/controllers/packages/index.js b/lib/controllers/index.js similarity index 100% rename from lib/controllers/packages/index.js rename to lib/controllers/index.js diff --git a/lib/controllers/packages/publish.js b/lib/controllers/publish.js similarity index 55% rename from lib/controllers/packages/publish.js rename to lib/controllers/publish.js index 4113afc..8a30eca 100644 --- a/lib/controllers/packages/publish.js +++ b/lib/controllers/publish.js @@ -1,22 +1,21 @@ -var Package = require('../../models/Package') - , responses = require('../../responses') - , guard = require('../../utils/guard') - , load = require('../../utils/load') +var Package = require('../models/Package') + , guard = require('../utils/guard') + , load = require('../utils/load') module.exports = publish -function publish(req, res, route, respond) { +function publish(context, route, respond) { var data = [] , version - load(req, guard(get_versions, respond)) + load(context.req, guard(get_versions, respond)) function get_versions(meta) { var latest = meta['dist-tags'].latest Package.get_versions(meta.name, function(err, versions) { if(versions && versions.indexOf(latest) !== -1) { - return responses.conflict(req, res) + return respond.conflict() } Package.publish(meta, created) diff --git a/lib/handler.js b/lib/handler.js index fc0d40f..d9cb2d7 100644 --- a/lib/handler.js +++ b/lib/handler.js @@ -1,19 +1,26 @@ var run_middleware = require('./middleware') - , responses = require('./responses') - , context = require('./context') + , create_respond = require('./respond') + , get_context = require('./context') -module.exports = handler +module.exports = function(req, res) { + get_context.ns.run(function(context) { + handler(req, res) + }) +} function handler(req, res) { - var current_context = context() - , log = current_context.log + var context = get_context() - var route = current_context.router.match(req) + var respond = create_respond(req, res, context) + , route = context.router.match(req) + , log = context.log res.on('finish', function() { - var auth = new Buffer('hunter2:hunter2').toString('base64') + if(req.headers.authorization) { + var auth = new Buffer('hunter2:hunter2').toString('base64') - req.headers.authorization = 'Basic ' + auth + req.headers.authorization = 'Basic ' + auth + } var info = { statusCode: res.statusCode @@ -24,43 +31,25 @@ function handler(req, res) { log.info(info) }) + context.req = req + context.res = res + context.route = route + if(!route) { - return responses.not_found(req, res) + return respond.not_found() } - context.run(function(context) { - context.req = req - context.res = res - context.route = route - - if(!context.middleware || !context.middleware.length) { - return run_route() - } + if(!context.middleware || !context.middleware.length) { + return run_route() + } - run_middleware(context, context.middleware, run_route) - }) + run_middleware(context, context.middleware, run_route) function run_route(err) { if(err) { return respond(err) } - route.fn(req, res, route, respond) - } - - function respond(err, status, data) { - if(err) { - log.error(err) - - return responses.on_error(req, res, err) - } - - try { - data = JSON.stringify(data) - } catch(err) { - return responses.on_error(req, res, err) - } - - responses.json(req, res, status, data) + route.fn(context, route, respond) } } diff --git a/lib/models/Package.js b/lib/models/Package.js index 4aa047e..d58910f 100644 --- a/lib/models/Package.js +++ b/lib/models/Package.js @@ -14,14 +14,9 @@ Package.add = add ;['get_meta', 'set_meta', 'get_tarball', 'set_tarball'].forEach(function(key) { Package[key] = function() { - var args = [].slice.call(arguments) - , backend = context().backend + var backend = context().backend - if(typeof args[args.length - 1] === 'function') { - args.push(context.ns.bind(args.pop())) - } - - return backend[key].apply(backend, args) + return backend[key].apply(backend, arguments) } }) diff --git a/lib/models/SessionStore.js b/lib/models/SessionStore.js deleted file mode 100644 index 2cc4180..0000000 --- a/lib/models/SessionStore.js +++ /dev/null @@ -1,24 +0,0 @@ -var crypto = require('crypto') - -module.exports = create_session_store - -function create_session_store() { - var sessions = {} - - return {set: set, get: get} - - function set(data, done) { - var token = create_token() - - sessions[token] = data - done(null, token) - } - - function get(token, done) { - done(null, sessions[token]) - } -} - -function create_token() { - return crypto.randomBytes(30).toString('hex') -} diff --git a/lib/models/User.js b/lib/models/User.js deleted file mode 100644 index 422bd93..0000000 --- a/lib/models/User.js +++ /dev/null @@ -1,130 +0,0 @@ -var hash = require('password-hash') - , context = require('../context') - , crypto = require('crypto') - -module.exports.find = find_user -module.exports.create = create -module.exports.update = update -module.exports.auth = auth - -function find_user(username, done) { - find(username, function(err, user) { - if(err || !user) { - return done(err) - } - - done(null, clean_user(user)) - }) -} - -function get_user(username, done) { - return context().backend.get_user(username, context.ns.bind(done)) -} - -function set_user(username, data, done) { - return context().backend.set_user(username, data, context.ns.bind(done)) -} - -function find(username, done) { - get_user(username, function(err, data) { - try { - done(err, data ? JSON.parse(data) : null) - } catch(err) { - done(err) - } - }) -} - -function auth(username, password, done) { - find(username, function(err, user) { - var invalid = new Error('Name or password is incorrect.') - - if(err || !user) { - return done(invalid) - } - - if(!hash.verify(sha(password + user.salt), user.password_hash)) { - return done(invalid) - } - - done(null, clean_user(user)) - }) -} - -function create(username, data, done) { - if(!username || !data) { - return done(new Error('username and data are required')) - } - - try { - set_user( - username - , JSON.stringify(build_user(username, data, 1)) - , done - ) - } catch(err) { - done(err) - } -} - -function update(old, updated, done) { - try { - var v = +old._rev.split('-')[0] + 1 - - set_user( - old.name - , JSON.stringify(build_user(updated.name, updated, v)) - , on_updated - ) - } catch(err) { - done(err) - } - - function on_updated(err) { - if(err) { - return done(err) - } - - done(null, clean_user(updated)) - } -} - -function build_user(username, data, v) { - var user = {} - - user.name = username - user.email = data.email - user.salt = data.salt - user.date = data.date - user.password_hash = hash_pass(data.password_sha) - // not sure what this is actaully for, or supposed to be - // (I guess I should learn couch?) - user._rev = v + '-' + md5(data.date) - - return user -} - -function clean_user(raw_user) { - var user = {} - - user.name = raw_user.name - user.email = raw_user.email - user.date = raw_user.date - user._rev = raw_user._rev - - return user -} - -function md5(s) { - return crypto.createHash('md5').update(s).digest('hex') -} - -function sha(s) { - return crypto.createHash('sha1').update(s).digest('hex') -} - -function hash_pass(s, settings) { - settings = settings || context().config.crypto - - return hash.generate(s, settings) -} diff --git a/lib/responses/401.js b/lib/respond/401.js similarity index 60% rename from lib/responses/401.js rename to lib/respond/401.js index 112126f..8ec4534 100644 --- a/lib/responses/401.js +++ b/lib/respond/401.js @@ -1,12 +1,12 @@ module.exports = unauthorized -function unauthorized(req, res) { - res.writeHead(401, { +function unauthorized() { + this.res.writeHead(401, { 'Content-Type': 'application/json' }) - res.write(JSON.stringify({ + this.res.write(JSON.stringify({ error: 'unauthorized' , reason: 'Name or password is incorrect.' })) - res.end() + this.res.end() } diff --git a/lib/responses/404.js b/lib/respond/404.js similarity index 58% rename from lib/responses/404.js rename to lib/respond/404.js index fe8f672..79de83e 100644 --- a/lib/responses/404.js +++ b/lib/respond/404.js @@ -1,12 +1,12 @@ module.exports = not_found -function not_found(req, res) { - res.writeHead(404, { +function not_found() { + this.res.writeHead(404, { 'Content-Type': 'application/json' }) - res.write(JSON.stringify({ + this.res.write(JSON.stringify({ error: 'not_found' , reason: 'Document not found.' })) - res.end() + this.res.end() } diff --git a/lib/responses/409.js b/lib/respond/409.js similarity index 59% rename from lib/responses/409.js rename to lib/respond/409.js index 5370e96..7772ef1 100644 --- a/lib/responses/409.js +++ b/lib/respond/409.js @@ -1,13 +1,13 @@ module.exports = conflict -function conflict(req, res) { - res.writeHead(409, { +function conflict() { + this.res.writeHead(409, { 'Content-Type': 'application/json' }) - res.write(JSON.stringify({ + this.res.write(JSON.stringify({ error: 'conflict' , reason: 'Document update conflict.' })) - res.end() + this.res.end() } diff --git a/lib/respond/500.js b/lib/respond/500.js new file mode 100644 index 0000000..ef61b79 --- /dev/null +++ b/lib/respond/500.js @@ -0,0 +1,7 @@ +module.exports = on_error + +function on_error() { + this.res.writeHead(500) + this.res.write('Something went wrong.') + this.res.end() +} diff --git a/lib/respond/index.js b/lib/respond/index.js new file mode 100644 index 0000000..648f0c9 --- /dev/null +++ b/lib/respond/index.js @@ -0,0 +1,40 @@ +var context = require('../context') + +var unauthorized = require('./401') + , not_found = require('./404') + , on_error = require('./500') + , conflict = require('./409') + , json = require('./json') + +module.exports = create_responder + +function create_responder(req, res) { + var respond = context.ns.bind(base_respond) + + respond.unauthorized = unauthorized + respond.not_found = not_found + respond.on_error = on_error + respond.conflict = conflict + respond.json = json + respond.context = context() + respond.req = req + respond.res = res + + return respond + + function base_respond(err, status, data) { + if(err) { + respond.context.log.error(err) + + return respond.on_error(err) + } + + try { + data = JSON.stringify(data) + } catch(err) { + return respond.on_error(err) + } + + respond.json(status, data) + } +} diff --git a/lib/respond/json.js b/lib/respond/json.js new file mode 100644 index 0000000..de429ac --- /dev/null +++ b/lib/respond/json.js @@ -0,0 +1,10 @@ +module.exports = json + +function json(status, data) { + this.res.writeHead(status, { + 'Content-Type': 'application/json' + }) + + this.res.write(data) + this.res.end() +} diff --git a/lib/responses/500.js b/lib/responses/500.js deleted file mode 100644 index 35cec97..0000000 --- a/lib/responses/500.js +++ /dev/null @@ -1,7 +0,0 @@ -module.exports = on_error - -function on_error(req, res, err) { - res.writeHead(500) - res.write('Something went wrong.') - res.end() -} diff --git a/lib/responses/index.js b/lib/responses/index.js deleted file mode 100644 index 9cb62e3..0000000 --- a/lib/responses/index.js +++ /dev/null @@ -1,5 +0,0 @@ -module.exports.json = require('./json') -module.exports.on_error = require('./500') -module.exports.conflict = require('./409') -module.exports.not_found = require('./404') -module.exports.unauthorized = require('./401') diff --git a/lib/responses/json.js b/lib/responses/json.js deleted file mode 100644 index 4a48cfd..0000000 --- a/lib/responses/json.js +++ /dev/null @@ -1,10 +0,0 @@ -module.exports = json - -function json(req, res, status, data) { - res.writeHead(status, { - 'Content-Type': 'application/json' - }) - - res.write(data) - res.end() -} diff --git a/lib/utils/load.js b/lib/utils/load.js index f399196..91effe3 100644 --- a/lib/utils/load.js +++ b/lib/utils/load.js @@ -1,5 +1,4 @@ -var responses = require('../responses') - , concat = require('concat-stream') +var concat = require('concat-stream') , context = require('../context') module.exports = load diff --git a/package.json b/package.json index 3854e25..41078b2 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "description": "private npm registry in node", "main": "./index.js", "scripts": { - "test": "tape ./test/*.test.js ./test/**/*.test.js ./test/**/**/*.test.js", + "test": "tape ./test/*.test.js ./test/**/*.test.js", "start": "node bin/server.js | bunyan", "coverage": "node scripts/coverage.js", "coveralls": "npm run coverage | ./node_modules/coveralls/bin/coveralls.js" diff --git a/test/handler.test.js b/test/handler.test.js index 0b374cc..bab6f40 100644 --- a/test/handler.test.js +++ b/test/handler.test.js @@ -22,11 +22,11 @@ function req_and_resp_saved(t) { router.add('GET', '/arbitrary/path', arbitrary_handler) - function arbitrary_handler(req, res, route, respond) { + function arbitrary_handler(ctx, route, respond) { var context = get_context() - t.equal(req, context.req) - t.equal(res, context.res) + t.equal(ctx.req, context.req) + t.equal(ctx.res, context.res) t.equal(route, context.route) t.equal(route.route, '/arbitrary/path') @@ -63,7 +63,7 @@ function errors_work_as_expected(t) { t.plan(2) router.add('GET', '/500', handler_500) - function handler_500(req, res, route, respond) { + function handler_500(context, route, respond) { respond(new Error('woo!')) } @@ -120,7 +120,7 @@ function test_middleware(t) { router.add('GET', '/arbitrary/path', arbitrary_handler) - function arbitrary_handler(req, res, route, respond) { + function arbitrary_handler(context, route, respond) { t.strictEqual(special, get_context().special) respond(null, 200, {arbitrary: 'data'}) } diff --git a/test/models/Package/index.test.js b/test/models/Package.test.js similarity index 86% rename from test/models/Package/index.test.js rename to test/models/Package.test.js index 465e656..5df602d 100644 --- a/test/models/Package/index.test.js +++ b/test/models/Package.test.js @@ -1,8 +1,8 @@ -var Package = require('../../../lib/models/Package') - , config = require('../../../lib/config.json') - , backend = require('../../backend') +var Package = require('../../lib/models/Package') + , config = require('../../lib/config.json') , concat = require('concat-stream') - , setup = require('../../setup') + , backend = require('../backend') + , setup = require('../setup') var test = setup(function(context) { context.config = config diff --git a/test/models/SessionStore.test.js b/test/models/SessionStore.test.js deleted file mode 100644 index 3cfa493..0000000 --- a/test/models/SessionStore.test.js +++ /dev/null @@ -1,27 +0,0 @@ -var create_session_store = require('../../lib/models/SessionStore') - -var test = require('tape') - -test('can set', function(t) { - var store = create_session_store() - - store.set('yar', onset) - - function onset(err, token) { - if(err) { - t.ok(false, 'Error when setting data.') - } - - store.get(token, onget) - } - - function onget(err, data) { - if(err) { - t.ok(false, 'Error when getting data for token.') - } - - t.strictEqual(data, 'yar') - t.end() - } -}) - diff --git a/test/models/User.test.js b/test/models/User.test.js deleted file mode 100644 index 47dbc0b..0000000 --- a/test/models/User.test.js +++ /dev/null @@ -1,152 +0,0 @@ -var config = require('../../lib/config.json') - , User = require('../../lib/models/User') - , backend = require('../backend') - , setup = require('../setup') - , crypto = require('crypto') - -var test = setup(function(context) { - context.config = config - context.backend = backend() -}) - -test('create user', function(t) { - var user_data = {} - - user_data.password_sha = 'hunter2' - user_data.date = '2014-01-01' - - t.plan(4) - - User.create('ZeroCool', user_data, function(err) { - t.ok(!err, 'no error') - }) - - User.create(null, user_data, function(err) { - t.ok(err, 'requires username') - }) - - User.create('ZeroCool', {date: 'foo'}, function(err) { - t.ok(err, 'requires password') - }) - - User.create('ZeroCool', {password_sha: 'foo'}, function(err) { - t.ok(err, 'requires date') - }) -}) - -test('find user', function(t) { - var data = { - name: 'ZeroCool' - , email: 'me@example.com' - , salt: 'saltine' - , date: '2014-01-01' - , password_sha: sha('hunter2saltine') - } - - t.plan(9) - - User.create(data.name, data, function(err) { - t.ok(!err, 'create user to find') - - User.find(data.name, function(err, user) { - t.ok(!err, 'no error') - t.equal(user.name, data.name, 'gets name') - t.equal(user.email, data.email, 'gets email') - t.equal(user.date, data.date, 'gets date') - t.ok('_rev', 'gets _rev') - t.equal(Object.keys(user).length, 4, 'nothing else') - }) - - User.find('other guy', function(err, user) { - t.ok(err, 'error when not found') - t.ok(!user, 'no user for other guy') - }) - }) -}) - -test('update user', function(t) { - var data = { - name: 'ZeroCool' - , email: 'me@example.com' - , salt: 'saltine' - , date: '2014-01-01' - , password_sha: sha('hunter2saltine') - } - - t.plan(12) - - User.create(data.name, data, created) - - function created(err) { - t.ok(!err, 'create user to find') - - data.email = 'me2@example.com' - data.salt = 'saltine2' - data.date = '2015-01-01' - data.password_sha = sha('hunter2saltine2') - - User.find(data.name, function(err, user) { - t.ok(!err, 'no err') - User.update(user, data, updated) - }) - } - - function updated(err, user) { - t.ok(!err, 'no error') - t.equal(user.email, data.email, 'gets email') - t.equal(user.date, data.date, 'gets date') - t.ok('_rev', 'gets _rev') - t.equal(Object.keys(user).length, 4, 'nothing else') - - User.find(data.name, found) - } - - function found(err, user) { - t.ok(!err, 'no error') - t.equal(user.email, data.email, 'gets email') - t.equal(user.date, data.date, 'gets date') - t.ok('_rev', 'gets _rev') - t.equal(Object.keys(user).length, 4, 'nothing else') - } -}) - -test('auth user', function(t) { - var data = { - email: 'me@example.com' - , salt: 'saltine' - , date: '2014-01-01' - } - - data.password_sha = sha('hunter2saltine') - - t.plan(12) - - User.create('ZeroCool', data, created) - - function created(err, user) { - t.ok(!err, 'no err') - User.auth('ZeroCool', 'hunter2', authed) - } - - function authed(err, user) { - t.ok(!err, 'no error') - t.ok(user, 'returns user') - t.equal(user.name, 'ZeroCool', 'gets name') - t.equal(user.email, data.email, 'gets email') - t.equal(user.date, data.date, 'gets date') - t.ok('_rev', 'gets _rev') - t.equal(Object.keys(user).length, 4, 'nothing else') - - User.auth('ZeroCool', 'hunter3', not_found) - User.auth('ZeroCoo1', 'hunter2', not_found) - } - - function not_found(err, user) { - t.ok(!user, 'no user') - t.ok(err, 'returns error') - } -}) - -function sha(s) { - return crypto.createHash('sha1').update(s).digest('hex') -} diff --git a/test/response.test.js b/test/response.test.js index b0c8793..da43b5c 100644 --- a/test/response.test.js +++ b/test/response.test.js @@ -1,31 +1,33 @@ var setup = require('./setup') , test = setup() -var response = require('../lib/responses') +var respond = require('../lib/respond') test('verify json response', verify_json_response) +test('verify unauthorized', verify_error_response) +test('verify not found', verify_not_found) +test('verify conflict', verify_conflict) +test('verify 500', verify_500) -function verify_json_response(assert) { +function verify_json_response(t) { var res = {} res.writeHead = function(status, headers) { - assert.strictEqual(status, 200) - assert.deepEqual(headers, {'Content-Type': 'application/json'}) + t.strictEqual(status, 200) + t.deepEqual(headers, {'Content-Type': 'application/json'}) } res.write = function(data) { - assert.strictEqual(data, '{"arbitrary": "data"}') + t.strictEqual(data, '{"arbitrary": "data"}') } res.end = function() { - assert.end() + t.end() } - response.json(null, res, 200, '{"arbitrary": "data"}') + respond(null, res).json(200, '{"arbitrary": "data"}') } -test('verify unauthorized', verify_error_response) - function verify_error_response(assert) { var res = {} @@ -45,11 +47,9 @@ function verify_error_response(assert) { assert.end() } - response.unauthorized(null, res) + respond(null, res).unauthorized() } -test('verify not found', verify_not_found) - function verify_not_found(assert) { var res = {} @@ -69,11 +69,9 @@ function verify_not_found(assert) { assert.end() } - response.not_found(null, res) + respond(null, res).not_found() } -test('verify conflict', verify_conflict) - function verify_conflict(assert) { var res = {} @@ -93,11 +91,9 @@ function verify_conflict(assert) { assert.end() } - response.conflict(null, res) + respond(null, res).conflict() } -test('verify 500', verify_500) - function verify_500(assert) { var res = {} @@ -113,5 +109,5 @@ function verify_500(assert) { assert.end() } - response.on_error(null, res) + respond(null, res).on_error(new Error) }