Socket
Socket
Sign inDemoInstall

muri

Package Overview
Dependencies
0
Maintainers
1
Versions
16
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 0.3.0 to 0.3.1

5

History.md
0.3.1 / 2013-02-17
==================
* fixed; allow '#' in username and password #3
0.3.0 / 2013-01-14

@@ -3,0 +8,0 @@ ==================

86

lib/index.js

@@ -12,3 +12,2 @@ // muri

var url = require('url');
var qs = require('querystring');

@@ -50,29 +49,21 @@

uris.split(',').forEach(function (uri) {
if (!/^mongodb:\/\//.test(uri)) {
uri = 'mongodb://' + uri;
}
var o = parse(uri);
var o = url.parse(uri);
if (o.hostname) {
if (o.host) {
ret.hosts.push({
host: o.hostname
, port: parseInt(o.port || DEFAULT_PORT, 10)
host: o.host
, port: parseInt(o.port, 10)
})
if (!db && o.pathname) {
db = o.pathname.replace(/^\//, '');
if (!db && o.db) {
db = o.db;
}
} else {
var domain = /(.+\.sock)(\/?.*)$/.exec(o.pathname);
if (domain && domain[1]) {
ret.hosts.push({ ipc: domain[1] });
}
} else if (o.ipc) {
ret.hosts.push({ ipc: o.ipc });
}
if (o.auth) {
var auth = o.auth.split(':');
ret.auth = {
user: auth[0]
, pass: auth[1]
user: o.auth.user
, pass: o.auth.pass
}

@@ -183,2 +174,59 @@ }

var ipcRgx = /\.sock/;
function parse (uriString) {
// do not use require('url').parse b/c it can't handle # in username or pwd
// mongo uris are strange
var uri = uriString;
var ret = {};
var parts;
var auth;
var ipcs;
// skip protocol
uri = uri.replace(/^mongodb:\/\//, '');
// auth
if (/@/.test(uri)) {
parts = uri.split(/@/);
auth = parts[0];
uri = parts[1];
parts = auth.split(':');
ret.auth = {};
ret.auth.user = parts[0];
ret.auth.pass = parts[1];
}
// unix domain sockets
if (ipcRgx.test(uri)) {
ipcs = uri.split(ipcRgx);
ret.ipc = ipcs[0] + '.sock';
// included a database?
if (ipcs[1]) {
// strip leading / from database name
ipcs[1] = ipcs[1].replace(/^\//, '');
if (ipcs[1]) {
ret.db = ipcs[1];
}
}
return ret;
}
// database name
parts = uri.split('/');
if (parts[1]) ret.db = parts[1];
// host:port
parts = parts[0].split(':');
ret.host = parts[0];
ret.port = parts[1] || DEFAULT_PORT;
return ret;
}
/**

@@ -185,0 +233,0 @@ * Version

{
"name": "muri",
"version": "0.3.0",
"version": "0.3.1",
"description": "MongoDB URI parser",

@@ -5,0 +5,0 @@ "main": "index.js",

@@ -32,2 +32,20 @@

})
it('handles # in the username', function(done){
var uri = 'mongodb://us#er:password@local:27017';
var val = muri(uri);
assert.ok(val.auth);
assert.equal('us#er', val.auth.user);
assert.equal('password', val.auth.pass);
done();
})
it('handles # in the password', function(done){
var uri = 'mongodb://user:pa#ssword@local:27017';
var val = muri(uri);
assert.ok(val.auth);
assert.equal('user', val.auth.user);
assert.equal('pa#ssword', val.auth.pass);
done();
})
})

@@ -271,8 +289,8 @@

it('all together now', function(done){
var uri = 'mongodb://user:pass@local,remote:27018,japan:27019/neatdb'
var uri = 'mongodb://u#ser:pas#s@local,remote:27018,japan:27019/neatdb'
uri += '?replicaSet=myreplset&journal=true&w=2&wtimeoutMS=50'
var val = muri(uri);
assert.equal('user', val.auth.user);
assert.equal('pass', val.auth.pass);
assert.equal('u#ser', val.auth.user);
assert.equal('pas#s', val.auth.pass);
assert.equal('neatdb', val.db);

@@ -279,0 +297,0 @@ assert.equal(3, val.hosts.length);

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc