From 07165961dcf87e4361682d224172a23932313e70 Mon Sep 17 00:00:00 2001 From: Shyotl Date: Sun, 2 Jun 2013 17:51:17 -0500 Subject: [PATCH] Handle "indeterminate" login response (indicating login server redirection). (This changeset will conflict in a future merge. Prefer this commits changeset where there's overlap) --- indra/newview/llstartup.cpp | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp index 9f44db11b..a8624f7b0 100644 --- a/indra/newview/llstartup.cpp +++ b/indra/newview/llstartup.cpp @@ -391,6 +391,7 @@ bool idle_startup() static LLUUID web_login_key; static std::string password; static std::vector requested_options; + static std::string redirect_uri; static LLVector3 initial_sun_direction(1.f, 0.f, 0.f); static LLVector3 agent_start_position_region(10.f, 10.f, 10.f); // default for when no space server @@ -1255,6 +1256,8 @@ bool idle_startup() if (STATE_LOGIN_AUTHENTICATE == LLStartUp::getStartupState()) { + redirect_uri.clear(); + LL_DEBUGS("AppInit") << "STATE_LOGIN_AUTHENTICATE" << LL_ENDL; set_startup_status(progress, auth_desc, auth_message); @@ -1342,6 +1345,9 @@ bool idle_startup() LLViewerLogin* vl = LLViewerLogin::getInstance(); std::string grid_uri = vl->getCurrentGridURI(); + if(!redirect_uri.empty()) + grid_uri = redirect_uri; + //redirect_uri.clear(); //Should this be cleared immediately after consumption? Doing this will break retrying on http error. llinfos << "Authenticating with " << grid_uri << llendl; @@ -1460,6 +1466,24 @@ bool idle_startup() successful_login = true; Debug(if (gCurlIo) dc::curlio.off()); // Login succeeded: restore dc::curlio to original state. } + else if(login_response == "indeterminate") + { + progress += 0.01f; + auth_message = message_response; + auth_method = response["next_method"].asString(); + redirect_uri = response["next_url"].asString(); + if(auth_method.substr(0, 5) == "login") + { + auth_desc = LLTrans::getString("LoginAuthenticating"); + } + else + { + auth_desc = LLTrans::getString("LoginMaintenance"); + } + set_startup_status(progress, auth_desc, auth_message); + LLStartUp::setStartupState(STATE_XMLRPC_LEGACY_LOGIN ); + return false; + } else { emsg << LLTrans::getString("LoginFailed") + "\n";