/// <summary>
        /// Generates the resource.
        /// </summary>
        /// <param name="connectionString">Optional connection string for the resource.</param>
        /// <param name="parameters">The resource parameters.</param>
        /// <returns>Returns the resource.</returns>
        public override ResourceToken CreateResourceToken(string connectionString, ResourceParameters parameters)
        {
            if (string.IsNullOrWhiteSpace(connectionString))
            {
                throw new ArgumentException("connectionString is invalid");
            }

            if (parameters == null)
            {
                throw new ArgumentNullException("parameters");
            }

            BlobParameters blobParameters = parameters as BlobParameters;

            if (blobParameters == null)
            {
                throw new ArgumentException("Expected a BlobParameters collection", "parameters");
            }

            if (string.IsNullOrWhiteSpace(blobParameters.Container))
            {
                throw new ArgumentException("The container name must not be null or empty", "parameters.Container");
            }

            if (string.IsNullOrWhiteSpace(blobParameters.Name))
            {
                throw new ArgumentException("The blob name must not be null or empty", "parameters.Name");
            }

            StorageProvider storageProvider = new StorageProvider(connectionString);

            return storageProvider.CreateBlobAccessToken(blobParameters.Container, blobParameters.Name, blobParameters.Permissions, blobParameters.Expiration);
        }
        /// <summary>
        /// Extracts the parameters for a request.
        /// </summary>
        /// <param name="parameters">The parameters to extract.</param>
        /// <param name="defaultParameters">Optional parameters instance to use.</param>
        /// <returns>Returns the extracted parameters.</returns>
        public virtual ResourceParameters ExtractParameters(JToken parameters, ResourceParameters defaultParameters = null)
        {
            if (parameters == null)
            {
                throw new ArgumentNullException("parameters");
            }

            if (defaultParameters == null)
            {
                defaultParameters = new ResourceParameters();
            }

            try
            {
                // Raw parameters.
                defaultParameters.Parameters = parameters;

                // Name.
                defaultParameters.Name = parameters.Value<string>("name");
                if (string.IsNullOrWhiteSpace(defaultParameters.Name))
                {
                    throw new HttpResponseException(HttpStatusCode.BadRequest);
                }

                // Permissions.
                string permissions = parameters.Value<string>("permissions");
                defaultParameters.Permissions = this.ExtractPermissions(permissions);

                // Expiration.
                defaultParameters.Expiration = (DateTime)parameters["expiry"];
            }
            catch (Exception)
            {
                throw new HttpResponseException(HttpStatusCode.BadRequest);
            }

            return defaultParameters;
        }
        /// <summary>
        /// Generates the resource.
        /// </summary>
        /// <param name="connectionString">Optional connection string for the resource.</param>
        /// <param name="parameters">The resource parameters.</param>
        /// <returns>Returns the resource.</returns>
        public override ResourceToken CreateResourceToken(string connectionString, ResourceParameters parameters)
        {
            if (string.IsNullOrWhiteSpace(connectionString))
            {
                throw new ArgumentException("connectionString is invalid");
            }

            if (parameters == null)
            {
                throw new ArgumentNullException("parameters");
            }

            ResourceParameters queueParameters = parameters;

            if (string.IsNullOrWhiteSpace(queueParameters.Name))
            {
                throw new ArgumentException("The queue name must not be null or empty", "parameters.Name");
            }

            StorageProvider storageProvider = new StorageProvider(connectionString);

            return storageProvider.CreateQueueAccessToken(queueParameters.Name, queueParameters.Permissions, queueParameters.Expiration);
        }
 public override ResourceToken CreateResourceToken(string connectionString, ResourceParameters parameters)
 {
     throw new NotImplementedException();
 }
 public override ResourceToken CreateResourceToken(string connectionString, Microsoft.WindowsAzure.Mobile.Service.ResourceBroker.Models.ResourceParameters parameters)
 {
     throw new NotImplementedException();
 }
 /// <summary>
 /// Generates the resource token.
 /// </summary>
 /// <param name="connectionString">Optional connection string for the resource.</param>
 /// <param name="parameters">The resource parameters.</param>
 /// <returns>Returns the resource or null.</returns>
 public abstract ResourceToken CreateResourceToken(string connectionString, ResourceParameters parameters);
        /// <summary>
        /// Extracts the parameters for a request.
        /// </summary>
        /// <param name="parameters">The parameters to extract.</param>
        /// <param name="defaultParameters">Optional parameters instance to use.</param>
        /// <returns>Returns the extracted parameters.</returns>
        public override ResourceParameters ExtractParameters(JToken parameters, ResourceParameters defaultParameters = null)
        {
            BlobParameters blobParameters = null;

            if (defaultParameters == null)
            {
                blobParameters = new BlobParameters();
            }
            else
            {
                blobParameters = defaultParameters as BlobParameters;
                if (blobParameters == null)
                {
                    throw new ArgumentException("Must be a BlobParameters instance", "defaultParameters");
                }
            }

            base.ExtractParameters(parameters, blobParameters);

            try
            {
                // Container.
                blobParameters.Container = parameters.Value<string>("container");
                if (string.IsNullOrWhiteSpace(blobParameters.Container))
                {
                    throw new HttpResponseException(HttpStatusCode.BadRequest);
                }
            }
            catch (Exception)
            {
                throw new HttpResponseException(HttpStatusCode.BadRequest);
            }

            return blobParameters;
        }