From fa1d79533e22266f8ee7f1aa4d93a3f7fba0e230 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Mon, 7 Sep 2009 19:57:44 +0100
Subject: Only allow iar load/save if user is logged in to the region simulator
---
.../Inventory/Archiver/InventoryArchiverModule.cs | 128 +++++++++++++++++----
.../Archiver/Tests/InventoryArchiverTests.cs | 10 +-
.../Interfaces/IInventoryArchiverModule.cs | 10 +-
3 files changed, 116 insertions(+), 32 deletions(-)
(limited to 'OpenSim/Region')
diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverModule.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverModule.cs
index 3869de2..2340fad 100644
--- a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverModule.cs
@@ -51,6 +51,11 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
public string Name { get { return "Inventory Archiver Module"; } }
public bool IsSharedModule { get { return true; } }
+
+ ///
+ /// Enable or disable checking whether the iar user is actually logged in
+ ///
+ public bool DisablePresenceChecks { get; set; }
public event InventoryArchiveSaved OnInventoryArchiveSaved;
@@ -70,6 +75,13 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
private Dictionary m_scenes = new Dictionary();
private Scene m_aScene;
+ public InventoryArchiverModule() {}
+
+ public InventoryArchiverModule(bool disablePresenceChecks)
+ {
+ DisablePresenceChecks = disablePresenceChecks;
+ }
+
public void Initialise(Scene scene, IConfigSource source)
{
if (m_scenes.Count == 0)
@@ -109,29 +121,57 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
handlerInventoryArchiveSaved(id, succeeded, userInfo, invPath, saveStream, reportedException);
}
- public void ArchiveInventory(Guid id, string firstName, string lastName, string invPath, Stream saveStream)
+ public bool ArchiveInventory(Guid id, string firstName, string lastName, string invPath, Stream saveStream)
{
if (m_scenes.Count > 0)
{
CachedUserInfo userInfo = GetUserInfo(firstName, lastName);
if (userInfo != null)
- new InventoryArchiveWriteRequest(id, this, m_aScene, userInfo, invPath, saveStream).Execute();
- }
+ {
+ if (CheckPresence(userInfo.UserProfile.ID))
+ {
+ new InventoryArchiveWriteRequest(id, this, m_aScene, userInfo, invPath, saveStream).Execute();
+ return true;
+ }
+ else
+ {
+ m_log.ErrorFormat(
+ "[INVENTORY ARCHIVER]: User {0} {1} not logged in to this region simulator",
+ userInfo.UserProfile.Name, userInfo.UserProfile.ID);
+ }
+ }
+ }
+
+ return false;
}
- public void ArchiveInventory(Guid id, string firstName, string lastName, string invPath, string savePath)
+ public bool ArchiveInventory(Guid id, string firstName, string lastName, string invPath, string savePath)
{
if (m_scenes.Count > 0)
{
CachedUserInfo userInfo = GetUserInfo(firstName, lastName);
if (userInfo != null)
- new InventoryArchiveWriteRequest(id, this, m_aScene, userInfo, invPath, savePath).Execute();
- }
+ {
+ if (CheckPresence(userInfo.UserProfile.ID))
+ {
+ new InventoryArchiveWriteRequest(id, this, m_aScene, userInfo, invPath, savePath).Execute();
+ return true;
+ }
+ else
+ {
+ m_log.ErrorFormat(
+ "[INVENTORY ARCHIVER]: User {0} {1} not logged in to this region simulator",
+ userInfo.UserProfile.Name, userInfo.UserProfile.ID);
+ }
+ }
+ }
+
+ return false;
}
- public void DearchiveInventory(string firstName, string lastName, string invPath, Stream loadStream)
+ public bool DearchiveInventory(string firstName, string lastName, string invPath, Stream loadStream)
{
if (m_scenes.Count > 0)
{
@@ -139,14 +179,27 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
if (userInfo != null)
{
- InventoryArchiveReadRequest request =
- new InventoryArchiveReadRequest(m_aScene, userInfo, invPath, loadStream);
- UpdateClientWithLoadedNodes(userInfo, request.Execute());
+ if (CheckPresence(userInfo.UserProfile.ID))
+ {
+ InventoryArchiveReadRequest request =
+ new InventoryArchiveReadRequest(m_aScene, userInfo, invPath, loadStream);
+ UpdateClientWithLoadedNodes(userInfo, request.Execute());
+
+ return true;
+ }
+ else
+ {
+ m_log.ErrorFormat(
+ "[INVENTORY ARCHIVER]: User {0} {1} not logged in to this region simulator",
+ userInfo.UserProfile.Name, userInfo.UserProfile.ID);
+ }
}
- }
+ }
+
+ return false;
}
- public void DearchiveInventory(string firstName, string lastName, string invPath, string loadPath)
+ public bool DearchiveInventory(string firstName, string lastName, string invPath, string loadPath)
{
if (m_scenes.Count > 0)
{
@@ -154,11 +207,24 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
if (userInfo != null)
{
- InventoryArchiveReadRequest request =
- new InventoryArchiveReadRequest(m_aScene, userInfo, invPath, loadPath);
- UpdateClientWithLoadedNodes(userInfo, request.Execute());
- }
- }
+ if (CheckPresence(userInfo.UserProfile.ID))
+ {
+ InventoryArchiveReadRequest request =
+ new InventoryArchiveReadRequest(m_aScene, userInfo, invPath, loadPath);
+ UpdateClientWithLoadedNodes(userInfo, request.Execute());
+
+ return true;
+ }
+ else
+ {
+ m_log.ErrorFormat(
+ "[INVENTORY ARCHIVER]: User {0} {1} not logged in to this region simulator",
+ userInfo.UserProfile.Name, userInfo.UserProfile.ID);
+ }
+ }
+ }
+
+ return false;
}
///
@@ -183,11 +249,10 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
"[INVENTORY ARCHIVER]: Loading archive {0} to inventory path {1} for {2} {3}",
loadPath, invPath, firstName, lastName);
- DearchiveInventory(firstName, lastName, invPath, loadPath);
-
- m_log.InfoFormat(
- "[INVENTORY ARCHIVER]: Loaded archive {0} for {1} {2}",
- loadPath, firstName, lastName);
+ if (DearchiveInventory(firstName, lastName, invPath, loadPath))
+ m_log.InfoFormat(
+ "[INVENTORY ARCHIVER]: Loaded archive {0} for {1} {2}",
+ loadPath, firstName, lastName);
}
///
@@ -291,5 +356,24 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
}
}
}
+
+ ///
+ /// Check if the given user is present in any of the scenes.
+ ///
+ /// The user to check
+ /// true if the user is in any of the scenes, false otherwise
+ protected bool CheckPresence(UUID userId)
+ {
+ if (DisablePresenceChecks)
+ return true;
+
+ foreach (Scene scene in m_scenes.Values)
+ {
+ if (scene.GetScenePresence(userId) != null)
+ return true;
+ }
+
+ return false;
+ }
}
}
diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/Tests/InventoryArchiverTests.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/Tests/InventoryArchiverTests.cs
index c21adef..d579a81 100644
--- a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/Tests/InventoryArchiverTests.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/Tests/InventoryArchiverTests.cs
@@ -83,7 +83,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests
TestHelper.InMethod();
log4net.Config.XmlConfigurator.Configure();
- InventoryArchiverModule archiverModule = new InventoryArchiverModule();
+ InventoryArchiverModule archiverModule = new InventoryArchiverModule(true);
Scene scene = SceneSetupHelpers.SetupScene("Inventory");
SceneSetupHelpers.SetupSceneModules(scene, archiverModule);
@@ -100,9 +100,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests
cm, userFirstName, userLastName, userId, InventoryReceived);
Monitor.Wait(this, 60000);
}
-
- Console.WriteLine("here");
-
+
// Create asset
SceneObjectGroup object1;
SceneObjectPart part1;
@@ -248,7 +246,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests
MemoryStream archiveReadStream = new MemoryStream(archiveWriteStream.ToArray());
SerialiserModule serialiserModule = new SerialiserModule();
- InventoryArchiverModule archiverModule = new InventoryArchiverModule();
+ InventoryArchiverModule archiverModule = new InventoryArchiverModule(true);
// Annoyingly, we have to set up a scene even though inventory loading has nothing to do with a scene
Scene scene = SceneSetupHelpers.SetupScene("inventory");
@@ -318,7 +316,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests
MemoryStream archiveReadStream = new MemoryStream(archiveWriteStream.ToArray());
SerialiserModule serialiserModule = new SerialiserModule();
- InventoryArchiverModule archiverModule = new InventoryArchiverModule();
+ InventoryArchiverModule archiverModule = new InventoryArchiverModule(true);
// Annoyingly, we have to set up a scene even though inventory loading has nothing to do with a scene
Scene scene = SceneSetupHelpers.SetupScene();
diff --git a/OpenSim/Region/Framework/Interfaces/IInventoryArchiverModule.cs b/OpenSim/Region/Framework/Interfaces/IInventoryArchiverModule.cs
index 457b5b8..ca7abf8 100644
--- a/OpenSim/Region/Framework/Interfaces/IInventoryArchiverModule.cs
+++ b/OpenSim/Region/Framework/Interfaces/IInventoryArchiverModule.cs
@@ -56,8 +56,9 @@ namespace OpenSim.Region.Framework.Interfaces
///
///
/// The inventory path in which to place the loaded folders and items
- /// The stream from which the inventory archive will be loaded
- void DearchiveInventory(string firstName, string lastName, string invPath, Stream loadStream);
+ /// The stream from which the inventory archive will be loaded
+ /// true if the first stage of the operation succeeded, false otherwise
+ bool DearchiveInventory(string firstName, string lastName, string invPath, Stream loadStream);
///
/// Archive a user's inventory folder to the given stream
@@ -67,6 +68,7 @@ namespace OpenSim.Region.Framework.Interfaces
///
/// The inventory path from which the inventory should be saved.
/// The stream to which the inventory archive will be saved
- void ArchiveInventory(Guid id, string firstName, string lastName, string invPath, Stream saveStream);
+ /// true if the first stage of the operation succeeded, false otherwise
+ bool ArchiveInventory(Guid id, string firstName, string lastName, string invPath, Stream saveStream);
}
-}
+}
\ No newline at end of file
--
cgit v1.1