wildduck/lib/redis-url.js

75 lines
1.9 KiB
JavaScript

'use strict';
module.exports = redisConf => {
let parsedRedisUrl = new URL(redisConf);
let parsedUrl = {};
let usernameAllowed = false;
for (let key of parsedRedisUrl.searchParams.keys()) {
let value = parsedRedisUrl.searchParams.get(key);
if (!value) {
continue;
}
switch (key) {
case 'password':
parsedUrl.password = value;
break;
case 'db':
{
if (value && !isNaN(value)) {
parsedUrl.db = Number(value);
}
}
break;
case 'allowUsernameInURI':
if (/^(true|1|yes|y)$/i.test(value)) {
usernameAllowed = true;
}
break;
}
}
for (let key of ['hostname', 'port', 'password', 'pathname', 'protocol', 'username']) {
let value = parsedRedisUrl[key];
if (!value) {
continue;
}
switch (key) {
case 'hostname':
parsedUrl.host = value;
break;
case 'port':
parsedUrl.port = Number(value);
break;
case 'password':
parsedUrl.password = value;
break;
case 'username':
if (usernameAllowed) {
parsedUrl.username = value;
}
break;
case 'pathname': {
let pathname = value.slice(1);
if (pathname && !isNaN(pathname)) {
parsedUrl.db = Number(pathname);
}
break;
}
case 'protocol':
if (value.toLowerCase() === 'rediss:') {
parsedUrl.tls = {};
}
break;
}
}
return parsedUrl;
};