MAINT-535 FIXED The teleport SLAPP is changed to UNTRUSTED_THROTTLE. Confirmation dialog for teleporting via slapp is added.

Mnikolenko ProductEngine 2014-03-31 10:54:59 +03:00
parent 4994d9d97d
commit dcb9b7fb05
2 changed files with 52 additions and 4 deletions

View File

@ -34,6 +34,7 @@
#include "llfloaterreg.h"
#include "llfloatersidepanelcontainer.h"
#include "llfloaterworldmap.h"
#include "llnotifications.h"
#include "llpanellogin.h"
#include "llregionhandle.h"
#include "llslurl.h"
@ -253,13 +254,15 @@ void LLURLDispatcherImpl::regionHandleCallback(U64 region_handle, const LLSLURL&
//---------------------------------------------------------------------------
// Teleportation links are handled here because they are tightly coupled
// to SLURL parsing and sim-fragment parsing
class LLTeleportHandler : public LLCommandHandler
{
public:
// Teleport requests *must* come from a trusted browser
// inside the app, otherwise a malicious web page could
// cause a constant teleport loop. JC
LLTeleportHandler() : LLCommandHandler("teleport", UNTRUSTED_BLOCK) { }
LLTeleportHandler() : LLCommandHandler("teleport", UNTRUSTED_THROTTLE) { }
bool handle(const LLSD& tokens, const LLSD& query_map,
LLMediaCtrl* web)
@ -276,18 +279,50 @@ public:
tokens[3].asReal());
}
LLSD args;
args["LOCATION"] = tokens[0];
// Region names may be %20 escaped.
std::string region_name = LLURI::unescape(tokens[0]);
LLSD payload;
payload["region_name"] = region_name;
payload["callback_url"] = LLSLURL(region_name, coords).getSLURLString();
LLNotificationsUtil::add("TeleportViaSLAPP", args, payload);
return true;
}
static void teleport_via_slapp(std::string region_name, std::string callback_url)
{
LLWorldMapMessage::getInstance()->sendNamedRegionRequest(region_name,
LLURLDispatcherImpl::regionHandleCallback,
LLSLURL(region_name, coords).getSLURLString(),
callback_url,
true); // teleport
return true;
}
static bool teleport_via_slapp_callback(const LLSD& notification, const LLSD& response)
{
S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
std::string region_name = notification["payload"]["region_name"].asString();
std::string callback_url = notification["payload"]["callback_url"].asString();
if (option == 0)
{
teleport_via_slapp(region_name, callback_url);
return true;
}
return false;
}
};
LLTeleportHandler gTeleportHandler;
static LLNotificationFunctorRegistration open_landmark_callback_reg("TeleportViaSLAPP", LLTeleportHandler::teleport_via_slapp_callback);
//---------------------------------------------------------------------------

View File

@ -4137,6 +4137,19 @@ Are you sure you want to teleport to <nolink>[LOCATION]</nolink>?
notext="Cancel"
yestext="Teleport"/>
</notification>
<notification
icon="alertmodal.tga"
name="TeleportViaSLAPP"
type="alertmodal">
Are you sure you want to teleport to &lt;nolink&gt;[LOCATION]&lt;/nolink&gt;?
<tag>confirm</tag>
<usetemplate
ignoretext="Confirm that I want to teleport via SLAPP"
name="okcancelignore"
notext="Cancel"
yestext="Teleport"/>
</notification>
<notification
icon="alertmodal.tga"