diff options
18 files changed, 403 insertions, 194 deletions
diff --git a/OpenSim/ApplicationPlugins/CreateCommsManager/CreateCommsManagerPlugin.cs b/OpenSim/ApplicationPlugins/CreateCommsManager/CreateCommsManagerPlugin.cs index 70803c8..3985f42 100644 --- a/OpenSim/ApplicationPlugins/CreateCommsManager/CreateCommsManagerPlugin.cs +++ b/OpenSim/ApplicationPlugins/CreateCommsManager/CreateCommsManagerPlugin.cs | |||
@@ -214,20 +214,20 @@ namespace OpenSim.ApplicationPlugins.CreateCommsManager | |||
214 | HGInventoryServiceClient inventoryService = new HGInventoryServiceClient(m_openSim.NetServersInfo.InventoryURL, null, false); | 214 | HGInventoryServiceClient inventoryService = new HGInventoryServiceClient(m_openSim.NetServersInfo.InventoryURL, null, false); |
215 | inventoryService.AddPlugin(m_openSim.ConfigurationSettings.StandaloneInventoryPlugin, m_openSim.ConfigurationSettings.StandaloneInventorySource); | 215 | inventoryService.AddPlugin(m_openSim.ConfigurationSettings.StandaloneInventoryPlugin, m_openSim.ConfigurationSettings.StandaloneInventorySource); |
216 | 216 | ||
217 | LocalUserServices userService = | 217 | LocalUserServices localuserService = |
218 | new LocalUserServices( | 218 | new LocalUserServices( |
219 | m_openSim.NetServersInfo.DefaultHomeLocX, m_openSim.NetServersInfo.DefaultHomeLocY, inventoryService); | 219 | m_openSim.NetServersInfo.DefaultHomeLocX, m_openSim.NetServersInfo.DefaultHomeLocY, inventoryService); |
220 | userService.AddPlugin(m_openSim.ConfigurationSettings.StandaloneUserPlugin, m_openSim.ConfigurationSettings.StandaloneUserSource); | 220 | localuserService.AddPlugin(m_openSim.ConfigurationSettings.StandaloneUserPlugin, m_openSim.ConfigurationSettings.StandaloneUserSource); |
221 | HGUserServices userService = new HGUserServices(localuserService); | ||
221 | 222 | ||
222 | HGGridServicesStandalone gridService = new HGGridServicesStandalone(m_openSim.NetServersInfo, m_httpServer, m_openSim.AssetCache, m_openSim.SceneManager); | 223 | HGGridServicesStandalone gridService = new HGGridServicesStandalone(m_openSim.NetServersInfo, m_httpServer, m_openSim.AssetCache, m_openSim.SceneManager); |
223 | 224 | ||
224 | // LocalLoginService loginService = CreateLoginService(libraryRootFolder, inventoryService, userService, gridService.LocalBackend); | ||
225 | |||
226 | m_commsManager = new HGCommunicationsStandalone(m_openSim.NetServersInfo, m_httpServer, m_openSim.AssetCache, | 225 | m_commsManager = new HGCommunicationsStandalone(m_openSim.NetServersInfo, m_httpServer, m_openSim.AssetCache, |
227 | userService, userService, inventoryService, gridService, userService, libraryRootFolder, m_openSim.ConfigurationSettings.DumpAssetsToFile); | 226 | userService, localuserService, inventoryService, gridService, userService, libraryRootFolder, m_openSim.ConfigurationSettings.DumpAssetsToFile); |
228 | 227 | ||
229 | inventoryService.UserProfileCache = m_commsManager.UserProfileCacheService; | 228 | inventoryService.UserProfileCache = m_commsManager.UserProfileCacheService; |
230 | HGServices = gridService; | 229 | HGServices = gridService; |
230 | userService.SetCommunicationsManager(m_commsManager); | ||
231 | 231 | ||
232 | CreateGridInfoService(); | 232 | CreateGridInfoService(); |
233 | } | 233 | } |
diff --git a/OpenSim/Client/Linden/LLStandaloneLoginModule.cs b/OpenSim/Client/Linden/LLStandaloneLoginModule.cs index 00407fd..8d4ac37 100644 --- a/OpenSim/Client/Linden/LLStandaloneLoginModule.cs +++ b/OpenSim/Client/Linden/LLStandaloneLoginModule.cs | |||
@@ -103,7 +103,7 @@ namespace OpenSim.Client.Linden | |||
103 | IHttpServer httpServer = m_firstScene.CommsManager.HttpServer; | 103 | IHttpServer httpServer = m_firstScene.CommsManager.HttpServer; |
104 | 104 | ||
105 | //TODO: fix the casting of the user service, maybe by registering the userManagerBase with scenes, or refactoring so we just need a IUserService reference | 105 | //TODO: fix the casting of the user service, maybe by registering the userManagerBase with scenes, or refactoring so we just need a IUserService reference |
106 | m_loginService = new LLStandaloneLoginService((UserManagerBase)m_firstScene.CommsManager.UserService, welcomeMessage, m_firstScene.CommsManager.InterServiceInventoryService, m_firstScene.CommsManager.NetworkServersInfo, authenticate, rootFolder, this); | 106 | m_loginService = new LLStandaloneLoginService((UserManagerBase)m_firstScene.CommsManager.UserAdminService, welcomeMessage, m_firstScene.CommsManager.InterServiceInventoryService, m_firstScene.CommsManager.NetworkServersInfo, authenticate, rootFolder, this); |
107 | 107 | ||
108 | httpServer.AddXmlRPCHandler("login_to_simulator", m_loginService.XmlRpcLoginMethod); | 108 | httpServer.AddXmlRPCHandler("login_to_simulator", m_loginService.XmlRpcLoginMethod); |
109 | 109 | ||
diff --git a/OpenSim/Framework/Communications/Clients/RegionClient.cs b/OpenSim/Framework/Communications/Clients/RegionClient.cs index 27353b0..da3f620 100644 --- a/OpenSim/Framework/Communications/Clients/RegionClient.cs +++ b/OpenSim/Framework/Communications/Clients/RegionClient.cs | |||
@@ -43,7 +43,7 @@ namespace OpenSim.Framework.Communications.Clients | |||
43 | { | 43 | { |
44 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | 44 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); |
45 | 45 | ||
46 | public bool DoCreateChildAgentCall(RegionInfo region, AgentCircuitData aCircuit) | 46 | public bool DoCreateChildAgentCall(RegionInfo region, AgentCircuitData aCircuit, string authKey) |
47 | { | 47 | { |
48 | // Eventually, we want to use a caps url instead of the agentID | 48 | // Eventually, we want to use a caps url instead of the agentID |
49 | string uri = "http://" + region.ExternalEndPoint.Address + ":" + region.HttpPort + "/agent/" + aCircuit.AgentID + "/"; | 49 | string uri = "http://" + region.ExternalEndPoint.Address + ":" + region.HttpPort + "/agent/" + aCircuit.AgentID + "/"; |
@@ -54,6 +54,7 @@ namespace OpenSim.Framework.Communications.Clients | |||
54 | AgentCreateRequest.ContentType = "application/json"; | 54 | AgentCreateRequest.ContentType = "application/json"; |
55 | AgentCreateRequest.Timeout = 10000; | 55 | AgentCreateRequest.Timeout = 10000; |
56 | //AgentCreateRequest.KeepAlive = false; | 56 | //AgentCreateRequest.KeepAlive = false; |
57 | AgentCreateRequest.Headers.Add("Authorization", authKey); | ||
57 | 58 | ||
58 | // Fill it in | 59 | // Fill it in |
59 | OSDMap args = null; | 60 | OSDMap args = null; |
@@ -80,7 +81,7 @@ namespace OpenSim.Framework.Communications.Clients | |||
80 | } | 81 | } |
81 | catch (Exception e) | 82 | catch (Exception e) |
82 | { | 83 | { |
83 | m_log.WarnFormat("[OSG2]: Exception thrown on serialization of ChildCreate: {0}", e.Message); | 84 | m_log.WarnFormat("[REST COMMS]: Exception thrown on serialization of ChildCreate: {0}", e.Message); |
84 | // ignore. buffer will be empty, caller should check. | 85 | // ignore. buffer will be empty, caller should check. |
85 | } | 86 | } |
86 | 87 | ||
@@ -91,7 +92,7 @@ namespace OpenSim.Framework.Communications.Clients | |||
91 | os = AgentCreateRequest.GetRequestStream(); | 92 | os = AgentCreateRequest.GetRequestStream(); |
92 | os.Write(buffer, 0, strBuffer.Length); //Send it | 93 | os.Write(buffer, 0, strBuffer.Length); //Send it |
93 | os.Close(); | 94 | os.Close(); |
94 | //m_log.InfoFormat("[REST COMMS]: Posted ChildAgentUpdate request to remote sim {0}", uri); | 95 | //m_log.InfoFormat("[REST COMMS]: Posted CreateChildAgent request to remote sim {0}", uri); |
95 | } | 96 | } |
96 | //catch (WebException ex) | 97 | //catch (WebException ex) |
97 | catch | 98 | catch |
diff --git a/OpenSim/Framework/Communications/IAuthentication.cs b/OpenSim/Framework/Communications/IAuthentication.cs index 0f62569..bd568e4 100644 --- a/OpenSim/Framework/Communications/IAuthentication.cs +++ b/OpenSim/Framework/Communications/IAuthentication.cs | |||
@@ -34,5 +34,6 @@ namespace OpenSim.Framework.Communications | |||
34 | { | 34 | { |
35 | string GetNewKey(string url, UUID userID, UUID authToken); | 35 | string GetNewKey(string url, UUID userID, UUID authToken); |
36 | bool VerifyKey(UUID userID, string key); | 36 | bool VerifyKey(UUID userID, string key); |
37 | bool VerifySession(UUID iserID, UUID sessionID); | ||
37 | } | 38 | } |
38 | } | 39 | } |
diff --git a/OpenSim/Framework/Communications/IUserService.cs b/OpenSim/Framework/Communications/IUserService.cs index 3c09b40..3a56d35 100644 --- a/OpenSim/Framework/Communications/IUserService.cs +++ b/OpenSim/Framework/Communications/IUserService.cs | |||
@@ -119,5 +119,9 @@ namespace OpenSim.Framework.Communications | |||
119 | /// </summary> | 119 | /// </summary> |
120 | /// <param name="friendlistowner">The agent that we're retreiving the friends Data.</param> | 120 | /// <param name="friendlistowner">The agent that we're retreiving the friends Data.</param> |
121 | List<FriendListItem> GetUserFriendList(UUID friendlistowner); | 121 | List<FriendListItem> GetUserFriendList(UUID friendlistowner); |
122 | |||
123 | // This probably shouldn't be here, it belongs to IAuthentication | ||
124 | // But since Scenes only have IUserService references, I'm placing it here for now. | ||
125 | bool VerifySession(UUID userID, UUID sessionID); | ||
122 | } | 126 | } |
123 | } | 127 | } |
diff --git a/OpenSim/Framework/Communications/Services/LoginService.cs b/OpenSim/Framework/Communications/Services/LoginService.cs index d9556e4..d491309 100644 --- a/OpenSim/Framework/Communications/Services/LoginService.cs +++ b/OpenSim/Framework/Communications/Services/LoginService.cs | |||
@@ -37,6 +37,7 @@ using log4net; | |||
37 | using Nwc.XmlRpc; | 37 | using Nwc.XmlRpc; |
38 | using OpenMetaverse; | 38 | using OpenMetaverse; |
39 | using OpenMetaverse.StructuredData; | 39 | using OpenMetaverse.StructuredData; |
40 | using OpenSim.Framework; | ||
40 | using OpenSim.Framework.Communications.Cache; | 41 | using OpenSim.Framework.Communications.Cache; |
41 | using OpenSim.Framework.Statistics; | 42 | using OpenSim.Framework.Statistics; |
42 | 43 | ||
@@ -194,6 +195,12 @@ namespace OpenSim.Framework.Communications.Services | |||
194 | 195 | ||
195 | CreateAgent(userProfile, request); | 196 | CreateAgent(userProfile, request); |
196 | 197 | ||
198 | // We need to commit the agent right here, even though the userProfile info is not complete | ||
199 | // at this point. There is another commit further down. | ||
200 | // This is for the new sessionID to be stored so that the region can check it for session authentication. | ||
201 | // CustomiseResponse->PrepareLoginToRegion | ||
202 | CommitAgent(ref userProfile); | ||
203 | |||
197 | try | 204 | try |
198 | { | 205 | { |
199 | UUID agentID = userProfile.ID; | 206 | UUID agentID = userProfile.ID; |
@@ -1108,5 +1115,44 @@ namespace OpenSim.Framework.Communications.Services | |||
1108 | { | 1115 | { |
1109 | return false; | 1116 | return false; |
1110 | } | 1117 | } |
1118 | |||
1119 | public XmlRpcResponse XmlRPCCheckAuthSession(XmlRpcRequest request) | ||
1120 | { | ||
1121 | XmlRpcResponse response = new XmlRpcResponse(); | ||
1122 | Hashtable requestData = (Hashtable)request.Params[0]; | ||
1123 | |||
1124 | string authed = "FALSE"; | ||
1125 | if (requestData.Contains("avatar_uuid") && requestData.Contains("session_id")) | ||
1126 | { | ||
1127 | UUID guess_aid; | ||
1128 | UUID guess_sid; | ||
1129 | |||
1130 | UUID.TryParse((string)requestData["avatar_uuid"], out guess_aid); | ||
1131 | if (guess_aid == UUID.Zero) | ||
1132 | { | ||
1133 | return Util.CreateUnknownUserErrorResponse(); | ||
1134 | } | ||
1135 | UUID.TryParse((string)requestData["session_id"], out guess_sid); | ||
1136 | if (guess_sid == UUID.Zero) | ||
1137 | { | ||
1138 | return Util.CreateUnknownUserErrorResponse(); | ||
1139 | } | ||
1140 | if (m_userManager.VerifySession(guess_aid, guess_sid)) | ||
1141 | { | ||
1142 | authed = "TRUE"; | ||
1143 | } | ||
1144 | m_log.InfoFormat("[UserManager]: CheckAuthSession TRUE for user {0}", guess_aid); | ||
1145 | } | ||
1146 | else | ||
1147 | { | ||
1148 | m_log.InfoFormat("[UserManager]: CheckAuthSession FALSE"); | ||
1149 | return Util.CreateUnknownUserErrorResponse(); | ||
1150 | } | ||
1151 | Hashtable responseData = new Hashtable(); | ||
1152 | responseData["auth_session"] = authed; | ||
1153 | response.Value = responseData; | ||
1154 | return response; | ||
1155 | } | ||
1156 | |||
1111 | } | 1157 | } |
1112 | } | 1158 | } |
diff --git a/OpenSim/Framework/Communications/Tests/Cache/AssetCacheTests.cs b/OpenSim/Framework/Communications/Tests/Cache/AssetCacheTests.cs index 5d6bc8d..178c356 100644 --- a/OpenSim/Framework/Communications/Tests/Cache/AssetCacheTests.cs +++ b/OpenSim/Framework/Communications/Tests/Cache/AssetCacheTests.cs | |||
@@ -178,6 +178,11 @@ namespace OpenSim.Framework.Communications.Tests | |||
178 | { | 178 | { |
179 | throw new NotImplementedException(); | 179 | throw new NotImplementedException(); |
180 | } | 180 | } |
181 | |||
182 | public bool VerifySession(UUID userID, UUID sessionID) | ||
183 | { | ||
184 | return true; | ||
185 | } | ||
181 | } | 186 | } |
182 | 187 | ||
183 | [Test] | 188 | [Test] |
diff --git a/OpenSim/Framework/Communications/UserManagerBase.cs b/OpenSim/Framework/Communications/UserManagerBase.cs index 155f5cd..1115041 100644 --- a/OpenSim/Framework/Communications/UserManagerBase.cs +++ b/OpenSim/Framework/Communications/UserManagerBase.cs | |||
@@ -839,6 +839,21 @@ namespace OpenSim.Framework.Communications | |||
839 | } | 839 | } |
840 | } | 840 | } |
841 | 841 | ||
842 | public bool VerifySession(UUID userID, UUID sessionID) | ||
843 | { | ||
844 | UserProfileData userProfile = GetUserProfile(userID); | ||
845 | |||
846 | if (userProfile != null && userProfile.CurrentAgent != null) | ||
847 | { | ||
848 | m_log.DebugFormat("[USERAUTH]: Verifying session {0} for {1}; current session {2}", sessionID, userID, userProfile.CurrentAgent.SessionID); | ||
849 | if (userProfile.CurrentAgent.SessionID == sessionID) | ||
850 | { | ||
851 | return true; | ||
852 | } | ||
853 | } | ||
854 | return false; | ||
855 | } | ||
856 | |||
842 | #endregion | 857 | #endregion |
843 | } | 858 | } |
844 | } | 859 | } |
diff --git a/OpenSim/Framework/Util.cs b/OpenSim/Framework/Util.cs index 7019096..f1993b2 100644 --- a/OpenSim/Framework/Util.cs +++ b/OpenSim/Framework/Util.cs | |||
@@ -26,6 +26,7 @@ | |||
26 | */ | 26 | */ |
27 | 27 | ||
28 | using System; | 28 | using System; |
29 | using System.Collections; | ||
29 | using System.Collections.Generic; | 30 | using System.Collections.Generic; |
30 | using System.Data; | 31 | using System.Data; |
31 | using System.Globalization; | 32 | using System.Globalization; |
@@ -820,6 +821,21 @@ namespace OpenSim.Framework | |||
820 | } | 821 | } |
821 | 822 | ||
822 | /// <summary> | 823 | /// <summary> |
824 | /// Returns an error message that the user could not be found in the database | ||
825 | /// </summary> | ||
826 | /// <returns>XML string consisting of a error element containing individual error(s)</returns> | ||
827 | public static XmlRpcResponse CreateUnknownUserErrorResponse() | ||
828 | { | ||
829 | XmlRpcResponse response = new XmlRpcResponse(); | ||
830 | Hashtable responseData = new Hashtable(); | ||
831 | responseData["error_type"] = "unknown_user"; | ||
832 | responseData["error_desc"] = "The user requested is not in the database"; | ||
833 | |||
834 | response.Value = responseData; | ||
835 | return response; | ||
836 | } | ||
837 | |||
838 | /// <summary> | ||
823 | /// Converts a byte array in big endian order into an ulong. | 839 | /// Converts a byte array in big endian order into an ulong. |
824 | /// </summary> | 840 | /// </summary> |
825 | /// <param name="bytes"> | 841 | /// <param name="bytes"> |
diff --git a/OpenSim/Grid/UserServer.Modules/UserLoginService.cs b/OpenSim/Grid/UserServer.Modules/UserLoginService.cs index 3598ac6..795efaa 100644 --- a/OpenSim/Grid/UserServer.Modules/UserLoginService.cs +++ b/OpenSim/Grid/UserServer.Modules/UserLoginService.cs | |||
@@ -83,6 +83,7 @@ namespace OpenSim.Grid.UserServer.Modules | |||
83 | m_httpServer.AddXmlRPCHandler("login_to_simulator", XmlRpcLoginMethod); | 83 | m_httpServer.AddXmlRPCHandler("login_to_simulator", XmlRpcLoginMethod); |
84 | m_httpServer.AddHTTPHandler("login", ProcessHTMLLogin); | 84 | m_httpServer.AddHTTPHandler("login", ProcessHTMLLogin); |
85 | m_httpServer.AddXmlRPCHandler("set_login_params", XmlRPCSetLoginParams); | 85 | m_httpServer.AddXmlRPCHandler("set_login_params", XmlRPCSetLoginParams); |
86 | m_httpServer.AddXmlRPCHandler("check_auth_session", XmlRPCCheckAuthSession); | ||
86 | 87 | ||
87 | if (registerLLSDHandler) | 88 | if (registerLLSDHandler) |
88 | { | 89 | { |
diff --git a/OpenSim/Grid/UserServer.Modules/UserManager.cs b/OpenSim/Grid/UserServer.Modules/UserManager.cs index 515c2bf..33b43e4 100644 --- a/OpenSim/Grid/UserServer.Modules/UserManager.cs +++ b/OpenSim/Grid/UserServer.Modules/UserManager.cs | |||
@@ -109,7 +109,6 @@ namespace OpenSim.Grid.UserServer.Modules | |||
109 | m_httpServer.AddXmlRPCHandler("update_user_current_region", XmlRPCAtRegion); | 109 | m_httpServer.AddXmlRPCHandler("update_user_current_region", XmlRPCAtRegion); |
110 | m_httpServer.AddXmlRPCHandler("logout_of_simulator", XmlRPCLogOffUserMethodUUID); | 110 | m_httpServer.AddXmlRPCHandler("logout_of_simulator", XmlRPCLogOffUserMethodUUID); |
111 | m_httpServer.AddXmlRPCHandler("get_agent_by_uuid", XmlRPCGetAgentMethodUUID); | 111 | m_httpServer.AddXmlRPCHandler("get_agent_by_uuid", XmlRPCGetAgentMethodUUID); |
112 | m_httpServer.AddXmlRPCHandler("check_auth_session", XmlRPCCheckAuthSession); | ||
113 | 112 | ||
114 | m_httpServer.AddXmlRPCHandler("update_user_profile", XmlRpcResponseXmlRPCUpdateUserProfile); | 113 | m_httpServer.AddXmlRPCHandler("update_user_profile", XmlRpcResponseXmlRPCUpdateUserProfile); |
115 | 114 | ||
@@ -133,21 +132,6 @@ namespace OpenSim.Grid.UserServer.Modules | |||
133 | return "OK"; | 132 | return "OK"; |
134 | } | 133 | } |
135 | 134 | ||
136 | /// <summary> | ||
137 | /// Returns an error message that the user could not be found in the database | ||
138 | /// </summary> | ||
139 | /// <returns>XML string consisting of a error element containing individual error(s)</returns> | ||
140 | public XmlRpcResponse CreateUnknownUserErrorResponse() | ||
141 | { | ||
142 | XmlRpcResponse response = new XmlRpcResponse(); | ||
143 | Hashtable responseData = new Hashtable(); | ||
144 | responseData["error_type"] = "unknown_user"; | ||
145 | responseData["error_desc"] = "The user requested is not in the database"; | ||
146 | |||
147 | response.Value = responseData; | ||
148 | return response; | ||
149 | } | ||
150 | |||
151 | public XmlRpcResponse AvatarPickerListtoXmlRPCResponse(UUID queryID, List<AvatarPickerAvatar> returnUsers) | 135 | public XmlRpcResponse AvatarPickerListtoXmlRPCResponse(UUID queryID, List<AvatarPickerAvatar> returnUsers) |
152 | { | 136 | { |
153 | XmlRpcResponse response = new XmlRpcResponse(); | 137 | XmlRpcResponse response = new XmlRpcResponse(); |
@@ -278,7 +262,7 @@ namespace OpenSim.Grid.UserServer.Modules | |||
278 | string query = (string)requestData["avatar_name"]; | 262 | string query = (string)requestData["avatar_name"]; |
279 | 263 | ||
280 | if (null == query) | 264 | if (null == query) |
281 | return CreateUnknownUserErrorResponse(); | 265 | return Util.CreateUnknownUserErrorResponse(); |
282 | 266 | ||
283 | // Regex objAlphaNumericPattern = new Regex("[^a-zA-Z0-9]"); | 267 | // Regex objAlphaNumericPattern = new Regex("[^a-zA-Z0-9]"); |
284 | 268 | ||
@@ -289,17 +273,17 @@ namespace OpenSim.Grid.UserServer.Modules | |||
289 | userProfile = m_userDataBaseService.GetUserProfile(querysplit[0], querysplit[1]); | 273 | userProfile = m_userDataBaseService.GetUserProfile(querysplit[0], querysplit[1]); |
290 | if (userProfile == null) | 274 | if (userProfile == null) |
291 | { | 275 | { |
292 | return CreateUnknownUserErrorResponse(); | 276 | return Util.CreateUnknownUserErrorResponse(); |
293 | } | 277 | } |
294 | } | 278 | } |
295 | else | 279 | else |
296 | { | 280 | { |
297 | return CreateUnknownUserErrorResponse(); | 281 | return Util.CreateUnknownUserErrorResponse(); |
298 | } | 282 | } |
299 | } | 283 | } |
300 | else | 284 | else |
301 | { | 285 | { |
302 | return CreateUnknownUserErrorResponse(); | 286 | return Util.CreateUnknownUserErrorResponse(); |
303 | } | 287 | } |
304 | 288 | ||
305 | return ProfileToXmlRPCResponse(userProfile); | 289 | return ProfileToXmlRPCResponse(userProfile); |
@@ -322,17 +306,17 @@ namespace OpenSim.Grid.UserServer.Modules | |||
322 | } | 306 | } |
323 | catch (FormatException) | 307 | catch (FormatException) |
324 | { | 308 | { |
325 | return CreateUnknownUserErrorResponse(); | 309 | return Util.CreateUnknownUserErrorResponse(); |
326 | } | 310 | } |
327 | 311 | ||
328 | if (userProfile == null) | 312 | if (userProfile == null) |
329 | { | 313 | { |
330 | return CreateUnknownUserErrorResponse(); | 314 | return Util.CreateUnknownUserErrorResponse(); |
331 | } | 315 | } |
332 | } | 316 | } |
333 | else | 317 | else |
334 | { | 318 | { |
335 | return CreateUnknownUserErrorResponse(); | 319 | return Util.CreateUnknownUserErrorResponse(); |
336 | } | 320 | } |
337 | 321 | ||
338 | return ProfileToXmlRPCResponse(userProfile); | 322 | return ProfileToXmlRPCResponse(userProfile); |
@@ -353,20 +337,20 @@ namespace OpenSim.Grid.UserServer.Modules | |||
353 | 337 | ||
354 | if (guess == UUID.Zero) | 338 | if (guess == UUID.Zero) |
355 | { | 339 | { |
356 | return CreateUnknownUserErrorResponse(); | 340 | return Util.CreateUnknownUserErrorResponse(); |
357 | } | 341 | } |
358 | 342 | ||
359 | userProfile = m_userDataBaseService.GetUserProfile(guess); | 343 | userProfile = m_userDataBaseService.GetUserProfile(guess); |
360 | 344 | ||
361 | if (userProfile == null) | 345 | if (userProfile == null) |
362 | { | 346 | { |
363 | return CreateUnknownUserErrorResponse(); | 347 | return Util.CreateUnknownUserErrorResponse(); |
364 | } | 348 | } |
365 | 349 | ||
366 | // no agent??? | 350 | // no agent??? |
367 | if (userProfile.CurrentAgent == null) | 351 | if (userProfile.CurrentAgent == null) |
368 | { | 352 | { |
369 | return CreateUnknownUserErrorResponse(); | 353 | return Util.CreateUnknownUserErrorResponse(); |
370 | } | 354 | } |
371 | Hashtable responseData = new Hashtable(); | 355 | Hashtable responseData = new Hashtable(); |
372 | 356 | ||
@@ -381,53 +365,12 @@ namespace OpenSim.Grid.UserServer.Modules | |||
381 | } | 365 | } |
382 | else | 366 | else |
383 | { | 367 | { |
384 | return CreateUnknownUserErrorResponse(); | 368 | return Util.CreateUnknownUserErrorResponse(); |
385 | } | 369 | } |
386 | 370 | ||
387 | return response; | 371 | return response; |
388 | } | 372 | } |
389 | 373 | ||
390 | public XmlRpcResponse XmlRPCCheckAuthSession(XmlRpcRequest request) | ||
391 | { | ||
392 | XmlRpcResponse response = new XmlRpcResponse(); | ||
393 | Hashtable requestData = (Hashtable)request.Params[0]; | ||
394 | UserProfileData userProfile; | ||
395 | |||
396 | string authed = "FALSE"; | ||
397 | if (requestData.Contains("avatar_uuid") && requestData.Contains("session_id")) | ||
398 | { | ||
399 | UUID guess_aid; | ||
400 | UUID guess_sid; | ||
401 | |||
402 | UUID.TryParse((string)requestData["avatar_uuid"], out guess_aid); | ||
403 | if (guess_aid == UUID.Zero) | ||
404 | { | ||
405 | return CreateUnknownUserErrorResponse(); | ||
406 | } | ||
407 | UUID.TryParse((string)requestData["session_id"], out guess_sid); | ||
408 | if (guess_sid == UUID.Zero) | ||
409 | { | ||
410 | return CreateUnknownUserErrorResponse(); | ||
411 | } | ||
412 | userProfile = m_userDataBaseService.GetUserProfile(guess_aid); | ||
413 | if (userProfile != null && userProfile.CurrentAgent != null && | ||
414 | userProfile.CurrentAgent.SessionID == guess_sid) | ||
415 | { | ||
416 | authed = "TRUE"; | ||
417 | } | ||
418 | m_log.InfoFormat("[UserManager]: CheckAuthSession TRUE for user {0}", guess_aid); | ||
419 | } | ||
420 | else | ||
421 | { | ||
422 | m_log.InfoFormat("[UserManager]: CheckAuthSession FALSE"); | ||
423 | return CreateUnknownUserErrorResponse(); | ||
424 | } | ||
425 | Hashtable responseData = new Hashtable(); | ||
426 | responseData["auth_session"] = authed; | ||
427 | response.Value = responseData; | ||
428 | return response; | ||
429 | } | ||
430 | |||
431 | public XmlRpcResponse XmlRpcResponseXmlRPCUpdateUserProfile(XmlRpcRequest request) | 374 | public XmlRpcResponse XmlRpcResponseXmlRPCUpdateUserProfile(XmlRpcRequest request) |
432 | { | 375 | { |
433 | m_log.Debug("[UserManager]: Got request to update user profile"); | 376 | m_log.Debug("[UserManager]: Got request to update user profile"); |
@@ -437,14 +380,14 @@ namespace OpenSim.Grid.UserServer.Modules | |||
437 | 380 | ||
438 | if (!requestData.Contains("avatar_uuid")) | 381 | if (!requestData.Contains("avatar_uuid")) |
439 | { | 382 | { |
440 | return CreateUnknownUserErrorResponse(); | 383 | return Util.CreateUnknownUserErrorResponse(); |
441 | } | 384 | } |
442 | 385 | ||
443 | UUID UserUUID = new UUID((string)requestData["avatar_uuid"]); | 386 | UUID UserUUID = new UUID((string)requestData["avatar_uuid"]); |
444 | UserProfileData userProfile = m_userDataBaseService.GetUserProfile(UserUUID); | 387 | UserProfileData userProfile = m_userDataBaseService.GetUserProfile(UserUUID); |
445 | if (null == userProfile) | 388 | if (null == userProfile) |
446 | { | 389 | { |
447 | return CreateUnknownUserErrorResponse(); | 390 | return Util.CreateUnknownUserErrorResponse(); |
448 | } | 391 | } |
449 | // don't know how yet. | 392 | // don't know how yet. |
450 | if (requestData.Contains("AllowPublish")) | 393 | if (requestData.Contains("AllowPublish")) |
@@ -656,7 +599,7 @@ namespace OpenSim.Grid.UserServer.Modules | |||
656 | } | 599 | } |
657 | else | 600 | else |
658 | { | 601 | { |
659 | return CreateUnknownUserErrorResponse(); | 602 | return Util.CreateUnknownUserErrorResponse(); |
660 | } | 603 | } |
661 | 604 | ||
662 | return response; | 605 | return response; |
diff --git a/OpenSim/Region/Communications/Hypergrid/HGCommunicationsGridMode.cs b/OpenSim/Region/Communications/Hypergrid/HGCommunicationsGridMode.cs index d1be94f..2ef0fd3 100644 --- a/OpenSim/Region/Communications/Hypergrid/HGCommunicationsGridMode.cs +++ b/OpenSim/Region/Communications/Hypergrid/HGCommunicationsGridMode.cs | |||
@@ -59,6 +59,7 @@ namespace OpenSim.Region.Communications.Hypergrid | |||
59 | 59 | ||
60 | // The HG InventoryService always uses secure handlers | 60 | // The HG InventoryService always uses secure handlers |
61 | HGInventoryServiceClient invService = new HGInventoryServiceClient(serversInfo.InventoryURL, this.m_userProfileCacheService, true); | 61 | HGInventoryServiceClient invService = new HGInventoryServiceClient(serversInfo.InventoryURL, this.m_userProfileCacheService, true); |
62 | invService.UserProfileCache = m_userProfileCacheService; | ||
62 | AddSecureInventoryService(invService); | 63 | AddSecureInventoryService(invService); |
63 | m_defaultInventoryHost = invService.Host; | 64 | m_defaultInventoryHost = invService.Host; |
64 | if (SecureInventoryService != null) | 65 | if (SecureInventoryService != null) |
diff --git a/OpenSim/Region/Communications/Hypergrid/HGInventoryService.cs b/OpenSim/Region/Communications/Hypergrid/HGInventoryService.cs index 5e3f229..156137e 100644 --- a/OpenSim/Region/Communications/Hypergrid/HGInventoryService.cs +++ b/OpenSim/Region/Communications/Hypergrid/HGInventoryService.cs | |||
@@ -62,7 +62,7 @@ namespace OpenSim.Region.Communications.Hypergrid | |||
62 | { | 62 | { |
63 | _inventoryServerUrl = HGNetworkServersInfo.ServerURI(inventoryServerUrl); | 63 | _inventoryServerUrl = HGNetworkServersInfo.ServerURI(inventoryServerUrl); |
64 | //m_Uri = new Uri(_inventoryServerUrl); | 64 | //m_Uri = new Uri(_inventoryServerUrl); |
65 | m_userProfileCache = userProfileCacheService; | 65 | //m_userProfileCache = userProfileCacheService; |
66 | m_gridmode = gridmode; | 66 | m_gridmode = gridmode; |
67 | } | 67 | } |
68 | 68 | ||
@@ -506,6 +506,9 @@ namespace OpenSim.Region.Communications.Hypergrid | |||
506 | 506 | ||
507 | private bool IsLocalStandaloneUser(UUID userID) | 507 | private bool IsLocalStandaloneUser(UUID userID) |
508 | { | 508 | { |
509 | if (m_userProfileCache == null) | ||
510 | return false; | ||
511 | |||
509 | CachedUserInfo uinfo = m_userProfileCache.GetUserDetails(userID); | 512 | CachedUserInfo uinfo = m_userProfileCache.GetUserDetails(userID); |
510 | if (uinfo == null) | 513 | if (uinfo == null) |
511 | return true; | 514 | return true; |
@@ -522,6 +525,7 @@ namespace OpenSim.Region.Communications.Hypergrid | |||
522 | private string GetUserInventoryURI(UUID userID) | 525 | private string GetUserInventoryURI(UUID userID) |
523 | { | 526 | { |
524 | string invURI = _inventoryServerUrl; | 527 | string invURI = _inventoryServerUrl; |
528 | |||
525 | CachedUserInfo uinfo = m_userProfileCache.GetUserDetails(userID); | 529 | CachedUserInfo uinfo = m_userProfileCache.GetUserDetails(userID); |
526 | if ((uinfo == null) || (uinfo.UserProfile == null)) | 530 | if ((uinfo == null) || (uinfo.UserProfile == null)) |
527 | return invURI; | 531 | return invURI; |
diff --git a/OpenSim/Region/Communications/Hypergrid/HGUserServices.cs b/OpenSim/Region/Communications/Hypergrid/HGUserServices.cs index ef08421..05ae5a9 100644 --- a/OpenSim/Region/Communications/Hypergrid/HGUserServices.cs +++ b/OpenSim/Region/Communications/Hypergrid/HGUserServices.cs | |||
@@ -31,7 +31,10 @@ using System.Collections.Generic; | |||
31 | using OpenMetaverse; | 31 | using OpenMetaverse; |
32 | using OpenSim.Framework; | 32 | using OpenSim.Framework; |
33 | using OpenSim.Framework.Communications; | 33 | using OpenSim.Framework.Communications; |
34 | using OpenSim.Framework.Communications.Cache; | ||
35 | using OpenSim.Framework.Communications.Clients; | ||
34 | using OpenSim.Region.Communications.OGS1; | 36 | using OpenSim.Region.Communications.OGS1; |
37 | using OpenSim.Region.Communications.Local; | ||
35 | 38 | ||
36 | namespace OpenSim.Region.Communications.Hypergrid | 39 | namespace OpenSim.Region.Communications.Hypergrid |
37 | { | 40 | { |
@@ -40,32 +43,30 @@ namespace OpenSim.Region.Communications.Hypergrid | |||
40 | /// so it always fails for foreign users. | 43 | /// so it always fails for foreign users. |
41 | /// Later it needs to talk with the foreign users' user servers. | 44 | /// Later it needs to talk with the foreign users' user servers. |
42 | /// </summary> | 45 | /// </summary> |
43 | public class HGUserServices : IUserService, IAvatarService, IMessagingService | 46 | public class HGUserServices : OGS1UserServices |
44 | { | 47 | { |
45 | //private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | 48 | //private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); |
46 | 49 | ||
47 | //private HGCommunicationsGridMode m_parent; | 50 | //private CommunicationsManager m_parent; |
48 | private OGS1UserServices m_remoteUserServices; | 51 | //private OGS1UserServices m_remoteUserServices; |
52 | private LocalUserServices m_localUserServices; | ||
49 | 53 | ||
50 | public HGUserServices(HGCommunicationsGridMode parent) | 54 | // Constructor called when running in grid mode |
55 | public HGUserServices(CommunicationsManager parent) | ||
56 | : base(parent) | ||
51 | { | 57 | { |
52 | //m_parent = parent; | ||
53 | m_remoteUserServices = new OGS1UserServices(parent); | ||
54 | } | 58 | } |
55 | 59 | ||
56 | public UserProfileData ConvertXMLRPCDataToUserProfile(Hashtable data) | 60 | // Constructor called when running in standalone |
61 | public HGUserServices(LocalUserServices local) | ||
57 | { | 62 | { |
58 | return m_remoteUserServices.ConvertXMLRPCDataToUserProfile(data); | 63 | m_localUserServices = local; |
59 | } | 64 | } |
60 | 65 | ||
61 | public UserProfileData GetUserProfile(Uri uri) | 66 | // Called for standalone mode only, to set up the communications manager |
67 | public void SetCommunicationsManager(CommunicationsManager parent) | ||
62 | { | 68 | { |
63 | throw new System.NotImplementedException(); | 69 | m_commsManager = parent; |
64 | } | ||
65 | |||
66 | public Uri GetUserUri(UserProfileData userProfile) | ||
67 | { | ||
68 | throw new NotImplementedException(); | ||
69 | } | 70 | } |
70 | 71 | ||
71 | /// <summary> | 72 | /// <summary> |
@@ -73,25 +74,15 @@ namespace OpenSim.Region.Communications.Hypergrid | |||
73 | /// </summary> | 74 | /// </summary> |
74 | /// <param name="avatarID"></param> | 75 | /// <param name="avatarID"></param> |
75 | /// <returns>null if the request fails</returns> | 76 | /// <returns>null if the request fails</returns> |
76 | public UserAgentData GetAgentByUUID(UUID userId) | 77 | public override UserAgentData GetAgentByUUID(UUID userId) |
77 | { | 78 | { |
78 | return m_remoteUserServices.GetAgentByUUID(userId); | 79 | string url = string.Empty; |
79 | } | 80 | if ((m_localUserServices != null) && !IsForeignUser(userId, out url)) |
80 | 81 | return m_localUserServices.GetAgentByUUID(userId); | |
81 | public AvatarAppearance ConvertXMLRPCDataToAvatarAppearance(Hashtable data) | ||
82 | { | ||
83 | return m_remoteUserServices.ConvertXMLRPCDataToAvatarAppearance(data); | ||
84 | } | ||
85 | 82 | ||
86 | public List<AvatarPickerAvatar> ConvertXMLRPCDataToAvatarPickerList(UUID queryID, Hashtable data) | 83 | return base.GetAgentByUUID(userId); |
87 | { | ||
88 | return m_remoteUserServices.ConvertXMLRPCDataToAvatarPickerList(queryID, data); | ||
89 | } | 84 | } |
90 | 85 | ||
91 | public List<FriendListItem> ConvertXMLRPCDataToFriendListItemList(Hashtable data) | ||
92 | { | ||
93 | return m_remoteUserServices.ConvertXMLRPCDataToFriendListItemList(data); | ||
94 | } | ||
95 | 86 | ||
96 | /// <summary> | 87 | /// <summary> |
97 | /// Logs off a user on the user server | 88 | /// Logs off a user on the user server |
@@ -101,9 +92,13 @@ namespace OpenSim.Region.Communications.Hypergrid | |||
101 | /// <param name="regionhandle">regionhandle</param> | 92 | /// <param name="regionhandle">regionhandle</param> |
102 | /// <param name="position">final position</param> | 93 | /// <param name="position">final position</param> |
103 | /// <param name="lookat">final lookat</param> | 94 | /// <param name="lookat">final lookat</param> |
104 | public void LogOffUser(UUID userid, UUID regionid, ulong regionhandle, Vector3 position, Vector3 lookat) | 95 | public override void LogOffUser(UUID userid, UUID regionid, ulong regionhandle, Vector3 position, Vector3 lookat) |
105 | { | 96 | { |
106 | m_remoteUserServices.LogOffUser(userid, regionid, regionhandle, position, lookat); | 97 | string url = string.Empty; |
98 | if ((m_localUserServices != null) && !IsForeignUser(userid, out url)) | ||
99 | m_localUserServices.LogOffUser(userid, regionid, regionhandle, position, lookat); | ||
100 | else | ||
101 | base.LogOffUser(userid, regionid, regionhandle, position, lookat); | ||
107 | } | 102 | } |
108 | 103 | ||
109 | /// <summary> | 104 | /// <summary> |
@@ -115,19 +110,29 @@ namespace OpenSim.Region.Communications.Hypergrid | |||
115 | /// <param name="posx">final position x</param> | 110 | /// <param name="posx">final position x</param> |
116 | /// <param name="posy">final position y</param> | 111 | /// <param name="posy">final position y</param> |
117 | /// <param name="posz">final position z</param> | 112 | /// <param name="posz">final position z</param> |
118 | public void LogOffUser(UUID userid, UUID regionid, ulong regionhandle, float posx, float posy, float posz) | 113 | public override void LogOffUser(UUID userid, UUID regionid, ulong regionhandle, float posx, float posy, float posz) |
119 | { | 114 | { |
120 | m_remoteUserServices.LogOffUser(userid, regionid, regionhandle, posx, posy, posz); | 115 | string url = string.Empty; |
116 | if ((m_localUserServices != null) && !IsForeignUser(userid, out url)) | ||
117 | m_localUserServices.LogOffUser(userid, regionid, regionhandle, posx, posy, posz); | ||
118 | else | ||
119 | base.LogOffUser(userid, regionid, regionhandle, posx, posy, posz); | ||
121 | } | 120 | } |
122 | 121 | ||
123 | public UserProfileData GetUserProfile(string firstName, string lastName) | 122 | public override UserProfileData GetUserProfile(string firstName, string lastName) |
124 | { | 123 | { |
124 | if (m_localUserServices != null) | ||
125 | return m_localUserServices.GetUserProfile(firstName, lastName); | ||
126 | |||
125 | return GetUserProfile(firstName + " " + lastName); | 127 | return GetUserProfile(firstName + " " + lastName); |
126 | } | 128 | } |
127 | 129 | ||
128 | public List<AvatarPickerAvatar> GenerateAgentPickerRequestResponse(UUID queryID, string query) | 130 | public override List<AvatarPickerAvatar> GenerateAgentPickerRequestResponse(UUID queryID, string query) |
129 | { | 131 | { |
130 | return m_remoteUserServices.GenerateAgentPickerRequestResponse(queryID, query); | 132 | if (m_localUserServices != null) |
133 | return m_localUserServices.GenerateAgentPickerRequestResponse(queryID, query); | ||
134 | |||
135 | return base.GenerateAgentPickerRequestResponse(queryID, query); | ||
131 | } | 136 | } |
132 | 137 | ||
133 | /// <summary> | 138 | /// <summary> |
@@ -135,9 +140,11 @@ namespace OpenSim.Region.Communications.Hypergrid | |||
135 | /// </summary> | 140 | /// </summary> |
136 | /// <param name="avatarID"></param> | 141 | /// <param name="avatarID"></param> |
137 | /// <returns>null if the request fails</returns> | 142 | /// <returns>null if the request fails</returns> |
138 | public UserProfileData GetUserProfile(string name) | 143 | public override UserProfileData GetUserProfile(string name) |
139 | { | 144 | { |
140 | return m_remoteUserServices.GetUserProfile(name); | 145 | // This doesn't exist in LocalUserServices |
146 | |||
147 | return base.GetUserProfile(name); | ||
141 | } | 148 | } |
142 | 149 | ||
143 | /// <summary> | 150 | /// <summary> |
@@ -145,14 +152,24 @@ namespace OpenSim.Region.Communications.Hypergrid | |||
145 | /// </summary> | 152 | /// </summary> |
146 | /// <param name="avatarID"></param> | 153 | /// <param name="avatarID"></param> |
147 | /// <returns>null if the request fails</returns> | 154 | /// <returns>null if the request fails</returns> |
148 | public UserProfileData GetUserProfile(UUID avatarID) | 155 | public override UserProfileData GetUserProfile(UUID avatarID) |
149 | { | 156 | { |
150 | return m_remoteUserServices.GetUserProfile(avatarID); | 157 | string url = string.Empty; |
158 | // Unfortunately we can't query for foreigners here, | ||
159 | // because we'll end up in an infinite loop... | ||
160 | //if ((m_localUserServices != null) && (!IsForeignUser(avatarID, out url))) | ||
161 | if (m_localUserServices != null) | ||
162 | return m_localUserServices.GetUserProfile(avatarID); | ||
163 | |||
164 | return base.GetUserProfile(avatarID); | ||
151 | } | 165 | } |
152 | 166 | ||
153 | public void ClearUserAgent(UUID avatarID) | 167 | public override void ClearUserAgent(UUID avatarID) |
154 | { | 168 | { |
155 | m_remoteUserServices.ClearUserAgent(avatarID); | 169 | if (m_localUserServices != null) |
170 | m_localUserServices.ClearUserAgent(avatarID); | ||
171 | else | ||
172 | base.ClearUserAgent(avatarID); | ||
156 | } | 173 | } |
157 | 174 | ||
158 | /// <summary> | 175 | /// <summary> |
@@ -160,9 +177,12 @@ namespace OpenSim.Region.Communications.Hypergrid | |||
160 | /// </summary> | 177 | /// </summary> |
161 | /// <param name="uuid"></param> | 178 | /// <param name="uuid"></param> |
162 | /// <returns></returns> | 179 | /// <returns></returns> |
163 | public UserProfileData SetupMasterUser(string firstName, string lastName) | 180 | public override UserProfileData SetupMasterUser(string firstName, string lastName) |
164 | { | 181 | { |
165 | return m_remoteUserServices.SetupMasterUser(firstName, lastName); | 182 | if (m_localUserServices != null) |
183 | return m_localUserServices.SetupMasterUser(firstName, lastName); | ||
184 | |||
185 | return base.SetupMasterUser(firstName, lastName); | ||
166 | } | 186 | } |
167 | 187 | ||
168 | /// <summary> | 188 | /// <summary> |
@@ -170,9 +190,12 @@ namespace OpenSim.Region.Communications.Hypergrid | |||
170 | /// </summary> | 190 | /// </summary> |
171 | /// <param name="uuid"></param> | 191 | /// <param name="uuid"></param> |
172 | /// <returns></returns> | 192 | /// <returns></returns> |
173 | public UserProfileData SetupMasterUser(string firstName, string lastName, string password) | 193 | public override UserProfileData SetupMasterUser(string firstName, string lastName, string password) |
174 | { | 194 | { |
175 | return m_remoteUserServices.SetupMasterUser(firstName, lastName, password); | 195 | if (m_localUserServices != null) |
196 | return m_localUserServices.SetupMasterUser(firstName, lastName, password); | ||
197 | |||
198 | return base.SetupMasterUser(firstName, lastName, password); | ||
176 | } | 199 | } |
177 | 200 | ||
178 | /// <summary> | 201 | /// <summary> |
@@ -180,36 +203,47 @@ namespace OpenSim.Region.Communications.Hypergrid | |||
180 | /// </summary> | 203 | /// </summary> |
181 | /// <param name="uuid"></param> | 204 | /// <param name="uuid"></param> |
182 | /// <returns></returns> | 205 | /// <returns></returns> |
183 | public UserProfileData SetupMasterUser(UUID uuid) | 206 | public override UserProfileData SetupMasterUser(UUID uuid) |
184 | { | 207 | { |
185 | return m_remoteUserServices.SetupMasterUser(uuid); | 208 | if (m_localUserServices != null) |
209 | return m_localUserServices.SetupMasterUser(uuid); | ||
210 | |||
211 | return base.SetupMasterUser(uuid); | ||
186 | } | 212 | } |
187 | 213 | ||
188 | public UUID AddUserProfile(string firstName, string lastName, string pass, uint regX, uint regY) | 214 | public override bool ResetUserPassword(string firstName, string lastName, string newPassword) |
189 | { | 215 | { |
190 | return m_remoteUserServices.AddUserProfile(firstName, lastName, pass, regX, regY); | 216 | if (m_localUserServices != null) |
217 | return m_localUserServices.ResetUserPassword(firstName, lastName, newPassword); | ||
218 | else | ||
219 | return base.ResetUserPassword(firstName, lastName, newPassword); | ||
191 | } | 220 | } |
192 | |||
193 | public bool ResetUserPassword(string firstName, string lastName, string newPassword) | ||
194 | { | ||
195 | return m_remoteUserServices.ResetUserPassword(firstName, lastName, newPassword); | ||
196 | } | ||
197 | 221 | ||
198 | public bool UpdateUserProfile(UserProfileData userProfile) | 222 | public override bool UpdateUserProfile(UserProfileData userProfile) |
199 | { | 223 | { |
200 | return m_remoteUserServices.UpdateUserProfile(userProfile); | 224 | string url = string.Empty; |
225 | if ((m_localUserServices != null) && (!IsForeignUser(userProfile.ID, out url))) | ||
226 | return m_localUserServices.UpdateUserProfile(userProfile); | ||
227 | |||
228 | return base.UpdateUserProfile(userProfile); | ||
201 | } | 229 | } |
202 | 230 | ||
203 | #region IUserServices Friend Methods | 231 | #region IUserServices Friend Methods |
232 | |||
233 | // NOTE: We're still not dealing with foreign user friends | ||
234 | |||
204 | /// <summary> | 235 | /// <summary> |
205 | /// Adds a new friend to the database for XUser | 236 | /// Adds a new friend to the database for XUser |
206 | /// </summary> | 237 | /// </summary> |
207 | /// <param name="friendlistowner">The agent that who's friends list is being added to</param> | 238 | /// <param name="friendlistowner">The agent that who's friends list is being added to</param> |
208 | /// <param name="friend">The agent that being added to the friends list of the friends list owner</param> | 239 | /// <param name="friend">The agent that being added to the friends list of the friends list owner</param> |
209 | /// <param name="perms">A uint bit vector for set perms that the friend being added has; 0 = none, 1=This friend can see when they sign on, 2 = map, 4 edit objects </param> | 240 | /// <param name="perms">A uint bit vector for set perms that the friend being added has; 0 = none, 1=This friend can see when they sign on, 2 = map, 4 edit objects </param> |
210 | public void AddNewUserFriend(UUID friendlistowner, UUID friend, uint perms) | 241 | public override void AddNewUserFriend(UUID friendlistowner, UUID friend, uint perms) |
211 | { | 242 | { |
212 | m_remoteUserServices.AddNewUserFriend(friendlistowner, friend, perms); | 243 | if (m_localUserServices != null) |
244 | m_localUserServices.AddNewUserFriend(friendlistowner, friend, perms); | ||
245 | else | ||
246 | base.AddNewUserFriend(friendlistowner, friend, perms); | ||
213 | } | 247 | } |
214 | 248 | ||
215 | /// <summary> | 249 | /// <summary> |
@@ -217,9 +251,12 @@ namespace OpenSim.Region.Communications.Hypergrid | |||
217 | /// </summary> | 251 | /// </summary> |
218 | /// <param name="friendlistowner">The agent that who's friends list is being updated</param> | 252 | /// <param name="friendlistowner">The agent that who's friends list is being updated</param> |
219 | /// <param name="friend">The Ex-friend agent</param> | 253 | /// <param name="friend">The Ex-friend agent</param> |
220 | public void RemoveUserFriend(UUID friendlistowner, UUID friend) | 254 | public override void RemoveUserFriend(UUID friendlistowner, UUID friend) |
221 | { | 255 | { |
222 | m_remoteUserServices.RemoveUserFriend(friend, friend); | 256 | if (m_localUserServices != null) |
257 | m_localUserServices.RemoveUserFriend(friendlistowner, friend); | ||
258 | else | ||
259 | base.RemoveUserFriend(friend, friend); | ||
223 | } | 260 | } |
224 | 261 | ||
225 | /// <summary> | 262 | /// <summary> |
@@ -228,39 +265,79 @@ namespace OpenSim.Region.Communications.Hypergrid | |||
228 | /// <param name="friendlistowner">The agent that who's friends list is being updated</param> | 265 | /// <param name="friendlistowner">The agent that who's friends list is being updated</param> |
229 | /// <param name="friend">The agent that is getting or loosing permissions</param> | 266 | /// <param name="friend">The agent that is getting or loosing permissions</param> |
230 | /// <param name="perms">A uint bit vector for set perms that the friend being added has; 0 = none, 1=This friend can see when they sign on, 2 = map, 4 edit objects </param> | 267 | /// <param name="perms">A uint bit vector for set perms that the friend being added has; 0 = none, 1=This friend can see when they sign on, 2 = map, 4 edit objects </param> |
231 | public void UpdateUserFriendPerms(UUID friendlistowner, UUID friend, uint perms) | 268 | public override void UpdateUserFriendPerms(UUID friendlistowner, UUID friend, uint perms) |
232 | { | 269 | { |
233 | m_remoteUserServices.UpdateUserFriendPerms(friendlistowner, friend, perms); | 270 | if (m_localUserServices != null) |
271 | m_localUserServices.UpdateUserFriendPerms(friendlistowner, friend, perms); | ||
272 | else | ||
273 | base.UpdateUserFriendPerms(friendlistowner, friend, perms); | ||
234 | } | 274 | } |
235 | /// <summary> | 275 | /// <summary> |
236 | /// Returns a list of FriendsListItems that describe the friends and permissions in the friend relationship for UUID friendslistowner | 276 | /// Returns a list of FriendsListItems that describe the friends and permissions in the friend relationship for UUID friendslistowner |
237 | /// </summary> | 277 | /// </summary> |
238 | /// <param name="friendlistowner">The agent that we're retreiving the friends Data.</param> | 278 | /// <param name="friendlistowner">The agent that we're retreiving the friends Data.</param> |
239 | public List<FriendListItem> GetUserFriendList(UUID friendlistowner) | 279 | public override List<FriendListItem> GetUserFriendList(UUID friendlistowner) |
240 | { | 280 | { |
241 | return m_remoteUserServices.GetUserFriendList(friendlistowner); | 281 | if (m_localUserServices != null) |
282 | return m_localUserServices.GetUserFriendList(friendlistowner); | ||
283 | |||
284 | return base.GetUserFriendList(friendlistowner); | ||
242 | } | 285 | } |
243 | 286 | ||
244 | #endregion | 287 | #endregion |
245 | 288 | ||
246 | /// Appearance | 289 | /// Appearance |
247 | public AvatarAppearance GetUserAppearance(UUID user) | 290 | public override AvatarAppearance GetUserAppearance(UUID user) |
248 | { | 291 | { |
249 | return m_remoteUserServices.GetUserAppearance(user); | 292 | string url = string.Empty; |
293 | if ((m_localUserServices != null) && (!IsForeignUser(user, out url))) | ||
294 | return m_localUserServices.GetUserAppearance(user); | ||
295 | else | ||
296 | return base.GetUserAppearance(user); | ||
250 | } | 297 | } |
251 | 298 | ||
252 | public void UpdateUserAppearance(UUID user, AvatarAppearance appearance) | 299 | public override void UpdateUserAppearance(UUID user, AvatarAppearance appearance) |
253 | { | 300 | { |
254 | m_remoteUserServices.UpdateUserAppearance(user, appearance); | 301 | string url = string.Empty; |
302 | if ((m_localUserServices != null) && (!IsForeignUser(user, out url))) | ||
303 | m_localUserServices.UpdateUserAppearance(user, appearance); | ||
304 | else | ||
305 | base.UpdateUserAppearance(user, appearance); | ||
255 | } | 306 | } |
256 | 307 | ||
257 | #region IMessagingService | 308 | #region IMessagingService |
258 | 309 | ||
259 | public Dictionary<UUID, FriendRegionInfo> GetFriendRegionInfos(List<UUID> uuids) | 310 | public override Dictionary<UUID, FriendRegionInfo> GetFriendRegionInfos(List<UUID> uuids) |
260 | { | 311 | { |
261 | return m_remoteUserServices.GetFriendRegionInfos(uuids); | 312 | if (m_localUserServices != null) |
313 | return m_localUserServices.GetFriendRegionInfos(uuids); | ||
314 | |||
315 | return base.GetFriendRegionInfos(uuids); | ||
262 | } | 316 | } |
263 | #endregion | 317 | #endregion |
264 | 318 | ||
319 | protected override string GetUserServerURL(UUID userID) | ||
320 | { | ||
321 | string serverURL = string.Empty; | ||
322 | if (IsForeignUser(userID, out serverURL)) | ||
323 | return serverURL; | ||
324 | |||
325 | return m_commsManager.NetworkServersInfo.UserURL; | ||
326 | } | ||
327 | |||
328 | private bool IsForeignUser(UUID userID, out string userServerURL) | ||
329 | { | ||
330 | userServerURL = string.Empty; | ||
331 | CachedUserInfo uinfo = m_commsManager.UserProfileCacheService.GetUserDetails(userID); | ||
332 | if (uinfo != null) | ||
333 | { | ||
334 | if (!HGNetworkServersInfo.Singleton.IsLocalUser(uinfo.UserProfile)) | ||
335 | { | ||
336 | userServerURL = ((ForeignUserProfileData)(uinfo.UserProfile)).UserServerURI; | ||
337 | return true; | ||
338 | } | ||
339 | } | ||
340 | return false; | ||
341 | } | ||
265 | } | 342 | } |
266 | } | 343 | } |
diff --git a/OpenSim/Region/CoreModules/Communications/REST/RESTInterregionComms.cs b/OpenSim/Region/CoreModules/Communications/REST/RESTInterregionComms.cs index 87272a1..97ffeae 100644 --- a/OpenSim/Region/CoreModules/Communications/REST/RESTInterregionComms.cs +++ b/OpenSim/Region/CoreModules/Communications/REST/RESTInterregionComms.cs | |||
@@ -59,6 +59,9 @@ namespace OpenSim.Region.CoreModules.Communications.REST | |||
59 | 59 | ||
60 | protected RegionToRegionClient m_regionClient; | 60 | protected RegionToRegionClient m_regionClient; |
61 | 61 | ||
62 | protected bool m_safemode; | ||
63 | protected IPAddress m_thisIP; | ||
64 | |||
62 | #region IRegionModule | 65 | #region IRegionModule |
63 | 66 | ||
64 | public virtual void Initialise(Scene scene, IConfigSource config) | 67 | public virtual void Initialise(Scene scene, IConfigSource config) |
@@ -74,6 +77,9 @@ namespace OpenSim.Region.CoreModules.Communications.REST | |||
74 | { | 77 | { |
75 | m_log.Info("[REST COMMS]: Enabling InterregionComms RESTComms module"); | 78 | m_log.Info("[REST COMMS]: Enabling InterregionComms RESTComms module"); |
76 | m_enabled = true; | 79 | m_enabled = true; |
80 | if (config.Configs["Hypergrid"] != null) | ||
81 | m_safemode = config.Configs["Hypergrid"].GetBoolean("safemode", false); | ||
82 | |||
77 | InitOnce(scene); | 83 | InitOnce(scene); |
78 | } | 84 | } |
79 | } | 85 | } |
@@ -117,6 +123,7 @@ namespace OpenSim.Region.CoreModules.Communications.REST | |||
117 | m_commsManager = scene.CommsManager; | 123 | m_commsManager = scene.CommsManager; |
118 | m_aScene = scene; | 124 | m_aScene = scene; |
119 | m_regionClient = new RegionToRegionClient(m_aScene); | 125 | m_regionClient = new RegionToRegionClient(m_aScene); |
126 | m_thisIP = Util.GetHostFromDNS(scene.RegionInfo.ExternalHostName); | ||
120 | } | 127 | } |
121 | 128 | ||
122 | protected virtual void AddHTTPHandlers() | 129 | protected virtual void AddHTTPHandlers() |
@@ -148,7 +155,7 @@ namespace OpenSim.Region.CoreModules.Communications.REST | |||
148 | { | 155 | { |
149 | m_regionClient.SendUserInformation(regInfo, aCircuit); | 156 | m_regionClient.SendUserInformation(regInfo, aCircuit); |
150 | 157 | ||
151 | return m_regionClient.DoCreateChildAgentCall(regInfo, aCircuit); | 158 | return m_regionClient.DoCreateChildAgentCall(regInfo, aCircuit, "None"); |
152 | } | 159 | } |
153 | //else | 160 | //else |
154 | // m_log.Warn("[REST COMMS]: Region not found " + regionHandle); | 161 | // m_log.Warn("[REST COMMS]: Region not found " + regionHandle); |
@@ -331,6 +338,7 @@ namespace OpenSim.Region.CoreModules.Communications.REST | |||
331 | responsedata["content_type"] = "text/html"; | 338 | responsedata["content_type"] = "text/html"; |
332 | responsedata["keepalive"] = false; | 339 | responsedata["keepalive"] = false; |
333 | 340 | ||
341 | |||
334 | UUID agentID; | 342 | UUID agentID; |
335 | string action; | 343 | string action; |
336 | ulong regionHandle; | 344 | ulong regionHandle; |
@@ -378,6 +386,28 @@ namespace OpenSim.Region.CoreModules.Communications.REST | |||
378 | 386 | ||
379 | protected virtual void DoAgentPost(Hashtable request, Hashtable responsedata, UUID id) | 387 | protected virtual void DoAgentPost(Hashtable request, Hashtable responsedata, UUID id) |
380 | { | 388 | { |
389 | if (m_safemode) | ||
390 | { | ||
391 | // Authentication | ||
392 | string authority = string.Empty; | ||
393 | string authToken = string.Empty; | ||
394 | if (!GetAuthentication(request, out authority, out authToken)) | ||
395 | { | ||
396 | m_log.InfoFormat("[REST COMMS]: Authentication failed for agent message {0}", request["uri"]); | ||
397 | responsedata["int_response_code"] = 403; | ||
398 | responsedata["str_response_string"] = "Forbidden"; | ||
399 | return ; | ||
400 | } | ||
401 | if (!VerifyKey(id, authority, authToken)) | ||
402 | { | ||
403 | m_log.InfoFormat("[REST COMMS]: Authentication failed for agent message {0}", request["uri"]); | ||
404 | responsedata["int_response_code"] = 403; | ||
405 | responsedata["str_response_string"] = "Forbidden"; | ||
406 | return ; | ||
407 | } | ||
408 | m_log.DebugFormat("[REST COMMS]: Authentication succeeded for {0}", id); | ||
409 | } | ||
410 | |||
381 | OSDMap args = RegionClient.GetOSDMap((string)request["body"]); | 411 | OSDMap args = RegionClient.GetOSDMap((string)request["body"]); |
382 | if (args == null) | 412 | if (args == null) |
383 | { | 413 | { |
@@ -793,6 +823,53 @@ namespace OpenSim.Region.CoreModules.Communications.REST | |||
793 | } | 823 | } |
794 | } | 824 | } |
795 | 825 | ||
826 | public static bool GetAuthentication(Hashtable request, out string authority, out string authKey) | ||
827 | { | ||
828 | authority = string.Empty; | ||
829 | authKey = string.Empty; | ||
830 | |||
831 | Uri authUri; | ||
832 | Hashtable headers = (Hashtable)request["headers"]; | ||
833 | |||
834 | // Authorization keys look like this: | ||
835 | // http://orgrid.org:8002/<uuid> | ||
836 | if (headers.ContainsKey("authorization") && (string)headers["authorization"] != "None") | ||
837 | { | ||
838 | if (Uri.TryCreate((string)headers["authorization"], UriKind.Absolute, out authUri)) | ||
839 | { | ||
840 | authority = authUri.Authority; | ||
841 | authKey = authUri.PathAndQuery.Trim('/'); | ||
842 | m_log.DebugFormat("[REST COMMS]: Got authority {0} and key {1}", authority, authKey); | ||
843 | return true; | ||
844 | } | ||
845 | else | ||
846 | m_log.Debug("[REST COMMS]: Wrong format for Authorization header: " + (string)headers["authorization"]); | ||
847 | } | ||
848 | else | ||
849 | m_log.Debug("[REST COMMS]: Authorization header not found"); | ||
850 | |||
851 | return false; | ||
852 | } | ||
853 | |||
854 | bool VerifyKey(UUID userID, string authority, string key) | ||
855 | { | ||
856 | string[] parts = authority.Split(':'); | ||
857 | IPAddress ipaddr = IPAddress.None; | ||
858 | uint port = 0; | ||
859 | if (parts.Length <= 2) | ||
860 | ipaddr = Util.GetHostFromDNS(parts[0]); | ||
861 | if (parts.Length == 2) | ||
862 | UInt32.TryParse(parts[1], out port); | ||
863 | |||
864 | // local authority (standalone), local call | ||
865 | if (m_thisIP.Equals(ipaddr) && (m_aScene.RegionInfo.HttpPort == port)) | ||
866 | return ((IAuthentication)m_aScene.CommsManager.UserAdminService).VerifyKey(userID, key); | ||
867 | // remote call | ||
868 | else | ||
869 | return AuthClient.VerifyKey("http://" + authority, userID, key); | ||
870 | } | ||
871 | |||
872 | |||
796 | #endregion Misc | 873 | #endregion Misc |
797 | 874 | ||
798 | protected class RegionToRegionClient : RegionClient | 875 | protected class RegionToRegionClient : RegionClient |
diff --git a/OpenSim/Region/CoreModules/Hypergrid/HGStandaloneInventoryModule.cs b/OpenSim/Region/CoreModules/Hypergrid/HGStandaloneInventoryModule.cs index 3675583..f0d70a7 100644 --- a/OpenSim/Region/CoreModules/Hypergrid/HGStandaloneInventoryModule.cs +++ b/OpenSim/Region/CoreModules/Hypergrid/HGStandaloneInventoryModule.cs | |||
@@ -93,7 +93,7 @@ namespace OpenSim.Region.CoreModules.Hypergrid | |||
93 | 93 | ||
94 | m_inventoryService = new HGInventoryService(m_inventoryBase, | 94 | m_inventoryService = new HGInventoryService(m_inventoryBase, |
95 | ((AssetServerBase)m_scene.CommsManager.AssetCache.AssetServer).AssetProviderPlugin, | 95 | ((AssetServerBase)m_scene.CommsManager.AssetCache.AssetServer).AssetProviderPlugin, |
96 | (UserManagerBase)m_scene.CommsManager.UserService, m_scene.CommsManager.HttpServer, | 96 | (UserManagerBase)m_scene.CommsManager.UserAdminService, m_scene.CommsManager.HttpServer, |
97 | m_scene.CommsManager.NetworkServersInfo.InventoryURL); | 97 | m_scene.CommsManager.NetworkServersInfo.InventoryURL); |
98 | 98 | ||
99 | AddHttpHandlers(m_scene.CommsManager.HttpServer); | 99 | AddHttpHandlers(m_scene.CommsManager.HttpServer); |
diff --git a/OpenSim/Region/CoreModules/Hypergrid/HGStandaloneLoginModule.cs b/OpenSim/Region/CoreModules/Hypergrid/HGStandaloneLoginModule.cs index f0e957b..c458b89 100644 --- a/OpenSim/Region/CoreModules/Hypergrid/HGStandaloneLoginModule.cs +++ b/OpenSim/Region/CoreModules/Hypergrid/HGStandaloneLoginModule.cs | |||
@@ -104,11 +104,12 @@ namespace OpenSim.Region.CoreModules.Hypergrid | |||
104 | IHttpServer httpServer = m_firstScene.CommsManager.HttpServer; | 104 | IHttpServer httpServer = m_firstScene.CommsManager.HttpServer; |
105 | 105 | ||
106 | //TODO: fix the casting of the user service, maybe by registering the userManagerBase with scenes, or refactoring so we just need a IUserService reference | 106 | //TODO: fix the casting of the user service, maybe by registering the userManagerBase with scenes, or refactoring so we just need a IUserService reference |
107 | m_loginService = new HGLoginAuthService((UserManagerBase)m_firstScene.CommsManager.UserService, welcomeMessage, m_firstScene.CommsManager.InterServiceInventoryService, m_firstScene.CommsManager.NetworkServersInfo, authenticate, rootFolder, this); | 107 | m_loginService = new HGLoginAuthService((UserManagerBase)m_firstScene.CommsManager.UserAdminService, welcomeMessage, m_firstScene.CommsManager.InterServiceInventoryService, m_firstScene.CommsManager.NetworkServersInfo, authenticate, rootFolder, this); |
108 | 108 | ||
109 | httpServer.AddXmlRPCHandler("hg_login", m_loginService.XmlRpcLoginMethod); | 109 | httpServer.AddXmlRPCHandler("hg_login", m_loginService.XmlRpcLoginMethod); |
110 | httpServer.AddXmlRPCHandler("hg_new_auth_key", m_loginService.XmlRpcGenerateKeyMethod); | 110 | httpServer.AddXmlRPCHandler("hg_new_auth_key", m_loginService.XmlRpcGenerateKeyMethod); |
111 | httpServer.AddXmlRPCHandler("hg_verify_auth_key", m_loginService.XmlRpcVerifyKeyMethod); | 111 | httpServer.AddXmlRPCHandler("hg_verify_auth_key", m_loginService.XmlRpcVerifyKeyMethod); |
112 | httpServer.AddXmlRPCHandler("check_auth_session", m_loginService.XmlRPCCheckAuthSession); | ||
112 | 113 | ||
113 | } | 114 | } |
114 | } | 115 | } |
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs index c26adc0..5ffa64c 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.cs | |||
@@ -40,6 +40,7 @@ using OpenMetaverse.Imaging; | |||
40 | using OpenSim.Framework; | 40 | using OpenSim.Framework; |
41 | using OpenSim.Framework.Communications; | 41 | using OpenSim.Framework.Communications; |
42 | using OpenSim.Framework.Communications.Cache; | 42 | using OpenSim.Framework.Communications.Cache; |
43 | using OpenSim.Framework.Communications.Clients; | ||
43 | using OpenSim.Framework.Console; | 44 | using OpenSim.Framework.Console; |
44 | using OpenSim.Region.Framework.Interfaces; | 45 | using OpenSim.Region.Framework.Interfaces; |
45 | using OpenSim.Region.Framework.Scenes.Scripting; | 46 | using OpenSim.Region.Framework.Scenes.Scripting; |
@@ -2372,64 +2373,80 @@ namespace OpenSim.Region.Framework.Scenes | |||
2372 | /// <param name="agent"></param> | 2373 | /// <param name="agent"></param> |
2373 | public bool NewUserConnection(AgentCircuitData agent) | 2374 | public bool NewUserConnection(AgentCircuitData agent) |
2374 | { | 2375 | { |
2375 | CapsModule.NewUserConnection(agent); | 2376 | bool goodUserConnection = AuthenticateUser(agent); |
2376 | 2377 | ||
2377 | ScenePresence sp = m_sceneGraph.GetScenePresence(agent.AgentID); | 2378 | if (goodUserConnection) |
2378 | if (sp != null) | ||
2379 | { | 2379 | { |
2380 | m_log.DebugFormat( | 2380 | CapsModule.NewUserConnection(agent); |
2381 | "[SCENE]: Adjusting known seeds for existing agent {0} in {1}", | ||
2382 | agent.AgentID, RegionInfo.RegionName); | ||
2383 | 2381 | ||
2384 | sp.AdjustKnownSeeds(); | 2382 | ScenePresence sp = m_sceneGraph.GetScenePresence(agent.AgentID); |
2383 | if (sp != null) | ||
2384 | { | ||
2385 | m_log.DebugFormat( | ||
2386 | "[SCENE]: Adjusting known seeds for existing agent {0} in {1}", | ||
2387 | agent.AgentID, RegionInfo.RegionName); | ||
2385 | 2388 | ||
2386 | return true; | 2389 | sp.AdjustKnownSeeds(); |
2387 | } | ||
2388 | 2390 | ||
2389 | // Don't disable this log message - it's too helpful | 2391 | return true; |
2390 | m_log.InfoFormat( | 2392 | } |
2391 | "[CONNECTION BEGIN]: Region {0} told of incoming client {1} {2} {3} (circuit code {4})", | ||
2392 | RegionInfo.RegionName, agent.firstname, agent.lastname, agent.AgentID, agent.circuitcode); | ||
2393 | 2393 | ||
2394 | if (m_regInfo.EstateSettings.IsBanned(agent.AgentID)) | 2394 | // Don't disable this log message - it's too helpful |
2395 | { | 2395 | m_log.InfoFormat( |
2396 | m_log.WarnFormat( | 2396 | "[CONNECTION BEGIN]: Region {0} told of incoming client {1} {2} {3} (circuit code {4})", |
2397 | "[CONNECTION BEGIN]: Incoming user {0} at {1} is on the region banlist", | 2397 | RegionInfo.RegionName, agent.firstname, agent.lastname, agent.AgentID, agent.circuitcode); |
2398 | agent.AgentID, RegionInfo.RegionName); | 2398 | |
2399 | //return false; | 2399 | if (m_regInfo.EstateSettings.IsBanned(agent.AgentID)) |
2400 | } | 2400 | { |
2401 | m_log.WarnFormat( | ||
2402 | "[CONNECTION BEGIN]: Incoming user {0} at {1} is on the region banlist", | ||
2403 | agent.AgentID, RegionInfo.RegionName); | ||
2404 | //return false; | ||
2405 | } | ||
2401 | 2406 | ||
2402 | CapsModule.AddCapsHandler(agent.AgentID); | 2407 | CapsModule.AddCapsHandler(agent.AgentID); |
2403 | 2408 | ||
2404 | if (!agent.child) | 2409 | if (!agent.child) |
2405 | { | ||
2406 | // Honor parcel landing type and position. | ||
2407 | ILandObject land = LandChannel.GetLandObject(agent.startpos.X, agent.startpos.Y); | ||
2408 | if (land != null) | ||
2409 | { | 2410 | { |
2410 | if (land.landData.LandingType == (byte)1 && land.landData.UserLocation != Vector3.Zero) | 2411 | // Honor parcel landing type and position. |
2412 | ILandObject land = LandChannel.GetLandObject(agent.startpos.X, agent.startpos.Y); | ||
2413 | if (land != null) | ||
2411 | { | 2414 | { |
2412 | agent.startpos = land.landData.UserLocation; | 2415 | if (land.landData.LandingType == (byte)1 && land.landData.UserLocation != Vector3.Zero) |
2416 | { | ||
2417 | agent.startpos = land.landData.UserLocation; | ||
2418 | } | ||
2413 | } | 2419 | } |
2414 | } | 2420 | } |
2415 | } | ||
2416 | 2421 | ||
2417 | m_authenticateHandler.AddNewCircuit(agent.circuitcode, agent); | 2422 | m_authenticateHandler.AddNewCircuit(agent.circuitcode, agent); |
2418 | 2423 | ||
2419 | // rewrite session_id | 2424 | // rewrite session_id |
2420 | CachedUserInfo userinfo = CommsManager.UserProfileCacheService.GetUserDetails(agent.AgentID); | 2425 | CachedUserInfo userinfo = CommsManager.UserProfileCacheService.GetUserDetails(agent.AgentID); |
2426 | if (userinfo != null) | ||
2427 | { | ||
2428 | userinfo.SessionID = agent.SessionID; | ||
2429 | } | ||
2430 | else | ||
2431 | { | ||
2432 | m_log.WarnFormat( | ||
2433 | "[CONNECTION BEGIN]: We couldn't find a User Info record for {0}. This is usually an indication that the UUID we're looking up is invalid", agent.AgentID); | ||
2434 | } | ||
2421 | 2435 | ||
2422 | if (userinfo != null) | 2436 | return true; |
2423 | { | ||
2424 | userinfo.SessionID = agent.SessionID; | ||
2425 | } | 2437 | } |
2426 | else | 2438 | else |
2427 | { | 2439 | { |
2428 | m_log.WarnFormat( | 2440 | m_log.WarnFormat("[CONNECTION BEGIN]: failed to authenticate user {0} {1}. Denying connection.", agent.firstname, agent.lastname); |
2429 | "[CONNECTION BEGIN]: We couldn't find a User Info record for {0}. This is usually an indication that the UUID we're looking up is invalid", agent.AgentID); | 2441 | return false; |
2430 | } | 2442 | } |
2443 | } | ||
2431 | 2444 | ||
2432 | return true; | 2445 | public virtual bool AuthenticateUser(AgentCircuitData agent) |
2446 | { | ||
2447 | bool result = CommsManager.UserService.VerifySession(agent.AgentID, agent.SessionID); | ||
2448 | m_log.Debug("[CONNECTION BEGIN]: User authentication returned " + result); | ||
2449 | return result; | ||
2433 | } | 2450 | } |
2434 | 2451 | ||
2435 | public void UpdateCircuitData(AgentCircuitData data) | 2452 | public void UpdateCircuitData(AgentCircuitData data) |