llloginhandler.cpp
上传用户:king477883
上传日期:2021-03-01
资源大小:9553k
文件大小:6k
源码类别:

游戏引擎

开发平台:

C++ Builder

  1. /** 
  2.  * @file llloginhandler.cpp
  3.  * @brief Handles filling in the login panel information from a SLURL
  4.  * such as secondlife:///app/login?first=Bob&last=Dobbs
  5.  *
  6.  * $LicenseInfo:firstyear=2008&license=viewergpl$
  7.  * 
  8.  * Copyright (c) 2008-2010, Linden Research, Inc.
  9.  * 
  10.  * Second Life Viewer Source Code
  11.  * The source code in this file ("Source Code") is provided by Linden Lab
  12.  * to you under the terms of the GNU General Public License, version 2.0
  13.  * ("GPL"), unless you have obtained a separate licensing agreement
  14.  * ("Other License"), formally executed by you and Linden Lab.  Terms of
  15.  * the GPL can be found in doc/GPL-license.txt in this distribution, or
  16.  * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
  17.  * 
  18.  * There are special exceptions to the terms and conditions of the GPL as
  19.  * it is applied to this Source Code. View the full text of the exception
  20.  * in the file doc/FLOSS-exception.txt in this software distribution, or
  21.  * online at
  22.  * http://secondlifegrid.net/programs/open_source/licensing/flossexception
  23.  * 
  24.  * By copying, modifying or distributing this software, you acknowledge
  25.  * that you have read and understood your obligations described above,
  26.  * and agree to abide by those obligations.
  27.  * 
  28.  * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
  29.  * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
  30.  * COMPLETENESS OR PERFORMANCE.
  31.  * $/LicenseInfo$
  32.  */
  33. #include "llviewerprecompiledheaders.h"
  34. #include "llloginhandler.h"
  35. // viewer includes
  36. #include "llpanellogin.h" // save_password_to_disk()
  37. #include "llstartup.h" // getStartupState()
  38. #include "llurlsimstring.h"
  39. #include "llviewercontrol.h" // gSavedSettings
  40. #include "llviewernetwork.h" // EGridInfo
  41. #include "llviewerwindow.h" // getWindow()
  42. // library includes
  43. #include "llmd5.h"
  44. #include "llweb.h"
  45. #include "llwindow.h"
  46. // Must have instance to auto-register with LLCommandDispatcher
  47. LLLoginHandler gLoginHandler;
  48. //parses the input url and returns true if afterwards
  49. //a web-login-key, firstname and lastname  is set
  50. bool LLLoginHandler::parseDirectLogin(std::string url)
  51. {
  52. LLURI uri(url);
  53. parse(uri.queryMap());
  54. if (/*mWebLoginKey.isNull() ||*/
  55. mFirstName.empty() ||
  56. mLastName.empty())
  57. {
  58. return false;
  59. }
  60. else
  61. {
  62. return true;
  63. }
  64. }
  65. void LLLoginHandler::parse(const LLSD& queryMap)
  66. {
  67. //mWebLoginKey = queryMap["web_login_key"].asUUID();
  68. mFirstName = queryMap["first_name"].asString();
  69. mLastName = queryMap["last_name"].asString();
  70. EGridInfo grid_choice = GRID_INFO_NONE;
  71. if (queryMap["grid"].asString() == "aditi")
  72. {
  73. grid_choice = GRID_INFO_ADITI;
  74. }
  75. else if (queryMap["grid"].asString() == "agni")
  76. {
  77. grid_choice = GRID_INFO_AGNI;
  78. }
  79. else if (queryMap["grid"].asString() == "siva")
  80. {
  81. grid_choice = GRID_INFO_SIVA;
  82. }
  83. else if (queryMap["grid"].asString() == "damballah")
  84. {
  85. grid_choice = GRID_INFO_DAMBALLAH;
  86. }
  87. else if (queryMap["grid"].asString() == "durga")
  88. {
  89. grid_choice = GRID_INFO_DURGA;
  90. }
  91. else if (queryMap["grid"].asString() == "shakti")
  92. {
  93. grid_choice = GRID_INFO_SHAKTI;
  94. }
  95. else if (queryMap["grid"].asString() == "soma")
  96. {
  97. grid_choice = GRID_INFO_SOMA;
  98. }
  99. else if (queryMap["grid"].asString() == "ganga")
  100. {
  101. grid_choice = GRID_INFO_GANGA;
  102. }
  103. else if (queryMap["grid"].asString() == "vaak")
  104. {
  105. grid_choice = GRID_INFO_VAAK;
  106. }
  107. else if (queryMap["grid"].asString() == "uma")
  108. {
  109. grid_choice = GRID_INFO_UMA;
  110. }
  111. else if (queryMap["grid"].asString() == "mohini")
  112. {
  113. grid_choice = GRID_INFO_MOHINI;
  114. }
  115. else if (queryMap["grid"].asString() == "yami")
  116. {
  117. grid_choice = GRID_INFO_YAMI;
  118. }
  119. else if (queryMap["grid"].asString() == "nandi")
  120. {
  121. grid_choice = GRID_INFO_NANDI;
  122. }
  123. else if (queryMap["grid"].asString() == "mitra")
  124. {
  125. grid_choice = GRID_INFO_MITRA;
  126. }
  127. else if (queryMap["grid"].asString() == "radha")
  128. {
  129. grid_choice = GRID_INFO_RADHA;
  130. }
  131. else if (queryMap["grid"].asString() == "ravi")
  132. {
  133. grid_choice = GRID_INFO_RAVI;
  134. }
  135. else if (queryMap["grid"].asString() == "aruna")
  136. {
  137. grid_choice = GRID_INFO_ARUNA;
  138. }
  139. if(grid_choice != GRID_INFO_NONE)
  140. {
  141. LLViewerLogin::getInstance()->setGridChoice(grid_choice);
  142. }
  143. std::string startLocation = queryMap["location"].asString();
  144. if (startLocation == "specify")
  145. {
  146. LLURLSimString::setString(queryMap["region"].asString());
  147. }
  148. else if (!startLocation.empty()) // "last" or "home" or ??? (let LLURLSimString figure it out)
  149. {
  150. LLURLSimString::setString(startLocation);
  151. }
  152. }
  153. bool LLLoginHandler::handle(const LLSD& tokens,
  154. const LLSD& query_map,
  155. LLMediaCtrl* web)
  156. {
  157. if (tokens.size() == 1
  158. && tokens[0].asString() == "show")
  159. {
  160. // We're using reg-in-client, so show the XUI login widgets
  161. LLPanelLogin::showLoginWidgets();
  162. return true;
  163. }
  164. if (tokens.size() == 1
  165. && tokens[0].asString() == "reg")
  166. {
  167. LLWindow* window = gViewerWindow->getWindow();
  168. window->incBusyCount();
  169. window->setCursor(UI_CURSOR_ARROW);
  170. // Do this first, as it may be slow and we want to keep something
  171. // on the user's screen as long as possible
  172. LLWeb::loadURLExternal( "http://join.eniac15.lindenlab.com/" );
  173. window->decBusyCount();
  174. window->setCursor(UI_CURSOR_ARROW);
  175. // Then hide the window
  176. window->minimize();
  177. return true;
  178. }
  179. // Make sure window is visible
  180. LLWindow* window = gViewerWindow->getWindow();
  181. if (window->getMinimized())
  182. {
  183. window->restore();
  184. }
  185. parse(query_map);
  186. //if we haven't initialized stuff yet, this is 
  187. //coming in from the GURL handler, just parse
  188. if (STATE_FIRST == LLStartUp::getStartupState())
  189. {
  190. return true;
  191. }
  192. std::string password = query_map["password"].asString();
  193. if (!password.empty())
  194. {
  195. gSavedSettings.setBOOL("RememberPassword", TRUE);
  196. if (password.substr(0,3) != "$1$")
  197. {
  198. LLMD5 pass((unsigned char*)password.c_str());
  199. char md5pass[33]; /* Flawfinder: ignore */
  200. pass.hex_digest(md5pass);
  201. std::string hashed_password = ll_safe_string(md5pass, 32);
  202. LLStartUp::savePasswordToDisk(hashed_password);
  203. }
  204. }
  205. if (LLStartUp::getStartupState() < STATE_LOGIN_CLEANUP)  //on splash page
  206. {
  207. if (!mFirstName.empty() || !mLastName.empty())
  208. {
  209. // Fill in the name, and maybe the password
  210. LLPanelLogin::setFields(mFirstName, mLastName, password);
  211. }
  212. //if (mWebLoginKey.isNull())
  213. //{
  214. // LLPanelLogin::loadLoginPage();
  215. //}
  216. //else
  217. //{
  218. // LLStartUp::setStartupState( STATE_LOGIN_CLEANUP );
  219. //}
  220. LLStartUp::setStartupState( STATE_LOGIN_CLEANUP );
  221. }
  222. return true;
  223. }