Comparing version 1.0.0-beta to 1.0.0
{ | ||
"db": { | ||
"uri": "mongodb://localhost:27017/test" | ||
}, | ||
"apiKeys": [ | ||
"change-this-to-something-better" | ||
] | ||
} | ||
} |
@@ -17,4 +17,5 @@ var restify = require('restify'); | ||
}); | ||
if (options.apiKey) { | ||
jsonClient.basicAuth(options.apiKey, ''); | ||
if (options.auth) { | ||
var auth = options.auth.split(':'); | ||
jsonClient.basicAuth(auth[0], auth[1]); | ||
} | ||
@@ -21,0 +22,0 @@ return jsonClient; |
@@ -25,2 +25,3 @@ var restify = require('restify'); | ||
res.json({ count: count }); | ||
return next(); | ||
}); | ||
@@ -33,2 +34,3 @@ } else if (doFindOne) { | ||
res.json(doc); | ||
return next(); | ||
}); | ||
@@ -41,2 +43,3 @@ } else { | ||
res.json(docs); | ||
return next(); | ||
}); | ||
@@ -61,2 +64,3 @@ } | ||
res.json(r); | ||
return next(); | ||
}); | ||
@@ -72,2 +76,3 @@ } else { | ||
res.json(r); | ||
return next(); | ||
}); | ||
@@ -91,2 +96,3 @@ } | ||
res.json(r); | ||
return next(); | ||
}); | ||
@@ -98,2 +104,3 @@ } else { | ||
res.json(r); | ||
return next(); | ||
}); | ||
@@ -117,2 +124,3 @@ } | ||
res.json(r); | ||
return next(); | ||
}); | ||
@@ -124,2 +132,3 @@ } else { | ||
res.json(r); | ||
return next(); | ||
}); | ||
@@ -126,0 +135,0 @@ } |
@@ -34,8 +34,24 @@ var convict = require('convict'); | ||
etags: { | ||
doc: 'Enable auto generation on _etag property of docs', | ||
doc: 'Enable auto generation of _etag property of docs', | ||
default: true | ||
}, | ||
apiKeys: { | ||
doc: 'Array of valid API keys to access the API', | ||
default: [] | ||
auth: { | ||
enabled: { | ||
doc: 'Enable API key authentication', | ||
default: false | ||
}, | ||
allowLocal: { | ||
doc: 'Allow local connections without authentication', | ||
default: true | ||
}, | ||
apiKeys: { | ||
doc: 'Map of api keys and secrets', | ||
default: {} | ||
} | ||
}, | ||
memoize: { | ||
maxAge: { | ||
doc: 'Set period, in milliseconds, to clear cached result', | ||
default: 0 | ||
} | ||
} | ||
@@ -42,0 +58,0 @@ }); |
@@ -18,2 +18,3 @@ var restify = require('restify'); | ||
res.json(doc); | ||
return next(); | ||
}); | ||
@@ -32,2 +33,3 @@ } | ||
res.json(r); | ||
return next(); | ||
}); | ||
@@ -45,2 +47,3 @@ }; | ||
res.json(r); | ||
return next(); | ||
}); | ||
@@ -47,0 +50,0 @@ }; |
var restify = require('restify'); | ||
var bunyan = require('bunyan'); | ||
var q = require('q'); | ||
var debug = require('debug')('dozer:server'); | ||
var config = require('./config'); | ||
var auth = require('./auth'); | ||
var collections = require('./collections'); | ||
@@ -29,46 +31,40 @@ var collection = require('./collection'); | ||
server.use(function (req, res, next) { | ||
var apiKeys = config.get('apiKeys'); | ||
var remoteAddr = req.socket.remoteAddress; | ||
if (remoteAddr !== '127.0.0.1' && remoteAddr !== '::' && apiKeys.indexOf(req.username) === -1) { | ||
debug('authentication failed for user %s', req.username); | ||
return next(new restify.UnauthorizedError('Unauthorized')); | ||
} | ||
debug('authentication passed for user %s@%s', req.username, remoteAddr); | ||
return next(); | ||
}); | ||
server.on('after', restify.auditLogger({ | ||
log: bunyan.createLogger({ | ||
name: 'audit', | ||
stream: process.stdout | ||
}) | ||
})); | ||
server.start = function (options, cb) { | ||
server.start = function (options) { | ||
debug('starting server'); | ||
config.load(options); | ||
config.validate({strict: true}); | ||
MongoClient.connect(config.get('db.uri'), function (err, db) { | ||
if (err) { return cb(err); } | ||
server.db = db; | ||
debug('connected to database %s', db.databaseName); | ||
server.get('/db/collections', collections.get(db)); | ||
server.get('/db/:collection', collection.get(db)); | ||
server.post('/db/:collection', collection.post(db)); | ||
server.put('/db/:collection', collection.put(db)); | ||
server.del('/db/:collection', collection.del(db)); | ||
server.get('/db/:collection/:id', document.get(db)); | ||
server.put('/db/:collection/:id', document.put(db)); | ||
server.del('/db/:collection/:id', document.del(db)); | ||
if (config.get('auth.enabled')) { | ||
server.use(auth()); | ||
} | ||
server.listen( | ||
config.get('server.port'), | ||
config.get('server.host'), | ||
function () { | ||
debug('%s listening at %s', server.name, server.url); | ||
} | ||
); | ||
}); | ||
return MongoClient.connect(config.get('db.uri')) | ||
.then(function (db) { | ||
server.db = db; | ||
debug('connected to database %s', db.databaseName); | ||
server.get('/db/collections', collections.get(db)); | ||
server.get('/db/:collection', collection.get(db)); | ||
server.post('/db/:collection', collection.post(db)); | ||
server.put('/db/:collection', collection.put(db)); | ||
server.del('/db/:collection', collection.del(db)); | ||
server.get('/db/:collection/:id', document.get(db)); | ||
server.put('/db/:collection/:id', document.put(db)); | ||
server.del('/db/:collection/:id', document.del(db)); | ||
server.on('after', restify.auditLogger({ | ||
log: bunyan.createLogger({ | ||
name: 'audit', | ||
stream: process.stdout | ||
}) | ||
})); | ||
server.listen( | ||
config.get('server.port'), | ||
config.get('server.host'), | ||
function () { | ||
debug('%s listening at %s', server.name, server.url); | ||
} | ||
); | ||
}); | ||
}; | ||
@@ -78,2 +74,3 @@ | ||
debug('stopping server'); | ||
server.authDb.close(); | ||
server.db.close(); | ||
@@ -80,0 +77,0 @@ server.close(); |
{ | ||
"name": "dozer", | ||
"version": "1.0.0-beta", | ||
"version": "1.0.0", | ||
"description": "Rest API interface for MongoDB (client and server)", | ||
@@ -12,3 +12,8 @@ "bin": "bin/dozer", | ||
"keywords": [ | ||
"mongo", "mongodb", "rest", "client", "server", "api" | ||
"mongo", | ||
"mongodb", | ||
"rest", | ||
"client", | ||
"server", | ||
"api" | ||
], | ||
@@ -24,2 +29,4 @@ "dependencies": { | ||
"mongodb": "^2.0.40", | ||
"node-cache": "^3.0.0", | ||
"node-uuid": "^1.4.3", | ||
"object-assign": "^3.0.0", | ||
@@ -26,0 +33,0 @@ "prettyjson": "^1.1.3", |
Sorry, the diff of this file is not supported yet
No v1
QualityPackage is not semver >=1. This means it is not stable and does not support ^ ranges.
Found 1 instance in 1 package
23901
15
440
2
14
+ Addednode-cache@^3.0.0
+ Addednode-uuid@^1.4.3
+ Addedclone@1.0.4(transitive)
+ Addednode-cache@3.2.1(transitive)