Skip to content
Snippets Groups Projects
Commit 395a60a8 authored by Callum Prentice's avatar Callum Prentice
Browse files

Merge branch 'master' into DRTVWR-568

parents aad3b32a 15b5dedb
Branches
Tags
No related merge requests found
6.6.7 6.6.8
...@@ -451,26 +451,8 @@ void LLLoginInstance::handleLoginFailure(const LLSD& event) ...@@ -451,26 +451,8 @@ void LLLoginInstance::handleLoginFailure(const LLSD& event)
LLSD args(llsd::map( "MESSAGE", LLTrans::getString(response["message_id"]) )); LLSD args(llsd::map( "MESSAGE", LLTrans::getString(response["message_id"]) ));
LLSD payload; LLSD payload;
LLNotificationsUtil::add("PromptMFAToken", args, payload, [=](LLSD const & notif, LLSD const & response) { LLNotificationsUtil::add("PromptMFAToken", args, payload,
bool continue_clicked = response["continue"].asBoolean(); boost::bind(&LLLoginInstance::handleMFAChallenge, this, _1, _2));
std::string token = response["token"].asString();
LL_DEBUGS("LLLogin") << "PromptMFAToken: response: " << response << " continue_clicked" << continue_clicked << LL_ENDL;
// strip out whitespace - SL-17034/BUG-231938
token = boost::regex_replace(token, boost::regex("\\s"), "");
if (continue_clicked && !token.empty())
{
LL_INFOS("LLLogin") << "PromptMFAToken: token submitted" << LL_ENDL;
// Set the request data to true and retry login.
mRequestData["params"]["token"] = token;
reconnect();
} else {
LL_INFOS("LLLogin") << "PromptMFAToken: no token, attemptComplete" << LL_ENDL;
attemptComplete();
}
});
} }
else if( reason_response == "key" else if( reason_response == "key"
|| reason_response == "presence" || reason_response == "presence"
...@@ -553,8 +535,21 @@ bool LLLoginInstance::handleTOSResponse(bool accepted, const std::string& key) ...@@ -553,8 +535,21 @@ bool LLLoginInstance::handleTOSResponse(bool accepted, const std::string& key)
// Set the request data to true and retry login. // Set the request data to true and retry login.
mRequestData["params"][key] = true; mRequestData["params"][key] = true;
if (!mRequestData["params"]["token"].asString().empty())
{
// SL-18511 this TOS failure happened while we are in the middle of an MFA challenge/response.
// the previously entered token is very likely expired, so prompt again
LLSD args(llsd::map( "MESSAGE", LLTrans::getString("LoginFailedAuthenticationMFARequired") ));
LLSD payload;
LLNotificationsUtil::add("PromptMFAToken", args, payload,
boost::bind(&LLLoginInstance::handleMFAChallenge, this, _1, _2));
}
else
{
reconnect(); reconnect();
} }
}
else else
{ {
LL_INFOS("LLLogin") << "LLLoginInstance::handleTOSResponse: attemptComplete" << LL_ENDL; LL_INFOS("LLLogin") << "LLLoginInstance::handleTOSResponse: attemptComplete" << LL_ENDL;
...@@ -566,6 +561,29 @@ bool LLLoginInstance::handleTOSResponse(bool accepted, const std::string& key) ...@@ -566,6 +561,29 @@ bool LLLoginInstance::handleTOSResponse(bool accepted, const std::string& key)
return true; return true;
} }
bool LLLoginInstance::handleMFAChallenge(LLSD const & notif, LLSD const & response)
{
bool continue_clicked = response["continue"].asBoolean();
std::string token = response["token"].asString();
LL_DEBUGS("LLLogin") << "PromptMFAToken: response: " << response << " continue_clicked" << continue_clicked << LL_ENDL;
// strip out whitespace - SL-17034/BUG-231938
token = boost::regex_replace(token, boost::regex("\\s"), "");
if (continue_clicked && !token.empty())
{
LL_INFOS("LLLogin") << "PromptMFAToken: token submitted" << LL_ENDL;
// Set the request data to true and retry login.
mRequestData["params"]["token"] = token;
reconnect();
} else {
LL_INFOS("LLLogin") << "PromptMFAToken: no token, attemptComplete" << LL_ENDL;
attemptComplete();
}
return true;
}
std::string construct_start_string() std::string construct_start_string()
{ {
std::string start; std::string start;
......
...@@ -84,6 +84,7 @@ class LLLoginInstance : public LLSingleton<LLLoginInstance> ...@@ -84,6 +84,7 @@ class LLLoginInstance : public LLSingleton<LLLoginInstance>
void syncWithUpdater(ResponsePtr resp, const LLSD& notification, const LLSD& response); void syncWithUpdater(ResponsePtr resp, const LLSD& notification, const LLSD& response);
bool handleTOSResponse(bool v, const std::string& key); bool handleTOSResponse(bool v, const std::string& key);
bool handleMFAChallenge(LLSD const & notif, LLSD const & response);
void attemptComplete() { mAttemptComplete = true; } // In the future an event? void attemptComplete() { mAttemptComplete = true; } // In the future an event?
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment