/* * Copyright (c) 2008 Intel Corporation * All rights reserved. * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * -- Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * -- Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * -- Neither the name of the Intel Corporation nor the names of its * contributors may be used to endorse or promote products derived from * this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE INTEL OR ITS * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ using System; using System.Collections.Generic; using System.Net; using OpenMetaverse; using OpenMetaverse.StructuredData; namespace AssetServer { /// /// Response from a call to a storage provider /// public enum StorageResponse { /// The storage call succeeded Success, /// The resource requested was not found NotFound, /// An authentication token was required and not provided, the /// authentication token provided was invalid, or the provided /// authentication was not authorized for the requested resource AuthNeeded, /// A server failure prevented the storage call from /// completing Failure } #region Inventory Classes public class InventoryBase { } public class InventoryFolder : InventoryBase { public string Name; public UUID Owner; public UUID ParentID; public UUID ID; public short Type; public ushort Version; [NonSerialized] public Dictionary Children = new Dictionary(); public InventoryFolder() { } public InventoryFolder(string name, UUID ownerID, UUID parentID, short assetType) { ID = UUID.Random(); Name = name; Owner = ownerID; ParentID = parentID; Type = assetType; Version = 1; } public override string ToString() { return String.Format("{0} ({1})", Name, ID); } } public class InventoryItem : InventoryBase { public UUID ID; public int InvType; public UUID Folder; public UUID Owner; public UUID Creator; public string Name; public string Description; public uint NextPermissions; public uint CurrentPermissions; public uint BasePermissions; public uint EveryOnePermissions; public uint GroupPermissions; public int AssetType; public UUID AssetID; public UUID GroupID; public bool GroupOwned; public int SalePrice; public byte SaleType; public uint Flags; public int CreationDate; public override string ToString() { return String.Format("{0} ({1})", Name, ID); } } public class InventoryCollection { public Dictionary Folders; public Dictionary Items; public UUID UserID; } #endregion Inventory Classes #region Interfaces public interface IStorageProvider { StorageResponse TryFetchMetadata(UUID assetID, UUID authToken, out Metadata metadata); StorageResponse TryFetchData(UUID assetID, UUID authToken, out byte[] assetData); StorageResponse TryFetchDataMetadata(UUID assetID, UUID authToken, out Metadata metadata, out byte[] assetData); StorageResponse TryCreateAsset(Metadata metadata, byte[] assetData, UUID authToken, out UUID assetID); StorageResponse TryCreateAsset(Metadata metadata, byte[] assetData, UUID authToken); int ForEach(Action action, int start, int count, UUID authToken); } public interface IInventoryProvider { StorageResponse TryFetchItem(Uri owner, UUID itemID, UUID authToken, out InventoryItem item); StorageResponse TryFetchFolder(Uri owner, UUID folderID, UUID authToken, out InventoryFolder folder); StorageResponse TryFetchFolderContents(Uri owner, UUID folderID, UUID authToken, out InventoryCollection contents); StorageResponse TryFetchFolderList(Uri owner, UUID authToken, out List folders); StorageResponse TryFetchInventory(Uri owner, UUID authToken, out InventoryCollection inventory); StorageResponse TryFetchActiveGestures(Uri owner, UUID authToken, out List gestures); StorageResponse TryCreateItem(InventoryItem item, UUID authToken); StorageResponse TryCreateFolder(InventoryFolder folder, UUID authToken); StorageResponse TryCreateInventory(InventoryFolder rootFolder, UUID authToken); StorageResponse TryDeleteItem(Uri owner, UUID itemID, UUID authToken); StorageResponse TryDeleteFolder(Uri owner, UUID folderID, UUID authToken); StorageResponse TryPurgeFolder(Uri owner, UUID folderID, UUID authToken); } public interface IAuthenticationProvider { void AddIdentifier(UUID authToken, Uri identifier); bool RemoveIdentifier(UUID authToken); bool TryGetIdentifier(UUID authToken, out Uri identifier); } public interface IAuthorizationProvider { bool IsMetadataAuthorized(UUID authToken, UUID assetID); /// /// Authorizes access to the data for an asset. Access to asset data /// also implies access to the metadata for that asset /// /// Authentication token to check for access /// ID of the requested asset /// True if access is granted, otherwise false bool IsDataAuthorized(UUID authToken, UUID assetID); bool IsCreateAuthorized(UUID authToken); bool IsInventoryReadAuthorized(UUID authToken, Uri owner); bool IsInventoryWriteAuthorized(UUID authToken, Uri owner); } public interface IMetricsProvider { void LogAssetMetadataFetch(string extension, StorageResponse response, UUID assetID, UUID authToken, DateTime time); void LogAssetDataFetch(string extension, StorageResponse response, UUID assetID, int dataSize, UUID authToken, DateTime time); void LogAssetCreate(string extension, StorageResponse response, UUID assetID, int dataSize, UUID authToken, DateTime time); void LogInventoryFetch(string extension, StorageResponse response, Uri owner, UUID objID, bool folder, UUID authToken, DateTime time); void LogInventoryFetchFolderContents(string extension, StorageResponse response, Uri owner, UUID folderID, UUID authToken, DateTime time); void LogInventoryFetchFolderList(string extension, StorageResponse response, Uri owner, UUID authToken, DateTime time); void LogInventoryFetchInventory(string extension, StorageResponse response, Uri owner, UUID authToken, DateTime time); void LogInventoryFetchActiveGestures(string extension, StorageResponse response, Uri owner, UUID authToken, DateTime time); void LogInventoryCreate(string extension, StorageResponse response, Uri owner, bool folder, UUID authToken, DateTime time); void LogInventoryCreateInventory(string extension, StorageResponse response, UUID authToken, DateTime time); void LogInventoryDelete(string extension, StorageResponse response, Uri owner, UUID objID, bool folder, UUID authToken, DateTime time); void LogInventoryPurgeFolder(string extension, StorageResponse response, Uri owner, UUID folderID, UUID authToken, DateTime time); } #endregion Interfaces }