diff options
| author | Brad Kittenbrink <brad@lindenlab.com> | 2022-01-14 22:38:45 -0800 | 
|---|---|---|
| committer | Brad Kittenbrink <brad@lindenlab.com> | 2022-01-14 22:56:26 -0800 | 
| commit | 990bee7ee227c947cc5e133ff0818c347b404e9d (patch) | |
| tree | d00b50a57b10621f95b4ae3b2b7a45ba892b9dd0 /indra | |
| parent | 96a6d21086353639d48befa20d86c97d2fd2dddb (diff) | |
SL-16654 simplify MFA token prompt UI to use notifications instead of new custom floater.
Diffstat (limited to 'indra')
| -rw-r--r-- | indra/newview/CMakeLists.txt | 2 | ||||
| -rw-r--r-- | indra/newview/llfloatermfa.cpp | 101 | ||||
| -rw-r--r-- | indra/newview/llfloatermfa.h | 50 | ||||
| -rw-r--r-- | indra/newview/lllogininstance.cpp | 52 | ||||
| -rw-r--r-- | indra/newview/lllogininstance.h | 1 | ||||
| -rw-r--r-- | indra/newview/llviewerfloaterreg.cpp | 2 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/notifications.xml | 21 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/strings.xml | 9 | 
8 files changed, 49 insertions, 189 deletions
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index 6c976e3f2d..5a06106de3 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -275,7 +275,6 @@ set(viewer_SOURCE_FILES      llfloatermap.cpp      llfloatermediasettings.cpp      llfloatermemleak.cpp -    llfloatermfa.cpp      llfloatermodelpreview.cpp      llfloatermodeluploadbase.cpp      llfloatermyscripts.cpp @@ -919,7 +918,6 @@ set(viewer_HEADER_FILES      llfloatermarketplacelistings.h      llfloatermediasettings.h      llfloatermemleak.h -    llfloatermfa.h      llfloatermodelpreview.h      llfloatermodeluploadbase.h      llfloatermyscripts.h diff --git a/indra/newview/llfloatermfa.cpp b/indra/newview/llfloatermfa.cpp deleted file mode 100644 index 7710817c23..0000000000 --- a/indra/newview/llfloatermfa.cpp +++ /dev/null @@ -1,101 +0,0 @@ -/** - * @file llfloatermfa.cpp - * @brief Multi-Factor Auth token submission dialog - * - * $LicenseInfo:firstyear=2021&license=viewerlgpl$ - * Second Life Viewer Source Code - * Copyright (C) 2021, Linden Research, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; - * version 2.1 of the License only. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA - * - * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA - * $/LicenseInfo$ - */ - -#include "llviewerprecompiledheaders.h" - -#include "llfloatermfa.h" - -// viewer includes -#include "llevents.h" - - -LLFloaterMFA::LLFloaterMFA(const LLSD& data) -:   LLModalDialog("mfa_challenge"), -    mMessage(data["message"].asStringRef()), -    mReplyPumpName(data["reply_pump"].asStringRef()) -{ - -} - -LLFloaterMFA::~LLFloaterMFA() -{ -} - -BOOL LLFloaterMFA::postBuild() -{ -    centerOnScreen(); - -    childSetAction("continue_btn", onContinue, this); -    childSetAction("cancel_btn", onCancel, this); -    childSetCommitCallback("token_edit", [](LLUICtrl*, void* userdata) { onContinue(userdata);}, this); - -    // this displays the prompt message -    LLUICtrl *token_prompt = getChild<LLUICtrl>("token_prompt_text"); -    token_prompt->setEnabled( FALSE ); -    token_prompt->setValue(LLSD(mMessage)); - -    LLUICtrl *token_edit = getChild<LLUICtrl>("token_edit"); -    token_edit->setFocus(TRUE); - -    return TRUE; -} - -// static -void LLFloaterMFA::onContinue(void* userdata ) -{ -    LLFloaterMFA* self = static_cast<LLFloaterMFA*>(userdata); - -    LLUICtrl *token_ctrl = self->getChild<LLUICtrl>("token_edit"); - -    std::string token(token_ctrl->getValue().asStringRef()); - -    if (!token.empty()) -    { -        LL_INFOS("MFA") << "User submits MFA token for challenge." << LL_ENDL; -        if(self->mReplyPumpName != "") -        { -            LLEventPumps::instance().obtain(self->mReplyPumpName).post(LLSD(token)); -        } - -        self->closeFloater(); // destroys this object -    } -} - -// static -void LLFloaterMFA::onCancel(void* userdata) -{ -    LLFloaterMFA* self = static_cast<LLFloaterMFA*>(userdata); -    LL_INFOS("MFA") << "User cancels MFA challenge attempt." << LL_ENDL; - -    if(self->mReplyPumpName != "") -    { -        LL_DEBUGS("MFA") << self->mReplyPumpName << LL_ENDL; -        LLEventPumps::instance().obtain(self->mReplyPumpName).post(LLSD()); -    } - -    // destroys this object -    self->closeFloater(); -} diff --git a/indra/newview/llfloatermfa.h b/indra/newview/llfloatermfa.h deleted file mode 100644 index 9332b35877..0000000000 --- a/indra/newview/llfloatermfa.h +++ /dev/null @@ -1,50 +0,0 @@ -/** - * @file llfloatermfa.h - * @brief Multi-Factor Auth token submission dialog - * - * $LicenseInfo:firstyear=2021&license=viewerlgpl$ - * Second Life Viewer Source Code - * Copyright (C) 2021, Linden Research, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; - * version 2.1 of the License only. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA - * - * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA - * $/LicenseInfo$ - */ - -#ifndef LL_LLFLOATERMFA_H -#define LL_LLFLOATERMFA_H - -#include "llmodaldialog.h" - - -class LLFloaterMFA : -    public LLModalDialog -{ -public: -    LLFloaterMFA(const LLSD& data); -    virtual ~LLFloaterMFA(); - -    BOOL postBuild(); - -    static void onContinue(void* userdata); -    static void onCancel(void* userdata); - -private: -    std::string mMessage; -    std::string mReplyPumpName; -}; - -#endif // LL_FLOATERMFA_H diff --git a/indra/newview/lllogininstance.cpp b/indra/newview/lllogininstance.cpp index a4c001ad8b..2b1dbc869a 100644 --- a/indra/newview/lllogininstance.cpp +++ b/indra/newview/lllogininstance.cpp @@ -75,8 +75,6 @@ public:  static const char * const TOS_REPLY_PUMP = "lllogininstance_tos_callback";  static const char * const TOS_LISTENER_NAME = "lllogininstance_tos"; -static const char * const MFA_REPLY_PUMP = "lllogininstance_mfa_callback"; -static const char * const MFA_LISTENER_NAME = "lllogininstance_mfa";  std::string construct_start_string(); @@ -424,18 +422,30 @@ void LLLoginInstance::handleLoginFailure(const LLSD& event)      {          LL_DEBUGS("LLLogin") << " MFA challenge" << LL_ENDL; -        LLSD data(LLSD::emptyMap()); -        data["message"] = message_response; -        data["reply_pump"] = MFA_REPLY_PUMP          if (gViewerWindow)          {              gViewerWindow->setShowProgress(FALSE);          } -        LLFloaterReg::showInstance("message_mfa", data); -        LLEventPumps::instance().obtain(MFA_REPLY_PUMP) -            .listen(MFA_LISTENER_NAME, [=](const LLSD& token) { -                return this->handleMFAResponse(token, "token"); -            }); + +        LLSD args(llsd::map( "MESSAGE", LLTrans::getString(response["message_id"]) )); +        LLSD payload; +        LLNotificationsUtil::add("PromptMFAToken", args, payload, [=](LLSD const & notif, LLSD const & response) { +            bool continue_clicked = response["continue"].asBoolean(); +            LLSD token = response["token"]; +            LL_DEBUGS("LLLogin") << "PromptMFAToken: response: " << response << " continue_clicked" << continue_clicked << LL_ENDL; + +            if (continue_clicked && !token.asString().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"              || reason_response == "presence" @@ -531,28 +541,6 @@ bool LLLoginInstance::handleTOSResponse(bool accepted, const std::string& key)  	return true;  } -bool LLLoginInstance::handleMFAResponse(const std::string& token, const std::string& key) -{ -    LLEventPumps::instance().obtain(MFA_REPLY_PUMP).stopListening(MFA_LISTENER_NAME); - -    if(!token.empty()) -    { -        LL_INFOS("LLLogin") << "LLLoginInstance::handleMFAResponse: token submitted" << LL_ENDL; - -        // Set the request data to true and retry login. -        mRequestData["params"][key] = token; -        reconnect(); -    } -    else -    { -        LL_INFOS("LLLogin") << "LLLoginInstance::handleMFAResponse: no token, attemptComplete" << LL_ENDL; - -        attemptComplete(); -    } - -    return true; -} -  std::string construct_start_string()  {  	std::string start; diff --git a/indra/newview/lllogininstance.h b/indra/newview/lllogininstance.h index ce64e9e3be..b759b43474 100644 --- a/indra/newview/lllogininstance.h +++ b/indra/newview/lllogininstance.h @@ -84,7 +84,6 @@ private:  	void syncWithUpdater(ResponsePtr resp, const LLSD& notification, const LLSD& response);  	bool handleTOSResponse(bool v, const std::string& key); -	bool handleMFAResponse(const std::string& v, const std::string& key);  	void attemptComplete() { mAttemptComplete = true; } // In the future an event? diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp index 677b55e49f..62d73063aa 100644 --- a/indra/newview/llviewerfloaterreg.cpp +++ b/indra/newview/llviewerfloaterreg.cpp @@ -92,7 +92,6 @@  #include "llfloatermarketplacelistings.h"  #include "llfloatermediasettings.h"  #include "llfloatermemleak.h" -#include "llfloatermfa.h"  #include "llfloatermodelpreview.h"  #include "llfloatermyscripts.h"  #include "llfloatermyenvironment.h" @@ -289,7 +288,6 @@ void LLViewerFloaterReg::registerFloaters()  	LLFloaterReg::add("marketplace_validation", "floater_marketplace_validation.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterMarketplaceValidation>);  	LLFloaterReg::add("message_critical", "floater_critical.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterTOS>);  	LLFloaterReg::add("message_tos", "floater_tos.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterTOS>); -	LLFloaterReg::add("message_mfa", "floater_mfa.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterMFA>);  	LLFloaterReg::add("moveview", "floater_moveview.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterMove>);  	LLFloaterReg::add("mute_object_by_name", "floater_mute_object.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterGetBlockedObjectName>);  	LLFloaterReg::add("mini_map", "floater_map.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterMap>); diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index d4f71fb370..b3c8f5f477 100644 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -11778,4 +11778,25 @@ Unable to load the track from [TRACK1] into [TRACK2].    <tag>fail</tag>    </notification> +  <notification +   icon="alertmodal.tga" +   label="Prompt for MFA Token" +   name="PromptMFAToken" +   type="alertmodal"> +    [MESSAGE] +    <tag>confirm</tag> +    <form name="form"> +      <input name="token" type="text" width="400" /> +      <button +       default="true" +       index="0" +       name="continue" +       text="Continue"/> +      <button +       index="1" +       name="cancel" +       text="Cancel"/> +    </form> +  </notification> +  </notifications> diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml index f26ee06e6b..0f045bd19c 100644 --- a/indra/newview/skins/default/xui/en/strings.xml +++ b/indra/newview/skins/default/xui/en/strings.xml @@ -192,7 +192,14 @@ Please try logging in again in a minute.</string>  Please try logging in again in a minute.</string>  	<string name="LoginFailedLoggingOutSession">The system has begun logging out your last session.  Please try logging in again in a minute.</string> - +        <string name="LoginFailedAuthenticationMFARequired">To continue logging in, enter a new token from your multifactor authentication app. +If you feel this is an error, please contact support@secondlife.com</string> +	<string name="LoginFailedAuthenticationFailedMFA">Sorry! We couldn't log you in. +Please check to make sure you entered the right +    * Username (like bobsmith12 or steller.sunshine) +    * Password +    * Token +Also, please make sure your Caps Lock key is off.</string>  	<!-- Disconnection -->  	<string name="AgentLostConnection">This region may be experiencing trouble.  Please check your connection to the Internet.</string>  | 
