diff options
15 files changed, 168 insertions, 44 deletions
diff --git a/OpenSim/Framework/Communications/Tests/LoginServiceTests.cs b/OpenSim/Framework/Communications/Tests/LoginServiceTests.cs index 3161364..22dcef9 100644 --- a/OpenSim/Framework/Communications/Tests/LoginServiceTests.cs +++ b/OpenSim/Framework/Communications/Tests/LoginServiceTests.cs | |||
@@ -575,5 +575,10 @@ namespace OpenSim.Framework.Communications.Tests | |||
575 | root.ParentID = UUID.Zero; | 575 | root.ParentID = UUID.Zero; |
576 | return root; | 576 | return root; |
577 | } | 577 | } |
578 | |||
579 | public int GetAssetPermissions(UUID userID, UUID assetID) | ||
580 | { | ||
581 | return 1; | ||
582 | } | ||
578 | } | 583 | } |
579 | } | 584 | } |
diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs index a3e275d..6dda5aa 100644 --- a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs +++ b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs | |||
@@ -2156,16 +2156,13 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
2156 | 2156 | ||
2157 | protected void SendBulkUpdateInventoryFolder(InventoryFolderBase folderBase) | 2157 | protected void SendBulkUpdateInventoryFolder(InventoryFolderBase folderBase) |
2158 | { | 2158 | { |
2159 | // XXX: Nasty temporary move that will be resolved shortly | ||
2160 | InventoryFolderImpl folder = (InventoryFolderImpl)folderBase; | ||
2161 | |||
2162 | // We will use the same transaction id for all the separate packets to be sent out in this update. | 2159 | // We will use the same transaction id for all the separate packets to be sent out in this update. |
2163 | UUID transactionId = UUID.Random(); | 2160 | UUID transactionId = UUID.Random(); |
2164 | 2161 | ||
2165 | List<BulkUpdateInventoryPacket.FolderDataBlock> folderDataBlocks | 2162 | List<BulkUpdateInventoryPacket.FolderDataBlock> folderDataBlocks |
2166 | = new List<BulkUpdateInventoryPacket.FolderDataBlock>(); | 2163 | = new List<BulkUpdateInventoryPacket.FolderDataBlock>(); |
2167 | 2164 | ||
2168 | SendBulkUpdateInventoryFolderRecursive(folder, ref folderDataBlocks, transactionId); | 2165 | SendBulkUpdateInventoryFolderRecursive(folderBase, ref folderDataBlocks, transactionId); |
2169 | 2166 | ||
2170 | if (folderDataBlocks.Count > 0) | 2167 | if (folderDataBlocks.Count > 0) |
2171 | { | 2168 | { |
@@ -2191,17 +2188,19 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
2191 | /// <param name="folderDataBlocks"></param> | 2188 | /// <param name="folderDataBlocks"></param> |
2192 | /// <param name="transactionId"></param> | 2189 | /// <param name="transactionId"></param> |
2193 | private void SendBulkUpdateInventoryFolderRecursive( | 2190 | private void SendBulkUpdateInventoryFolderRecursive( |
2194 | InventoryFolderImpl folder, ref List<BulkUpdateInventoryPacket.FolderDataBlock> folderDataBlocks, | 2191 | InventoryFolderBase folder, ref List<BulkUpdateInventoryPacket.FolderDataBlock> folderDataBlocks, |
2195 | UUID transactionId) | 2192 | UUID transactionId) |
2196 | { | 2193 | { |
2197 | folderDataBlocks.Add(GenerateBulkUpdateFolderDataBlock(folder)); | 2194 | folderDataBlocks.Add(GenerateBulkUpdateFolderDataBlock(folder)); |
2198 | 2195 | ||
2199 | const int MAX_ITEMS_PER_PACKET = 5; | 2196 | const int MAX_ITEMS_PER_PACKET = 5; |
2200 | 2197 | ||
2198 | IInventoryService invService = m_scene.RequestModuleInterface<IInventoryService>(); | ||
2201 | // If there are any items then we have to start sending them off in this packet - the next folder will have | 2199 | // If there are any items then we have to start sending them off in this packet - the next folder will have |
2202 | // to be in its own bulk update packet. Also, we can only fit 5 items in a packet (at least this was the limit | 2200 | // to be in its own bulk update packet. Also, we can only fit 5 items in a packet (at least this was the limit |
2203 | // being used on the Linden grid at 20081203). | 2201 | // being used on the Linden grid at 20081203). |
2204 | List<InventoryItemBase> items = folder.RequestListOfItems(); | 2202 | InventoryCollection contents = invService.GetFolderContent(AgentId, folder.ID); // folder.RequestListOfItems(); |
2203 | List<InventoryItemBase> items = contents.Items; | ||
2205 | while (items.Count > 0) | 2204 | while (items.Count > 0) |
2206 | { | 2205 | { |
2207 | BulkUpdateInventoryPacket bulkUpdate | 2206 | BulkUpdateInventoryPacket bulkUpdate |
@@ -2233,8 +2232,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
2233 | folderDataBlocks.Add(GenerateBulkUpdateFolderDataBlock(folder)); | 2232 | folderDataBlocks.Add(GenerateBulkUpdateFolderDataBlock(folder)); |
2234 | } | 2233 | } |
2235 | 2234 | ||
2236 | List<InventoryFolderImpl> subFolders = folder.RequestListOfFolderImpls(); | 2235 | List<InventoryFolderBase> subFolders = contents.Folders; |
2237 | foreach (InventoryFolderImpl subFolder in subFolders) | 2236 | foreach (InventoryFolderBase subFolder in subFolders) |
2238 | { | 2237 | { |
2239 | SendBulkUpdateInventoryFolderRecursive(subFolder, ref folderDataBlocks, transactionId); | 2238 | SendBulkUpdateInventoryFolderRecursive(subFolder, ref folderDataBlocks, transactionId); |
2240 | } | 2239 | } |
diff --git a/OpenSim/Region/CoreModules/Agent/TextureDownload/TextureDownloadModule.cs b/OpenSim/Region/CoreModules/Agent/TextureDownload/TextureDownloadModule.cs index 956dd10..71ff28c 100644 --- a/OpenSim/Region/CoreModules/Agent/TextureDownload/TextureDownloadModule.cs +++ b/OpenSim/Region/CoreModules/Agent/TextureDownload/TextureDownloadModule.cs | |||
@@ -222,8 +222,12 @@ namespace OpenSim.Region.CoreModules.Agent.TextureDownload | |||
222 | if (invService.GetRootFolder(client.AgentId) == null) // Deny no inventory | 222 | if (invService.GetRootFolder(client.AgentId) == null) // Deny no inventory |
223 | return; | 223 | return; |
224 | 224 | ||
225 | if (profile.UserProfile.GodLevel < 200 && profile.RootFolder.FindAsset(e.RequestedAssetID) == null) // Deny if not owned | 225 | // Diva 2009-08-13: this test doesn't make any sense to many devs |
226 | return; | 226 | //if (profile.UserProfile.GodLevel < 200 && profile.RootFolder.FindAsset(e.RequestedAssetID) == null) // Deny if not owned |
227 | //{ | ||
228 | // m_log.WarnFormat("[TEXTURE]: user {0} doesn't have permissions to texture {1}"); | ||
229 | // return; | ||
230 | //} | ||
227 | 231 | ||
228 | m_log.Debug("Texture preview"); | 232 | m_log.Debug("Texture preview"); |
229 | } | 233 | } |
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/BaseInventoryConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/BaseInventoryConnector.cs index 0526bc4..ef5ffe1 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/BaseInventoryConnector.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/BaseInventoryConnector.cs | |||
@@ -82,7 +82,11 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory | |||
82 | /// </summary> | 82 | /// </summary> |
83 | /// <param name="userID"></param> | 83 | /// <param name="userID"></param> |
84 | /// <returns>null if no root folder was found</returns> | 84 | /// <returns>null if no root folder was found</returns> |
85 | public abstract InventoryFolderBase GetRootFolder(UUID userID); | 85 | public InventoryFolderBase GetRootFolder(UUID userID) |
86 | { | ||
87 | // Root folder is here as system type Folder. | ||
88 | return m_cache.GetFolderForType(userID, AssetType.Folder); | ||
89 | } | ||
86 | 90 | ||
87 | public abstract Dictionary<AssetType, InventoryFolderBase> GetSystemFolders(UUID userID); | 91 | public abstract Dictionary<AssetType, InventoryFolderBase> GetSystemFolders(UUID userID); |
88 | 92 | ||
@@ -202,5 +206,6 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory | |||
202 | /// <returns></returns> | 206 | /// <returns></returns> |
203 | public abstract List<InventoryItemBase> GetActiveGestures(UUID userId); | 207 | public abstract List<InventoryItemBase> GetActiveGestures(UUID userId); |
204 | 208 | ||
209 | public abstract int GetAssetPermissions(UUID userID, UUID assetID); | ||
205 | } | 210 | } |
206 | } | 211 | } |
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs index db4e7f4..fd12a57 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs | |||
@@ -263,6 +263,8 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory | |||
263 | folders[(AssetType)folder.Type] = folder; | 263 | folders[(AssetType)folder.Type] = folder; |
264 | } | 264 | } |
265 | m_log.DebugFormat("[HG INVENTORY CONNECTOR]: System folders count for {0}: {1}", userID, folders.Count); | 265 | m_log.DebugFormat("[HG INVENTORY CONNECTOR]: System folders count for {0}: {1}", userID, folders.Count); |
266 | // Put the root folder there, as type Folder | ||
267 | folders[AssetType.Folder] = root; | ||
266 | return folders; | 268 | return folders; |
267 | } | 269 | } |
268 | m_log.DebugFormat("[HG INVENTORY CONNECTOR]: Root folder content not found for {0}", userID); | 270 | m_log.DebugFormat("[HG INVENTORY CONNECTOR]: Root folder content not found for {0}", userID); |
@@ -422,14 +424,21 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory | |||
422 | return false; | 424 | return false; |
423 | } | 425 | } |
424 | 426 | ||
425 | public override InventoryFolderBase GetRootFolder(UUID userID) | 427 | public override List<InventoryItemBase> GetActiveGestures(UUID userId) |
426 | { | 428 | { |
427 | return null; | 429 | return new List<InventoryItemBase>(); |
428 | } | 430 | } |
429 | 431 | ||
430 | public override List<InventoryItemBase> GetActiveGestures(UUID userId) | 432 | public override int GetAssetPermissions(UUID userID, UUID assetID) |
431 | { | 433 | { |
432 | return new List<InventoryItemBase>(); | 434 | if (IsLocalGridUser(userID)) |
435 | return m_GridService.GetAssetPermissions(userID, assetID); | ||
436 | else | ||
437 | { | ||
438 | UUID sessionID = GetSessionID(userID); | ||
439 | string uri = GetUserInventoryURI(userID) + "/" + userID.ToString(); | ||
440 | return m_HGService.GetAssetPermissions(uri, assetID, sessionID); | ||
441 | } | ||
433 | } | 442 | } |
434 | 443 | ||
435 | #endregion | 444 | #endregion |
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/LocalInventoryServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/LocalInventoryServiceConnector.cs index ccf06d1..2fbc5fe 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/LocalInventoryServiceConnector.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/LocalInventoryServiceConnector.cs | |||
@@ -201,8 +201,15 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory | |||
201 | foreach (InventoryFolderBase folder in content.Folders) | 201 | foreach (InventoryFolderBase folder in content.Folders) |
202 | { | 202 | { |
203 | if ((folder.Type != (short)AssetType.Folder) && (folder.Type != (short)AssetType.Unknown)) | 203 | if ((folder.Type != (short)AssetType.Folder) && (folder.Type != (short)AssetType.Unknown)) |
204 | { | ||
205 | m_log.InfoFormat("[INVENTORY CONNECTOR]: folder type {0} ", folder.Type); | ||
204 | folders[(AssetType)folder.Type] = folder; | 206 | folders[(AssetType)folder.Type] = folder; |
207 | } | ||
205 | } | 208 | } |
209 | // Put the root folder there, as type Folder | ||
210 | folders[AssetType.Folder] = root; | ||
211 | m_log.InfoFormat("[INVENTORY CONNECTOR]: root folder is type {0} ", root.Type); | ||
212 | |||
206 | return folders; | 213 | return folders; |
207 | } | 214 | } |
208 | } | 215 | } |
@@ -312,19 +319,14 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory | |||
312 | return m_InventoryService.HasInventoryForUser(userID); | 319 | return m_InventoryService.HasInventoryForUser(userID); |
313 | } | 320 | } |
314 | 321 | ||
315 | /// <summary> | 322 | public override List<InventoryItemBase> GetActiveGestures(UUID userId) |
316 | /// Retrieve the root inventory folder for the given user. | ||
317 | /// </summary> | ||
318 | /// <param name="userID"></param> | ||
319 | /// <returns>null if no root folder was found</returns> | ||
320 | public override InventoryFolderBase GetRootFolder(UUID userID) | ||
321 | { | 323 | { |
322 | return m_InventoryService.GetRootFolder(userID); | 324 | return m_InventoryService.GetActiveGestures(userId); |
323 | } | 325 | } |
324 | 326 | ||
325 | public override List<InventoryItemBase> GetActiveGestures(UUID userId) | 327 | public override int GetAssetPermissions(UUID userID, UUID assetID) |
326 | { | 328 | { |
327 | return m_InventoryService.GetActiveGestures(userId); | 329 | return m_InventoryService.GetAssetPermissions(userID, assetID); |
328 | } | 330 | } |
329 | #endregion IInventoryService | 331 | #endregion IInventoryService |
330 | } | 332 | } |
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteInventoryServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteInventoryServiceConnector.cs index 4f19573..e4bb865 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteInventoryServiceConnector.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteInventoryServiceConnector.cs | |||
@@ -296,16 +296,18 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory | |||
296 | return false; | 296 | return false; |
297 | } | 297 | } |
298 | 298 | ||
299 | public override InventoryFolderBase GetRootFolder(UUID userID) | 299 | public override List<InventoryItemBase> GetActiveGestures(UUID userId) |
300 | { | 300 | { |
301 | return null; | 301 | return new List<InventoryItemBase>(); |
302 | } | 302 | } |
303 | 303 | ||
304 | public override List<InventoryItemBase> GetActiveGestures(UUID userId) | 304 | public override int GetAssetPermissions(UUID userID, UUID assetID) |
305 | { | 305 | { |
306 | return new List<InventoryItemBase>(); | 306 | UUID sessionID = GetSessionID(userID); |
307 | return m_RemoteConnector.GetAssetPermissions(userID.ToString(), assetID, sessionID); | ||
307 | } | 308 | } |
308 | 309 | ||
310 | |||
309 | #endregion | 311 | #endregion |
310 | 312 | ||
311 | private UUID GetSessionID(UUID userID) | 313 | private UUID GetSessionID(UUID userID) |
diff --git a/OpenSim/Server/Handlers/Inventory/InventoryServerInConnector.cs b/OpenSim/Server/Handlers/Inventory/InventoryServerInConnector.cs index 63cf034..30b3cae 100644 --- a/OpenSim/Server/Handlers/Inventory/InventoryServerInConnector.cs +++ b/OpenSim/Server/Handlers/Inventory/InventoryServerInConnector.cs | |||
@@ -153,6 +153,11 @@ namespace OpenSim.Server.Handlers.Inventory | |||
153 | m_httpServer.AddStreamHandler( | 153 | m_httpServer.AddStreamHandler( |
154 | new RestDeserialiseTrustedHandler<Guid, List<InventoryFolderBase>> | 154 | new RestDeserialiseTrustedHandler<Guid, List<InventoryFolderBase>> |
155 | ("POST", "/RootFolders/", GetInventorySkeleton, CheckTrustSource)); | 155 | ("POST", "/RootFolders/", GetInventorySkeleton, CheckTrustSource)); |
156 | |||
157 | m_httpServer.AddStreamHandler( | ||
158 | new RestDeserialiseTrustedHandler<InventoryItemBase, int> | ||
159 | ("POST", "/AssetPermissions/", GetAssetPermissions, CheckTrustSource)); | ||
160 | |||
156 | } | 161 | } |
157 | 162 | ||
158 | #region Wrappers for converting the Guid parameter | 163 | #region Wrappers for converting the Guid parameter |
@@ -185,6 +190,8 @@ namespace OpenSim.Server.Handlers.Inventory | |||
185 | if ((folder.Type != (short)AssetType.Folder) && (folder.Type != (short)AssetType.Unknown)) | 190 | if ((folder.Type != (short)AssetType.Folder) && (folder.Type != (short)AssetType.Unknown)) |
186 | folders[(AssetType)folder.Type] = folder; | 191 | folders[(AssetType)folder.Type] = folder; |
187 | } | 192 | } |
193 | // Put the root folder there, as type Folder | ||
194 | folders[AssetType.Folder] = root; | ||
188 | return folders; | 195 | return folders; |
189 | } | 196 | } |
190 | } | 197 | } |
@@ -235,6 +242,11 @@ namespace OpenSim.Server.Handlers.Inventory | |||
235 | return m_InventoryService.GetInventorySkeleton(userID); | 242 | return m_InventoryService.GetInventorySkeleton(userID); |
236 | } | 243 | } |
237 | 244 | ||
245 | public int GetAssetPermissions(InventoryItemBase item) | ||
246 | { | ||
247 | return m_InventoryService.GetAssetPermissions(item.Owner, item.AssetID); | ||
248 | } | ||
249 | |||
238 | #endregion | 250 | #endregion |
239 | 251 | ||
240 | /// <summary> | 252 | /// <summary> |
diff --git a/OpenSim/Services/Connectors/Inventory/HGInventoryServiceConnector.cs b/OpenSim/Services/Connectors/Inventory/HGInventoryServiceConnector.cs index f6d1500..94b4ad9 100644 --- a/OpenSim/Services/Connectors/Inventory/HGInventoryServiceConnector.cs +++ b/OpenSim/Services/Connectors/Inventory/HGInventoryServiceConnector.cs | |||
@@ -149,7 +149,7 @@ namespace OpenSim.Services.Connectors.Inventory | |||
149 | /// <returns></returns> | 149 | /// <returns></returns> |
150 | public InventoryCollection GetFolderContent(string id, UUID folderID, UUID sessionID) | 150 | public InventoryCollection GetFolderContent(string id, UUID folderID, UUID sessionID) |
151 | { | 151 | { |
152 | m_log.Debug("[HGInventory]: GetSystemFolders " + id); | 152 | m_log.Debug("[HGInventory]: GetFolderContent " + id); |
153 | string url = string.Empty; | 153 | string url = string.Empty; |
154 | string userID = string.Empty; | 154 | string userID = string.Empty; |
155 | 155 | ||
@@ -279,5 +279,17 @@ namespace OpenSim.Services.Connectors.Inventory | |||
279 | return null; | 279 | return null; |
280 | } | 280 | } |
281 | 281 | ||
282 | public int GetAssetPermissions(string id, UUID assetID, UUID sessionID) | ||
283 | { | ||
284 | string url = string.Empty; | ||
285 | string userID = string.Empty; | ||
286 | |||
287 | if (StringToUrlAndUserID(id, out url, out userID)) | ||
288 | { | ||
289 | ISessionAuthInventoryService connector = GetConnector(url); | ||
290 | return connector.GetAssetPermissions(userID, assetID, sessionID); | ||
291 | } | ||
292 | return 0; | ||
293 | } | ||
282 | } | 294 | } |
283 | } | 295 | } |
diff --git a/OpenSim/Services/Connectors/Inventory/ISessionAuthInventoryService.cs b/OpenSim/Services/Connectors/Inventory/ISessionAuthInventoryService.cs index 973cb0a..f50bcf5 100644 --- a/OpenSim/Services/Connectors/Inventory/ISessionAuthInventoryService.cs +++ b/OpenSim/Services/Connectors/Inventory/ISessionAuthInventoryService.cs | |||
@@ -120,5 +120,7 @@ namespace OpenSim.Services.Connectors | |||
120 | 120 | ||
121 | InventoryFolderBase QueryFolder(string userID, InventoryFolderBase item, UUID session_id); | 121 | InventoryFolderBase QueryFolder(string userID, InventoryFolderBase item, UUID session_id); |
122 | 122 | ||
123 | int GetAssetPermissions(string userID, UUID assetID, UUID session_id); | ||
124 | |||
123 | } | 125 | } |
124 | } | 126 | } |
diff --git a/OpenSim/Services/Connectors/Inventory/InventoryServiceConnector.cs b/OpenSim/Services/Connectors/Inventory/InventoryServiceConnector.cs index e41b427..4907015 100644 --- a/OpenSim/Services/Connectors/Inventory/InventoryServiceConnector.cs +++ b/OpenSim/Services/Connectors/Inventory/InventoryServiceConnector.cs | |||
@@ -163,21 +163,21 @@ namespace OpenSim.Services.Connectors | |||
163 | /// <returns></returns> | 163 | /// <returns></returns> |
164 | public Dictionary<AssetType, InventoryFolderBase> GetSystemFolders(string userID, UUID sessionID) | 164 | public Dictionary<AssetType, InventoryFolderBase> GetSystemFolders(string userID, UUID sessionID) |
165 | { | 165 | { |
166 | // !!! Not just yet. | 166 | try |
167 | //try | 167 | { |
168 | //{ | 168 | List<InventoryFolderBase> folders = SynchronousRestSessionObjectPoster<Guid, List<InventoryFolderBase>>.BeginPostObject( |
169 | // List<InventoryFolderBase> folders = SynchronousRestSessionObjectPoster<Guid, List<InventoryFolderBase>>.BeginPostObject( | 169 | "POST", m_ServerURI + "/SystemFolders/", new Guid(userID), sessionID.ToString(), userID.ToString()); |
170 | // "POST", m_ServerURI + "/SystemFolders/", new Guid(userID), sessionID.ToString(), userID.ToString()); | 170 | |
171 | // Dictionary<AssetType, InventoryFolderBase> dFolders = new Dictionary<AssetType, InventoryFolderBase>(); | 171 | Dictionary<AssetType, InventoryFolderBase> dFolders = new Dictionary<AssetType, InventoryFolderBase>(); |
172 | // foreach (InventoryFolderBase f in folders) | 172 | foreach (InventoryFolderBase f in folders) |
173 | // dFolders[(AssetType)f.Type] = f; | 173 | dFolders[(AssetType)f.Type] = f; |
174 | // return dFolders; | 174 | return dFolders; |
175 | //} | 175 | } |
176 | //catch (Exception e) | 176 | catch (Exception e) |
177 | //{ | 177 | { |
178 | // m_log.ErrorFormat("[INVENTORY CONNECTOR]: GetSystemFolders operation failed, {0} {1}", | 178 | m_log.ErrorFormat("[INVENTORY CONNECTOR]: GetSystemFolders operation failed, {0} {1}", |
179 | // e.Source, e.Message); | 179 | e.Source, e.Message); |
180 | //} | 180 | } |
181 | 181 | ||
182 | return new Dictionary<AssetType, InventoryFolderBase>(); | 182 | return new Dictionary<AssetType, InventoryFolderBase>(); |
183 | } | 183 | } |
@@ -348,6 +348,25 @@ namespace OpenSim.Services.Connectors | |||
348 | return null; | 348 | return null; |
349 | } | 349 | } |
350 | 350 | ||
351 | public int GetAssetPermissions(string userID, UUID assetID, UUID sessionID) | ||
352 | { | ||
353 | try | ||
354 | { | ||
355 | InventoryItemBase item = new InventoryItemBase(); | ||
356 | item.Owner = new UUID(userID); | ||
357 | item.AssetID = assetID; | ||
358 | return SynchronousRestSessionObjectPoster<InventoryItemBase, int>.BeginPostObject( | ||
359 | "POST", m_ServerURI + "/AssetPermissions/", item, sessionID.ToString(), userID); | ||
360 | } | ||
361 | catch (Exception e) | ||
362 | { | ||
363 | m_log.ErrorFormat("[INVENTORY CONNECTOR]: AssetPermissions operation failed, {0} {1}", | ||
364 | e.Source, e.Message); | ||
365 | } | ||
366 | |||
367 | return 0; | ||
368 | } | ||
369 | |||
351 | #endregion | 370 | #endregion |
352 | 371 | ||
353 | /// <summary> | 372 | /// <summary> |
diff --git a/OpenSim/Services/Connectors/Inventory/QuickAndDirtyInventoryServiceConnector.cs b/OpenSim/Services/Connectors/Inventory/QuickAndDirtyInventoryServiceConnector.cs index 41aacd0..5cbd307 100644 --- a/OpenSim/Services/Connectors/Inventory/QuickAndDirtyInventoryServiceConnector.cs +++ b/OpenSim/Services/Connectors/Inventory/QuickAndDirtyInventoryServiceConnector.cs | |||
@@ -176,5 +176,10 @@ namespace OpenSim.Services.Connectors | |||
176 | return null; | 176 | return null; |
177 | } | 177 | } |
178 | 178 | ||
179 | public int GetAssetPermissions(UUID userID, UUID assetID) | ||
180 | { | ||
181 | return 0; | ||
182 | } | ||
183 | |||
179 | } | 184 | } |
180 | } | 185 | } |
diff --git a/OpenSim/Services/Interfaces/IInventoryService.cs b/OpenSim/Services/Interfaces/IInventoryService.cs index 6256c32..a89a238 100644 --- a/OpenSim/Services/Interfaces/IInventoryService.cs +++ b/OpenSim/Services/Interfaces/IInventoryService.cs | |||
@@ -149,8 +149,18 @@ namespace OpenSim.Services.Interfaces | |||
149 | /// <returns>true if the item was successfully deleted</returns> | 149 | /// <returns>true if the item was successfully deleted</returns> |
150 | bool DeleteItem(InventoryItemBase item); | 150 | bool DeleteItem(InventoryItemBase item); |
151 | 151 | ||
152 | /// <summary> | ||
153 | /// Get an item, given by its UUID | ||
154 | /// </summary> | ||
155 | /// <param name="item"></param> | ||
156 | /// <returns></returns> | ||
152 | InventoryItemBase GetItem(InventoryItemBase item); | 157 | InventoryItemBase GetItem(InventoryItemBase item); |
153 | 158 | ||
159 | /// <summary> | ||
160 | /// Get a folder, given by its UUID | ||
161 | /// </summary> | ||
162 | /// <param name="folder"></param> | ||
163 | /// <returns></returns> | ||
154 | InventoryFolderBase GetFolder(InventoryFolderBase folder); | 164 | InventoryFolderBase GetFolder(InventoryFolderBase folder); |
155 | 165 | ||
156 | /// <summary> | 166 | /// <summary> |
@@ -166,5 +176,15 @@ namespace OpenSim.Services.Interfaces | |||
166 | /// <param name="userId"></param> | 176 | /// <param name="userId"></param> |
167 | /// <returns></returns> | 177 | /// <returns></returns> |
168 | List<InventoryItemBase> GetActiveGestures(UUID userId); | 178 | List<InventoryItemBase> GetActiveGestures(UUID userId); |
179 | |||
180 | /// <summary> | ||
181 | /// Get the union of permissions of all inventory items | ||
182 | /// that hold the given assetID. | ||
183 | /// </summary> | ||
184 | /// <param name="userID"></param> | ||
185 | /// <param name="assetID"></param> | ||
186 | /// <returns>The permissions or 0 if no such asset is found in | ||
187 | /// the user's inventory</returns> | ||
188 | int GetAssetPermissions(UUID userID, UUID assetID); | ||
169 | } | 189 | } |
170 | } | 190 | } |
diff --git a/OpenSim/Services/InventoryService/InventoryService.cs b/OpenSim/Services/InventoryService/InventoryService.cs index 3d706dc..65c2d96 100644 --- a/OpenSim/Services/InventoryService/InventoryService.cs +++ b/OpenSim/Services/InventoryService/InventoryService.cs | |||
@@ -465,6 +465,29 @@ namespace OpenSim.Services.InventoryService | |||
465 | return null; | 465 | return null; |
466 | } | 466 | } |
467 | 467 | ||
468 | public int GetAssetPermissions(UUID userID, UUID assetID) | ||
469 | { | ||
470 | InventoryFolderBase parent = GetRootFolder(userID); | ||
471 | return FindAssetPerms(parent, assetID); | ||
472 | } | ||
473 | |||
474 | private int FindAssetPerms(InventoryFolderBase folder, UUID assetID) | ||
475 | { | ||
476 | InventoryCollection contents = GetFolderContent(folder.Owner, folder.ID); | ||
477 | |||
478 | int perms = 0; | ||
479 | foreach (InventoryItemBase item in contents.Items) | ||
480 | { | ||
481 | if (item.AssetID == assetID) | ||
482 | perms = (int)item.CurrentPermissions | perms; | ||
483 | } | ||
484 | |||
485 | foreach (InventoryFolderBase subfolder in contents.Folders) | ||
486 | perms = perms | FindAssetPerms(subfolder, assetID); | ||
487 | |||
488 | return perms; | ||
489 | } | ||
490 | |||
468 | /// <summary> | 491 | /// <summary> |
469 | /// Used to create a new user inventory. | 492 | /// Used to create a new user inventory. |
470 | /// </summary> | 493 | /// </summary> |
diff --git a/OpenSim/Tests/Common/Mock/TestInventoryService.cs b/OpenSim/Tests/Common/Mock/TestInventoryService.cs index 6576533..ba9cbe9 100644 --- a/OpenSim/Tests/Common/Mock/TestInventoryService.cs +++ b/OpenSim/Tests/Common/Mock/TestInventoryService.cs | |||
@@ -171,5 +171,10 @@ namespace OpenSim.Tests.Common.Mock | |||
171 | root.ParentID = UUID.Zero; | 171 | root.ParentID = UUID.Zero; |
172 | return root; | 172 | return root; |
173 | } | 173 | } |
174 | |||
175 | public int GetAssetPermissions(UUID userID, UUID assetID) | ||
176 | { | ||
177 | return 1; | ||
178 | } | ||
174 | } | 179 | } |
175 | } | 180 | } |