diff options
author | lbsa71 | 2009-03-20 17:25:12 +0000 |
---|---|---|
committer | lbsa71 | 2009-03-20 17:25:12 +0000 |
commit | 613201e22045166d5a22f7bc1ef75ebe6639b1de (patch) | |
tree | 63ffa8749297b61318d78b6911d5ef21d8d60351 /OpenSim/Framework | |
parent | Ensure the remembered velocity is zero when physical is turned off on a prim.... (diff) | |
download | opensim-SC_OLD-613201e22045166d5a22f7bc1ef75ebe6639b1de.zip opensim-SC_OLD-613201e22045166d5a22f7bc1ef75ebe6639b1de.tar.gz opensim-SC_OLD-613201e22045166d5a22f7bc1ef75ebe6639b1de.tar.bz2 opensim-SC_OLD-613201e22045166d5a22f7bc1ef75ebe6639b1de.tar.xz |
* Normalized and pulled GetInventorySkeleton up.
Diffstat (limited to 'OpenSim/Framework')
-rw-r--r-- | OpenSim/Framework/Communications/LoginService.cs | 110 |
1 files changed, 79 insertions, 31 deletions
diff --git a/OpenSim/Framework/Communications/LoginService.cs b/OpenSim/Framework/Communications/LoginService.cs index b84f5b6..99b5df7 100644 --- a/OpenSim/Framework/Communications/LoginService.cs +++ b/OpenSim/Framework/Communications/LoginService.cs | |||
@@ -90,13 +90,6 @@ namespace OpenSim.Framework.Communications | |||
90 | { | 90 | { |
91 | } | 91 | } |
92 | 92 | ||
93 | /// <summary> | ||
94 | /// Get the initial login inventory skeleton (in other words, the folder structure) for the given user. | ||
95 | /// </summary> | ||
96 | /// <param name="userID"></param> | ||
97 | /// <returns></returns> | ||
98 | /// <exception cref='System.Exception'>This will be thrown if there is a problem with the inventory service</exception> | ||
99 | protected abstract InventoryData GetInventorySkeleton(UUID userID); | ||
100 | 93 | ||
101 | /// <summary> | 94 | /// <summary> |
102 | /// Called when we receive the client's initial XMLRPC login_to_simulator request message | 95 | /// Called when we receive the client's initial XMLRPC login_to_simulator request message |
@@ -107,13 +100,13 @@ namespace OpenSim.Framework.Communications | |||
107 | { | 100 | { |
108 | // Temporary fix | 101 | // Temporary fix |
109 | m_loginMutex.WaitOne(); | 102 | m_loginMutex.WaitOne(); |
110 | 103 | ||
111 | try | 104 | try |
112 | { | 105 | { |
113 | //CFK: CustomizeResponse contains sufficient strings to alleviate the need for this. | 106 | //CFK: CustomizeResponse contains sufficient strings to alleviate the need for this. |
114 | //CKF: m_log.Info("[LOGIN]: Attempting login now..."); | 107 | //CKF: m_log.Info("[LOGIN]: Attempting login now..."); |
115 | XmlRpcResponse response = new XmlRpcResponse(); | 108 | XmlRpcResponse response = new XmlRpcResponse(); |
116 | Hashtable requestData = (Hashtable) request.Params[0]; | 109 | Hashtable requestData = (Hashtable)request.Params[0]; |
117 | 110 | ||
118 | SniffLoginKey((Uri)request.Params[2], requestData); | 111 | SniffLoginKey((Uri)request.Params[2], requestData); |
119 | 112 | ||
@@ -301,14 +294,14 @@ namespace OpenSim.Framework.Communications | |||
301 | { | 294 | { |
302 | if (requestData.Contains("passwd")) | 295 | if (requestData.Contains("passwd")) |
303 | { | 296 | { |
304 | string passwd = (string) requestData["passwd"]; | 297 | string passwd = (string)requestData["passwd"]; |
305 | GoodLogin = AuthenticateUser(userProfile, passwd); | 298 | GoodLogin = AuthenticateUser(userProfile, passwd); |
306 | } | 299 | } |
307 | if (!GoodLogin && (requestData.Contains("web_login_key"))) | 300 | if (!GoodLogin && (requestData.Contains("web_login_key"))) |
308 | { | 301 | { |
309 | try | 302 | try |
310 | { | 303 | { |
311 | UUID webloginkey = new UUID((string) requestData["web_login_key"]); | 304 | UUID webloginkey = new UUID((string)requestData["web_login_key"]); |
312 | GoodLogin = AuthenticateUser(userProfile, webloginkey); | 305 | GoodLogin = AuthenticateUser(userProfile, webloginkey); |
313 | } | 306 | } |
314 | catch (Exception e) | 307 | catch (Exception e) |
@@ -372,7 +365,7 @@ namespace OpenSim.Framework.Communications | |||
372 | m_log.Info("[LOGIN]: LLSD StartLocation Requested: " + map["start"].AsString()); | 365 | m_log.Info("[LOGIN]: LLSD StartLocation Requested: " + map["start"].AsString()); |
373 | startLocationRequest = map["start"].AsString(); | 366 | startLocationRequest = map["start"].AsString(); |
374 | } | 367 | } |
375 | m_log.Info("[LOGIN]: LLSD Login Requested for: '" + firstname+"' '"+lastname+"' / "+passwd); | 368 | m_log.Info("[LOGIN]: LLSD Login Requested for: '" + firstname + "' '" + lastname + "' / " + passwd); |
376 | 369 | ||
377 | if (!TryAuthenticateLLSDLogin(firstname, lastname, passwd, out userProfile)) | 370 | if (!TryAuthenticateLLSDLogin(firstname, lastname, passwd, out userProfile)) |
378 | { | 371 | { |
@@ -385,7 +378,7 @@ namespace OpenSim.Framework.Communications | |||
385 | else | 378 | else |
386 | return logResponse.CreateLoginFailedResponseLLSD(); | 379 | return logResponse.CreateLoginFailedResponseLLSD(); |
387 | 380 | ||
388 | 381 | ||
389 | if (userProfile.GodLevel < m_minLoginLevel) | 382 | if (userProfile.GodLevel < m_minLoginLevel) |
390 | { | 383 | { |
391 | return logResponse.CreateLoginBlockedResponseLLSD(); | 384 | return logResponse.CreateLoginBlockedResponseLLSD(); |
@@ -520,7 +513,7 @@ namespace OpenSim.Framework.Communications | |||
520 | string firstname = String.Empty; | 513 | string firstname = String.Empty; |
521 | string lastname = String.Empty; | 514 | string lastname = String.Empty; |
522 | string location = String.Empty; | 515 | string location = String.Empty; |
523 | string region =String.Empty; | 516 | string region = String.Empty; |
524 | string grid = String.Empty; | 517 | string grid = String.Empty; |
525 | string channel = String.Empty; | 518 | string channel = String.Empty; |
526 | string version = String.Empty; | 519 | string version = String.Empty; |
@@ -560,7 +553,7 @@ namespace OpenSim.Framework.Communications | |||
560 | lang = wfcut.Replace((string)keysvals["lang"], String.Empty, 99999); | 553 | lang = wfcut.Replace((string)keysvals["lang"], String.Empty, 99999); |
561 | 554 | ||
562 | if (keysvals.Contains("password")) | 555 | if (keysvals.Contains("password")) |
563 | password = wfcut.Replace((string)keysvals["password"], String.Empty, 99999); | 556 | password = wfcut.Replace((string)keysvals["password"], String.Empty, 99999); |
564 | 557 | ||
565 | // load our login form. | 558 | // load our login form. |
566 | string loginform = GetLoginForm(firstname, lastname, location, region, grid, channel, version, lang, password, errormessages); | 559 | string loginform = GetLoginForm(firstname, lastname, location, region, grid, channel, version, lang, password, errormessages); |
@@ -578,11 +571,11 @@ namespace OpenSim.Framework.Communications | |||
578 | UUID webloginkey = UUID.Random(); | 571 | UUID webloginkey = UUID.Random(); |
579 | m_userManager.StoreWebLoginKey(user.ID, webloginkey); | 572 | m_userManager.StoreWebLoginKey(user.ID, webloginkey); |
580 | //statuscode = 301; | 573 | //statuscode = 301; |
581 | 574 | ||
582 | // string redirectURL = "about:blank?redirect-http-hack=" + | 575 | // string redirectURL = "about:blank?redirect-http-hack=" + |
583 | // HttpUtility.UrlEncode("secondlife:///app/login?first_name=" + firstname + "&last_name=" + | 576 | // HttpUtility.UrlEncode("secondlife:///app/login?first_name=" + firstname + "&last_name=" + |
584 | // lastname + | 577 | // lastname + |
585 | // "&location=" + location + "&grid=Other&web_login_key=" + webloginkey.ToString()); | 578 | // "&location=" + location + "&grid=Other&web_login_key=" + webloginkey.ToString()); |
586 | //m_log.Info("[WEB]: R:" + redirectURL); | 579 | //m_log.Info("[WEB]: R:" + redirectURL); |
587 | returnactions["int_response_code"] = statuscode; | 580 | returnactions["int_response_code"] = statuscode; |
588 | //returnactions["str_redirect_location"] = redirectURL; | 581 | //returnactions["str_redirect_location"] = redirectURL; |
@@ -612,7 +605,7 @@ namespace OpenSim.Framework.Communications | |||
612 | { | 605 | { |
613 | // inject our values in the form at the markers | 606 | // inject our values in the form at the markers |
614 | 607 | ||
615 | string loginform=String.Empty; | 608 | string loginform = String.Empty; |
616 | string file = Path.Combine(Util.configDir(), "http_loginform.html"); | 609 | string file = Path.Combine(Util.configDir(), "http_loginform.html"); |
617 | if (!File.Exists(file)) | 610 | if (!File.Exists(file)) |
618 | { | 611 | { |
@@ -753,7 +746,7 @@ namespace OpenSim.Framework.Communications | |||
753 | m_log.InfoFormat("[LOGIN]: Authenticating {0} {1} ({2})", profile.FirstName, profile.SurName, profile.ID); | 746 | m_log.InfoFormat("[LOGIN]: Authenticating {0} {1} ({2})", profile.FirstName, profile.SurName, profile.ID); |
754 | 747 | ||
755 | // Match web login key unless it's the default weblogin key UUID.Zero | 748 | // Match web login key unless it's the default weblogin key UUID.Zero |
756 | passwordSuccess = ((profile.WebLoginKey==webloginkey) && profile.WebLoginKey != UUID.Zero); | 749 | passwordSuccess = ((profile.WebLoginKey == webloginkey) && profile.WebLoginKey != UUID.Zero); |
757 | 750 | ||
758 | return passwordSuccess; | 751 | return passwordSuccess; |
759 | } | 752 | } |
@@ -801,7 +794,7 @@ namespace OpenSim.Framework.Communications | |||
801 | LoginResponse.BuddyList.BuddyInfo buddyitem = new LoginResponse.BuddyList.BuddyInfo(fl.Friend); | 794 | LoginResponse.BuddyList.BuddyInfo buddyitem = new LoginResponse.BuddyList.BuddyInfo(fl.Friend); |
802 | buddyitem.BuddyID = fl.Friend; | 795 | buddyitem.BuddyID = fl.Friend; |
803 | buddyitem.BuddyRightsHave = (int)fl.FriendListOwnerPerms; | 796 | buddyitem.BuddyRightsHave = (int)fl.FriendListOwnerPerms; |
804 | buddyitem.BuddyRightsGiven = (int) fl.FriendPerms; | 797 | buddyitem.BuddyRightsGiven = (int)fl.FriendPerms; |
805 | buddylistreturn.AddNewBuddy(buddyitem); | 798 | buddylistreturn.AddNewBuddy(buddyitem); |
806 | } | 799 | } |
807 | return buddylistreturn; | 800 | return buddylistreturn; |
@@ -996,14 +989,6 @@ namespace OpenSim.Framework.Communications | |||
996 | return false; | 989 | return false; |
997 | } | 990 | } |
998 | 991 | ||
999 | // Customise the response | ||
1000 | //response.Home = | ||
1001 | // string.Format( | ||
1002 | // "{{'region_handle':[r{0},r{1}], 'position':[r{2},r{3},r{4}], 'look_at':[r{5},r{6},r{7}]}}", | ||
1003 | // (SimInfo.regionLocX * Constants.RegionSize), | ||
1004 | // (SimInfo.regionLocY*Constants.RegionSize), | ||
1005 | // theUser.HomeLocation.X, theUser.HomeLocation.Y, theUser.HomeLocation.Z, | ||
1006 | // theUser.HomeLookAt.X, theUser.HomeLookAt.Y, theUser.HomeLookAt.Z); | ||
1007 | theUser.CurrentAgent.Position = new Vector3(128, 128, 0); | 992 | theUser.CurrentAgent.Position = new Vector3(128, 128, 0); |
1008 | response.StartLocation = "safe"; | 993 | response.StartLocation = "safe"; |
1009 | 994 | ||
@@ -1041,5 +1026,68 @@ namespace OpenSim.Framework.Communications | |||
1041 | } | 1026 | } |
1042 | response.ActiveGestures = list; | 1027 | response.ActiveGestures = list; |
1043 | } | 1028 | } |
1029 | |||
1030 | /// <summary> | ||
1031 | /// Get the initial login inventory skeleton (in other words, the folder structure) for the given user. | ||
1032 | /// </summary> | ||
1033 | /// <param name="userID"></param> | ||
1034 | /// <returns></returns> | ||
1035 | /// <exception cref='System.Exception'>This will be thrown if there is a problem with the inventory service</exception> | ||
1036 | protected InventoryData GetInventorySkeleton(UUID userID) | ||
1037 | { | ||
1038 | List<InventoryFolderBase> folders = m_inventoryService.GetInventorySkeleton(userID); | ||
1039 | |||
1040 | // If we have user auth but no inventory folders for some reason, create a new set of folders. | ||
1041 | if (folders == null || folders.Count == 0) | ||
1042 | { | ||
1043 | m_log.InfoFormat( | ||
1044 | "[LOGIN]: A root inventory folder for user {0} was not found. Requesting creation.", userID); | ||
1045 | |||
1046 | // Although the create user function creates a new agent inventory along with a new user profile, some | ||
1047 | // tools are creating the user profile directly in the database without creating the inventory. At | ||
1048 | // this time we'll accomodate them by lazily creating the user inventory now if it doesn't already | ||
1049 | // exist. | ||
1050 | if (!m_inventoryService.CreateNewUserInventory(userID)) | ||
1051 | { | ||
1052 | throw new Exception( | ||
1053 | String.Format( | ||
1054 | "The inventory creation request for user {0} did not succeed." | ||
1055 | + " Please contact your inventory service provider for more information.", | ||
1056 | userID)); | ||
1057 | } | ||
1058 | |||
1059 | m_log.InfoFormat("[LOGIN]: A new inventory skeleton was successfully created for user {0}", userID); | ||
1060 | |||
1061 | folders = m_inventoryService.GetInventorySkeleton(userID); | ||
1062 | |||
1063 | if (folders == null || folders.Count == 0) | ||
1064 | { | ||
1065 | throw new Exception( | ||
1066 | String.Format( | ||
1067 | "A root inventory folder for user {0} could not be retrieved from the inventory service", | ||
1068 | userID)); | ||
1069 | } | ||
1070 | } | ||
1071 | |||
1072 | UUID rootID = UUID.Zero; | ||
1073 | ArrayList AgentInventoryArray = new ArrayList(); | ||
1074 | Hashtable TempHash; | ||
1075 | foreach (InventoryFolderBase InvFolder in folders) | ||
1076 | { | ||
1077 | if (InvFolder.ParentID == UUID.Zero) | ||
1078 | { | ||
1079 | rootID = InvFolder.ID; | ||
1080 | } | ||
1081 | TempHash = new Hashtable(); | ||
1082 | TempHash["name"] = InvFolder.Name; | ||
1083 | TempHash["parent_id"] = InvFolder.ParentID.ToString(); | ||
1084 | TempHash["version"] = (Int32)InvFolder.Version; | ||
1085 | TempHash["type_default"] = (Int32)InvFolder.Type; | ||
1086 | TempHash["folder_id"] = InvFolder.ID.ToString(); | ||
1087 | AgentInventoryArray.Add(TempHash); | ||
1088 | } | ||
1089 | |||
1090 | return new InventoryData(AgentInventoryArray, rootID); | ||
1091 | } | ||
1044 | } | 1092 | } |
1045 | } | 1093 | } |