Implemented certbot helper utility

This commit is contained in:
Thulinma 2019-09-08 17:36:58 +02:00
parent 1e2469c9b5
commit ffaa0394db
6 changed files with 224 additions and 14 deletions

View file

@ -131,6 +131,7 @@ namespace Mist {
capa["url_match"].append("/embed_$.js");
capa["url_match"].append("/flashplayer.swf");
capa["url_match"].append("/oldflashplayer.swf");
capa["url_prefix"] = "/.well-known/";
capa["optional"]["wrappers"]["name"] = "Active players";
capa["optional"]["wrappers"]["help"] = "Which players are attempted and in what order.";
capa["optional"]["wrappers"]["default"] = "";
@ -142,6 +143,12 @@ namespace Mist {
capa["optional"]["wrappers"]["allowed"].append("flash_strobe");
capa["optional"]["wrappers"]["option"] = "--wrappers";
capa["optional"]["wrappers"]["short"] = "w";
capa["optional"]["certbot"]["name"] = "Certbot validation token";
capa["optional"]["certbot"]["help"] = "Automatically set by the MistUtilCertbot authentication hook for certbot. Not intended to be set manually.";
capa["optional"]["certbot"]["default"] = "";
capa["optional"]["certbot"]["type"] = "str";
capa["optional"]["certbot"]["option"] = "--certbot";
capa["optional"]["certbot"]["short"] = "C";
cfg->addConnectorOptions(8080, capa);
/*LTS-START*/
cfg->addOption("nostreamtext", JSON::fromString("{\"arg\":\"string\", \"default\":\"\", \"short\":\"t\",\"long\":\"nostreamtext\",\"help\":\"Text or HTML to display when streams are unavailable.\"}"));
@ -492,6 +499,31 @@ namespace Mist {
void OutHTTP::onHTTP(){
std::string method = H.method;
//Handle certbot validations
if (H.url.substr(0, 28) == "/.well-known/acme-challenge/"){
std::string cbToken = H.url.substr(28);
jsonForEach(config->getOption("certbot",true),it){
if (it->asStringRef().substr(0, cbToken.size()+1) == cbToken+":"){
H.Clean();
H.SetHeader("Content-Type", "text/plain");
H.SetHeader("Server", "MistServer/" PACKAGE_VERSION);
H.setCORSHeaders();
H.SetBody(it->asStringRef().substr(cbToken.size()+1));
H.SendResponse("200", "OK", myConn);
H.Clean();
return;
}
}
H.Clean();
H.SetHeader("Content-Type", "text/plain");
H.SetHeader("Server", "MistServer/" PACKAGE_VERSION);
H.setCORSHeaders();
H.SetBody("No matching validation found for token '" + cbToken + "'");
H.SendResponse("404", "Not found", myConn);
H.Clean();
return;
}
if (H.url == "/crossdomain.xml"){
H.Clean();