diff options
| -rw-r--r-- | indra/newview/llappviewer.cpp | 77 | ||||
| -rw-r--r-- | indra/newview/llfloaterpreference.cpp | 6 | ||||
| -rw-r--r-- | indra/newview/llpanellogin.cpp | 461 | ||||
| -rw-r--r-- | indra/newview/llpanellogin.h | 25 | ||||
| -rw-r--r-- | indra/newview/llstartup.cpp | 140 | ||||
| -rw-r--r-- | indra/newview/llurldispatcher.cpp | 3 | ||||
| -rw-r--r-- | indra/newview/llviewernetwork.cpp | 68 | ||||
| -rw-r--r-- | indra/newview/llviewernetwork.h | 17 | ||||
| -rw-r--r-- | indra/newview/llviewerwindow.cpp | 4 | 
9 files changed, 682 insertions, 119 deletions
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 28496dc910..907f957bed 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -198,8 +198,8 @@ static EGridInfo GridDefaultChoice = GRID_INFO_AGNI;  static EGridInfo GridDefaultChoice = GRID_INFO_ADITI;  #endif  #else -// Default userserver for development builds is dmz -static EGridInfo GridDefaultChoice = GRID_INFO_DMZ; +// Default userserver for development builds is none +static EGridInfo GridDefaultChoice = GRID_INFO_NONE;  #endif  #if LL_WINDOWS @@ -588,44 +588,24 @@ int parse_args(int argc, char **argv)  			gGridChoice = GRID_INFO_AGNI;  			snprintf(gGridName, MAX_STRING, "%s", gGridInfo[gGridChoice].mName);		// Flawfinder: ignore  		} -		else if (!strcmp(argv[j], "--dmz")) -		{ -			gGridChoice = GRID_INFO_DMZ; -			snprintf(gGridName, MAX_STRING, "%s", gGridInfo[gGridChoice].mName);		// Flawfinder: ignore -		} -		else if (!strcmp(argv[j], "--siva")) -		{ -			gGridChoice = GRID_INFO_SIVA; -			snprintf(gGridName, MAX_STRING, "%s", gGridInfo[gGridChoice].mName);		// Flawfinder: ignore -		} -		else if (!strcmp(argv[j], "--shakti")) +		else if (!strcmp(argv[j], "--aruna"))  		{ -			gGridChoice = GRID_INFO_SHAKTI; -			snprintf(gGridName, MAX_STRING, "%s", gGridInfo[gGridChoice].mName);		// Flawfinder: ignore +			gGridChoice = GRID_INFO_ARUNA; +			sprintf(gGridName,"%s", gGridInfo[gGridChoice].mName);  		}  		else if (!strcmp(argv[j], "--durga"))  		{  			gGridChoice = GRID_INFO_DURGA;  			snprintf(gGridName, MAX_STRING, "%s", gGridInfo[gGridChoice].mName);		// Flawfinder: ignore  		} -		else if (!strcmp(argv[j], "--soma")) -		{ -			gGridChoice = GRID_INFO_SOMA; -			snprintf(gGridName, MAX_STRING, "%s", gGridInfo[gGridChoice].mName);		// Flawfinder: ignore -		}  		else if (!strcmp(argv[j], "--ganga"))  		{  			gGridChoice = GRID_INFO_GANGA;  			sprintf(gGridName,"%s", gGridInfo[gGridChoice].mName);  		} -		else if (!strcmp(argv[j], "--vaak")) -		{ -			gGridChoice = GRID_INFO_VAAK; -			sprintf(gGridName,"%s", gGridInfo[gGridChoice].mName); -		} -		else if (!strcmp(argv[j], "--uma")) +		else if (!strcmp(argv[j], "--mitra"))  		{ -			gGridChoice = GRID_INFO_UMA; +			gGridChoice = GRID_INFO_MITRA;  			sprintf(gGridName,"%s", gGridInfo[gGridChoice].mName);  		}  		else if (!strcmp(argv[j], "--mohini")) @@ -633,21 +613,11 @@ int parse_args(int argc, char **argv)  			gGridChoice = GRID_INFO_MOHINI;  			sprintf(gGridName,"%s", gGridInfo[gGridChoice].mName);  		} -		else if (!strcmp(argv[j], "--yami")) -		{ -			gGridChoice = GRID_INFO_YAMI; -			sprintf(gGridName,"%s", gGridInfo[gGridChoice].mName); -		}  		else if (!strcmp(argv[j], "--nandi"))  		{  			gGridChoice = GRID_INFO_NANDI;  			sprintf(gGridName,"%s", gGridInfo[gGridChoice].mName);  		} -		else if (!strcmp(argv[j], "--mitra")) -		{ -			gGridChoice = GRID_INFO_MITRA; -			sprintf(gGridName,"%s", gGridInfo[gGridChoice].mName); -		}  		else if (!strcmp(argv[j], "--radha"))  		{  			gGridChoice = GRID_INFO_RADHA; @@ -658,9 +628,34 @@ int parse_args(int argc, char **argv)  			gGridChoice = GRID_INFO_RAVI;  			sprintf(gGridName,"%s", gGridInfo[gGridChoice].mName);  		} -		else if (!strcmp(argv[j], "--aruna")) +		else if (!strcmp(argv[j], "--siva"))  		{ -			gGridChoice = GRID_INFO_ARUNA; +			gGridChoice = GRID_INFO_SIVA; +			snprintf(gGridName, MAX_STRING, "%s", gGridInfo[gGridChoice].mName);		// Flawfinder: ignore +		} +		else if (!strcmp(argv[j], "--shakti")) +		{ +			gGridChoice = GRID_INFO_SHAKTI; +			snprintf(gGridName, MAX_STRING, "%s", gGridInfo[gGridChoice].mName);		// Flawfinder: ignore +		} +		else if (!strcmp(argv[j], "--soma")) +		{ +			gGridChoice = GRID_INFO_SOMA; +			snprintf(gGridName, MAX_STRING, "%s", gGridInfo[gGridChoice].mName);		// Flawfinder: ignore +		} +		else if (!strcmp(argv[j], "--uma")) +		{ +			gGridChoice = GRID_INFO_UMA; +			sprintf(gGridName,"%s", gGridInfo[gGridChoice].mName); +		} +		else if (!strcmp(argv[j], "--vaak")) +		{ +			gGridChoice = GRID_INFO_VAAK; +			sprintf(gGridName,"%s", gGridInfo[gGridChoice].mName); +		} +		else if (!strcmp(argv[j], "--yami")) +		{ +			gGridChoice = GRID_INFO_YAMI;  			sprintf(gGridName,"%s", gGridInfo[gGridChoice].mName);  		}  		else if (!strcmp(argv[j], "-user") && (++j < argc))  @@ -1876,10 +1871,6 @@ bool LLAppViewer::initEarlyConfiguration()  		{  			snprintf(gGridName, MAX_STRING, "%s", gGridInfo[GRID_INFO_AGNI].mName);		// Flawfinder: ignore  		} -		else if (!strcmp(argv[j], "--dmz")) -		{ -			snprintf(gGridName, MAX_STRING, "%s", gGridInfo[GRID_INFO_DMZ].mName);		// Flawfinder: ignore -		}  		else if (!strcmp(argv[j], "--siva"))  		{  			snprintf(gGridName, MAX_STRING, "%s", gGridInfo[GRID_INFO_SIVA].mName);		// Flawfinder: ignore diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp index b7b3cef76b..c2780cb8e0 100644 --- a/indra/newview/llfloaterpreference.cpp +++ b/indra/newview/llfloaterpreference.cpp @@ -442,8 +442,7 @@ void LLFloaterPreference::onClickAbout(void*)  // static   void LLFloaterPreference::onBtnOK( void* userdata )  { -	//refresh splash page if we're displaying it -	LLPanelLogin::loadLoginPage(); +	LLPanelLogin::refreshLocation( false );  	LLFloaterPreference *fp =(LLFloaterPreference *)userdata;  	// commit any outstanding text entry @@ -489,8 +488,7 @@ void LLFloaterPreference::onBtnApply( void* userdata )  	}  	fp->apply(); -	//refresh splash page if we're displaying it -	LLPanelLogin::loadLoginPage(); +	LLPanelLogin::refreshLocation( false );  } diff --git a/indra/newview/llpanellogin.cpp b/indra/newview/llpanellogin.cpp index cf8fff8543..639220bce7 100644 --- a/indra/newview/llpanellogin.cpp +++ b/indra/newview/llpanellogin.cpp @@ -71,10 +71,12 @@  #include "llwebbrowserctrl.h"  #include "llfloaterhtml.h" +//#include "llfloaterhtmlhelp.h"  #include "llfloatertos.h"  #include "llglheaders.h" +#define USE_VIEWER_AUTH 0  LLString load_password_from_disk(void);  void save_password_to_disk(const char* hashed_password); @@ -83,6 +85,7 @@ const S32 BLACK_BORDER_HEIGHT = 160;  const S32 MAX_PASSWORD = 16;  LLPanelLogin *LLPanelLogin::sInstance = NULL; +BOOL LLPanelLogin::sCapslockDidNotification = FALSE;  class LLLoginRefreshHandler : public LLCommandHandler @@ -350,9 +353,96 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect,  	gUICtrlFactory->buildPanel(this, "panel_login.xml"); +#if USE_VIEWER_AUTH  	//leave room for the login menu bar  	setRect(LLRect(0, rect.getHeight()-18, rect.getWidth(), 0));  +#endif  	reshape(rect.getWidth(), rect.getHeight()); + +#if !USE_VIEWER_AUTH +	childSetPrevalidate("first_name_edit", LLLineEditor::prevalidatePrintableNoSpace); +	childSetPrevalidate("last_name_edit", LLLineEditor::prevalidatePrintableNoSpace); + +	childSetCommitCallback("password_edit", mungePassword); +	childSetKeystrokeCallback("password_edit", onPassKey, this); +	childSetUserData("password_edit", this); + +	LLLineEditor* edit = LLUICtrlFactory::getLineEditorByName(this, "password_edit"); +	if (edit) edit->setDrawAsterixes(TRUE); + +	LLComboBox* combo = LLUICtrlFactory::getComboBoxByName(this, "start_location_combo"); +	if (combo) +	{ +		combo->setAllowTextEntry(TRUE, 128, FALSE); + +		// The XML file loads the combo with the following labels: +		// 0 - "My Home" +		// 1 - "My Last Location" +		// 2 - "<Type region name>" + +		BOOL login_last = gSavedSettings.getBOOL("LoginLastLocation"); +		LLString sim_string = LLURLSimString::sInstance.mSimString; +		if (!sim_string.empty()) +		{ +			// Replace "<Type region name>" with this region name +			combo->remove(2); +			combo->add( sim_string ); +			combo->setTextEntry(sim_string); +			combo->setCurrentByIndex( 2 ); +		} +		else if (login_last) +		{ +			combo->setCurrentByIndex( 1 ); +		} +		else +		{ +			combo->setCurrentByIndex( 0 ); +		} + +		combo->setCommitCallback( &LLPanelGeneral::set_start_location ); +	} +	 +	// Specific servers added later. +	childSetVisible("server_combo", show_server); + +	childSetAction("new_account_btn", onClickNewAccount, this); +	childSetVisible("new_account_btn", !gHideLinks); + +	childSetAction("connect_btn", onClickConnect, this); + +	setDefaultBtn("connect_btn"); + +	childSetAction("preferences_btn", LLFloaterPreference::show, this); + +	childSetAction("quit_btn", onClickQuit, this); + +	LLTextBox* version_text = LLUICtrlFactory::getTextBoxByName(this, "version_text"); +	if (version_text) +	{ +		LLString version = llformat("%d.%d.%d (%d)", +			LL_VERSION_MAJOR, +			LL_VERSION_MINOR, +			LL_VERSION_PATCH, +			LL_VIEWER_BUILD ); +		version_text->setText(version); +		version_text->setClickedCallback(onClickVersion); +		version_text->setCallbackUserData(this); +	} + +	LLTextBox* channel_text = LLUICtrlFactory::getTextBoxByName(this, "channel_text"); +	if (channel_text) +	{ +		channel_text->setText(gChannelName); +		channel_text->setClickedCallback(onClickVersion); +		channel_text->setCallbackUserData(this); +	} +	 +	LLTextBox* forgot_password_text = LLUICtrlFactory::getTextBoxByName(this, "forgot_password_text"); +	if (forgot_password_text) +	{ +		forgot_password_text->setClickedCallback(onClickForgotPassword); +	} +#endif      	// get the web browser control  	#if LL_LIBXUL_ENABLED @@ -371,11 +461,15 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect,  		// force the size to be correct (XML doesn't seem to be sufficient to do this) (with some padding so the other login screen doesn't show through)  		LLRect htmlRect = mRect; +#if USE_VIEWER_AUTH  		htmlRect.setCenterAndSize( mRect.getCenterX() - 2, mRect.getCenterY(), mRect.getWidth() + 6, mRect.getHeight()); +#else +		htmlRect.setCenterAndSize( mRect.getCenterX() - 2, mRect.getCenterY() + 40, mRect.getWidth() + 6, mRect.getHeight() - 78 ); +#endif  		web_browser->setRect( htmlRect );  		web_browser->reshape( htmlRect.getWidth(), htmlRect.getHeight(), TRUE ); -		reshape( mRect.getWidth(), mRect.getHeight(), 1 );     -		 +		reshape( mRect.getWidth(), mRect.getHeight(), 1 ); +  		// kick off a request to grab the url manually  		gResponsePtr = LLIamHereLogin::build( this );   		std::string login_page = LLAppViewer::instance()->getLoginPage(); @@ -389,7 +483,10 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect,  		mHtmlAvailable = FALSE;  	#endif +#if !USE_VIEWER_AUTH  	// Initialize visibility (and don't force visibility - use prefs) +	refreshLocation( false ); +#endif  }  void LLPanelLogin::setSiteIsAlive( bool alive ) @@ -423,6 +520,21 @@ void LLPanelLogin::setSiteIsAlive( bool alive )  #endif  } +void LLPanelLogin::mungePassword(LLUICtrl* caller, void* user_data) +{ +	LLPanelLogin* self = (LLPanelLogin*)user_data; +	LLLineEditor* editor = (LLLineEditor*)caller; +	std::string password = editor->getText(); + +	// Re-md5 if we've changed at all +	if (password != self->mIncomingPassword) +	{ +		LLMD5 pass((unsigned char *)password.c_str()); +		char munged_password[MD5HEX_STR_SIZE]; +		pass.hex_digest(munged_password); +		self->mMungedPassword = munged_password; +	} +}  LLPanelLogin::~LLPanelLogin()  { @@ -457,8 +569,12 @@ void LLPanelLogin::draw()  		if ( mHtmlAvailable )  		{ +#if !USE_VIEWER_AUTH  			// draw a background box in black  			gl_rect_2d( 0, height - 264, width, 264, LLColor4( 0.0f, 0.0f, 0.0f, 1.f ) ); +			// draw the bottom part of the background image - just the blue background to the native client UI +			gl_draw_scaled_image(0, -264, width + 8, mLogoImage->getHeight(), mLogoImage); +#endif  		}  		else  		{ @@ -526,14 +642,61 @@ BOOL LLPanelLogin::handleKeyHere(KEY key, MASK mask, BOOL called_from_parent)  	return LLPanel::handleKeyHere(key, mask, called_from_parent);  } -	 + +// virtual  +void LLPanelLogin::setFocus(BOOL b) +{ +	if(b != hasFocus()) +	{ +		if(b) +		{ +			LLPanelLogin::giveFocus(); +		} +		else +		{ +			LLPanel::setFocus(b); +		} +	} +}  // static  void LLPanelLogin::giveFocus()  { - +#if USE_VIEWER_AUTH  	if (sInstance) +	{  		sInstance->setFocus(TRUE); +	} +#else +	if( sInstance ) +	{ +		// Grab focus and move cursor to first blank input field +		std::string first = sInstance->childGetText("first_name_edit"); +		std::string pass = sInstance->childGetText("password_edit"); + +		BOOL have_first = !first.empty(); +		BOOL have_pass = !pass.empty(); + +		LLLineEditor* edit = NULL; +		if (have_first && !have_pass) +		{ +			// User saved his name but not his password.  Move +			// focus to password field. +			edit = LLUICtrlFactory::getLineEditorByName(sInstance, "password_edit"); +		} +		else +		{ +			// User doesn't have a name, so start there. +			edit = LLUICtrlFactory::getLineEditorByName(sInstance, "first_name_edit"); +		} + +		if (edit) +		{ +			edit->setFocus(TRUE); +			edit->selectAll(); +		} +	} +#endif  } @@ -543,26 +706,186 @@ void LLPanelLogin::show(const LLRect &rect,  						void (*callback)(S32 option, void* user_data),  						void* callback_data)  { -	new LLPanelLogin(rect, show_server, callback, callback_data);  - -#if LL_LIBXUL_ENABLED -	LLWebBrowserCtrl* web_browser = LLUICtrlFactory::getWebBrowserCtrlByName(sInstance, "login_html"); -	 -	if (!web_browser) return; +	new LLPanelLogin(rect, show_server, callback, callback_data);  	if( !gFocusMgr.getKeyboardFocus() )  	{  		// Grab focus and move cursor to first enabled control -		web_browser->setFocus(TRUE); +		sInstance->setFocus(TRUE);  	}  	// Make sure that focus always goes here (and use the latest sInstance that was just created) -	gFocusMgr.setDefaultKeyboardFocus(web_browser); -#endif +	gFocusMgr.setDefaultKeyboardFocus(sInstance); +} + +// static +void LLPanelLogin::setFields(const std::string& firstname, const std::string& lastname, const std::string& password, +							 BOOL remember) +{ +	if (!sInstance) +	{ +		llwarns << "Attempted fillFields with no login view shown" << llendl; +		return; +	} + +	sInstance->childSetText("first_name_edit", firstname); +	sInstance->childSetText("last_name_edit", lastname); + +	// Max "actual" password length is 16 characters. +	// Hex digests are always 32 characters. +	if (password.length() == 32) +	{ +		// This is a MD5 hex digest of a password. +		// We don't actually use the password input field,  +		// fill it with MAX_PASSWORD characters so we get a  +		// nice row of asterixes. +		const std::string filler("123456789!123456"); +		sInstance->childSetText("password_edit", filler); +		sInstance->mIncomingPassword = filler; +		sInstance->mMungedPassword = password; +	} +	else +	{ +		// this is a normal text password +		sInstance->childSetText("password_edit", password); +		sInstance->mIncomingPassword = password; +		LLMD5 pass((unsigned char *)password.c_str()); +		char munged_password[MD5HEX_STR_SIZE]; +		pass.hex_digest(munged_password); +		sInstance->mMungedPassword = munged_password; +	} + +	sInstance->childSetValue("remember_check", remember);  }  // static +void LLPanelLogin::addServer(const char *server, S32 domain_name) +{ +	if (!sInstance) +	{ +		llwarns << "Attempted addServer with no login view shown" << llendl; +		return; +	} + +	LLComboBox* combo = LLUICtrlFactory::getComboBoxByName(sInstance, "server_combo"); +	if (combo) +	{ +		combo->add(server, LLSD(domain_name) ); +		combo->setCurrentByIndex(0); +	} +} + +// static +void LLPanelLogin::getFields(LLString &firstname, LLString &lastname, LLString &password, +							BOOL &remember) +{ +	if (!sInstance) +	{ +		llwarns << "Attempted getFields with no login view shown" << llendl; +		return; +	} + +	firstname = sInstance->childGetText("first_name_edit"); +	LLString::trim(firstname); + +	lastname = sInstance->childGetText("last_name_edit"); +	LLString::trim(lastname); + +	password = sInstance->mMungedPassword; +	remember = sInstance->childGetValue("remember_check"); +} + + +// static.  Return TRUE if user made a choice from the popup +BOOL LLPanelLogin::getServer(LLString &server, S32 &domain_name) +{ +	BOOL user_picked = FALSE; +	if (!sInstance) +	{ +		llwarns << "Attempted getServer with no login view shown" << llendl; +	} +	else +	{ +		LLComboBox* combo = LLUICtrlFactory::getComboBoxByName(sInstance, "server_combo"); +		if (combo) +		{ +			LLSD combo_val = combo->getValue(); +			if (LLSD::TypeInteger == combo_val.type()) +			{ +				domain_name = combo->getValue().asInteger(); + +				if ((S32)GRID_INFO_OTHER == domain_name) +				{ +					server = gGridName; +				} +			} +			else +			{ +				// no valid selection, return other +				domain_name = (S32)GRID_INFO_OTHER; +				server = combo_val.asString(); +			} +			user_picked = combo->isDirty(); +		} +	} + +	return user_picked; +} + +// static +void LLPanelLogin::getLocation(LLString &location) +{ +	if (!sInstance) +	{ +		llwarns << "Attempted getLocation with no login view shown" << llendl; +		return; +	} +	 +	LLComboBox* combo = LLUICtrlFactory::getComboBoxByName(sInstance, "start_location_combo"); +	if (combo) +	{ +		location = combo->getValue().asString(); +	} +} + +// static +void LLPanelLogin::refreshLocation( bool force_visible ) +{ +	if (!sInstance) return; + +#if USE_VIEWER_AUTH +	loadLoginPage(); +#else +	LLComboBox* combo = LLUICtrlFactory::getComboBoxByName(sInstance, "start_location_combo"); +	if (!combo) return; + +	if (LLURLSimString::parse()) +	{ +		combo->setCurrentByIndex( 3 );		// BUG?  Maybe 2? +		combo->setTextEntry(LLURLSimString::sInstance.mSimString); +	} +	else +	{ +		BOOL login_last = gSavedSettings.getBOOL("LoginLastLocation"); +		combo->setCurrentByIndex( login_last ? 1 : 0 ); +	} + +	BOOL show_start = TRUE; + +	if ( ! force_visible ) +		show_start = gSavedSettings.getBOOL("ShowStartLocation"); + +	sInstance->childSetVisible("start_location_combo", show_start); +	sInstance->childSetVisible("start_location_text", show_start); + +	BOOL show_server = ! gSavedSettings.getBOOL("ForceShowGrid"); +	sInstance->childSetVisible("server_combo", show_server); + +#endif +} + +// static  void LLPanelLogin::close()  {  	if (sInstance) @@ -596,11 +919,19 @@ void LLPanelLogin::setAlwaysRefresh(bool refresh)  void LLPanelLogin::loadLoginPage()  {  	if (!sInstance) return; +	 +	std::ostringstream oStr; +	std::string login_page = LLAppViewer::instance()->getLoginPage(); +	if (login_page.empty()) +	{ +		login_page = sInstance->childGetValue( "real_url" ).asString(); +	} +	oStr << login_page; +	 +#if USE_VIEWER_AUTH  	LLURLSimString::sInstance.parse(); -	std::ostringstream oStr; -  	LLString location;  	LLString region;  	LLString password; @@ -653,11 +984,6 @@ void LLPanelLogin::loadLoginPage()  	char* curl_channel = curl_escape(gChannelName.c_str(), 0);  	char* curl_version = curl_escape(version.c_str(), 0); -	std::string login_page = LLAppViewer::instance()->getLoginPage(); -	if (login_page.empty()) -	{ -		login_page = sInstance->childGetValue( "real_url" ).asString(); -	}  	// Use the right delimeter depending on how LLURI parses the URL  	LLURI login_page_uri = LLURI(login_page); @@ -666,7 +992,7 @@ void LLPanelLogin::loadLoginPage()  	{  		first_query_delimiter = "?";  	} -	oStr << login_page << first_query_delimiter << "firstname=" << firstname << +	oStr << first_query_delimiter << "firstname=" << firstname <<  		"&lastname=" << lastname << "&location=" << location <<	"®ion=" << curl_region <<  		"&grid=" << gGridInfo[gGridChoice].mLabel << "&channel=" << curl_channel <<  		"&version=" << curl_version; @@ -675,7 +1001,7 @@ void LLPanelLogin::loadLoginPage()  	curl_free(curl_channel);  	curl_free(curl_version); -	LLString language(gSavedSettings.getString("Language"));		 +	LLString language(gSavedSettings.getString("Language"));  	if(language == "default")  	{  		language = gSavedSettings.getString("SystemLanguage"); @@ -709,6 +1035,7 @@ void LLPanelLogin::loadLoginPage()  	if (gSavedSettings.getBOOL("ForceShowGrid"))  		oStr << "&show_grid=TRUE";  #endif +#endif  #if LL_LIBXUL_ENABLED  	LLWebBrowserCtrl* web_browser = LLUICtrlFactory::getWebBrowserCtrlByName(sInstance, "login_html"); @@ -741,6 +1068,77 @@ void LLPanelLogin::onNavigateComplete( const EventType& eventIn )  //---------------------------------------------------------------------------  // static +void LLPanelLogin::onClickConnect(void *) +{ +	if (sInstance && sInstance->mCallback) +	{ +		// tell the responder we're not here anymore +		if ( gResponsePtr ) +			gResponsePtr->setParent( 0 ); + +		// JC - Make sure the fields all get committed. +		sInstance->setFocus(FALSE); + +		LLString first = sInstance->childGetText("first_name_edit"); +		LLString last  = sInstance->childGetText("last_name_edit"); +		if (!first.empty() && !last.empty()) +		{ +			// has both first and last name typed + +			// store off custom server entry, if currently selected +			LLComboBox* combo = LLUICtrlFactory::getComboBoxByName(sInstance, "server_combo"); +			if (combo) +			{ +				S32 selected_server = combo->getValue(); +				if (selected_server == GRID_INFO_NONE) +				{ +					LLString custom_server = combo->getValue().asString(); +					gSavedSettings.setString("CustomServer", custom_server); +				} +			} +			sInstance->mCallback(0, sInstance->mCallbackData); +		} +		else +		{ +			// empty first or last name +			// same as clicking new account +			onClickNewAccount(NULL); +		} +	} +} + + +// static +void LLPanelLogin::newAccountAlertCallback(S32 option, void*) +{ +	if (0 == option) +	{ +		llinfos << "Going to account creation URL" << llendl; +		LLWeb::loadURL( CREATE_ACCOUNT_URL ); +	} +	else +	{ +		sInstance->setFocus(TRUE); +	} +} + + +// static +void LLPanelLogin::onClickNewAccount(void*) +{ +	if (gHideLinks) +	{ +		gViewerWindow->alertXml("MustHaveAccountToLogInNoLinks"); +	} +	else +	{ +		gViewerWindow->alertXml("MustHaveAccountToLogIn", +								LLPanelLogin::newAccountAlertCallback); +	} +} + + +// static  void LLPanelLogin::onClickQuit(void*)  {  	if (sInstance && sInstance->mCallback) @@ -759,3 +1157,22 @@ void LLPanelLogin::onClickVersion(void*)  {  	LLFloaterAbout::show(NULL);  } + +void LLPanelLogin::onClickForgotPassword(void*) +{ +	if (sInstance ) +	{ +		LLWeb::loadURL(sInstance->childGetValue( "forgot_password_url" ).asString()); +	} +} + + +// static +void LLPanelLogin::onPassKey(LLLineEditor* caller, void* user_data) +{ +	if (gKeyboard->getKeyDown(KEY_CAPSLOCK) && sCapslockDidNotification == FALSE) +	{ +		LLNotifyBox::showXml("CapsKeyOn"); +		sCapslockDidNotification = TRUE; +	} +} diff --git a/indra/newview/llpanellogin.h b/indra/newview/llpanellogin.h index f2a58b7b5f..ed883dfb51 100644 --- a/indra/newview/llpanellogin.h +++ b/indra/newview/llpanellogin.h @@ -77,11 +77,24 @@ public:  	virtual BOOL handleKeyHere(KEY key, MASK mask, BOOL called_from_parent);  	virtual void draw(); +	virtual void setFocus( BOOL b );  	static void show(const LLRect &rect, BOOL show_server,   		void (*callback)(S32 option, void* user_data),   		void* callback_data); +	static void setFields(const std::string& firstname, const std::string& lastname,  +		const std::string& password, BOOL remember); + +	static void addServer(const char *server, S32 domain_name); +	static void refreshLocation( bool force_visible ); + +	static void getFields(LLString &firstname, LLString &lastname, +		LLString &password, BOOL &remember); + +	static BOOL getServer(LLString &server, S32& domain_name); +	static void getLocation(LLString &location); +  	static void close();  	void setSiteIsAlive( bool alive ); @@ -89,8 +102,12 @@ public:  	static void loadLoginPage();	  	static void giveFocus();  	static void setAlwaysRefresh(bool refresh);  - +	static void mungePassword(LLUICtrl* caller, void* user_data); +	  private: +	static void onClickConnect(void*); +	static void onClickNewAccount(void*); +	static void newAccountAlertCallback(S32 option, void*);  	static void onClickQuit(void*);  	static void onClickVersion(void*); @@ -98,6 +115,8 @@ private:  	// browser observer impls  	virtual void onNavigateComplete( const EventType& eventIn );  #endif +	static void onClickForgotPassword(void*); +	static void onPassKey(LLLineEditor* caller, void* user_data);  private:  	LLPointer<LLViewerImage> mLogoImage; @@ -105,7 +124,11 @@ private:  	void			(*mCallback)(S32 option, void *userdata);  	void*			mCallbackData; +	std::string mIncomingPassword; +	std::string mMungedPassword; +  	static LLPanelLogin* sInstance; +	static BOOL		sCapslockDidNotification;  	BOOL			mHtmlAvailable;  }; diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp index 675a447dc4..b50c264c35 100644 --- a/indra/newview/llstartup.cpp +++ b/indra/newview/llstartup.cpp @@ -351,6 +351,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; @@ -655,7 +656,17 @@ BOOL idle_startup()  			firstname = gCmdLineFirstName;  			lastname = gCmdLineLastName; +			LLMD5 pass((unsigned char*)gCmdLinePassword.c_str()); +			char md5pass[33];               /* Flawfinder: ignore */ +			pass.hex_digest(md5pass); +			password = md5pass; +			remember_password = gSavedSettings.getBOOL("RememberPassword"); +			 +#ifdef USE_VIEWER_AUTH  			show_connect_box = TRUE; +#else +			show_connect_box = FALSE; +#endif  			gAutoLogin = TRUE;  		}  		else if (gAutoLogin || gSavedSettings.getBOOL("AutoLogin")) @@ -664,7 +675,13 @@ BOOL idle_startup()  			lastname = gSavedSettings.getString("LastName");  			password = load_password_from_disk();  			gSavedSettings.setBOOL("RememberPassword", TRUE); +			remember_password = TRUE; +			 +#ifdef USE_VIEWER_AUTH  			show_connect_box = TRUE; +#else +			show_connect_box = FALSE; +#endif  		}  		else  		{ @@ -673,6 +690,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;  		} @@ -694,6 +712,9 @@ BOOL idle_startup()  		if (show_connect_box)  		{ +			// Load all the name information out of the login view +			LLPanelLogin::getFields(firstname, lastname, password, remember_password); +  			if (gNoRender)  			{  				llerrs << "Need to autologin or use command line with norender!" << llendl; @@ -703,6 +724,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(); @@ -768,6 +791,11 @@ BOOL idle_startup()  		if (show_connect_box)  		{ +			// TODO if not use viewer auth +			// Load all the name information out of the login view +			LLPanelLogin::getFields(firstname, lastname, password, remember_password); +			// end TODO +	   			// HACK: Try to make not jump on login  			gKeyboard->resetKeys();  		} @@ -777,6 +805,16 @@ BOOL idle_startup()  			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); +  			llinfos << "Attempting login as: " << firstname << " " << lastname << llendl;  			gDebugInfo["LoginName"] = firstname + " " + lastname;	  		} @@ -823,6 +861,27 @@ BOOL idle_startup()  		if (show_connect_box)  		{ +			// TODO only set loginuri based on server choice if ! USE_VIEWER_AUTH +			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 ); +			// END TODO  			LLPanelLogin::close();  		} @@ -985,12 +1044,14 @@ BOOL idle_startup()  		hashed_mac.finalize();  		hashed_mac.hex_digest(hashed_mac_string); +		// TODO if statement here to use web_login_key  		gUserAuthp->authenticate(  			sAuthUris[sAuthUriNum].c_str(),  			auth_method.c_str(),  			firstname.c_str(),  			lastname.c_str(), -			web_login_key, +			// web_login_key, +			password.c_str(),  			start.str().c_str(),  			gSkipOptionalUpdate,  			gAcceptTOS, @@ -1262,7 +1323,16 @@ 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"); @@ -1467,6 +1537,8 @@ BOOL idle_startup()  			reset_login();  			gAutoLogin = FALSE;  			show_connect_box = TRUE; +			// Don't save an incorrect password to disk. +			save_password_to_disk(NULL);  		}  		return do_normal_idle;  	} @@ -2378,12 +2450,76 @@ 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_ADITI].mLabel,        GRID_INFO_ADITI ); +	LLPanelLogin::addServer( gGridInfo[GRID_INFO_AGNI].mLabel, GRID_INFO_AGNI ); +	LLPanelLogin::addServer( gGridInfo[GRID_INFO_ARUNA].mLabel,        GRID_INFO_ARUNA ); +	LLPanelLogin::addServer( gGridInfo[GRID_INFO_DURGA].mLabel,        GRID_INFO_DURGA ); +	LLPanelLogin::addServer( gGridInfo[GRID_INFO_GANGA].mLabel,        GRID_INFO_GANGA ); +	LLPanelLogin::addServer( gGridInfo[GRID_INFO_MITRA].mLabel,       GRID_INFO_MITRA ); +	LLPanelLogin::addServer( gGridInfo[GRID_INFO_MOHINI].mLabel,       GRID_INFO_MOHINI ); +	LLPanelLogin::addServer( gGridInfo[GRID_INFO_NANDI].mLabel,       GRID_INFO_NANDI ); +	LLPanelLogin::addServer( gGridInfo[GRID_INFO_RADHA].mLabel,       GRID_INFO_RADHA ); +	LLPanelLogin::addServer( gGridInfo[GRID_INFO_RAVI].mLabel,       GRID_INFO_RAVI ); +	LLPanelLogin::addServer( gGridInfo[GRID_INFO_SIVA].mLabel, GRID_INFO_SIVA ); +	LLPanelLogin::addServer( gGridInfo[GRID_INFO_SHAKTI].mLabel,       GRID_INFO_SHAKTI ); +	LLPanelLogin::addServer( gGridInfo[GRID_INFO_SOMA].mLabel, GRID_INFO_SOMA ); +	LLPanelLogin::addServer( gGridInfo[GRID_INFO_UMA].mLabel,  GRID_INFO_UMA ); +	LLPanelLogin::addServer( gGridInfo[GRID_INFO_VAAK].mLabel, GRID_INFO_VAAK ); +	LLPanelLogin::addServer( gGridInfo[GRID_INFO_YAMI].mLabel, GRID_INFO_YAMI ); +	LLPanelLogin::addServer( gGridInfo[GRID_INFO_LOCAL].mLabel,        GRID_INFO_LOCAL );  }  // 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); +		} + +		// Next iteration through main loop should shut down the app cleanly. +		LLAppViewer::instance()->userQuit(); +		 +		if (LLAppViewer::instance()->quitRequested()) +		{ +			LLPanelLogin::close(); +		} +		return; +	} +	else +	{ +		llwarns << "Unknown login button clicked" << llendl; +	}  }  LLString load_password_from_disk() diff --git a/indra/newview/llurldispatcher.cpp b/indra/newview/llurldispatcher.cpp index 6fec904239..ba8e77afdf 100644 --- a/indra/newview/llurldispatcher.cpp +++ b/indra/newview/llurldispatcher.cpp @@ -197,7 +197,8 @@ bool LLURLDispatcherImpl::dispatchRegion(const std::string& url, BOOL right_mous  		LLURLSimString::setString(url);  		// We're at the login screen, so make sure user can see  		// the login location box to know where they are going. -		LLPanelLogin::loadLoginPage(); +		 +		LLPanelLogin::refreshLocation( true );  		return true;  	} diff --git a/indra/newview/llviewernetwork.cpp b/indra/newview/llviewernetwork.cpp index ad0dacbd13..6fb2957023 100644 --- a/indra/newview/llviewernetwork.cpp +++ b/indra/newview/llviewernetwork.cpp @@ -45,54 +45,30 @@ LLGridData gGridInfo[GRID_INFO_COUNT] =  	  "util.agni.lindenlab.com",   	  "https://login.agni.lindenlab.com/cgi-bin/login.cgi",  	  "https://secondlife.com/helpers/" }, -	{ "DMZ",   -	  "util.dmz.lindenlab.com",  -	  "https://login.dmz.lindenlab.com/cgi-bin/login.cgi", -	  "http://dmz-secondlife.webdev.lindenlab.com/helpers/" }, -	{ "Siva",  -	  "util.siva.lindenlab.com", -	  "https://login.siva.lindenlab.com/cgi-bin/login.cgi", -	  "http://siva-secondlife.webdev.lindenlab.com/helpers/" }, +	{ "Aruna", +	  "util.aruna.lindenlab.com", +	  "https://login.aruna.lindenlab.com/cgi-bin/login.cgi", +	  "http://aruna-secondlife.webdev.lindenlab.com/helpers/" },  	{ "Durga",  	  "util.durga.lindenlab.com",  	  "https://login.durga.lindenlab.com/cgi-bin/login.cgi",  	  "http://durga-secondlife.webdev.lindenlab.com/helpers/" }, -	{ "Shakti", -	  "util.shakti.lindenlab.com", -	  "https://login.shakti.lindenlab.com/cgi-bin/login.cgi", -	  "http://shakti-secondlife.webdev.lindenlab.com/helpers/" }, -	{ "Soma", -	  "util.soma.lindenlab.com", -	  "https://login.soma.lindenlab.com/cgi-bin/login.cgi", -	  "http://soma-secondlife.webdev.lindenlab.com/helpers/" },  	{ "Ganga",  	  "util.ganga.lindenlab.com",  	  "https://login.ganga.lindenlab.com/cgi-bin/login.cgi",  	  "http://ganga-secondlife.webdev.lindenlab.com/helpers/" }, -	{ "Vaak", -	  "util.vaak.lindenlab.com", -	  "https://login.vaak.lindenlab.com/cgi-bin/login.cgi", -	  "http://vaak-secondlife.webdev.lindenlab.com/helpers/" }, -	{ "Uma", -	  "util.uma.lindenlab.com", -	  "https://login.uma.lindenlab.com/cgi-bin/login.cgi", -	  "http://uma-secondlife.webdev.lindenlab.com/helpers/" }, +	{ "Mitra", +	  "util.mitra.lindenlab.com", +	  "https://login.mitra.lindenlab.com/cgi-bin/login.cgi", +	  "http://mitra-secondlife.webdev.lindenlab.com/helpers/" },  	{ "Mohini",  	  "util.mohini.lindenlab.com",  	  "https://login.mohini.lindenlab.com/cgi-bin/login.cgi",  	  "http://mohini-secondlife.webdev.lindenlab.com/helpers/" }, -	{ "Yami", -	  "util.yami.lindenlab.com", -	  "https://login.yami.lindenlab.com/cgi-bin/login.cgi", -	  "http://yami-secondlife.webdev.lindenlab.com/helpers/" },    	{ "Nandi",  	  "util.nandi.lindenlab.com",  	  "https://login.nandi.lindenlab.com/cgi-bin/login.cgi",  	  "http://nandi-secondlife.webdev.lindenlab.com/helpers/" }, -	{ "Mitra", -	  "util.mitra.lindenlab.com", -	  "https://login.mitra.lindenlab.com/cgi-bin/login.cgi", -	  "http://mitra-secondlife.webdev.lindenlab.com/helpers/" },  	{ "Radha",  	  "util.radha.lindenlab.com",  	  "https://login.radha.lindenlab.com/cgi-bin/login.cgi", @@ -101,10 +77,30 @@ LLGridData gGridInfo[GRID_INFO_COUNT] =  	  "util.ravi.lindenlab.com",  	  "https://login.ravi.lindenlab.com/cgi-bin/login.cgi",  	  "http://ravi-secondlife.webdev.lindenlab.com/helpers/" }, -	{ "Aruna", -	  "util.aruna.lindenlab.com", -	  "https://login.aruna.lindenlab.com/cgi-bin/login.cgi", -	  "http://aruna-secondlife.webdev.lindenlab.com/helpers/" }, +	{ "Siva",  +	  "util.siva.lindenlab.com", +	  "https://login.siva.lindenlab.com/cgi-bin/login.cgi", +	  "http://siva-secondlife.webdev.lindenlab.com/helpers/" }, +	{ "Shakti", +	  "util.shakti.lindenlab.com", +	  "https://login.shakti.lindenlab.com/cgi-bin/login.cgi", +	  "http://shakti-secondlife.webdev.lindenlab.com/helpers/" }, +	{ "Soma", +	  "util.soma.lindenlab.com", +	  "https://login.soma.lindenlab.com/cgi-bin/login.cgi", +	  "http://soma-secondlife.webdev.lindenlab.com/helpers/" }, +	{ "Uma", +	  "util.uma.lindenlab.com", +	  "https://login.uma.lindenlab.com/cgi-bin/login.cgi", +	  "http://uma-secondlife.webdev.lindenlab.com/helpers/" }, +	{ "Vaak", +	  "util.vaak.lindenlab.com", +	  "https://login.vaak.lindenlab.com/cgi-bin/login.cgi", +	  "http://vaak-secondlife.webdev.lindenlab.com/helpers/" }, +	{ "Yami", +	  "util.yami.lindenlab.com", +	  "https://login.yami.lindenlab.com/cgi-bin/login.cgi", +	  "http://yami-secondlife.webdev.lindenlab.com/helpers/" },  	{ "Local",   	  "localhost",   	  "https://login.dmz.lindenlab.com/cgi-bin/login.cgi", diff --git a/indra/newview/llviewernetwork.h b/indra/newview/llviewernetwork.h index dbeaf2c1cd..4de73aae7a 100644 --- a/indra/newview/llviewernetwork.h +++ b/indra/newview/llviewernetwork.h @@ -40,21 +40,20 @@ enum EGridInfo  	GRID_INFO_NONE,  	GRID_INFO_ADITI,  	GRID_INFO_AGNI, -	GRID_INFO_DMZ, -	GRID_INFO_SIVA, +	GRID_INFO_ARUNA,  	GRID_INFO_DURGA, -	GRID_INFO_SHAKTI, -	GRID_INFO_SOMA,  	GRID_INFO_GANGA, -	GRID_INFO_VAAK, -	GRID_INFO_UMA, +	GRID_INFO_MITRA,  	GRID_INFO_MOHINI, -	GRID_INFO_YAMI,  	GRID_INFO_NANDI, -	GRID_INFO_MITRA,  	GRID_INFO_RADHA,  	GRID_INFO_RAVI, -	GRID_INFO_ARUNA, +	GRID_INFO_SIVA, +	GRID_INFO_SHAKTI, +	GRID_INFO_SOMA, +	GRID_INFO_UMA, +	GRID_INFO_VAAK, +	GRID_INFO_YAMI,  	GRID_INFO_LOCAL,  	GRID_INFO_OTHER, // IP address set via -user or other command line option  	GRID_INFO_COUNT diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index 405a705b62..6dab10b339 100644 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -2426,7 +2426,9 @@ BOOL LLViewerWindow::handleKey(KEY key, MASK mask)  		{  			BOOL visible = ! gSavedSettings.getBOOL("ForceShowGrid");  			gSavedSettings.setBOOL("ForceShowGrid", visible); -			LLPanelLogin::loadLoginPage(); + +			// Initialize visibility (and don't force visibility - use prefs) +			LLPanelLogin::refreshLocation( false );  		}  	}  | 
