From 9d0d82ab6eb01622251bbeb0937842458f273762 Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Thu, 26 Nov 2020 12:14:00 +0000 Subject: [PATCH] split usermanagement adduser into simpler per case methods --- OpenSim/Framework/GridInfo.cs | 34 +++---- OpenSim/Framework/Util.cs | 6 +- .../InventoryAccess/InventoryAccessModule.cs | 4 +- .../UserManagement/UserManagementModule.cs | 93 +++++++------------ .../LocalInventoryServiceConnector.cs | 2 +- .../World/Archiver/ArchiveReadRequest.cs | 4 +- .../Framework/Scenes/Scene.Inventory.cs | 2 +- OpenSim/Region/Framework/Scenes/Scene.cs | 10 +- .../Services/Interfaces/IUserManagement.cs | 22 ++--- .../UserAccountService/UserAccountService.cs | 2 +- 10 files changed, 72 insertions(+), 107 deletions(-) diff --git a/OpenSim/Framework/GridInfo.cs b/OpenSim/Framework/GridInfo.cs index 6a7077c9ca..58946850f0 100644 --- a/OpenSim/Framework/GridInfo.cs +++ b/OpenSim/Framework/GridInfo.cs @@ -39,6 +39,7 @@ namespace OpenSim.Framework None = 0, ValidHost = 1, Resolved = 1 << 1, + Empty = 1 << 2, ValidResolved = ValidHost | Resolved } @@ -56,7 +57,7 @@ namespace OpenSim.Framework public OSHTTPURI(string uri, bool withDNSResolve = false) { - Flags = OSHTTPURIFlags.None; + Flags = OSHTTPURIFlags.Empty; Port = -1; IP = null; Host = string.Empty; @@ -67,6 +68,7 @@ namespace OpenSim.Framework if (string.IsNullOrEmpty(uri)) return; + Flags = OSHTTPURIFlags.None; try { Uri m_checkuri = new Uri(uri); @@ -114,12 +116,12 @@ namespace OpenSim.Framework public bool IsValidHost { - get { return Flags != OSHTTPURIFlags.None;} + get { return (Flags & OSHTTPURIFlags.ValidHost) != 0; } } public bool ValidAndResolved(out string error) { - if (Flags == OSHTTPURIFlags.None) + if ((Flags & OSHTTPURIFlags.ValidHost) == 0) { error = "failed to parse uri"; return false; @@ -180,7 +182,7 @@ namespace OpenSim.Framework public OSHHTPHost(string url, bool withDNSResolve = false) { - Flags = OSHTTPURIFlags.None; + Flags = OSHTTPURIFlags.Empty; Port = 80; IP = null; Host = string.Empty; @@ -191,8 +193,9 @@ namespace OpenSim.Framework if (string.IsNullOrEmpty(url)) return; - url = url.ToLowerInvariant(); + Flags = OSHTTPURIFlags.None; + url = url.ToLowerInvariant(); try { int urllen = url.Length; @@ -285,7 +288,7 @@ namespace OpenSim.Framework public bool IsValidHost { - get { return Flags != OSHTTPURIFlags.None; } + get { return (Flags & OSHTTPURIFlags.ValidHost) != 0; } } public bool IsResolvedHost @@ -295,7 +298,7 @@ namespace OpenSim.Framework public bool ValidAndResolved(out string error) { - if (Flags == OSHTTPURIFlags.None) + if ((Flags & OSHTTPURIFlags.ValidHost) == 0) { error = "failed to parse uri"; return false; @@ -365,7 +368,7 @@ namespace OpenSim.Framework { string[] sections = new string[] {"Const", "Startup", "Hypergrid"}; - string gatekeeper = Util.GetConfigVarFromSections(config, "GatekeeperURI", sections, String.Empty); + string gatekeeper = Util.GetConfigVarFromSections(config, "GatekeeperURI", sections, string.Empty); if (string.IsNullOrEmpty(gatekeeper)) { IConfig serverConfig = config.Configs["GatekeeperService"]; @@ -441,7 +444,7 @@ namespace OpenSim.Framework throw new Exception("HomeURI configuration error"); } - string homeAlias = Util.GetConfigVarFromSections(config, "HomeURIAlias", sections, String.Empty); + string homeAlias = Util.GetConfigVarFromSections(config, "HomeURIAlias", sections, string.Empty); if (!string.IsNullOrWhiteSpace(homeAlias)) { string[] alias = homeAlias.Split(','); @@ -582,7 +585,7 @@ namespace OpenSim.Framework { OSHHTPHost tmp = new OSHHTPHost(othergatekeeper, false); if (!tmp.IsValidHost) - return -1; + return ((tmp.Flags & OSHTTPURIFlags.Empty) == 0) ? -1 : 1; if (tmp.Equals(m_gateKeeperURL)) return 1; if (m_gateKeeperAlias != null && m_gateKeeperAlias.Contains(tmp)) @@ -594,7 +597,7 @@ namespace OpenSim.Framework { OSHHTPHost tmp = new OSHHTPHost(othergatekeeper, false); if (!tmp.IsValidHost) - return -1; + return ((tmp.Flags & OSHTTPURIFlags.Empty) == 0) ? -1 : 1; if (tmp.Equals(m_gateKeeperURL)) return 1; if (m_gateKeeperAlias != null && m_gateKeeperAlias.Contains(tmp)) @@ -611,7 +614,8 @@ namespace OpenSim.Framework public int IsLocalGrid(OSHHTPHost othergatekeeper) { if (!othergatekeeper.IsValidHost) - return -1; + return ((othergatekeeper.Flags & OSHTTPURIFlags.Empty) == 0) ? -1 : 1; + if (othergatekeeper.Equals(m_gateKeeperURL)) return 1; if (m_gateKeeperAlias != null && m_gateKeeperAlias.Contains(othergatekeeper)) @@ -623,7 +627,7 @@ namespace OpenSim.Framework { OSHHTPHost tmp = new OSHHTPHost(otherhome, false); if (!tmp.IsValidHost) - return -1; + return ((tmp.Flags & OSHTTPURIFlags.Empty) == 0) ? -1 : 1; if (tmp.Equals(m_homeURL)) return 1; if (m_homeURLAlias != null && m_homeURLAlias.Contains(tmp)) @@ -635,7 +639,7 @@ namespace OpenSim.Framework { OSHHTPHost tmp = new OSHHTPHost(otherhome, false); if (!tmp.IsValidHost) - return -1; + return ((tmp.Flags & OSHTTPURIFlags.Empty) == 0) ? -1 : 1; if (tmp.Equals(m_homeURL)) return 1; if (m_homeURLAlias != null && m_homeURLAlias.Contains(tmp)) @@ -643,8 +647,6 @@ namespace OpenSim.Framework if (withResolveCheck) { - if (tmp.IsResolvedHost) - return 0; return tmp.ResolveDNS() ? 0 : -2; } return 0; diff --git a/OpenSim/Framework/Util.cs b/OpenSim/Framework/Util.cs index 2bb364bf77..6b7ee691ee 100644 --- a/OpenSim/Framework/Util.cs +++ b/OpenSim/Framework/Util.cs @@ -1022,13 +1022,9 @@ namespace OpenSim.Framework { m_log.ErrorFormat( "[UTIL]: Couldn't find native Windows library at {0}", nativeLibraryPath); - return false; } - else - { - return true; - } + return true; } public static bool IsEnvironmentSupported(ref string reason) diff --git a/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs b/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs index 64f1825118..c28cbbd0cd 100644 --- a/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs +++ b/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs @@ -1317,9 +1317,9 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess protected void AddUserData(SceneObjectGroup sog) { - UserManagementModule.AddUser(sog.RootPart.CreatorID, sog.RootPart.CreatorData); + UserManagementModule.AddCreatorUser(sog.RootPart.CreatorID, sog.RootPart.CreatorData); foreach (SceneObjectPart sop in sog.Parts) - UserManagementModule.AddUser(sop.CreatorID, sop.CreatorData); + UserManagementModule.AddCreatorUser(sop.CreatorID, sop.CreatorData); } public virtual void TransferInventoryAssets(InventoryItemBase item, UUID sender, UUID receiver) diff --git a/OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs b/OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs index 5a695a87e4..ffa64de9b2 100755 --- a/OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs +++ b/OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs @@ -64,7 +64,7 @@ namespace OpenSim.Region.CoreModules.Framework.UserManagement protected IServiceThrottleModule m_ServiceThrottle; protected IUserAccountService m_userAccountService = null; protected IGridUserService m_gridUserService = null; - + protected GridInfo m_thisGridInfo; // The cache @@ -212,7 +212,7 @@ namespace OpenSim.Region.CoreModules.Framework.UserManagement // m_log.DebugFormat( // "[USER MANAGEMENT MODULE]: Handling request for name binding of UUID {0} from {1}", // uuid, remote_client.Name); - if(m_Scenes.Count <= 0) + if(!m_Enabled || m_Scenes.Count <= 0) return; if (m_userCacheByID.TryGetValue(uuid, out UserData user)) @@ -331,13 +331,13 @@ namespace OpenSim.Region.CoreModules.Framework.UserManagement protected virtual void CacheCreators(SceneObjectGroup sog) { //m_log.DebugFormat("[USER MANAGEMENT MODULE]: processing {0} {1}; {2}", sog.RootPart.Name, sog.RootPart.CreatorData, sog.RootPart.CreatorIdentification); - AddUser(sog.RootPart.CreatorID, sog.RootPart.CreatorData); + AddCreatorUser(sog.RootPart.CreatorID, sog.RootPart.CreatorData); foreach (SceneObjectPart sop in sog.Parts) { - AddUser(sop.CreatorID, sop.CreatorData); + AddCreatorUser(sop.CreatorID, sop.CreatorData); foreach (TaskInventoryItem item in sop.TaskInventory.Values) - AddUser(item.CreatorID, item.CreatorData); + AddCreatorUser(item.CreatorID, item.CreatorData); } } @@ -732,41 +732,34 @@ namespace OpenSim.Region.CoreModules.Framework.UserManagement m_userCacheByID.Add(id, user, local ? LOCALEXPIRE : HGEXPIRE); } - public virtual void AddUser(UUID uuid, string first, string last, bool isNPC = false, int expire = LOCALEXPIRE) + public void AddSystemUser(UUID uuid, string first, string last) { - UserData user = new UserData(); - user.Id = uuid; - user.FirstName = first; - user.LastName = last; - user.HasGridUserTried = isNPC; - if (!isNPC && last.StartsWith("@")) + UserData user = new UserData() { - string url = last.Substring(1); - bool local; - if (CheckUrl(url, out local, out OSHHTPHost host)) - { - if (local) - { - user.IsLocal = true; - user.HomeURL = string.Empty; - user.HasGridUserTried = true; - } - else - { - user.IsLocal = false; - user.HomeURL = host.URI; - user.HasGridUserTried = false; - } - user.IsUnknownUser = false; - } - } - else + Id = uuid, + FirstName = first, + LastName = last, + IsLocal = true, + HasGridUserTried = true, + HomeURL = string.Empty, + IsUnknownUser = false + }; + m_userCacheByID.Add(uuid, user, NOEXPIRE); + } + + public void AddNPCUser(UUID uuid, string first, string last) + { + UserData user = new UserData() { - user.IsUnknownUser = false; - user.IsLocal = true; - user.HasGridUserTried = true; - } - m_userCacheByID.Add(uuid, user, isNPC ? NOEXPIRE : expire); + Id = uuid, + FirstName = first, + LastName = last, + HasGridUserTried = true, + IsLocal = true, + HomeURL = string.Empty, + IsUnknownUser = false + }; + m_userCacheByID.Add(uuid, user, NOEXPIRE); } public virtual void AddUser(UUID uuid, string first, string last, string homeURL) @@ -826,7 +819,7 @@ namespace OpenSim.Region.CoreModules.Framework.UserManagement } } - public virtual void AddUser(UUID id, string creatorData) + public virtual void AddCreatorUser(UUID id, string creatorData) { // m_log.InfoFormat("[USER MANAGEMENT MODULE]: Adding user with id {0}, creatorData {1}", id, creatorData); @@ -849,13 +842,8 @@ namespace OpenSim.Region.CoreModules.Framework.UserManagement return; firstname = nameparts[0]; for(int xi = 1; xi < nameparts.Length; ++xi) - { - if(xi != 1) - { - lastname += " "; - } lastname += nameparts[xi]; - } + if (string.IsNullOrWhiteSpace(firstname)) return; if (string.IsNullOrWhiteSpace(lastname)) @@ -865,22 +853,13 @@ namespace OpenSim.Region.CoreModules.Framework.UserManagement return; homeURL = parts[0]; - if(homeURL.Length > 10) - { - string test = homeURL.Substring(10); - int indx = test.IndexOf("/"); - if(indx > 0 && indx != test.Length - 1) - homeURL = homeURL.Substring(0, indx + 10); - } - - bool local; var oldUser = new UserData(); oldUser.Id = id; oldUser.HasGridUserTried = false; oldUser.IsUnknownUser = false; - if (CheckUrl(homeURL, out local, out OSHHTPHost host)) + if (CheckUrl(homeURL, out bool local, out OSHHTPHost host)) { if (local) { @@ -907,7 +886,7 @@ namespace OpenSim.Region.CoreModules.Framework.UserManagement oldUser.HasGridUserTried = true; oldUser.IsUnknownUser = true; } - m_userCacheByID.Add(id, oldUser, int.MaxValue / 16); + m_userCacheByID.Add(id, oldUser, NOEXPIRE); } public bool RemoveUser(UUID uuid) @@ -946,8 +925,8 @@ namespace OpenSim.Region.CoreModules.Framework.UserManagement protected virtual void Init(IConfigSource config) { - AddUser(UUID.Zero, "Unknown", "User", false, NOEXPIRE); - AddUser(Constants.m_MrOpenSimID, "Mr", "Opensim", false, NOEXPIRE); + AddSystemUser(UUID.Zero, "Unknown", "User"); + AddSystemUser(Constants.m_MrOpenSimID, "Mr", "Opensim"); RegisterConsoleCmds(); IConfig userManagementConfig = config.Configs["UserManagement"]; diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/LocalInventoryServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/LocalInventoryServiceConnector.cs index fa36b66986..470272b5a2 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/LocalInventoryServiceConnector.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/LocalInventoryServiceConnector.cs @@ -188,7 +188,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory { foreach (InventoryItemBase item in items) if (!string.IsNullOrEmpty(item.CreatorData)) - UserManager.AddUser(item.CreatorIdAsUuid, item.CreatorData); + UserManager.AddCreatorUser(item.CreatorIdAsUuid, item.CreatorData); }, null, string.Format("GetFolderContent (user {0}, folder {1})", userID, folderID)); } diff --git a/OpenSim/Region/CoreModules/World/Archiver/ArchiveReadRequest.cs b/OpenSim/Region/CoreModules/World/Archiver/ArchiveReadRequest.cs index c4552587ab..68231a91b6 100644 --- a/OpenSim/Region/CoreModules/World/Archiver/ArchiveReadRequest.cs +++ b/OpenSim/Region/CoreModules/World/Archiver/ArchiveReadRequest.cs @@ -682,7 +682,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver part.CreatorID = m_defaultUser; } if (UserManager != null) - UserManager.AddUser(part.CreatorID, part.CreatorData); + UserManager.AddCreatorUser(part.CreatorID, part.CreatorData); if (!(ResolveUserUuid(scene, part.OwnerID) || ResolveGroupUuid(part.OwnerID))) part.OwnerID = m_defaultUser; @@ -727,7 +727,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver } if (UserManager != null) - UserManager.AddUser(kvp.Value.CreatorID, kvp.Value.CreatorData); + UserManager.AddCreatorUser(kvp.Value.CreatorID, kvp.Value.CreatorData); if (!ResolveGroupUuid(kvp.Value.GroupID)) kvp.Value.GroupID = UUID.Zero; diff --git a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs index 8192c06a36..5812c60438 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs @@ -680,7 +680,7 @@ namespace OpenSim.Region.Framework.Scenes IUserManagement uman = RequestModuleInterface(); if (uman != null) - uman.AddUser(item.CreatorIdAsUuid, item.CreatorData); + uman.AddCreatorUser(item.CreatorIdAsUuid, item.CreatorData); if (!Permissions.BypassPermissions()) { diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs index 11422bded6..dd051c267b 100755 --- a/OpenSim/Region/Framework/Scenes/Scene.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.cs @@ -1330,7 +1330,7 @@ namespace OpenSim.Region.Framework.Scenes { tmp = SceneGridInfo.EconomyURL; if (!string.IsNullOrEmpty(tmp)) - fm.AddOpenSimExtraFeature("currency-base-uri", tmp); + fm.AddOpenSimExtraFeature("currency-base-uri", tmp); } } } @@ -3248,11 +3248,12 @@ namespace OpenSim.Region.Framework.Scenes { if (UserManagementModule != null) { - string first = aCircuit.firstname, last = aCircuit.lastname; + string first = aCircuit.firstname; + string last = aCircuit.lastname; if (sp != null && sp.PresenceType == PresenceType.Npc) { - UserManagementModule.AddUser(aCircuit.AgentID, first, last, true); + UserManagementModule.AddNPCUser(aCircuit.AgentID, first, last); } else { @@ -4263,8 +4264,6 @@ namespace OpenSim.Region.Framework.Scenes } else { - // Let the SP know how we got here. This has a lot of interesting - // uses down the line. sp.TeleportFlags = (TPFlags)teleportFlags; if (sp.IsChildAgent) @@ -4294,7 +4293,6 @@ namespace OpenSim.Region.Framework.Scenes CapsModule.ActivateCaps(acd.circuitcode); } - return true; } diff --git a/OpenSim/Services/Interfaces/IUserManagement.cs b/OpenSim/Services/Interfaces/IUserManagement.cs index a88049ff3e..c3b53bb759 100644 --- a/OpenSim/Services/Interfaces/IUserManagement.cs +++ b/OpenSim/Services/Interfaces/IUserManagement.cs @@ -64,8 +64,11 @@ namespace OpenSim.Framework /// UUID.Zero if no user with that name is found or if the name is "Unknown User" UUID GetUserIdByName(string firstName, string lastName); + + void AddSystemUser(UUID uuid, string first, string last); + void AddNPCUser(UUID uuid, string first, string last); /// - /// Add a user. + /// Add a creator user. /// /// /// If an account is found for the UUID, then the names in this will be used rather than any information @@ -73,29 +76,16 @@ namespace OpenSim.Framework /// /// /// The creator data for this user. - void AddUser(UUID uuid, string creatorData); + void AddCreatorUser(UUID uuid, string creatorData); /// /// Add a user. /// /// - /// The UUID is related to the name without any other checks being performed, such as user account presence. /// /// /// - /// - void AddUser(UUID uuid, string first, string last, bool isNPC = false, int expire = 1800000); - - /// - /// Add a user. - /// - /// - /// The arguments apart from uuid are formed into a creatorData string and processing proceeds as for the - /// AddUser(UUID uuid, string creatorData) method. - /// - /// - /// - /// + /// void AddUser(UUID uuid, string firstName, string lastName, string homeURL); bool RemoveUser(UUID uuid); bool IsLocalGridUser(UUID uuid); diff --git a/OpenSim/Services/UserAccountService/UserAccountService.cs b/OpenSim/Services/UserAccountService/UserAccountService.cs index 380a1c60d5..a1356665f6 100755 --- a/OpenSim/Services/UserAccountService/UserAccountService.cs +++ b/OpenSim/Services/UserAccountService/UserAccountService.cs @@ -406,7 +406,7 @@ namespace OpenSim.Services.UserAccountService else break; } - if (String.IsNullOrWhiteSpace(password)) + if (string.IsNullOrWhiteSpace(password)) { MainConsole.Instance.Output("create user aborted"); return;