Backport of public URL setting to Open Source edition

This commit is contained in:
Thulinma 2020-01-23 15:09:11 +01:00
parent 58276b8fbe
commit 131eb58c6a
3 changed files with 60 additions and 13 deletions

View file

@ -309,6 +309,12 @@ namespace Mist {
DTSC::Scan prots = rProto.getScan();
unsigned int prots_ctr = prots.getSize();
if (connector == "HTTP" || connector == "HTTP.exe"){
//restore from values in the environment, regardless of configged settings
if (getenv("MIST_HTTP_pubaddr")){
p["pubaddr"] = getenv("MIST_HTTP_pubaddr");
}
}else{
//find connector in config
for (unsigned int i=0; i < prots_ctr; ++i){
if (prots.getIndice(i).getMember("connector").asString() == connector) {
@ -332,6 +338,7 @@ namespace Mist {
}
//read options from found connector
p = prots.getIndice(id).asJSON();
}
HIGH_MSG("Connector found: %s", connector.c_str());
Util::DTSCShmReader rCapa(SHM_CAPA);

View file

@ -45,6 +45,9 @@ namespace Mist {
myConn.open(STDOUT_FILENO, STDIN_FILENO);
myConn.setHost(host);
}
if (config->getString("pubaddr").size()){
setenv("MIST_HTTP_pubaddr", config->getString("pubaddr").c_str(), 1);
}
if (config->getOption("wrappers",true).size() == 0 || config->getString("wrappers") == ""){
JSON::Value & wrappers = config->getOption("wrappers",true);
wrappers.shrink(0);
@ -142,6 +145,12 @@ namespace Mist {
capa["optional"]["certbot"]["option"] = "--certbot";
capa["optional"]["certbot"]["short"] = "C";
cfg->addConnectorOptions(8080, capa);
cfg->addOption("pubaddr", JSON::fromString("{\"arg\":\"string\", \"default\":\"\", \"short\":\"A\",\"long\":\"public-address\",\"help\":\"Full public address this output is available as.\"}"));
capa["optional"]["pubaddr"]["name"] = "Public address";
capa["optional"]["pubaddr"]["help"] = "Full public address this output is available as, if being proxied";
capa["optional"]["pubaddr"]["default"] = "";
capa["optional"]["pubaddr"]["type"] = "str";
capa["optional"]["pubaddr"]["option"] = "--public-address";
}
/// Sorts the JSON::Value objects that hold source information by preference.
@ -282,6 +291,13 @@ namespace Mist {
if (!fullURL.protocol.size()){
fullURL.protocol = getProtocolForPort(fullURL.getPort());
}
if (config->getString("pubaddr") != ""){
HTTP::URL altURL(config->getString("pubaddr"));
fullURL.protocol = altURL.protocol;
if (altURL.host.size()){fullURL.host = altURL.host;}
fullURL.port = altURL.port;
fullURL.path = altURL.path;
}
std::string uAgent = H.GetHeader("User-Agent");
std::string forceType = "";
@ -438,6 +454,13 @@ namespace Mist {
if (outURL.protocol.find(':') != std::string::npos){
outURL.protocol.erase(outURL.protocol.find(':'));
}
if (prots.getIndice(i).hasMember("pubaddr") && prots.getIndice(i).getMember("pubaddr").asString().size()){
HTTP::URL altURL(prots.getIndice(i).getMember("pubaddr").asString());
outURL.protocol = altURL.protocol;
if (altURL.host.size()){outURL.host = altURL.host;}
outURL.port = altURL.port;
outURL.path = altURL.path;
}
//and a URL - then list the URL
JSON::Value capa_json = capa.asJSON();
if (capa.getMember("url_rel") || capa.getMember("methods")){
@ -652,6 +675,13 @@ namespace Mist {
if (!fullURL.protocol.size()){
fullURL.protocol = getProtocolForPort(fullURL.getPort());
}
if (config->getString("pubaddr") != ""){
HTTP::URL altURL(config->getString("pubaddr"));
fullURL.protocol = altURL.protocol;
if (altURL.host.size()){fullURL.host = altURL.host;}
fullURL.port = altURL.port;
fullURL.path = altURL.path;
}
std::string response;
std::string rURL = H.url;
H.Clean();

View file

@ -41,6 +41,12 @@ namespace Mist{
capa["optional"]["wrappers"]["option"] = "--wrappers";
capa["optional"]["wrappers"]["short"] = "w";
cfg->addConnectorOptions(4433, capa);
cfg->addOption("pubaddr", JSON::fromString("{\"arg\":\"string\", \"default\":\"\", \"short\":\"A\",\"long\":\"public-address\",\"help\":\"Full public address this output is available as.\"}"));
capa["optional"]["pubaddr"]["name"] = "Public address";
capa["optional"]["pubaddr"]["help"] = "Full public address this output is available as, if being proxied";
capa["optional"]["pubaddr"]["default"] = "";
capa["optional"]["pubaddr"]["type"] = "str";
capa["optional"]["pubaddr"]["option"] = "--public-address";
config = cfg;
}
@ -96,6 +102,10 @@ namespace Mist{
args.push_back(Util::getMyPath() + "MistOutHTTP");
args.push_back("--ip");
args.push_back(myConn.getHost());
if (config->getString("pubaddr").size()){
args.push_back("--public-address");
args.push_back(config->getString("pubaddr"));
}
args.push_back("");
Util::Procs::socketList.insert(fd[0]);
pid_t http_proc = Util::Procs::StartPiped(args, &(fd[1]), &(fd[1]), &fderr);