Add support for non-URL-compatible parameter parsing (taking + to not mean space, not encoding as such either) and uses it for RTMP auth

This commit is contained in:
Thulinma 2024-06-07 21:06:28 +02:00
parent 8664daeb9a
commit 6eec3661ca
5 changed files with 12 additions and 12 deletions

View file

@ -1483,7 +1483,7 @@ namespace Mist{
}
if (description.find("?reason=needauth") != std::string::npos){
std::map<std::string, std::string> authVars;
HTTP::parseVars(description.substr(description.find("?reason=needauth") + 1), authVars);
HTTP::parseVars(description.substr(description.find("?reason=needauth") + 1), authVars, "&", false);
std::string authSalt = authVars.count("salt") ? authVars["salt"] : "";
std::string authOpaque = authVars.count("opaque") ? authVars["opaque"] : "";
std::string authChallenge = authVars.count("challenge") ? authVars["challenge"] : "";
@ -1504,9 +1504,9 @@ namespace Mist{
}
Secure::md5bin(to_hash.data(), to_hash.size(), md5buffer);
std::string hash_two = Encodings::Base64::encode(std::string(md5buffer, 16));
std::string authStr = "?authmod=adobe&user=" + Encodings::URL::encode(pushUrl.user, "/:=@[]") +
std::string authStr = "?authmod=adobe&user=" + Encodings::URL::encode(pushUrl.user, "/:=@[]+ ") +
"&challenge=00000000&response=" + hash_two;
if (authOpaque.size()){authStr += "&opaque=" + Encodings::URL::encode(authOpaque, "/:=@[]");}
if (authOpaque.size()){authStr += "&opaque=" + Encodings::URL::encode(authOpaque, "/:=@[]+ ");}
startPushOut(authStr.c_str());
return;
}