private static ContentKeyData CreateStorageContentKey(AssetData tempAsset, NullableFileEncryption fileEncryption, DataServiceContext dataContext) { // Create the content key. fileEncryption.Init(); // Encrypt it for delivery to Nimbus. X509Certificate2 certToUse = ContentKeyCollection.GetCertificateToEncryptContentKey(dataContext, ContentKeyType.StorageEncryption); ContentKeyData contentKeyData = ContentKeyBaseCollection.CreateStorageContentKey(fileEncryption.FileEncryption, certToUse); dataContext.AddObject(ContentKeyCollection.ContentKeySet, contentKeyData); dataContext.SaveChanges(); // Associate it with the asset. ((IAsset)tempAsset).ContentKeys.Add(contentKeyData); return(contentKeyData); }
private ContentKeyData CreateStorageContentKey(AssetData tempAsset, NullableFileEncryption fileEncryption, IMediaDataServiceContext dataContext) { // Create the content key. fileEncryption.Init(); // Encrypt it for delivery to Nimbus. X509Certificate2 certToUse = ContentKeyCollection.GetCertificateToEncryptContentKey(MediaContext, ContentKeyType.StorageEncryption); ContentKeyData contentKeyData = ContentKeyBaseCollection.InitializeStorageContentKey(fileEncryption.FileEncryption, certToUse); dataContext.AddObject(ContentKeyBaseCollection.ContentKeySet, contentKeyData); MediaRetryPolicy retryPolicy = this.MediaContext.MediaServicesClassFactory.GetSaveChangesRetryPolicy(dataContext as IRetryPolicyAdapter); retryPolicy.ExecuteAction <IMediaDataServiceResponse>(() => dataContext.SaveChanges()); // Associate it with the asset. ((IAsset)tempAsset).ContentKeys.Add(contentKeyData); return(contentKeyData); }
/// <summary> /// Asynchronously creates an asset for specified storage account. Asset does not contain any files and <see cref="AssetState" /> is Initialized. /// </summary> /// <param name="assetName">The asset name.</param> /// <param name="storageAccountName">The storage account name</param> /// <param name="options">A <see cref="AssetCreationOptions" /> which will be associated with created asset.</param> /// <param name="cancellationToken">The cancellation token.</param> /// <returns> /// An <see cref="Task" /> of type <see cref="IAsset" />, where IAsset created according to the specified creation <paramref name="options" />. /// </returns> public override Task <IAsset> CreateAsync(string assetName, string storageAccountName, AssetCreationOptions options, CancellationToken cancellationToken) { AssetData emptyAsset = new AssetData { Name = assetName, Options = (int)options, StorageAccountName = storageAccountName }; emptyAsset.SetMediaContext(this.MediaContext); cancellationToken.ThrowIfCancellationRequested(); IMediaDataServiceContext dataContext = this.MediaContext.MediaServicesClassFactory.CreateDataServiceContext(); dataContext.AddObject(AssetSet, (IAsset)emptyAsset); MediaRetryPolicy retryPolicy = this.MediaContext.MediaServicesClassFactory.GetSaveChangesRetryPolicy(dataContext as IRetryPolicyAdapter); return(retryPolicy.ExecuteAsync <IMediaDataServiceResponse>(() => dataContext.SaveChangesAsync(emptyAsset)) .ContinueWith <IAsset>( t => { t.ThrowIfFaulted(); cancellationToken.ThrowIfCancellationRequested(); AssetData data = (AssetData)t.Result.AsyncState; if (options.HasFlag(AssetCreationOptions.StorageEncrypted)) { using (var fileEncryption = new NullableFileEncryption()) { CreateStorageContentKey(data, fileEncryption, dataContext); } } return data; })); }
/// <summary> /// Asynchronously creates an asset for specified storage account. Asset does not contain any files and <see cref="AssetState" /> is Initialized. /// </summary> /// <param name="assetName">The asset name.</param> /// <param name="storageAccountName">The storage account name</param> /// <param name="options">A <see cref="AssetCreationOptions" /> which will be associated with created asset.</param> /// <param name="cancellationToken">The cancellation token.</param> /// <returns> /// An <see cref="Task" /> of type <see cref="IAsset" />, where IAsset created according to the specified creation <paramref name="options" />. /// </returns> public override Task <IAsset> CreateAsync(string assetName, string storageAccountName, AssetCreationOptions options, CancellationToken cancellationToken) { AssetData emptyAsset = new AssetData { Name = assetName, Options = (int)options, StorageAccountName = storageAccountName }; emptyAsset.InitCloudMediaContext(this._cloudMediaContext); cancellationToken.ThrowIfCancellationRequested(); DataServiceContext dataContext = this._cloudMediaContext.DataContextFactory.CreateDataServiceContext(); dataContext.AddObject(AssetSet, emptyAsset); return(dataContext .SaveChangesAsync(emptyAsset) .ContinueWith <IAsset>( t => { t.ThrowIfFaulted(); cancellationToken.ThrowIfCancellationRequested(); AssetData data = (AssetData)t.AsyncState; if (options.HasFlag(AssetCreationOptions.StorageEncrypted)) { using (var fileEncryption = new NullableFileEncryption()) { CreateStorageContentKey(data, fileEncryption, dataContext); } } return data; })); }
private ContentKeyData CreateStorageContentKey(AssetData tempAsset, NullableFileEncryption fileEncryption, IMediaDataServiceContext dataContext) { // Create the content key. fileEncryption.Init(); // Encrypt it for delivery to Nimbus. X509Certificate2 certToUse = ContentKeyCollection.GetCertificateToEncryptContentKey(dataContext, ContentKeyType.StorageEncryption); ContentKeyData contentKeyData = ContentKeyBaseCollection.CreateStorageContentKey(fileEncryption.FileEncryption, certToUse); dataContext.AddObject(ContentKeyCollection.ContentKeySet, contentKeyData); MediaRetryPolicy retryPolicy = this.MediaContext.MediaServicesClassFactory.GetSaveChangesRetryPolicy(); retryPolicy.ExecuteAction<IMediaDataServiceResponse>(() => dataContext.SaveChanges()); // Associate it with the asset. ((IAsset) tempAsset).ContentKeys.Add(contentKeyData); return contentKeyData; }
/// <summary> /// Asynchronously creates an asset for specified storage account. Asset does not contain any files and <see cref="AssetState" /> is Initialized. /// </summary> /// <param name="assetName">The asset name.</param> /// <param name="storageAccountName">The storage account name</param> /// <param name="options">A <see cref="AssetCreationOptions" /> which will be associated with created asset.</param> /// <param name="cancellationToken">The cancellation token.</param> /// <returns> /// An <see cref="Task" /> of type <see cref="IAsset" />, where IAsset created according to the specified creation <paramref name="options" />. /// </returns> public override Task<IAsset> CreateAsync(string assetName, string storageAccountName, AssetCreationOptions options, CancellationToken cancellationToken) { AssetData emptyAsset = new AssetData { Name = assetName, Options = (int)options, StorageAccountName = storageAccountName }; cancellationToken.ThrowIfCancellationRequested(); IMediaDataServiceContext dataContext = this.MediaContext.MediaServicesClassFactory.CreateDataServiceContext(); dataContext.AddObject(AssetSet, (IAsset)emptyAsset); MediaRetryPolicy retryPolicy = this.MediaContext.MediaServicesClassFactory.GetSaveChangesRetryPolicy(); return retryPolicy.ExecuteAsync<IMediaDataServiceResponse>(() => dataContext.SaveChangesAsync(emptyAsset)) .ContinueWith<IAsset>( t => { t.ThrowIfFaulted(); cancellationToken.ThrowIfCancellationRequested(); AssetData data = (AssetData)t.Result.AsyncState; if (options.HasFlag(AssetCreationOptions.StorageEncrypted)) { using (var fileEncryption = new NullableFileEncryption()) { CreateStorageContentKey(data, fileEncryption, dataContext); } } return data; }); }
private static ContentKeyData CreateStorageContentKey(AssetData tempAsset, NullableFileEncryption fileEncryption, DataServiceContext dataContext) { // Create the content key. fileEncryption.Init(); // Encrypt it for delivery to Nimbus. X509Certificate2 certToUse = ContentKeyCollection.GetCertificateToEncryptContentKey(dataContext, ContentKeyType.StorageEncryption); ContentKeyData contentKeyData = ContentKeyBaseCollection.CreateStorageContentKey(fileEncryption.FileEncryption, certToUse); dataContext.AddObject(ContentKeyCollection.ContentKeySet, contentKeyData); dataContext.SaveChanges(); // Associate it with the asset. ((IAsset) tempAsset).ContentKeys.Add(contentKeyData); return contentKeyData; }
/// <summary> /// Asynchronously creates an asset for specified storage account. Asset does not contain any files and <see cref="AssetState" /> is Initialized. /// </summary> /// <param name="assetName">The asset name.</param> /// <param name="storageAccountName">The storage account name</param> /// <param name="options">A <see cref="AssetCreationOptions" /> which will be associated with created asset.</param> /// <param name="cancellationToken">The cancellation token.</param> /// <returns> /// An <see cref="Task" /> of type <see cref="IAsset" />, where IAsset created according to the specified creation <paramref name="options" />. /// </returns> public override Task<IAsset> CreateAsync(string assetName, string storageAccountName, AssetCreationOptions options, CancellationToken cancellationToken) { AssetData emptyAsset = new AssetData { Name = assetName, Options = (int)options, StorageAccountName = storageAccountName }; emptyAsset.InitCloudMediaContext(this._cloudMediaContext); cancellationToken.ThrowIfCancellationRequested(); DataServiceContext dataContext = this._cloudMediaContext.DataContextFactory.CreateDataServiceContext(); dataContext.AddObject(AssetSet, emptyAsset); return dataContext .SaveChangesAsync(emptyAsset) .ContinueWith<IAsset>( t => { t.ThrowIfFaulted(); cancellationToken.ThrowIfCancellationRequested(); AssetData data = (AssetData)t.AsyncState; if (options.HasFlag(AssetCreationOptions.StorageEncrypted)) { using (var fileEncryption = new NullableFileEncryption()) { CreateStorageContentKey(data, fileEncryption, dataContext); } } return data; }); }