split usermanagement adduser into simpler per case methods

This commit is contained in:
UbitUmarov
2020-11-26 12:14:00 +00:00
parent fe33ace3b2
commit 9d0d82ab6e
10 changed files with 72 additions and 107 deletions

View File

@@ -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<string>(config, "GatekeeperURI", sections, String.Empty);
string gatekeeper = Util.GetConfigVarFromSections<string>(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<string>(config, "HomeURIAlias", sections, String.Empty);
string homeAlias = Util.GetConfigVarFromSections<string>(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;

View File

@@ -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)

View File

@@ -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)

View File

@@ -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"];

View File

@@ -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));
}

View File

@@ -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;

View File

@@ -680,7 +680,7 @@ namespace OpenSim.Region.Framework.Scenes
IUserManagement uman = RequestModuleInterface<IUserManagement>();
if (uman != null)
uman.AddUser(item.CreatorIdAsUuid, item.CreatorData);
uman.AddCreatorUser(item.CreatorIdAsUuid, item.CreatorData);
if (!Permissions.BypassPermissions())
{

View File

@@ -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;
}

View File

@@ -64,8 +64,11 @@ namespace OpenSim.Framework
/// <returns>UUID.Zero if no user with that name is found or if the name is "Unknown User"</returns>
UUID GetUserIdByName(string firstName, string lastName);
void AddSystemUser(UUID uuid, string first, string last);
void AddNPCUser(UUID uuid, string first, string last);
/// <summary>
/// Add a user.
/// Add a creator user.
/// </summary>
/// <remarks>
/// 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
/// </remarks>
/// <param name="uuid"></param>
/// <param name="creatorData">The creator data for this user.</param>
void AddUser(UUID uuid, string creatorData);
void AddCreatorUser(UUID uuid, string creatorData);
/// <summary>
/// Add a user.
/// </summary>
/// <remarks>
/// The UUID is related to the name without any other checks being performed, such as user account presence.
/// </remarks>
/// <param name="uuid"></param>
/// <param name="firstName"></param>
/// <param name="lastName"></param>
void AddUser(UUID uuid, string first, string last, bool isNPC = false, int expire = 1800000);
/// <summary>
/// Add a user.
/// </summary>
/// <remarks>
/// The arguments apart from uuid are formed into a creatorData string and processing proceeds as for the
/// AddUser(UUID uuid, string creatorData) method.
/// </remarks>
/// <param name="uuid"></param>
/// <param name="firstName"></param>
/// <param name="profileURL"></param>
/// <param name="homeURL"></param>
void AddUser(UUID uuid, string firstName, string lastName, string homeURL);
bool RemoveUser(UUID uuid);
bool IsLocalGridUser(UUID uuid);

View File

@@ -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;