mirror of
https://github.com/opensim/opensim.git
synced 2026-08-04 08:06:27 +08:00
Add functionality to estate "Allowed Users" and "Allowed Groups". Allowed users
will be honored now, while allowed groups will not. This requires additional groups module integration work
This commit is contained in:
@@ -1217,7 +1217,7 @@ namespace OpenSim.Client.MXP.ClientStack
|
||||
// Need to translate to MXP somehow
|
||||
}
|
||||
|
||||
public void SendEstateManagersList(UUID invoice, UUID[] EstateManagers, uint estateID)
|
||||
public void SendEstateList(UUID invoice, int code, UUID[] Data, uint estateID)
|
||||
{
|
||||
// Need to translate to MXP somehow
|
||||
}
|
||||
|
||||
@@ -760,7 +760,7 @@ namespace OpenSim.Client.Sirikata.ClientStack
|
||||
throw new System.NotImplementedException();
|
||||
}
|
||||
|
||||
public void SendEstateManagersList(UUID invoice, UUID[] EstateManagers, uint estateID)
|
||||
public void SendEstateList(UUID invoice, int code, UUID[] Data, uint estateID)
|
||||
{
|
||||
throw new System.NotImplementedException();
|
||||
}
|
||||
|
||||
@@ -767,7 +767,7 @@ namespace OpenSim.Client.VWoHTTP.ClientStack
|
||||
throw new System.NotImplementedException();
|
||||
}
|
||||
|
||||
public void SendEstateManagersList(UUID invoice, UUID[] EstateManagers, uint estateID)
|
||||
public void SendEstateList(UUID invoice, int code, UUID[] Data, uint estateID)
|
||||
{
|
||||
throw new System.NotImplementedException();
|
||||
}
|
||||
|
||||
@@ -300,6 +300,34 @@ namespace OpenSim.Framework
|
||||
OnSave(this);
|
||||
}
|
||||
|
||||
public void AddEstateUser(UUID avatarID)
|
||||
{
|
||||
if (avatarID == UUID.Zero)
|
||||
return;
|
||||
if (!l_EstateAccess.Contains(avatarID))
|
||||
l_EstateAccess.Add(avatarID);
|
||||
}
|
||||
|
||||
public void RemoveEstateUser(UUID avatarID)
|
||||
{
|
||||
if (l_EstateAccess.Contains(avatarID))
|
||||
l_EstateAccess.Remove(avatarID);
|
||||
}
|
||||
|
||||
public void AddEstateGroup(UUID avatarID)
|
||||
{
|
||||
if (avatarID == UUID.Zero)
|
||||
return;
|
||||
if (!l_EstateGroups.Contains(avatarID))
|
||||
l_EstateGroups.Add(avatarID);
|
||||
}
|
||||
|
||||
public void RemoveEstateGroup(UUID avatarID)
|
||||
{
|
||||
if (l_EstateGroups.Contains(avatarID))
|
||||
l_EstateGroups.Remove(avatarID);
|
||||
}
|
||||
|
||||
public void AddEstateManager(UUID avatarID)
|
||||
{
|
||||
if (avatarID == UUID.Zero)
|
||||
|
||||
@@ -1271,7 +1271,7 @@ namespace OpenSim.Framework
|
||||
void SendHealth(float health);
|
||||
|
||||
|
||||
void SendEstateManagersList(UUID invoice, UUID[] EstateManagers, uint estateID);
|
||||
void SendEstateList(UUID invoice, int code, UUID[] Data, uint estateID);
|
||||
|
||||
void SendBannedUserList(UUID invoice, EstateBan[] banlist, uint estateID);
|
||||
|
||||
|
||||
@@ -3912,7 +3912,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||
return false;
|
||||
}
|
||||
|
||||
public void SendEstateManagersList(UUID invoice, UUID[] EstateManagers, uint estateID)
|
||||
public void SendEstateList(UUID invoice, int code, UUID[] Data, uint estateID)
|
||||
|
||||
{
|
||||
EstateOwnerMessagePacket packet = new EstateOwnerMessagePacket();
|
||||
packet.AgentData.TransactionID = UUID.Random();
|
||||
@@ -3921,26 +3922,26 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||
packet.MethodData.Invoice = invoice;
|
||||
packet.MethodData.Method = Utils.StringToBytes("setaccess");
|
||||
|
||||
EstateOwnerMessagePacket.ParamListBlock[] returnblock = new EstateOwnerMessagePacket.ParamListBlock[6 + EstateManagers.Length];
|
||||
EstateOwnerMessagePacket.ParamListBlock[] returnblock = new EstateOwnerMessagePacket.ParamListBlock[6 + Data.Length];
|
||||
|
||||
for (int i = 0; i < (6 + EstateManagers.Length); i++)
|
||||
for (int i = 0; i < (6 + Data.Length); i++)
|
||||
{
|
||||
returnblock[i] = new EstateOwnerMessagePacket.ParamListBlock();
|
||||
}
|
||||
int j = 0;
|
||||
|
||||
returnblock[j].Parameter = Utils.StringToBytes(estateID.ToString()); j++;
|
||||
returnblock[j].Parameter = Utils.StringToBytes(((int)Constants.EstateAccessCodex.EstateManagers).ToString()); j++;
|
||||
returnblock[j].Parameter = Utils.StringToBytes(code.ToString()); j++;
|
||||
returnblock[j].Parameter = Utils.StringToBytes("0"); j++;
|
||||
returnblock[j].Parameter = Utils.StringToBytes("0"); j++;
|
||||
returnblock[j].Parameter = Utils.StringToBytes("0"); j++;
|
||||
returnblock[j].Parameter = Utils.StringToBytes(EstateManagers.Length.ToString()); j++;
|
||||
for (int i = 0; i < EstateManagers.Length; i++)
|
||||
returnblock[j].Parameter = Utils.StringToBytes(Data.Length.ToString()); j++;
|
||||
for (int i = 0; i < Data.Length; i++)
|
||||
{
|
||||
returnblock[j].Parameter = EstateManagers[i].GetBytes(); j++;
|
||||
returnblock[j].Parameter = Data[i].GetBytes(); j++;
|
||||
}
|
||||
packet.ParamList = returnblock;
|
||||
packet.Header.Reliable = false;
|
||||
packet.Header.Reliable = true;
|
||||
OutPacket(packet, ThrottleOutPacketType.Task);
|
||||
}
|
||||
|
||||
|
||||
@@ -75,10 +75,21 @@ namespace OpenSim.Region.CoreModules.World.Estate
|
||||
m_scene.RegionInfo.EstateSettings.AbuseEmail,
|
||||
estateOwner);
|
||||
|
||||
remote_client.SendEstateManagersList(invoice,
|
||||
remote_client.SendEstateList(invoice,
|
||||
(int)Constants.EstateAccessCodex.EstateManagers,
|
||||
m_scene.RegionInfo.EstateSettings.EstateManagers,
|
||||
m_scene.RegionInfo.EstateSettings.EstateID);
|
||||
|
||||
remote_client.SendEstateList(invoice,
|
||||
(int)Constants.EstateAccessCodex.AccessOptions,
|
||||
m_scene.RegionInfo.EstateSettings.EstateAccess,
|
||||
m_scene.RegionInfo.EstateSettings.EstateID);
|
||||
|
||||
remote_client.SendEstateList(invoice,
|
||||
(int)Constants.EstateAccessCodex.AllowedGroups,
|
||||
m_scene.RegionInfo.EstateSettings.EstateGroups,
|
||||
m_scene.RegionInfo.EstateSettings.EstateID);
|
||||
|
||||
remote_client.SendBannedUserList(invoice,
|
||||
m_scene.RegionInfo.EstateSettings.EstateBans,
|
||||
m_scene.RegionInfo.EstateSettings.EstateID);
|
||||
@@ -233,127 +244,176 @@ namespace OpenSim.Region.CoreModules.World.Estate
|
||||
if (user == m_scene.RegionInfo.MasterAvatarAssignedUUID)
|
||||
return; // never process owner
|
||||
|
||||
switch (estateAccessType)
|
||||
if ((estateAccessType & 4) != 0) // User add
|
||||
{
|
||||
case 64:
|
||||
if (m_scene.Permissions.CanIssueEstateCommand(remote_client.AgentId, false) || m_scene.Permissions.BypassPermissions())
|
||||
if (m_scene.Permissions.CanIssueEstateCommand(remote_client.AgentId, true) || m_scene.Permissions.BypassPermissions())
|
||||
{
|
||||
m_scene.RegionInfo.EstateSettings.AddEstateUser(user);
|
||||
m_scene.RegionInfo.EstateSettings.Save();
|
||||
remote_client.SendEstateList(invoice, (int)Constants.EstateAccessCodex.AccessOptions, m_scene.RegionInfo.EstateSettings.EstateAccess, m_scene.RegionInfo.EstateSettings.EstateID);
|
||||
}
|
||||
else
|
||||
{
|
||||
remote_client.SendAlertMessage("Method EstateAccessDelta Failed, you don't have permissions");
|
||||
}
|
||||
|
||||
}
|
||||
if ((estateAccessType & 8) != 0) // User remove
|
||||
{
|
||||
if (m_scene.Permissions.CanIssueEstateCommand(remote_client.AgentId, true) || m_scene.Permissions.BypassPermissions())
|
||||
{
|
||||
m_scene.RegionInfo.EstateSettings.RemoveEstateUser(user);
|
||||
m_scene.RegionInfo.EstateSettings.Save();
|
||||
|
||||
remote_client.SendEstateList(invoice, (int)Constants.EstateAccessCodex.AccessOptions, m_scene.RegionInfo.EstateSettings.EstateAccess, m_scene.RegionInfo.EstateSettings.EstateID);
|
||||
}
|
||||
else
|
||||
{
|
||||
remote_client.SendAlertMessage("Method EstateAccessDelta Failed, you don't have permissions");
|
||||
}
|
||||
}
|
||||
if ((estateAccessType & 16) != 0) // Group add
|
||||
{
|
||||
if (m_scene.Permissions.CanIssueEstateCommand(remote_client.AgentId, true) || m_scene.Permissions.BypassPermissions())
|
||||
{
|
||||
m_scene.RegionInfo.EstateSettings.AddEstateGroup(user);
|
||||
m_scene.RegionInfo.EstateSettings.Save();
|
||||
remote_client.SendEstateList(invoice, (int)Constants.EstateAccessCodex.AllowedGroups, m_scene.RegionInfo.EstateSettings.EstateAccess, m_scene.RegionInfo.EstateSettings.EstateID);
|
||||
}
|
||||
else
|
||||
{
|
||||
remote_client.SendAlertMessage("Method EstateAccessDelta Failed, you don't have permissions");
|
||||
}
|
||||
}
|
||||
if ((estateAccessType & 32) != 0) // Group remove
|
||||
{
|
||||
if (m_scene.Permissions.CanIssueEstateCommand(remote_client.AgentId, true) || m_scene.Permissions.BypassPermissions())
|
||||
{
|
||||
m_scene.RegionInfo.EstateSettings.RemoveEstateGroup(user);
|
||||
m_scene.RegionInfo.EstateSettings.Save();
|
||||
|
||||
remote_client.SendEstateList(invoice, (int)Constants.EstateAccessCodex.AllowedGroups, m_scene.RegionInfo.EstateSettings.EstateAccess, m_scene.RegionInfo.EstateSettings.EstateID);
|
||||
}
|
||||
else
|
||||
{
|
||||
remote_client.SendAlertMessage("Method EstateAccessDelta Failed, you don't have permissions");
|
||||
}
|
||||
}
|
||||
if ((estateAccessType & 64) != 0) // Ban add
|
||||
{
|
||||
if (m_scene.Permissions.CanIssueEstateCommand(remote_client.AgentId, false) || m_scene.Permissions.BypassPermissions())
|
||||
{
|
||||
EstateBan[] banlistcheck = m_scene.RegionInfo.EstateSettings.EstateBans;
|
||||
|
||||
bool alreadyInList = false;
|
||||
|
||||
for (int i = 0; i < banlistcheck.Length; i++)
|
||||
{
|
||||
EstateBan[] banlistcheck = m_scene.RegionInfo.EstateSettings.EstateBans;
|
||||
|
||||
bool alreadyInList = false;
|
||||
|
||||
for (int i = 0; i < banlistcheck.Length; i++)
|
||||
if (user == banlistcheck[i].BannedUserID)
|
||||
{
|
||||
if (user == banlistcheck[i].BannedUserID)
|
||||
{
|
||||
alreadyInList = true;
|
||||
break;
|
||||
}
|
||||
|
||||
alreadyInList = true;
|
||||
break;
|
||||
}
|
||||
if (!alreadyInList)
|
||||
{
|
||||
|
||||
EstateBan item = new EstateBan();
|
||||
|
||||
item.BannedUserID = user;
|
||||
item.EstateID = m_scene.RegionInfo.EstateSettings.EstateID;
|
||||
item.BannedHostAddress = "0.0.0.0";
|
||||
item.BannedHostIPMask = "0.0.0.0";
|
||||
|
||||
m_scene.RegionInfo.EstateSettings.AddBan(item);
|
||||
m_scene.RegionInfo.EstateSettings.Save();
|
||||
|
||||
ScenePresence s = m_scene.GetScenePresence(user);
|
||||
if (s != null)
|
||||
{
|
||||
if (!s.IsChildAgent)
|
||||
{
|
||||
s.ControllingClient.SendTeleportLocationStart();
|
||||
m_scene.TeleportClientHome(user, s.ControllingClient);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
remote_client.SendAlertMessage("User is already on the region ban list");
|
||||
}
|
||||
//m_scene.RegionInfo.regionBanlist.Add(Manager(user);
|
||||
remote_client.SendBannedUserList(invoice, m_scene.RegionInfo.EstateSettings.EstateBans, m_scene.RegionInfo.EstateSettings.EstateID);
|
||||
}
|
||||
else
|
||||
if (!alreadyInList)
|
||||
{
|
||||
remote_client.SendAlertMessage("Method EstateAccessDelta Failed, you don't have permissions");
|
||||
}
|
||||
break;
|
||||
case 128:
|
||||
if (m_scene.Permissions.CanIssueEstateCommand(remote_client.AgentId, false) || m_scene.Permissions.BypassPermissions())
|
||||
{
|
||||
EstateBan[] banlistcheck = m_scene.RegionInfo.EstateSettings.EstateBans;
|
||||
|
||||
bool alreadyInList = false;
|
||||
EstateBan listitem = null;
|
||||
EstateBan item = new EstateBan();
|
||||
|
||||
for (int i = 0; i < banlistcheck.Length; i++)
|
||||
{
|
||||
if (user == banlistcheck[i].BannedUserID)
|
||||
{
|
||||
alreadyInList = true;
|
||||
listitem = banlistcheck[i];
|
||||
break;
|
||||
}
|
||||
item.BannedUserID = user;
|
||||
item.EstateID = m_scene.RegionInfo.EstateSettings.EstateID;
|
||||
item.BannedHostAddress = "0.0.0.0";
|
||||
item.BannedHostIPMask = "0.0.0.0";
|
||||
|
||||
}
|
||||
if (alreadyInList && listitem != null)
|
||||
{
|
||||
m_scene.RegionInfo.EstateSettings.RemoveBan(listitem.BannedUserID);
|
||||
m_scene.RegionInfo.EstateSettings.Save();
|
||||
}
|
||||
else
|
||||
{
|
||||
remote_client.SendAlertMessage("User is not on the region ban list");
|
||||
}
|
||||
//m_scene.RegionInfo.regionBanlist.Add(Manager(user);
|
||||
remote_client.SendBannedUserList(invoice, m_scene.RegionInfo.EstateSettings.EstateBans, m_scene.RegionInfo.EstateSettings.EstateID);
|
||||
}
|
||||
else
|
||||
{
|
||||
remote_client.SendAlertMessage("Method EstateAccessDelta Failed, you don't have permissions");
|
||||
}
|
||||
break;
|
||||
case 256:
|
||||
|
||||
if (m_scene.Permissions.CanIssueEstateCommand(remote_client.AgentId, true) || m_scene.Permissions.BypassPermissions())
|
||||
{
|
||||
m_scene.RegionInfo.EstateSettings.AddEstateManager(user);
|
||||
m_scene.RegionInfo.EstateSettings.Save();
|
||||
remote_client.SendEstateManagersList(invoice, m_scene.RegionInfo.EstateSettings.EstateManagers, m_scene.RegionInfo.EstateSettings.EstateID);
|
||||
}
|
||||
else
|
||||
{
|
||||
remote_client.SendAlertMessage("Method EstateAccessDelta Failed, you don't have permissions");
|
||||
}
|
||||
|
||||
break;
|
||||
case 512:
|
||||
if (m_scene.Permissions.CanIssueEstateCommand(remote_client.AgentId, true) || m_scene.Permissions.BypassPermissions())
|
||||
{
|
||||
m_scene.RegionInfo.EstateSettings.RemoveEstateManager(user);
|
||||
m_scene.RegionInfo.EstateSettings.AddBan(item);
|
||||
m_scene.RegionInfo.EstateSettings.Save();
|
||||
|
||||
remote_client.SendEstateManagersList(invoice, m_scene.RegionInfo.EstateSettings.EstateManagers, m_scene.RegionInfo.EstateSettings.EstateID);
|
||||
ScenePresence s = m_scene.GetScenePresence(user);
|
||||
if (s != null)
|
||||
{
|
||||
if (!s.IsChildAgent)
|
||||
{
|
||||
s.ControllingClient.SendTeleportLocationStart();
|
||||
m_scene.TeleportClientHome(user, s.ControllingClient);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
remote_client.SendAlertMessage("Method EstateAccessDelta Failed, you don't have permissions");
|
||||
remote_client.SendAlertMessage("User is already on the region ban list");
|
||||
}
|
||||
break;
|
||||
//m_scene.RegionInfo.regionBanlist.Add(Manager(user);
|
||||
remote_client.SendBannedUserList(invoice, m_scene.RegionInfo.EstateSettings.EstateBans, m_scene.RegionInfo.EstateSettings.EstateID);
|
||||
}
|
||||
else
|
||||
{
|
||||
remote_client.SendAlertMessage("Method EstateAccessDelta Failed, you don't have permissions");
|
||||
}
|
||||
}
|
||||
if ((estateAccessType & 128) != 0) // Ban remove
|
||||
{
|
||||
if (m_scene.Permissions.CanIssueEstateCommand(remote_client.AgentId, false) || m_scene.Permissions.BypassPermissions())
|
||||
{
|
||||
EstateBan[] banlistcheck = m_scene.RegionInfo.EstateSettings.EstateBans;
|
||||
|
||||
default:
|
||||
bool alreadyInList = false;
|
||||
EstateBan listitem = null;
|
||||
|
||||
m_log.ErrorFormat("EstateOwnerMessage: Unknown EstateAccessType requested in estateAccessDelta: {0}", estateAccessType.ToString());
|
||||
break;
|
||||
for (int i = 0; i < banlistcheck.Length; i++)
|
||||
{
|
||||
if (user == banlistcheck[i].BannedUserID)
|
||||
{
|
||||
alreadyInList = true;
|
||||
listitem = banlistcheck[i];
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
if (alreadyInList && listitem != null)
|
||||
{
|
||||
m_scene.RegionInfo.EstateSettings.RemoveBan(listitem.BannedUserID);
|
||||
m_scene.RegionInfo.EstateSettings.Save();
|
||||
}
|
||||
else
|
||||
{
|
||||
remote_client.SendAlertMessage("User is not on the region ban list");
|
||||
}
|
||||
//m_scene.RegionInfo.regionBanlist.Add(Manager(user);
|
||||
remote_client.SendBannedUserList(invoice, m_scene.RegionInfo.EstateSettings.EstateBans, m_scene.RegionInfo.EstateSettings.EstateID);
|
||||
}
|
||||
else
|
||||
{
|
||||
remote_client.SendAlertMessage("Method EstateAccessDelta Failed, you don't have permissions");
|
||||
}
|
||||
}
|
||||
if ((estateAccessType & 256) != 0) // Manager add
|
||||
{
|
||||
if (m_scene.Permissions.CanIssueEstateCommand(remote_client.AgentId, true) || m_scene.Permissions.BypassPermissions())
|
||||
{
|
||||
m_scene.RegionInfo.EstateSettings.AddEstateManager(user);
|
||||
m_scene.RegionInfo.EstateSettings.Save();
|
||||
remote_client.SendEstateList(invoice, (int)Constants.EstateAccessCodex.EstateManagers, m_scene.RegionInfo.EstateSettings.EstateManagers, m_scene.RegionInfo.EstateSettings.EstateID);
|
||||
}
|
||||
else
|
||||
{
|
||||
remote_client.SendAlertMessage("Method EstateAccessDelta Failed, you don't have permissions");
|
||||
}
|
||||
}
|
||||
if ((estateAccessType & 512) != 0) // Manager remove
|
||||
{
|
||||
if (m_scene.Permissions.CanIssueEstateCommand(remote_client.AgentId, true) || m_scene.Permissions.BypassPermissions())
|
||||
{
|
||||
m_scene.RegionInfo.EstateSettings.RemoveEstateManager(user);
|
||||
m_scene.RegionInfo.EstateSettings.Save();
|
||||
|
||||
remote_client.SendEstateList(invoice, (int)Constants.EstateAccessCodex.EstateManagers, m_scene.RegionInfo.EstateSettings.EstateManagers, m_scene.RegionInfo.EstateSettings.EstateID);
|
||||
}
|
||||
else
|
||||
{
|
||||
remote_client.SendAlertMessage("Method EstateAccessDelta Failed, you don't have permissions");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -879,7 +879,7 @@ namespace OpenSim.Region.Examples.SimpleModule
|
||||
{
|
||||
}
|
||||
|
||||
public void SendEstateManagersList(UUID invoice, UUID[] EstateManagers, uint estateID)
|
||||
public void SendEstateList(UUID invoice, int code, UUID[] Data, uint estateID)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
@@ -1220,7 +1220,7 @@ namespace OpenSim.Region.OptionalModules.Agent.InternetRelayClientView.Server
|
||||
|
||||
}
|
||||
|
||||
public void SendEstateManagersList(UUID invoice, UUID[] EstateManagers, uint estateID)
|
||||
public void SendEstateList(UUID invoice, int code, UUID[] Data, uint estateID)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
@@ -897,7 +897,7 @@ namespace OpenSim.Region.OptionalModules.World.NPC
|
||||
{
|
||||
}
|
||||
|
||||
public void SendEstateManagersList(UUID invoice, UUID[] EstateManagers, uint estateID)
|
||||
public void SendEstateList(UUID invoice, int code, UUID[] Data, uint estateID)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
@@ -924,7 +924,7 @@ namespace OpenSim.Tests.Common.Mock
|
||||
{
|
||||
}
|
||||
|
||||
public void SendEstateManagersList(UUID invoice, UUID[] EstateManagers, uint estateID)
|
||||
public void SendEstateList(UUID invoice, int code, UUID[] Data, uint estateID)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user