Better saved logins, with grid
Please, someone throw away the oodles of dead, confusing and redundant code -.-
This commit is contained in:
@@ -126,6 +126,17 @@ static std::string nameJoin(const std::string& first,const std::string& last) {
|
||||
}
|
||||
}
|
||||
|
||||
static std::string getDisplayString(const std::string& first, const std::string& last, const std::string& grid) {
|
||||
if(grid == gHippoGridManager->getDefaultGridNick())
|
||||
return nameJoin(first, last);
|
||||
else
|
||||
return nameJoin(first, last) + " (" + grid + ")";
|
||||
}
|
||||
|
||||
static std::string getDisplayString(const LLSavedLoginEntry& entry) {
|
||||
return getDisplayString(entry.getFirstName(), entry.getLastName(), entry.getGrid());
|
||||
}
|
||||
|
||||
class LLLoginRefreshHandler : public LLCommandHandler
|
||||
{
|
||||
public:
|
||||
@@ -477,8 +488,8 @@ void LLPanelLogin::setLoginHistory(LLSavedLogins const& login_history)
|
||||
i != saved_login_entries.rend(); ++i)
|
||||
{
|
||||
LLSD e = i->asLLSD();
|
||||
if (e.isMap())
|
||||
login_combo->add(nameJoin(i->getFirstName(), i->getLastName()), e);
|
||||
if (e.isMap() && gHippoGridManager->getGrid(i->getGrid()))
|
||||
login_combo->add(getDisplayString(*i), e);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -701,6 +712,12 @@ void LLPanelLogin::setFields(const LLSavedLoginEntry& entry, bool takeFocus)
|
||||
LLComboBox* login_combo = sInstance->getChild<LLComboBox>("name_combo");
|
||||
login_combo->setLabel(fullname);
|
||||
sInstance->childSetText("name_combo", fullname);
|
||||
|
||||
std::string grid = entry.getGrid();
|
||||
if(!grid.empty() && gHippoGridManager->getGrid(grid)) {
|
||||
gHippoGridManager->setCurrentGrid(grid);
|
||||
LLPanelLogin::refreshLoginPage();
|
||||
}
|
||||
|
||||
if (entry.getPassword().empty())
|
||||
{
|
||||
|
||||
@@ -34,6 +34,7 @@
|
||||
#include "llsavedlogins.h"
|
||||
#include "llxorcipher.h"
|
||||
#include "llsdserialize.h"
|
||||
#include "hippogridmanager.h"
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
// LLSavedLoginEntry methods
|
||||
@@ -57,6 +58,10 @@ LLSavedLoginEntry::LLSavedLoginEntry(const LLSD& entry_data)
|
||||
{
|
||||
throw std::invalid_argument("Missing password key.");
|
||||
}
|
||||
if (!entry_data.has("grid"))
|
||||
{
|
||||
throw std::invalid_argument("Missing grid key.");
|
||||
}
|
||||
if (!entry_data.get("firstname").isString())
|
||||
{
|
||||
throw std::invalid_argument("firstname key is not string.");
|
||||
@@ -69,16 +74,22 @@ LLSavedLoginEntry::LLSavedLoginEntry(const LLSD& entry_data)
|
||||
{
|
||||
throw std::invalid_argument("password key is neither blank nor binary.");
|
||||
}
|
||||
if (!entry_data.get("grid").isString())
|
||||
{
|
||||
throw std::invalid_argument("grid key is not string.");
|
||||
}
|
||||
mEntry = entry_data;
|
||||
}
|
||||
|
||||
LLSavedLoginEntry::LLSavedLoginEntry(const std::string& firstname,
|
||||
const std::string& lastname,
|
||||
const std::string& password)
|
||||
const std::string& password,
|
||||
const std::string& grid)
|
||||
{
|
||||
mEntry.clear();
|
||||
mEntry.insert("firstname", LLSD(firstname));
|
||||
mEntry.insert("lastname", LLSD(lastname));
|
||||
mEntry.insert("grid", LLSD(grid));
|
||||
setPassword(password);
|
||||
}
|
||||
|
||||
@@ -87,13 +98,6 @@ LLSD LLSavedLoginEntry::asLLSD() const
|
||||
return mEntry;
|
||||
}
|
||||
|
||||
const std::string LLSavedLoginEntry::getDisplayString() const
|
||||
{
|
||||
std::ostringstream etitle;
|
||||
etitle << getFirstName() << " " << getLastName();
|
||||
return etitle.str();
|
||||
}
|
||||
|
||||
const std::string LLSavedLoginEntry::getPassword() const
|
||||
{
|
||||
return (mEntry.has("password") ? decryptPassword(mEntry.get("password")) : std::string());
|
||||
@@ -177,13 +181,14 @@ void LLSavedLogins::addEntry(const LLSavedLoginEntry& entry)
|
||||
}
|
||||
|
||||
void LLSavedLogins::deleteEntry(const std::string& firstname,
|
||||
const std::string& lastname)
|
||||
const std::string& lastname, const std::string& grid)
|
||||
{
|
||||
for (LLSavedLoginsList::iterator i = mEntries.begin();
|
||||
i != mEntries.end();)
|
||||
{
|
||||
if (i->getFirstName() == firstname &&
|
||||
i->getLastName() == lastname)
|
||||
i->getLastName() == lastname &&
|
||||
i->getGrid() == grid)
|
||||
{
|
||||
i = mEntries.erase(i);
|
||||
}
|
||||
|
||||
@@ -56,7 +56,9 @@ public:
|
||||
* @param password Munged password of PASSWORD_HASH_LENGTH.
|
||||
*/
|
||||
LLSavedLoginEntry(const std::string& firstname,
|
||||
const std::string& lastname, const std::string& password);
|
||||
const std::string& lastname,
|
||||
const std::string& password,
|
||||
const std::string& grid);
|
||||
/**
|
||||
* @brief Returns the first name associated with this login entry.
|
||||
* @return First name as string.
|
||||
@@ -108,12 +110,18 @@ public:
|
||||
* @brief Returns the login entry as an LLSD for serialization.
|
||||
* *return LLSD containing login entry details.
|
||||
*/
|
||||
|
||||
const std::string getGrid() const
|
||||
{
|
||||
return (mEntry.has("grid") ? mEntry.get("grid").asString() : std::string());
|
||||
}
|
||||
|
||||
void setGrid(const std::string& value){
|
||||
mEntry.insert("grid", LLSD(value));
|
||||
}
|
||||
|
||||
LLSD asLLSD() const;
|
||||
/**
|
||||
* @brief Provides a string containing the username and grid for display.
|
||||
* @return Formatted string with login details.
|
||||
*/
|
||||
const std::string getDisplayString() const;
|
||||
|
||||
static const size_t PASSWORD_HASH_LENGTH = 32;
|
||||
private:
|
||||
static const std::string decryptPassword(const LLSD& pwdata);
|
||||
@@ -148,8 +156,9 @@ public:
|
||||
* @brief Deletes a login history entry by looking up its name and grid.
|
||||
* @param firstname First name to find and delete.
|
||||
* @param lastname Last name to find and delete.
|
||||
* @param grid grif nickname to find and delete.
|
||||
*/
|
||||
void deleteEntry(const std::string& firstname, const std::string& lastname);
|
||||
void deleteEntry(const std::string& firstname, const std::string& lastname, const std::string& grid);
|
||||
/**
|
||||
* @brief Access internal vector of login entries from the history.
|
||||
* @return Const reference to internal login history storage.
|
||||
|
||||
@@ -846,7 +846,7 @@ bool idle_startup()
|
||||
gViewerWindow->setShowProgress(FALSE);
|
||||
|
||||
// Load login history
|
||||
std::string login_hist_filepath = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "saved_logins_sg1.xml");
|
||||
std::string login_hist_filepath = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "saved_logins_sg2.xml");
|
||||
LLSavedLogins login_history = LLSavedLogins::loadFile(login_hist_filepath);
|
||||
|
||||
// Show the login dialog.
|
||||
@@ -1547,7 +1547,7 @@ bool idle_startup()
|
||||
text = LLUserAuth::getInstance()->getResponse("secure_session_id");
|
||||
if(!text.empty()) gAgent.mSecureSessionID.set(text);
|
||||
|
||||
text = LLUserAuth::getInstance()->getResponse("first_name");
|
||||
text = LLUserAuth::getInstance()->getResponse("firsst_name");
|
||||
if(!text.empty())
|
||||
{
|
||||
// Remove quotes from string. Login.cgi sends these to force
|
||||
@@ -1579,13 +1579,14 @@ bool idle_startup()
|
||||
|
||||
{
|
||||
// Save the login history data to disk
|
||||
std::string history_file = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "saved_logins_sg1.xml");
|
||||
std::string history_file = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "saved_logins_sg2.xml");
|
||||
|
||||
LLSavedLogins history_data = LLSavedLogins::loadFile(history_file);
|
||||
history_data.deleteEntry(firstname, lastname);
|
||||
std::string grid_nick = gHippoGridManager->getConnectedGrid()->getGridNick();
|
||||
history_data.deleteEntry(firstname, lastname, grid_nick);
|
||||
if (gSavedSettings.getBOOL("RememberLogin"))
|
||||
{
|
||||
LLSavedLoginEntry login_entry(firstname, lastname, password);
|
||||
LLSavedLoginEntry login_entry(firstname, lastname, password, grid_nick);
|
||||
history_data.addEntry(login_entry);
|
||||
}
|
||||
else
|
||||
|
||||
Reference in New Issue
Block a user