示例#1
0
        /// <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);
        }
示例#5
0
        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);
            }
        }
示例#6
0
        protected AssetStorageProvider GetAssetStorageProvider()
        {
            var assetStorageProviderService           = new AssetStorageProviderService(new RockContext());
            AssetStorageProvider assetStorageProvider = assetStorageProviderService.Get(_assetStorageProviderServiceGuid);

            assetStorageProvider.LoadAttributes();
            return(assetStorageProvider);
        }
示例#7
0
        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());
        }
示例#8
0
        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}).");
            }
        }
示例#9
0
        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}).");
            }
        }
示例#10
0
        private AssetStorageProvider GetAssetStorageProvider()
        {
            var assetStorageService = new AssetStorageProviderService(new RockContext());
            AssetStorageProvider assetStorageProvider = assetStorageService.Get(3);  // need mock

            assetStorageProvider.LoadAttributes();
            assetStorageProvider.SetAttributeValue("RootFolder", "TestFolder");

            return(assetStorageProvider);
        }
示例#11
0
        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);
        }
示例#12
0
        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();
            }
        }
示例#20
0
        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.
                }
            }
        }