/// <summary>
        /// Provide the url to download the file
        /// The URL is based on the blob uri + SharedAccessToken
        /// </summary>
        /// <param name="fileName">Name of the file.</param>
        /// <param name="password">The password.</param>
        /// <returns></returns>
        public string GetFileUri(string senderName, string password)
        {
            // remove bad characters from sender name
            string safeSenderName = GetSafeSenderName(senderName);

            var files_ds = new FilesDataSource();
            var fileInfo = files_ds.GetFile(password + safeSenderName);

            if (fileInfo == null)
            {
                return string.Empty;
            }

            var sas = SharedAccessToken.GenerateSAS(ContainerName, fileInfo.BlobUri);

            return fileInfo.BlobUri + sas;
        }
        /// <summary>
        /// Upload a file to the blobs storage and create a record in the files table
        /// </summary>
        /// <param name="fileToLoad"></param>
        /// <returns>The token to be used to access the file later on</returns>
        public UploadFileTokenMessage UploadFile(UploadFileContentMessage fileToLoad)
        {
            // generate random 6 digits password
            string password = GeneratePassword();

            // remove bad characters from sender name
            string safeSenderName = GetSafeSenderName(fileToLoad.SenderName);

            using (MemoryStream memoryStream = new MemoryStream())
            {
                Utils.CopyStream(fileToLoad.FileByteStream, memoryStream);
                memoryStream.Seek(0, SeekOrigin.Begin);

                // make sure stream is a valid deck
                if (!IsLegalDeckFile(memoryStream))
                {
                    return new UploadFileTokenMessage() { Password = string.Empty };
                }

                memoryStream.Seek(0, SeekOrigin.Begin);

                // save stream as blob
                var blobUri = CreateBlob(memoryStream, password + safeSenderName);

                var files_ds = new FilesDataSource();
                var token = files_ds.AddFile(password + safeSenderName, ContainerName, blobUri);
            }

            return new UploadFileTokenMessage() { Password = password };
        }