From 571efeddb20f38bb4164074b3c217be5387ca2e0 Mon Sep 17 00:00:00 2001 From: Diva Canto Date: Thu, 29 Dec 2011 16:12:06 -0800 Subject: Added UserManagementModule.IsLocalGridUser(UUID) to be used throughout region Scenes and Modules. Changed existing modules to use it instead of assuming that foreign = null account. --- .../CoreModules/Avatar/Friends/HGFriendsModule.cs | 81 ++++++++++++++++------ .../InstantMessage/HGMessageTransferModule.cs | 3 +- .../EntityTransfer/HGEntityTransferModule.cs | 7 +- .../InventoryAccess/HGInventoryAccessModule.cs | 10 +-- .../UserManagement/UserManagementModule.cs | 9 +++ .../Inventory/HGInventoryBroker.cs | 4 +- .../Region/Framework/Interfaces/IUserManagement.cs | 2 + 7 files changed, 80 insertions(+), 36 deletions(-) (limited to 'OpenSim/Region') diff --git a/OpenSim/Region/CoreModules/Avatar/Friends/HGFriendsModule.cs b/OpenSim/Region/CoreModules/Avatar/Friends/HGFriendsModule.cs index 9a97925..a77646c 100644 --- a/OpenSim/Region/CoreModules/Avatar/Friends/HGFriendsModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Friends/HGFriendsModule.cs @@ -50,6 +50,17 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends { private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); + IUserManagement m_uMan; + IUserManagement UserManagementModule + { + get + { + if (m_uMan == null) + m_uMan = m_Scenes[0].RequestModuleInterface(); + return m_uMan; + } + } + #region ISharedRegionModule public override string Name { @@ -369,9 +380,11 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends protected override FriendInfo[] GetFriendsFromService(IClientAPI client) { // m_log.DebugFormat("[HGFRIENDS MODULE]: Entering GetFriendsFromService for {0}", client.Name); + Boolean agentIsLocal = true; + if (UserManagementModule != null) + agentIsLocal = UserManagementModule.IsLocalGridUser(client.AgentId); - UserAccount account1 = UserAccountService.GetUserAccount(m_Scenes[0].RegionInfo.ScopeID, client.AgentId); - if (account1 != null) + if (agentIsLocal) return base.GetFriendsFromService(client); FriendInfo[] finfos = new FriendInfo[0]; @@ -392,16 +405,22 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends protected override bool StoreRights(UUID agentID, UUID friendID, int rights) { - UserAccount account1 = UserAccountService.GetUserAccount(m_Scenes[0].RegionInfo.ScopeID, agentID); - UserAccount account2 = UserAccountService.GetUserAccount(m_Scenes[0].RegionInfo.ScopeID, friendID); + Boolean agentIsLocal = true; + Boolean friendIsLocal = true; + if (UserManagementModule != null) + { + agentIsLocal = UserManagementModule.IsLocalGridUser(agentID); + friendIsLocal = UserManagementModule.IsLocalGridUser(friendID); + } + // Are they both local users? - if (account1 != null && account2 != null) + if (agentIsLocal && friendIsLocal) { // local grid users return base.StoreRights(agentID, friendID, rights); } - if (account1 != null) // agent is local, friend is foreigner + if (agentIsLocal) // agent is local, friend is foreigner { FriendInfo[] finfos = GetFriends(agentID); FriendInfo finfo = GetFriend(finfos, friendID); @@ -412,7 +431,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends } } - if (account2 != null) // agent is foreigner, friend is local + if (friendIsLocal) // agent is foreigner, friend is local { string agentUUI = GetUUI(friendID, agentID); if (agentUUI != string.Empty) @@ -427,10 +446,16 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends protected override void StoreBackwards(UUID friendID, UUID agentID) { - UserAccount account1 = UserAccountService.GetUserAccount(m_Scenes[0].RegionInfo.ScopeID, agentID); - UserAccount account2 = UserAccountService.GetUserAccount(m_Scenes[0].RegionInfo.ScopeID, friendID); + Boolean agentIsLocal = true; + Boolean friendIsLocal = true; + if (UserManagementModule != null) + { + agentIsLocal = UserManagementModule.IsLocalGridUser(agentID); + friendIsLocal = UserManagementModule.IsLocalGridUser(friendID); + } + // Are they both local users? - if (account1 != null && account2 != null) + if (agentIsLocal && friendIsLocal) { // local grid users m_log.DebugFormat("[HGFRIENDS MODULE]: Users are both local"); @@ -444,10 +469,16 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends protected override void StoreFriendships(UUID agentID, UUID friendID) { - UserAccount agentAccount = UserAccountService.GetUserAccount(m_Scenes[0].RegionInfo.ScopeID, agentID); - UserAccount friendAccount = UserAccountService.GetUserAccount(m_Scenes[0].RegionInfo.ScopeID, friendID); + Boolean agentIsLocal = true; + Boolean friendIsLocal = true; + if (UserManagementModule != null) + { + agentIsLocal = UserManagementModule.IsLocalGridUser(agentID); + friendIsLocal = UserManagementModule.IsLocalGridUser(friendID); + } + // Are they both local users? - if (agentAccount != null && friendAccount != null) + if (agentIsLocal && friendIsLocal) { // local grid users m_log.DebugFormat("[HGFRIENDS MODULE]: Users are both local"); @@ -465,13 +496,13 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends string agentFriendService = string.Empty; string friendFriendService = string.Empty; - if (agentClient != null) + if (agentIsLocal) { agentClientCircuit = ((Scene)(agentClient.Scene)).AuthenticateHandler.GetAgentCircuitData(agentClient.CircuitCode); agentUUI = Util.ProduceUserUniversalIdentifier(agentClientCircuit); agentFriendService = agentClientCircuit.ServiceURLs["FriendsServerURI"].ToString(); } - if (friendClient != null) + if (friendIsLocal) { friendClientCircuit = ((Scene)(friendClient.Scene)).AuthenticateHandler.GetAgentCircuitData(friendClient.CircuitCode); friendUUI = Util.ProduceUserUniversalIdentifier(friendClientCircuit); @@ -484,7 +515,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends // Generate a random 8-character hex number that will sign this friendship string secret = UUID.Random().ToString().Substring(0, 8); - if (agentAccount != null) // agent is local, 'friend' is foreigner + if (agentIsLocal) // agent is local, 'friend' is foreigner { // This may happen when the agent returned home, in which case the friend is not there // We need to look for its information in the friends list itself @@ -520,7 +551,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends friendsConn.NewFriendship(friendID, agentUUI + ";" + secret); } } - else if (friendAccount != null) // 'friend' is local, agent is foreigner + else if (friendIsLocal) // 'friend' is local, agent is foreigner { // store in the local friends service a reference to the foreign agent FriendsService.StoreFriend(friendID.ToString(), agentUUI + ";" + secret, 1); @@ -553,10 +584,16 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends protected override bool DeleteFriendship(UUID agentID, UUID exfriendID) { - UserAccount agentAccount = UserAccountService.GetUserAccount(m_Scenes[0].RegionInfo.ScopeID, agentID); - UserAccount friendAccount = UserAccountService.GetUserAccount(m_Scenes[0].RegionInfo.ScopeID, exfriendID); + Boolean agentIsLocal = true; + Boolean friendIsLocal = true; + if (UserManagementModule != null) + { + agentIsLocal = UserManagementModule.IsLocalGridUser(agentID); + friendIsLocal = UserManagementModule.IsLocalGridUser(exfriendID); + } + // Are they both local users? - if (agentAccount != null && friendAccount != null) + if (agentIsLocal && friendIsLocal) { // local grid users return base.DeleteFriendship(agentID, exfriendID); @@ -566,7 +603,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends string agentUUI = string.Empty; string friendUUI = string.Empty; - if (agentAccount != null) // agent is local, 'friend' is foreigner + if (agentIsLocal) // agent is local, 'friend' is foreigner { // We need to look for its information in the friends list itself FriendInfo[] finfos = GetFriends(agentID); @@ -587,7 +624,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends return true; } } - else if (friendAccount != null) // agent is foreigner, 'friend' is local + else if (friendIsLocal) // agent is foreigner, 'friend' is local { agentUUI = GetUUI(exfriendID, agentID); diff --git a/OpenSim/Region/CoreModules/Avatar/InstantMessage/HGMessageTransferModule.cs b/OpenSim/Region/CoreModules/Avatar/InstantMessage/HGMessageTransferModule.cs index 560d913..bf1d787 100644 --- a/OpenSim/Region/CoreModules/Avatar/InstantMessage/HGMessageTransferModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/InstantMessage/HGMessageTransferModule.cs @@ -180,10 +180,9 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage // m_log.DebugFormat("[HG INSTANT MESSAGE]: Delivering IM to {0} via XMLRPC", im.toAgentID); // Is the user a local user? - UserAccount account = m_Scenes[0].UserAccountService.GetUserAccount(m_Scenes[0].RegionInfo.ScopeID, toAgentID); string url = string.Empty; bool foreigner = false; - if (account == null) // foreign user + if (UserManagementModule != null && !UserManagementModule.IsLocalGridUser(toAgentID)) // foreign user { url = UserManagementModule.GetUserServerURL(toAgentID, "IMServerURI"); foreigner = true; diff --git a/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs b/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs index 841363c..8d41728 100644 --- a/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs +++ b/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs @@ -187,8 +187,8 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: Request to teleport {0} {1} home", client.FirstName, client.LastName); // Let's find out if this is a foreign user or a local user - UserAccount account = m_aScene.UserAccountService.GetUserAccount(m_aScene.RegionInfo.ScopeID, id); - if (account != null) + IUserManagement uMan = m_aScene.RequestModuleInterface(); + if (uMan != null && uMan.IsLocalGridUser(id)) { // local grid user m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: User is local"); @@ -313,8 +313,9 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer } // Let's find out if this is a foreign user or a local user + IUserManagement uMan = m_aScene.RequestModuleInterface(); UserAccount account = m_aScene.UserAccountService.GetUserAccount(m_aScene.RegionInfo.ScopeID, obj.AgentId); - if (account != null) + if (uMan != null && uMan.IsLocalGridUser(obj.AgentId)) { // local grid user return; diff --git a/OpenSim/Region/CoreModules/Framework/InventoryAccess/HGInventoryAccessModule.cs b/OpenSim/Region/CoreModules/Framework/InventoryAccess/HGInventoryAccessModule.cs index 49d484b..bf24ebc 100644 --- a/OpenSim/Region/CoreModules/Framework/InventoryAccess/HGInventoryAccessModule.cs +++ b/OpenSim/Region/CoreModules/Framework/InventoryAccess/HGInventoryAccessModule.cs @@ -124,8 +124,7 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess protected override string GenerateLandmark(ScenePresence presence, out string prefix, out string suffix) { - UserAccount account = m_Scene.UserAccountService.GetUserAccount(m_Scene.RegionInfo.ScopeID, presence.UUID); - if (account == null) + if (UserManagementModule != null && !UserManagementModule.IsLocalGridUser(presence.UUID)) prefix = "HG "; else prefix = string.Empty; @@ -210,12 +209,9 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess public override bool IsForeignUser(UUID userID, out string assetServerURL) { assetServerURL = string.Empty; - UserAccount account = null; - if (m_Scene.UserAccountService != null) - account = m_Scene.UserAccountService.GetUserAccount(m_Scene.RegionInfo.ScopeID, userID); - if (account == null) // foreign - { + if (UserManagementModule != null && !UserManagementModule.IsLocalGridUser(userID)) + { // foreign ScenePresence sp = null; if (m_Scene.TryGetScenePresence(userID, out sp)) { diff --git a/OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs b/OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs index a40a6a4..dbe2560 100644 --- a/OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs +++ b/OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs @@ -425,6 +425,15 @@ namespace OpenSim.Region.CoreModules.Framework.UserManagement //} + public bool IsLocalGridUser(UUID uuid) + { + UserAccount account = m_Scenes[0].UserAccountService.GetUserAccount(m_Scenes[0].RegionInfo.ScopeID, uuid); + if (account == null || (account != null && !account.LocalToGrid)) + return false; + + return true; + } + #endregion IUserManagement private void HandleShowUsers(string module, string[] cmd) diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs index 0d121ed..b5c0af6 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs @@ -218,9 +218,9 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory /// private void CacheInventoryServiceURL(UUID userID) { - if (m_Scenes[0].UserAccountService.GetUserAccount(m_Scenes[0].RegionInfo.ScopeID, userID) == null) + if (UserManagementModule != null && !UserManagementModule.IsLocalGridUser(userID)) { - // The user does not have a local account; let's cache its service URL + // The user is not local; let's cache its service URL string inventoryURL = string.Empty; ScenePresence sp = null; foreach (Scene scene in m_Scenes) diff --git a/OpenSim/Region/Framework/Interfaces/IUserManagement.cs b/OpenSim/Region/Framework/Interfaces/IUserManagement.cs index c66e053..ea0ba59 100644 --- a/OpenSim/Region/Framework/Interfaces/IUserManagement.cs +++ b/OpenSim/Region/Framework/Interfaces/IUserManagement.cs @@ -48,5 +48,7 @@ namespace OpenSim.Region.Framework.Interfaces /// /// void AddUser(UUID uuid, string firstName, string lastName, string profileURL); + + bool IsLocalGridUser(UUID uuid); } } -- cgit v1.1