parseUri static method
Parses URI into config parameters. The URI shall be in the following form: protocol://username@password@host1:port1,host2:port2,...?param1=abc¶m2=xyz&...
uri
the URI to be parseddefaultProtocol
a default protocoldefaultPort
a default port return a configuration parameters with URI elements
Implementation
static ConfigParams parseUri(
String? uri, String defaultProtocol, int defaultPort) {
var options = ConfigParams();
if (uri == null || uri == '') return options;
uri = uri.trim();
// Process parameters
var pos = uri.indexOf('?');
if (pos > 0) {
var params = uri.substring(pos + 1);
uri = uri.substring(0, pos);
var paramsList = params.split('&');
for (var param in paramsList) {
var pos = param.indexOf('=');
if (pos >= 0) {
var key = Uri.decodeComponent(param.substring(0, pos));
var value = Uri.decodeComponent(param.substring(pos + 1));
options.setAsObject(key, value);
} else {
options.setAsObject(Uri.decodeComponent(param), null);
}
}
}
// Process protocol
pos = uri.indexOf('://');
if (pos > 0) {
var protocol = uri.substring(0, pos);
uri = uri.substring(pos + 3);
options.setAsObject('protocol', protocol);
} else {
options.setAsObject('protocol', defaultProtocol);
}
// Process user and password
pos = uri.indexOf('@');
if (pos > 0) {
var userAndPass = uri.substring(0, pos);
uri = uri.substring(pos + 1);
pos = userAndPass.indexOf(':');
if (pos > 0) {
options.setAsObject('username', userAndPass.substring(0, pos));
options.setAsObject('password', userAndPass.substring(pos + 1));
} else {
options.setAsObject('username', userAndPass);
}
}
pos = uri.indexOf('/');
if (pos > 0) {
var path = uri.substring(pos + 1);
uri = uri.substring(0, pos);
options.setAsObject('path', path);
}
// Process host and ports
// options.setAsObject('servers', concatValues(options.getAsString('servers'), uri));
var servers = uri.split(',');
for (var server in servers) {
pos = server.indexOf(':');
if (pos > 0) {
options.setAsObject(
'servers', concatValues(options.getAsString('servers'), server));
options.setAsObject(
'host',
concatValues(
options.getAsString('host'), server.substring(0, pos)));
options.setAsObject(
'port',
concatValues(
options.getAsString('port'), server.substring(pos + 1)));
} else {
options.setAsObject(
'servers',
concatValues(options.getAsString('servers'),
server + ':' + defaultPort.toString()));
options.setAsObject(
'host', concatValues(options.getAsString('host'), server));
options.setAsObject('port',
concatValues(options.getAsString('port'), defaultPort.toString()));
}
}
return options;
}