diff --git a/.nant/local.include b/.nant/local.include index 0b6f9feafd..0279f257b0 100644 --- a/.nant/local.include +++ b/.nant/local.include @@ -20,6 +20,7 @@ + @@ -29,7 +30,7 @@ - + diff --git a/OpenSim/Framework/Console/ConsoleBase.cs b/OpenSim/Framework/Console/ConsoleBase.cs index b70d1dbdc6..aab920b09a 100755 --- a/OpenSim/Framework/Console/ConsoleBase.cs +++ b/OpenSim/Framework/Console/ConsoleBase.cs @@ -118,7 +118,7 @@ namespace OpenSim.Framework.Console // (Done with no echo and suitable for passwords) public string PasswdPrompt(string p) { - return ReadLine(p, false, false); + return ReadLine(String.Format("{0}: ", p), false, false); } public virtual string ReadLine(string p, bool isCommand, bool e) diff --git a/OpenSim/Services/Connectors/SimianGrid/SimianProfiles.cs b/OpenSim/Services/Connectors/SimianGrid/SimianProfiles.cs index fbf4648155..704790ee28 100644 --- a/OpenSim/Services/Connectors/SimianGrid/SimianProfiles.cs +++ b/OpenSim/Services/Connectors/SimianGrid/SimianProfiles.cs @@ -88,7 +88,7 @@ namespace OpenSim.Services.Connectors.SimianGrid public void Initialise(IConfigSource source) { - if (Simian.IsSimianEnabled(source, "UserAccountServices", this.Name)) + if (Simian.IsSimianEnabled(source, "UserAccountServices", "SimianUserAccountServiceConnector")) { IConfig gridConfig = source.Configs["UserAccountService"]; if (gridConfig == null) @@ -108,6 +108,23 @@ namespace OpenSim.Services.Connectors.SimianGrid serviceUrl = serviceUrl + '/'; m_serverUrl = serviceUrl; + IConfig profilesConfig = source.Configs["Profiles"]; + if (profilesConfig == null) + { + // Do not run this module by default. + return; + } + else + { + // if profiles aren't enabled, we're not needed. + // if we're not specified as the connector to use, then we're not wanted + if (profilesConfig.GetString("Module", String.Empty) != Name) + { + + return; + } + m_log.InfoFormat("[SIMIAN ACCOUNT CONNECTOR]: Initializing {0}", this.Name); + } } } @@ -135,6 +152,7 @@ namespace OpenSim.Services.Connectors.SimianGrid // Profiles client.OnRequestAvatarProperties += RequestAvatarPropertiesHandler; + client.OnUpdateAvatarProperties += UpdateAvatarPropertiesHandler; client.OnAvatarInterestUpdate += AvatarInterestUpdateHandler; client.OnUserInfoRequest += UserInfoRequestHandler; @@ -302,12 +320,25 @@ namespace OpenSim.Services.Connectors.SimianGrid System.Globalization.CultureInfo.InvariantCulture), charterMember, about["FLAbout"].AsString(), (uint)flags, about["FLImage"].AsUUID(), about["Image"].AsUUID(), about["URL"].AsString(), user["Partner"].AsUUID()); + OSDMap interests = null; + if (user.ContainsKey("LLInterests")) + { + try + { + interests = OSDParser.DeserializeJson(user["LLInterests"].AsString()) as OSDMap; + client.SendAvatarInterestsReply(avatarID, interests["WantMask"].AsUInteger(), interests["WantText"].AsString(), interests["SkillsMask"].AsUInteger(), interests["SkillsText"].AsString(), interests["languages"].AsString()); + } + catch { } + } + + if (about == null) + about = new OSDMap(0); } else { m_log.Warn("[SIMIAN PROFILES]: Failed to fetch profile information for " + client.Name + ", returning default values"); client.SendAvatarProperties(avatarID, String.Empty, "1/1/1970", Utils.EmptyBytes, - String.Empty, (uint)flags, UUID.Zero, UUID.Zero, String.Empty, UUID.Zero); + String.Empty, (uint)flags, UUID.Zero, UUID.Zero, String.Empty, UUID.Zero); } } diff --git a/OpenSim/Services/InventoryService/XInventoryService.cs b/OpenSim/Services/InventoryService/XInventoryService.cs index bb24292bf2..f581f76d90 100644 --- a/OpenSim/Services/InventoryService/XInventoryService.cs +++ b/OpenSim/Services/InventoryService/XInventoryService.cs @@ -45,6 +45,7 @@ namespace OpenSim.Services.InventoryService MethodBase.GetCurrentMethod().DeclaringType); protected IXInventoryData m_Database; + protected bool m_AllowDelete = true; public XInventoryService(IConfigSource config) : base(config) { @@ -60,6 +61,7 @@ namespace OpenSim.Services.InventoryService { dllName = authConfig.GetString("StorageProvider", dllName); connString = authConfig.GetString("ConnectionString", connString); + m_AllowDelete = authConfig.GetBoolean("AllowDelete", true); // realm = authConfig.GetString("Realm", realm); } @@ -304,10 +306,15 @@ namespace OpenSim.Services.InventoryService // public virtual bool DeleteFolders(UUID principalID, List folderIDs) { + if (!m_AllowDelete) + return false; + // Ignore principal ID, it's bogus at connector level // foreach (UUID id in folderIDs) { + if (!ParentIsTrash(id)) + continue; InventoryFolderBase f = new InventoryFolderBase(); f.ID = id; PurgeFolder(f); @@ -319,6 +326,12 @@ namespace OpenSim.Services.InventoryService public virtual bool PurgeFolder(InventoryFolderBase folder) { + if (!m_AllowDelete) + return false; + + if (!ParentIsTrash(folder.ID)) + return false; + XInventoryFolder[] subFolders = m_Database.GetFolders( new string[] { "parentFolderID" }, new string[] { folder.ID.ToString() }); @@ -358,6 +371,9 @@ namespace OpenSim.Services.InventoryService public virtual bool DeleteItems(UUID principalID, List itemIDs) { + if (!m_AllowDelete) + return false; + // Just use the ID... *facepalms* // foreach (UUID id in itemIDs) @@ -519,5 +535,29 @@ namespace OpenSim.Services.InventoryService return newItem; } + + private bool ParentIsTrash(UUID folderID) + { + XInventoryFolder[] folder = m_Database.GetFolders(new string[] {"folderID"}, new string[] {folderID.ToString()}); + if (folder.Length < 1) + return false; + + UUID parentFolder = folder[0].parentFolderID; + + while (parentFolder != UUID.Zero) + { + XInventoryFolder[] parent = m_Database.GetFolders(new string[] {"folderID"}, new string[] {parentFolder.ToString()}); + if (parent.Length < 1) + return false; + + if (parent[0].type == (int)AssetType.TrashFolder) + return true; + if (parent[0].type == (int)AssetType.RootFolder) + return false; + + parentFolder = parent[0].parentFolderID; + } + return false; + } } } diff --git a/bin/config-include/SimianGrid.ini b/bin/config-include/SimianGrid.ini index 41deb92db2..65d4ea60df 100644 --- a/bin/config-include/SimianGrid.ini +++ b/bin/config-include/SimianGrid.ini @@ -65,3 +65,6 @@ MessagingModule = GroupsMessagingModule MessagingEnabled = true ServicesConnectorModule = SimianGroupsServicesConnector + +[Profiles] + Module = SimianProfiles