/// <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();
        }
Exemple #2
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);
            }
        }
Exemple #3
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);
        }
Exemple #4
0
        protected AssetStorageProvider GetAssetStorageProvider()
        {
            var assetStorageProviderService           = new AssetStorageProviderService(new RockContext());
            AssetStorageProvider assetStorageProvider = assetStorageProviderService.Get(_assetStorageProviderServiceGuid);

            assetStorageProvider.LoadAttributes();
            return(assetStorageProvider);
        }
Exemple #5
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}).");
            }
        }
Exemple #6
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}).");
            }
        }
Exemple #7
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);
        }
Exemple #8
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);
        }
Exemple #9
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);
        }
Exemple #13
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.
                }
            }
        }