summaryrefslogtreecommitdiff
path: root/indra/newview/llstartup.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview/llstartup.cpp')
-rw-r--r--indra/newview/llstartup.cpp192
1 files changed, 128 insertions, 64 deletions
diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
index 267b2340d0..d5af7243a0 100644
--- a/indra/newview/llstartup.cpp
+++ b/indra/newview/llstartup.cpp
@@ -329,7 +329,6 @@ BOOL idle_startup()
static std::string auth_message;
static LLString firstname;
static LLString lastname;
- static LLUUID web_login_key;
static LLString password;
static std::vector<const char*> requested_options;
@@ -349,6 +348,7 @@ BOOL idle_startup()
static S32 location_which = START_LOCATION_ID_LAST;
static BOOL show_connect_box = TRUE;
+ static BOOL remember_password = TRUE;
static BOOL stipend_since_login = FALSE;
@@ -634,34 +634,28 @@ BOOL idle_startup()
//
// Log on to system
//
- if ((!gLoginHandler.mFirstName.empty() &&
- !gLoginHandler.mLastName.empty() &&
- !gLoginHandler.mWebLoginKey.isNull())
- || gLoginHandler.parseDirectLogin(LLStartUp::sSLURLCommand) )
- {
- firstname = gLoginHandler.mFirstName;
- lastname = gLoginHandler.mLastName;
- web_login_key = gLoginHandler.mWebLoginKey;
-
- show_connect_box = FALSE;
- }
- else if( !gCmdLineFirstName.empty()
+ if( !gCmdLineFirstName.empty()
&& !gCmdLineLastName.empty()
&& !gCmdLinePassword.empty())
{
firstname = gCmdLineFirstName;
lastname = gCmdLineLastName;
- show_connect_box = TRUE;
- gAutoLogin = TRUE;
+ LLMD5 pass((unsigned char*)gCmdLinePassword.c_str());
+ char md5pass[33]; /* Flawfinder: ignore */
+ pass.hex_digest(md5pass);
+ password = md5pass;
+
+ remember_password = gSavedSettings.getBOOL("RememberPassword");
+ show_connect_box = FALSE;
}
else if (gAutoLogin || gSavedSettings.getBOOL("AutoLogin"))
{
firstname = gSavedSettings.getString("FirstName");
lastname = gSavedSettings.getString("LastName");
password = load_password_from_disk();
- gSavedSettings.setBOOL("RememberPassword", TRUE);
- show_connect_box = TRUE;
+ remember_password = TRUE;
+ show_connect_box = FALSE;
}
else
{
@@ -670,6 +664,7 @@ BOOL idle_startup()
firstname = gSavedSettings.getString("FirstName");
lastname = gSavedSettings.getString("LastName");
password = load_password_from_disk();
+ remember_password = gSavedSettings.getBOOL("RememberPassword");
show_connect_box = TRUE;
}
@@ -679,8 +674,7 @@ BOOL idle_startup()
}
if (STATE_LOGIN_SHOW == LLStartUp::getStartupState())
- {
-
+ {
llinfos << "Initializing Window" << llendl;
gViewerWindow->getWindow()->setCursor(UI_CURSOR_ARROW);
@@ -701,6 +695,8 @@ BOOL idle_startup()
// Show the login dialog
login_show();
+ // connect dialog is already shown, so fill in the names
+ LLPanelLogin::setFields( firstname, lastname, password, remember_password );
LLPanelLogin::giveFocus();
gSavedSettings.setBOOL("FirstRunThisInstall", FALSE);
@@ -712,31 +708,6 @@ BOOL idle_startup()
// skip directly to message template verification
LLStartUp::setStartupState( STATE_LOGIN_CLEANUP );
}
-
- // Create selection manager
- // Must be done before menus created, because many enabled callbacks
- // require its existance.
- gSelectMgr = new LLSelectMgr();
- gParcelMgr = new LLViewerParcelMgr();
- gHUDManager = new LLHUDManager();
- gMuteListp = new LLMuteList();
-
- // Initialize UI
- if (!gNoRender)
- {
- // Initialize all our tools. Must be done after saved settings loaded.
- if ( gToolMgr == NULL )
- {
- gToolMgr = new LLToolMgr();
- gToolMgr->initTools();
- }
-
- // Quickly get something onscreen to look at.
- gViewerWindow->initWorldUI();
- }
-
- gViewerWindow->setNormalControlsVisible( FALSE );
- gLoginMenuBarView->setVisible( TRUE );
timeout.reset();
return do_normal_idle;
@@ -754,16 +725,11 @@ BOOL idle_startup()
if (STATE_LOGIN_CLEANUP == LLStartUp::getStartupState())
{
- //reset the values that could have come in from a slurl
- if (!gLoginHandler.mWebLoginKey.isNull())
- {
- firstname = gLoginHandler.mFirstName;
- lastname = gLoginHandler.mLastName;
- web_login_key = gLoginHandler.mWebLoginKey;
- }
-
if (show_connect_box)
{
+ // Load all the name information out of the login view
+ LLPanelLogin::getFields(firstname, lastname, password, remember_password);
+
// HACK: Try to make not jump on login
gKeyboard->resetKeys();
}
@@ -823,6 +789,25 @@ BOOL idle_startup()
if (show_connect_box)
{
+ LLString server_label;
+ S32 domain_name_index;
+ BOOL user_picked_server = LLPanelLogin::getServer( server_label, domain_name_index );
+ gGridChoice = (EGridInfo) domain_name_index;
+ gSavedSettings.setS32("ServerChoice", gGridChoice);
+ if (gGridChoice == GRID_INFO_OTHER)
+ {
+ snprintf(gGridName, MAX_STRING, "%s", server_label.c_str()); /* Flawfinder: ignore */
+ }
+
+ if ( user_picked_server )
+ { // User picked a grid from the popup, so clear the stored urls and they will be re-generated from gGridChoice
+ sAuthUris.clear();
+ LLAppViewer::instance()->resetURIs();
+ }
+
+ LLString location;
+ LLPanelLogin::getLocation( location );
+ LLURLSimString::setString( location );
LLPanelLogin::close();
}
@@ -955,12 +940,11 @@ BOOL idle_startup()
// a startup URL was specified
std::stringstream unescaped_start;
unescaped_start << "uri:"
- << LLURLSimString::sInstance.mSimName << "&"
- << LLURLSimString::sInstance.mX << "&"
- << LLURLSimString::sInstance.mY << "&"
- << LLURLSimString::sInstance.mZ;
+ << LLURLSimString::sInstance.mSimName << "&"
+ << LLURLSimString::sInstance.mX << "&"
+ << LLURLSimString::sInstance.mY << "&"
+ << LLURLSimString::sInstance.mZ;
start << xml_escape_string(unescaped_start.str().c_str());
-
}
else if (gSavedSettings.getBOOL("LoginLastLocation"))
{
@@ -976,13 +960,13 @@ BOOL idle_startup()
hashed_mac.update( gMACAddress, MAC_ADDRESS_BYTES );
hashed_mac.finalize();
hashed_mac.hex_digest(hashed_mac_string);
-
+
gUserAuthp->authenticate(
sAuthUris[sAuthUriNum].c_str(),
auth_method.c_str(),
firstname.c_str(),
lastname.c_str(),
- web_login_key,
+ password.c_str(),
start.str().c_str(),
gSkipOptionalUpdate,
gAcceptTOS,
@@ -992,7 +976,6 @@ BOOL idle_startup()
requested_options,
hashed_mac_string,
LLAppViewer::instance()->getSerialNumber());
-
// reset globals
gAcceptTOS = FALSE;
gAcceptCriticalMessage = FALSE;
@@ -1254,7 +1237,15 @@ BOOL idle_startup()
if(text) lastname.assign(text);
gSavedSettings.setString("FirstName", firstname);
gSavedSettings.setString("LastName", lastname);
-
+ if (remember_password)
+ {
+ save_password_to_disk(password.c_str());
+ }
+ else
+ {
+ save_password_to_disk(NULL);
+ }
+ gSavedSettings.setBOOL("RememberPassword", remember_password);
gSavedSettings.setBOOL("LoginLastLocation", gSavedSettings.getBOOL("LoginLastLocation"));
text = gUserAuthp->getResponse("agent_access");
@@ -1480,6 +1471,14 @@ BOOL idle_startup()
// type the name/password again if we crash.
gSavedSettings.saveToFile(gSettingsFileName, TRUE);
+ // Create selection manager
+ // Must be done before menus created, because many enabled callbacks
+ // require its existance.
+ gSelectMgr = new LLSelectMgr();
+ gParcelMgr = new LLViewerParcelMgr();
+ gHUDManager = new LLHUDManager();
+ gMuteListp = new LLMuteList();
+
//
// Initialize classes w/graphics stuff.
//
@@ -1548,11 +1547,21 @@ BOOL idle_startup()
if ( gViewerWindow != NULL && gToolMgr != NULL )
{ // This isn't the first logon attempt, so show the UI
gViewerWindow->setNormalControlsVisible( TRUE );
- }
- gLoginMenuBarView->setVisible( FALSE );
+ }
+ // Initialize UI
if (!gNoRender)
{
+ // Initialize all our tools. Must be done after saved settings loaded.
+ if ( gToolMgr == NULL )
+ {
+ gToolMgr = new LLToolMgr();
+ gToolMgr->initTools();
+ }
+
+ // Quickly get something onscreen to look at.
+ gViewerWindow->initWorldUI();
+
// Move the progress view in front of the UI
gViewerWindow->moveProgressViewToFront();
@@ -2335,12 +2344,68 @@ void login_show()
// UI textures have been previously loaded in doPreloadImages()
llinfos << "Setting Servers" << llendl;
+
+ if( GRID_INFO_OTHER == gGridChoice )
+ {
+ LLPanelLogin::addServer( gGridName, GRID_INFO_OTHER );
+ }
+ else
+ {
+ LLPanelLogin::addServer( gGridInfo[gGridChoice].mLabel, gGridChoice );
+ }
+
+ // Arg! We hate loops!
+ LLPanelLogin::addServer( gGridInfo[GRID_INFO_DMZ].mLabel, GRID_INFO_DMZ );
+ LLPanelLogin::addServer( gGridInfo[GRID_INFO_LOCAL].mLabel, GRID_INFO_LOCAL );
+ LLPanelLogin::addServer( gGridInfo[GRID_INFO_AGNI].mLabel, GRID_INFO_AGNI );
+ LLPanelLogin::addServer( gGridInfo[GRID_INFO_ADITI].mLabel, GRID_INFO_ADITI );
+ LLPanelLogin::addServer( gGridInfo[GRID_INFO_SIVA].mLabel, GRID_INFO_SIVA );
+ LLPanelLogin::addServer( gGridInfo[GRID_INFO_DURGA].mLabel, GRID_INFO_DURGA );
+ LLPanelLogin::addServer( gGridInfo[GRID_INFO_SHAKTI].mLabel, GRID_INFO_SHAKTI );
+ LLPanelLogin::addServer( gGridInfo[GRID_INFO_GANGA].mLabel, GRID_INFO_GANGA );
+ LLPanelLogin::addServer( gGridInfo[GRID_INFO_UMA].mLabel, GRID_INFO_UMA );
+ LLPanelLogin::addServer( gGridInfo[GRID_INFO_SOMA].mLabel, GRID_INFO_SOMA );
+ LLPanelLogin::addServer( gGridInfo[GRID_INFO_VAAK].mLabel, GRID_INFO_VAAK );
}
// Callback for when login screen is closed. Option 0 = connect, option 1 = quit.
void login_callback(S32 option, void *userdata)
{
+ const S32 CONNECT_OPTION = 0;
+ const S32 QUIT_OPTION = 1;
+ if (CONNECT_OPTION == option)
+ {
+ LLStartUp::setStartupState( STATE_LOGIN_CLEANUP );
+ return;
+ }
+ else if (QUIT_OPTION == option)
+ {
+ // Make sure we don't save the password if the user is trying to clear it.
+ LLString first, last, password;
+ BOOL remember = TRUE;
+ LLPanelLogin::getFields(first, last, password, remember);
+ if (!remember)
+ {
+ // turn off the setting and write out to disk
+ gSavedSettings.setBOOL("RememberPassword", FALSE);
+ gSavedSettings.saveToFile(gSettingsFileName, TRUE);
+
+ // stomp the saved password on disk
+ save_password_to_disk(NULL);
+ }
+
+ LLPanelLogin::close();
+
+ // Next iteration through main loop should shut down the app cleanly.
+ LLAppViewer::instance()->userQuit(); // gQuit = TRUE;
+
+ return;
+ }
+ else
+ {
+ llwarns << "Unknown login button clicked" << llendl;
+ }
}
LLString load_password_from_disk()
@@ -3580,7 +3645,6 @@ void reset_login()
if ( gViewerWindow )
{ // Hide menus and normal buttons
gViewerWindow->setNormalControlsVisible( FALSE );
- gLoginMenuBarView->setVisible( TRUE );
}
// Hide any other stuff