diff options
Diffstat (limited to 'OpenSim/Region')
-rw-r--r-- | OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs | 116 | ||||
-rw-r--r-- | OpenSim/Region/CoreModules/ServiceConnectorsOut/UserAccounts/RemoteUserAccountServiceConnector.cs | 2 |
2 files changed, 116 insertions, 2 deletions
diff --git a/OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs b/OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs index b72593c..2fd9183 100644 --- a/OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs +++ b/OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs | |||
@@ -481,6 +481,121 @@ namespace OpenSim.Region.CoreModules.Framework.UserManagement | |||
481 | return user.FirstName + " " + user.LastName; | 481 | return user.FirstName + " " + user.LastName; |
482 | } | 482 | } |
483 | 483 | ||
484 | public virtual Dictionary<UUID,string> GetUsersNames(string[] ids) | ||
485 | { | ||
486 | Dictionary<UUID,string> ret = new Dictionary<UUID,string>(); | ||
487 | if(m_Scenes.Count <= 0) | ||
488 | return ret; | ||
489 | |||
490 | List<string> missing = new List<string>(); | ||
491 | |||
492 | // look in cache | ||
493 | UserData userdata = new UserData(); | ||
494 | UUID uuid = UUID.Zero; | ||
495 | foreach(string id in ids) | ||
496 | { | ||
497 | if(UUID.TryParse(id, out uuid)) | ||
498 | { | ||
499 | lock (m_UserCache) | ||
500 | { | ||
501 | if (m_UserCache.TryGetValue(uuid, out userdata) && | ||
502 | userdata.HasGridUserTried && | ||
503 | userdata.FirstName != "Unknown") | ||
504 | { | ||
505 | string name = userdata.FirstName + " " + userdata.LastName; | ||
506 | ret[uuid] = name; | ||
507 | } | ||
508 | else | ||
509 | missing.Add(id); | ||
510 | } | ||
511 | } | ||
512 | } | ||
513 | |||
514 | if(missing.Count == 0) | ||
515 | return ret; | ||
516 | |||
517 | // try user account service | ||
518 | List<UserAccount> accounts = m_Scenes[0].UserAccountService.GetUserAccounts( | ||
519 | m_Scenes[0].RegionInfo.ScopeID, missing); | ||
520 | |||
521 | if(accounts.Count != 0) | ||
522 | { | ||
523 | foreach(UserAccount uac in accounts) | ||
524 | { | ||
525 | if(uac != null) | ||
526 | { | ||
527 | string name = uac.FirstName + " " + uac.LastName; | ||
528 | ret[uac.PrincipalID] = name; | ||
529 | missing.Remove(uac.PrincipalID.ToString()); // slowww | ||
530 | |||
531 | userdata = new UserData(); | ||
532 | userdata.Id = uac.PrincipalID; | ||
533 | userdata.FirstName = uac.FirstName; | ||
534 | userdata.LastName = uac.LastName; | ||
535 | userdata.HomeURL = string.Empty; | ||
536 | userdata.IsUnknownUser = false; | ||
537 | userdata.HasGridUserTried = true; | ||
538 | lock (m_UserCache) | ||
539 | m_UserCache[uac.PrincipalID] = userdata; | ||
540 | } | ||
541 | } | ||
542 | } | ||
543 | |||
544 | if (missing.Count == 0 || m_Scenes[0].GridUserService == null) | ||
545 | return ret; | ||
546 | |||
547 | // try grid user service | ||
548 | |||
549 | GridUserInfo[] pinfos = m_Scenes[0].GridUserService.GetGridUserInfo(missing.ToArray()); | ||
550 | if(pinfos.Length > 0) | ||
551 | { | ||
552 | foreach(GridUserInfo uInfo in pinfos) | ||
553 | { | ||
554 | if (uInfo != null) | ||
555 | { | ||
556 | string url, first, last, tmp; | ||
557 | UUID u; | ||
558 | if(uInfo.UserID.Length <= 36) | ||
559 | continue; | ||
560 | |||
561 | if (Util.ParseUniversalUserIdentifier(uInfo.UserID, out u, out url, out first, out last, out tmp)) | ||
562 | { | ||
563 | if (url != string.Empty) | ||
564 | { | ||
565 | try | ||
566 | { | ||
567 | string name = first.Replace(" ", ".") + "." + last.Replace(" ", ".") + " @" + new Uri(url).Authority; | ||
568 | ret[u] = name; | ||
569 | missing.Remove(u.ToString()); | ||
570 | } | ||
571 | catch | ||
572 | { | ||
573 | } | ||
574 | } | ||
575 | } | ||
576 | } | ||
577 | } | ||
578 | } | ||
579 | |||
580 | // add the UMMthings ( not sure we should) | ||
581 | if(missing.Count > 0) | ||
582 | { | ||
583 | foreach(string id in missing) | ||
584 | { | ||
585 | if(UUID.TryParse(id, out uuid) && uuid != UUID.Zero) | ||
586 | { | ||
587 | if (m_Scenes[0].LibraryService != null && | ||
588 | (m_Scenes[0].LibraryService.LibraryRootFolder.Owner == uuid)) | ||
589 | ret[uuid] = "Mr OpenSim"; | ||
590 | else | ||
591 | ret[uuid] = "Unknown UserUMMAU43"; | ||
592 | } | ||
593 | } | ||
594 | } | ||
595 | |||
596 | return ret; | ||
597 | } | ||
598 | |||
484 | public virtual string GetUserHomeURL(UUID userID) | 599 | public virtual string GetUserHomeURL(UUID userID) |
485 | { | 600 | { |
486 | UserData user; | 601 | UserData user; |
@@ -584,7 +699,6 @@ namespace OpenSim.Region.CoreModules.Framework.UserManagement | |||
584 | else | 699 | else |
585 | { | 700 | { |
586 | userdata = new UserData(); | 701 | userdata = new UserData(); |
587 | userdata.HasGridUserTried = false; | ||
588 | userdata.Id = uuid; | 702 | userdata.Id = uuid; |
589 | userdata.FirstName = "Unknown"; | 703 | userdata.FirstName = "Unknown"; |
590 | userdata.LastName = "UserUMMAU42"; | 704 | userdata.LastName = "UserUMMAU42"; |
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/UserAccounts/RemoteUserAccountServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/UserAccounts/RemoteUserAccountServiceConnector.cs index ce1754f..90c90d6 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/UserAccounts/RemoteUserAccountServiceConnector.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/UserAccounts/RemoteUserAccountServiceConnector.cs | |||
@@ -165,7 +165,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.UserAccounts | |||
165 | List<UserAccount> accs = new List<UserAccount>(); | 165 | List<UserAccount> accs = new List<UserAccount>(); |
166 | List<string> missing = new List<string>(); | 166 | List<string> missing = new List<string>(); |
167 | 167 | ||
168 | UUID uuid = UUID.Zero;; | 168 | UUID uuid = UUID.Zero; |
169 | UserAccount account; | 169 | UserAccount account; |
170 | bool inCache = false; | 170 | bool inCache = false; |
171 | 171 | ||