diff options
Diffstat (limited to 'OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs')
-rw-r--r-- | OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs b/OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs index 7ecbd26..7d0c47f 100644 --- a/OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs +++ b/OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs | |||
@@ -336,6 +336,102 @@ namespace OpenSim.Region.CoreModules.Framework.UserManagement | |||
336 | } | 336 | } |
337 | } | 337 | } |
338 | 338 | ||
339 | /// <summary> | ||
340 | /// | ||
341 | /// </summary> | ||
342 | /// <param name="uuid"></param> | ||
343 | /// <param name="names">Caller please provide a properly instantiated array for names, string[2]</param> | ||
344 | /// <returns></returns> | ||
345 | private bool TryGetUserNames(UUID uuid, string[] names) | ||
346 | { | ||
347 | if (names == null) | ||
348 | names = new string[2]; | ||
349 | |||
350 | if (TryGetUserNamesFromCache(uuid, names)) | ||
351 | return true; | ||
352 | |||
353 | if (TryGetUserNamesFromServices(uuid, names)) | ||
354 | return true; | ||
355 | |||
356 | return false; | ||
357 | } | ||
358 | |||
359 | private bool TryGetUserNamesFromCache(UUID uuid, string[] names) | ||
360 | { | ||
361 | lock (m_UserCache) | ||
362 | { | ||
363 | if (m_UserCache.ContainsKey(uuid)) | ||
364 | { | ||
365 | names[0] = m_UserCache[uuid].FirstName; | ||
366 | names[1] = m_UserCache[uuid].LastName; | ||
367 | |||
368 | return true; | ||
369 | } | ||
370 | } | ||
371 | |||
372 | return false; | ||
373 | } | ||
374 | |||
375 | /// <summary> | ||
376 | /// Try to get the names bound to the given uuid, from the services. | ||
377 | /// </summary> | ||
378 | /// <returns>True if the name was found, false if not.</returns> | ||
379 | /// <param name='uuid'></param> | ||
380 | /// <param name='names'>The array of names if found. If not found, then names[0] = "Unknown" and names[1] = "User"</param> | ||
381 | private bool TryGetUserNamesFromServices(UUID uuid, string[] names) | ||
382 | { | ||
383 | UserAccount account = m_Scenes[0].UserAccountService.GetUserAccount(UUID.Zero, uuid); | ||
384 | |||
385 | if (account != null) | ||
386 | { | ||
387 | names[0] = account.FirstName; | ||
388 | names[1] = account.LastName; | ||
389 | |||
390 | UserData user = new UserData(); | ||
391 | user.FirstName = account.FirstName; | ||
392 | user.LastName = account.LastName; | ||
393 | |||
394 | lock (m_UserCache) | ||
395 | m_UserCache[uuid] = user; | ||
396 | |||
397 | return true; | ||
398 | } | ||
399 | else | ||
400 | { | ||
401 | // Let's try the GridUser service | ||
402 | GridUserInfo uInfo = m_Scenes[0].GridUserService.GetGridUserInfo(uuid.ToString()); | ||
403 | if (uInfo != null) | ||
404 | { | ||
405 | string url, first, last, tmp; | ||
406 | UUID u; | ||
407 | if (Util.ParseUniversalUserIdentifier(uInfo.UserID, out u, out url, out first, out last, out tmp)) | ||
408 | { | ||
409 | AddUser(uuid, first, last, url); | ||
410 | |||
411 | if (m_UserCache.ContainsKey(uuid)) | ||
412 | { | ||
413 | names[0] = m_UserCache[uuid].FirstName; | ||
414 | names[1] = m_UserCache[uuid].LastName; | ||
415 | |||
416 | return true; | ||
417 | } | ||
418 | } | ||
419 | else | ||
420 | m_log.DebugFormat("[USER MANAGEMENT MODULE]: Unable to parse UUI {0}", uInfo.UserID); | ||
421 | } | ||
422 | // else | ||
423 | // { | ||
424 | // m_log.DebugFormat("[USER MANAGEMENT MODULE]: No grid user found for {0}", uuid); | ||
425 | // } | ||
426 | |||
427 | names[0] = "Unknown"; | ||
428 | names[1] = "UserUMMTGUN9"; | ||
429 | |||
430 | return false; | ||
431 | } | ||
432 | } | ||
433 | |||
434 | |||
339 | #region IUserManagement | 435 | #region IUserManagement |
340 | 436 | ||
341 | public UUID GetUserIdByName(string name) | 437 | public UUID GetUserIdByName(string name) |