/// <summary> /// Overridden to take JSON input of AssetStorageID and Key and create a URL. If the asset is using Amazon then a presigned URL is /// created. /// </summary> /// <param name="parentControl">The parent control.</param> /// <param name="value">Information about the value</param> /// <param name="configurationValues">The configuration values.</param> /// <param name="condensed">Flag indicating if the value should be condensed (i.e. for use in a grid column)</param> /// <returns></returns> public override string FormatValue(Control parentControl, string value, Dictionary <string, ConfigurationValue> configurationValues, bool condensed) { Storage.AssetStorage.Asset asset = GetAssetInfoFromValue(value); if (asset == null) { return(string.Empty); } AssetStorageProvider assetStorageProvider = new AssetStorageProvider(); int?assetStorageId = asset.AssetStorageProviderId; if (assetStorageId != null) { var assetStorageService = new AssetStorageProviderService(new RockContext()); assetStorageProvider = assetStorageService.Get(assetStorageId.Value); assetStorageProvider.LoadAttributes(); } var component = assetStorageProvider.GetAssetStorageComponent(); string uri = component.CreateDownloadLink(assetStorageProvider, asset); return(uri); }
/// <summary> /// Gets the edit value as the IEntity.Id /// </summary> /// <param name="control">The control.</param> /// <param name="configurationValues">The configuration values.</param> /// <returns></returns> public int?GetEditValueAsEntityId(Control control, Dictionary <string, ConfigurationValue> configurationValues) { var guid = GetEditValue(control, configurationValues).AsGuid(); var item = new AssetStorageProviderService(new RockContext()).Get(guid); return(item != null ? item.Id : ( int? )null); }
/// <summary> /// Handles the Click event of the btnSave control. /// </summary> /// <param name="sender">The source of the event.</param> /// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param> protected void btnSave_Click(object sender, EventArgs e) { using (var rockContext = new RockContext()) { AssetStorageProvider assetStorageProvider = null; var assetStorageProviderService = new AssetStorageProviderService(rockContext); if (AssetStorageProviderId != 0) { assetStorageProvider = assetStorageProviderService.Get(AssetStorageProviderId); } if (assetStorageProvider == null) { assetStorageProvider = new Rock.Model.AssetStorageProvider(); assetStorageProviderService.Add(assetStorageProvider); } assetStorageProvider.Name = tbName.Text; assetStorageProvider.IsActive = cbIsActive.Checked; assetStorageProvider.Description = tbDescription.Text; assetStorageProvider.EntityTypeId = cpAssetStorageType.SelectedEntityTypeId; rockContext.SaveChanges(); assetStorageProvider.LoadAttributes(rockContext); Rock.Attribute.Helper.GetEditValues(phAttributes, assetStorageProvider); assetStorageProvider.SaveAttributeValues(rockContext); } NavigateToParentPage(); }
/// <summary> /// Sets the edit value from IEntity.Id value /// </summary> /// <param name="control">The control.</param> /// <param name="configurationValues">The configuration values.</param> /// <param name="id">The identifier.</param> public void SetEditValueFromEntityId(Control control, Dictionary <string, ConfigurationValue> configurationValues, int?id) { var item = new AssetStorageProviderService(new RockContext()).Get(id ?? 0); var guidValue = item != null?item.Guid.ToString() : string.Empty; SetEditValue(control, configurationValues, guidValue); }
private void ProcessAssetStorageProviderAsset(HttpContext context, HttpPostedFile uploadedFile) { int? assetStorageId = context.Request.Form["StorageId"].AsIntegerOrNull(); string assetKey = context.Request.Form["Key"] + uploadedFile.FileName; if (assetStorageId == null || assetKey.IsNullOrWhiteSpace()) { throw new Rock.Web.FileUploadException("Insufficient info to upload a file of this type.", System.Net.HttpStatusCode.Forbidden); } var assetStorageService = new AssetStorageProviderService(new RockContext()); AssetStorageProvider assetStorageProvider = assetStorageService.Get((int)assetStorageId); assetStorageProvider.LoadAttributes(); var component = assetStorageProvider.GetAssetStorageComponent(); var asset = new Rock.Storage.AssetStorage.Asset(); asset.Key = assetKey; asset.Type = Rock.Storage.AssetStorage.AssetType.File; asset.AssetStream = uploadedFile.InputStream; if (component.UploadObject(assetStorageProvider, asset)) { context.Response.Write(new { Id = string.Empty, FileName = assetKey }.ToJson()); } else { throw new Rock.Web.FileUploadException("Unable to upload file", System.Net.HttpStatusCode.BadRequest); } }
protected AssetStorageProvider GetAssetStorageProvider() { var assetStorageProviderService = new AssetStorageProviderService(new RockContext()); AssetStorageProvider assetStorageProvider = assetStorageProviderService.Get(_assetStorageProviderServiceGuid); assetStorageProvider.LoadAttributes(); return(assetStorageProvider); }
public IQueryable <TreeViewItem> GetChildren(string assetFolderId) { var assetStorageService = new AssetStorageProviderService(new RockContext()); var treeViewItemList = new List <TreeViewItem>(); if (assetFolderId == "0") { foreach (var assetStorageProvider in assetStorageService.GetActiveNoTracking()) { var component = assetStorageProvider.GetAssetStorageComponent(); var rootFolder = component.GetRootFolder(assetStorageProvider); var treeViewItem = new TreeViewItem(); treeViewItem.Id = Uri.EscapeDataString($"{assetStorageProvider.Id.ToString()},{rootFolder},{true}"); treeViewItem.IconCssClass = component.IconCssClass; treeViewItem.Name = assetStorageProvider.Name; treeViewItem.HasChildren = true; treeViewItemList.Add(treeViewItem); } } else { var assetFolderIdParts = assetFolderId.Split(',').ToArray(); if (assetFolderIdParts.Length > 0) { int assetStorageProviderId = assetFolderIdParts[0].AsInteger(); var assetStorageProvider = assetStorageService.GetNoTracking(assetStorageProviderId); Asset asset = new Asset { Key = string.Empty, Type = AssetType.Folder }; if (assetFolderIdParts.Length > 1) { asset.Key = assetFolderIdParts[1]; } var component = assetStorageProvider.GetAssetStorageComponent(); var folderAssets = component.ListFoldersInFolder(assetStorageProvider, asset); foreach (Asset folderAsset in folderAssets) { var treeViewItem = new TreeViewItem(); treeViewItem.Id = Uri.EscapeDataString($"{assetStorageProvider.Id},{folderAsset.Key}"); treeViewItem.IconCssClass = "fa fa-folder"; treeViewItem.Name = folderAsset.Name; // NOTE: This is not very performant. We should see if we can get a bool response from providers instead of getting the entire folder list for each subfolder. //treeViewItem.HasChildren = component.ListFoldersInFolder( assetStorageProvider, folderAsset ).Any(); // This is fast but will show the triangle for each folder. If no data the triangle disappears after clicking it. treeViewItem.HasChildren = true; treeViewItemList.Add(treeViewItem); } } } return(treeViewItemList.AsQueryable()); }
private static void CreateAssetStorageProvider(TestContext testContext) { AssetStorageProvider assetStorageProvider = null; var bucketName = testContext.Properties["GoogleBucketName"].ToStringSafe(); var apiKey = testContext.Properties["GoogleServiceAccountJsonKey"].ToStringSafe(); // Just Assert Inconclusive if the GoogleStorageAccountName and GoogleAccountAccessKey are blank if (string.IsNullOrEmpty(bucketName) || string.IsNullOrEmpty(apiKey)) { Assert.That.Inconclusive($"The GoogleStorageAccountName and GoogleAccountAccessKey must be set up in your Test > Test Settings > Test Setting File in order to run these tests."); } try { using (var rockContext = new RockContext()) { var assetStorageProviderService = new AssetStorageProviderService(rockContext); assetStorageProvider = assetStorageProviderService.Get(_assetStorageProviderServiceGuid); if (assetStorageProvider == null) { // This is the registered Guid for the 'Rock.Storage.AssetStorage.GoogleCloudStorageComponent' entity type var entityType = EntityTypeCache.Get(Rock.SystemGuid.EntityType.STORAGE_ASSETSTORAGE_GOOGLECLOUD.AsGuid()); assetStorageProvider = new AssetStorageProvider(); assetStorageProvider.Name = "TEST Google Cloud AssetStorageProvider"; assetStorageProvider.Guid = _assetStorageProviderServiceGuid; assetStorageProvider.EntityTypeId = entityType.Id; assetStorageProvider.IsActive = true; assetStorageProviderService.Add(assetStorageProvider); rockContext.SaveChanges(); var assetStorageProviderComponentEntityType = EntityTypeCache.Get(assetStorageProvider.EntityTypeId.Value); var assetStorageProviderEntityType = EntityTypeCache.Get <Rock.Model.AssetStorageProvider>(); Helper.UpdateAttributes( assetStorageProviderComponentEntityType.GetEntityType(), assetStorageProviderEntityType.Id, "EntityTypeId", assetStorageProviderComponentEntityType.Id.ToString(), rockContext); } assetStorageProvider.LoadAttributes(); assetStorageProvider.SetAttributeValue("BucketName", bucketName); assetStorageProvider.SetAttributeValue("ApiKey", Encryption.EncryptString(apiKey)); assetStorageProvider.SetAttributeValue("RootFolder", testContext.Properties["UnitTestRootFolder"].ToStringSafe()); assetStorageProvider.SaveAttributeValues(rockContext); } } catch (System.Exception ex) { Assert.That.Inconclusive($"Unable to get the Google Cloud Asset Storage Provider ({ex.Message})."); } }
private static void CreateAssetStorageProvider(TestContext testContext) { AssetStorageProvider assetStorageProvider = null; var accessKey = testContext.Properties["AWSAccessKey"].ToStringSafe(); var secretKey = testContext.Properties["AWSSecretKey"].ToStringSafe(); try { using (var rockContext = new RockContext()) { var assetStorageProviderService = new AssetStorageProviderService(rockContext); assetStorageProvider = assetStorageProviderService.Get(_assetStorageProviderServiceGuid); if (assetStorageProvider == null) { var entityType = EntityTypeCache.Get(Rock.SystemGuid.EntityType.STORAGE_ASSETSTORAGE_AMAZONS3.AsGuid()); assetStorageProvider = new AssetStorageProvider(); assetStorageProvider.Name = "TEST Amazon S3 AssetStorageProvider"; assetStorageProvider.Guid = _assetStorageProviderServiceGuid; assetStorageProvider.EntityTypeId = entityType.Id; assetStorageProvider.IsActive = true; assetStorageProviderService.Add(assetStorageProvider); rockContext.SaveChanges(); var assetStorageProviderComponentEntityType = EntityTypeCache.Get(assetStorageProvider.EntityTypeId.Value); var assetStorageProviderEntityType = EntityTypeCache.Get <Rock.Model.AssetStorageProvider>(); Helper.UpdateAttributes( assetStorageProviderComponentEntityType.GetEntityType(), assetStorageProviderEntityType.Id, "EntityTypeId", assetStorageProviderComponentEntityType.Id.ToString(), rockContext); } assetStorageProvider.LoadAttributes(); assetStorageProvider.SetAttributeValue("GenerateSingedURLs", "False"); // The attribute Key has that typo. assetStorageProvider.SetAttributeValue("AWSRegion", testContext.Properties["AWSRegion"].ToStringSafe()); assetStorageProvider.SetAttributeValue("Bucket", testContext.Properties["AWSBucket"].ToStringSafe()); assetStorageProvider.SetAttributeValue("Expiration", "525600"); assetStorageProvider.SetAttributeValue("RootFolder", testContext.Properties["UnitTestRootFolder"].ToStringSafe()); assetStorageProvider.SetAttributeValue("AWSProfileName", testContext.Properties["AWSProfileName"].ToStringSafe()); assetStorageProvider.SetAttributeValue("AWSAccessKey", accessKey); assetStorageProvider.SetAttributeValue("AWSSecretKey", secretKey); assetStorageProvider.SaveAttributeValues(rockContext); } } catch (System.Exception ex) { Assert.That.Inconclusive($"Unable to get the Amazon S3 Asset Storage Provider ({ex.Message})."); } }
private AssetStorageProvider GetAssetStorageProvider() { var assetStorageService = new AssetStorageProviderService(new RockContext()); AssetStorageProvider assetStorageProvider = assetStorageService.Get(3); // need mock assetStorageProvider.LoadAttributes(); assetStorageProvider.SetAttributeValue("RootFolder", "TestFolder"); return(assetStorageProvider); }
private AssetStorageProvider GetAssetStorageProvider() { var assetStorageService = new AssetStorageProviderService(new RockContext()); AssetStorageProvider assetStorageProvider = assetStorageService.Get(1); // this is the stock, local file system provider assetStorageProvider.LoadAttributes(); assetStorageProvider.SetAttributeValue("RootFolder", "TestFolder"); return(assetStorageProvider); }
private static void SeedIntialData() { var assetStorageProviderService = new AssetStorageProviderService(new RockContext()); var assetStorageProvider = assetStorageProviderService.Get(_assetStorageProviderServiceGuid); assetStorageProvider.LoadAttributes(); var assetStorageComponent = assetStorageProvider.GetAssetStorageComponent(); using (new HttpSimulator("/", webContentFolder).SimulateRequest()) { var rootAsset = new Asset { Key = assetStorageProvider.GetAttributeValue("RootFolder"), Type = AssetType.Folder }; bool isSuccess = assetStorageComponent.CreateFolder(assetStorageProvider, rootAsset); if (!isSuccess) { Assert.That.Inconclusive($"Unable to create root folder while seeding data"); } var parentFolder = new Asset(); parentFolder.Name = "ParentFolder"; parentFolder.Type = AssetType.Folder; isSuccess = assetStorageComponent.CreateFolder(assetStorageProvider, parentFolder); for (var i = 1; i < 11; i++) { var testFolder = new Asset { Name = $"{parentFolder.Name}/TestFolder-{i}", Type = AssetType.Folder }; isSuccess = assetStorageComponent.CreateFolder(assetStorageProvider, testFolder); assetStorageComponent.UploadObject(assetStorageProvider, new Asset { Name = $"{parentFolder.Name}/TestFile-{i}.txt", AssetStream = new MemoryStream(_testTextFileBytes) }); assetStorageComponent.UploadObject(assetStorageProvider, new Asset { Name = $"{testFolder.Name}/TestFile-{i}.txt", AssetStream = new MemoryStream(_testTextFileBytes) }); } } }
/// <summary> /// Gets the asset storage provider using the ID stored in the hidden field, otherwise returns a new AssetStorageProvider. /// </summary> /// <returns></returns> private AssetStorageProvider GetAssetStorageProvider() { AssetStorageProvider assetStorageProvider = new AssetStorageProvider(); string assetStorageId = hfAssetStorageId.Value; if (assetStorageId.IsNotNullOrWhiteSpace()) { var assetStorageService = new AssetStorageProviderService(new RockContext()); assetStorageProvider = assetStorageService.Get(assetStorageId.AsInteger()); assetStorageProvider.LoadAttributes(); } return(assetStorageProvider); }
/// <summary> /// Handles the DeleteClick event of the rGridAssetStorageProvider control. /// </summary> /// <param name="sender">The source of the event.</param> /// <param name="e">The <see cref="RowEventArgs"/> instance containing the event data.</param> protected void rGridAssetStorageProvider_DeleteClick(object sender, RowEventArgs e) { var rockContext = new RockContext(); var assetStorageProviderService = new AssetStorageProviderService(rockContext); var assetStorageProvider = assetStorageProviderService.Get(e.RowKeyId); if (assetStorageProvider != null) { assetStorageProviderService.Delete(assetStorageProvider); rockContext.SaveChanges(); } BindGrid(); }
/// <summary> /// Shows the detail. /// </summary> /// <param name="assetStorageProviderId">The asset storage provider identifier.</param> public void ShowDetail(int assetStorageProviderId) { if (!IsUserAuthorized(Authorization.VIEW)) { nbEditModeMessage.Text = EditModeMessage.NotAuthorizedToView(AssetStorageProvider.FriendlyTypeName); return; } AssetStorageProvider assetStorageProvider = null; var rockContext = new RockContext(); if (assetStorageProviderId == 0) { assetStorageProvider = new AssetStorageProvider(); pdAuditDetails.Visible = false; } else { var assetStorageProviderService = new AssetStorageProviderService(rockContext); assetStorageProvider = assetStorageProviderService.Get(assetStorageProviderId); pdAuditDetails.SetEntity(assetStorageProvider, ResolveRockUrl("~")); if (assetStorageProvider == null) { assetStorageProvider = new AssetStorageProvider(); pdAuditDetails.Visible = false; } } if (assetStorageProvider.Id == 0) { lActionTitle.Text = ActionTitle.Add(AssetStorageProvider.FriendlyTypeName).FormatAsHtmlTitle(); } else { lActionTitle.Text = assetStorageProvider.Name.FormatAsHtmlTitle(); } hlInactive.Visible = !assetStorageProvider.IsActive; tbName.Text = assetStorageProvider.Name; cbIsActive.Checked = assetStorageProvider.IsActive; tbDescription.Text = assetStorageProvider.Description; cpAssetStorageType.SetValue(assetStorageProvider.EntityType != null ? assetStorageProvider.EntityType.Guid.ToString().ToUpper() : string.Empty); BuildDynamicControls(assetStorageProvider, true); }
public override void SetEditValue(Control control, Dictionary <string, ConfigurationValue> configurationValues, string value) { var picker = control as AssetStorageProviderPicker; if (picker != null) { int? itemId = null; Guid?itemGuid = value.AsGuidOrNull(); if (itemGuid.HasValue) { using (var rockContext = new RockContext()) { itemId = new AssetStorageProviderService(rockContext).Queryable().Where(a => a.Guid == itemGuid.Value).Select(a => ( int? )a.Id).FirstOrDefault(); } } picker.SetValue(itemId); } }
public override string FormatValue(Control parentControl, string value, Dictionary <string, ConfigurationValue> configurationValues, bool condensed) { string formattedValue = string.Empty; Guid?assetStorageProviderGuid = value.AsGuidOrNull(); if (assetStorageProviderGuid.HasValue) { using (var rockContext = new RockContext()) { var assetStorageProvider = new AssetStorageProviderService(rockContext).Get(assetStorageProviderGuid.Value); if (assetStorageProvider != null) { formattedValue = assetStorageProvider.Name; } } } return(base.FormatValue(parentControl, formattedValue, null, condensed)); }
public override string GetEditValue(Control control, Dictionary <string, ConfigurationValue> configurationValues) { var picker = control as AssetStorageProviderPicker; if (picker != null) { int? itemId = picker.SelectedValue.AsIntegerOrNull(); Guid?itemGuid = null; if (itemId.HasValue) { using (var rockContext = new RockContext()) { itemGuid = new AssetStorageProviderService(rockContext).Queryable().Where(a => a.Id == itemId.Value).Select(a => ( Guid? )a.Guid).FirstOrDefault(); } } return(itemGuid?.ToString()); } return(null); }
/// <summary> /// Binds the grid. /// </summary> private void BindGrid() { using (var rockContext = new RockContext()) { var assetStorageProviderService = new AssetStorageProviderService(rockContext); var qry = assetStorageProviderService.Queryable("EntityType").AsNoTracking(); SortProperty sortProperty = rGridAssetStorageProvider.SortProperty; if (sortProperty != null) { qry = qry.Sort(sortProperty); } else { qry = qry.OrderBy(g => g.Name); } rGridAssetStorageProvider.DataSource = qry.ToList(); rGridAssetStorageProvider.DataBind(); } }
protected static void InternalClassCleanup() { var assetStorageProviderService = new AssetStorageProviderService(new RockContext()); var assetStorageProvider = assetStorageProviderService.Get(_assetStorageProviderServiceGuid); var storageComponent = assetStorageProvider.GetAssetStorageComponent(); var unitTestFolder = new Asset { Key = assetStorageProvider.GetAttributeValue("RootFolder"), Type = AssetType.Folder }; using (new HttpSimulator("/", webContentFolder).SimulateRequest()) { var items = storageComponent.ListObjects(assetStorageProvider, unitTestFolder); foreach (var item in items) { if (item.Key == unitTestFolder.Key) { continue; } storageComponent.DeleteAsset(assetStorageProvider, item); } } if (!string.IsNullOrEmpty(webContentFolder)) { try { Directory.Delete(webContentFolder, recursive: true); } catch { // do nothing. } } }