diff --git a/src/Orchard.Web/Modules/Orchard.Media/Controllers/AdminController.cs b/src/Orchard.Web/Modules/Orchard.Media/Controllers/AdminController.cs index dd1b67df1..afdde7f4f 100644 --- a/src/Orchard.Web/Modules/Orchard.Media/Controllers/AdminController.cs +++ b/src/Orchard.Web/Modules/Orchard.Media/Controllers/AdminController.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.IO; using System.Web.Mvc; +using Orchard.ContentManagement; using Orchard.Core.Contents.Controllers; using Orchard.Localization; using Orchard.Logging; @@ -172,7 +173,21 @@ namespace Orchard.Media.Controllers { } public ActionResult Add(string folderName, string mediaPath) { - var model = new MediaItemAddViewModel { FolderName = folderName, MediaPath = mediaPath }; + if (!Services.Authorizer.Authorize(Permissions.ManageMedia, T("Couldn't upload media file"))) + return new HttpUnauthorizedResult(); + + var currentSite = Services.WorkContext.CurrentSite; + + var model = new MediaItemAddViewModel { + FolderName = folderName, + MediaPath = mediaPath, + AllowedExtensions = currentSite.As().UploadAllowedFileTypeWhitelist + }; + + if(currentSite.SuperUser.Equals(Services.WorkContext.CurrentUser.UserName, StringComparison.Ordinal)) { + model.AllowedExtensions = String.Empty; + } + return View(model); } @@ -196,8 +211,8 @@ namespace Orchard.Media.Controllers { try { _mediaService.UploadMediaFile(viewModel.MediaPath, Request.Files[fileName], viewModel.ExtractZip); } - catch (ArgumentException) { - Services.Notifier.Error(T("Uploading media file failed:")); + catch (ArgumentException e) { + Services.Notifier.Error(T("Uploading media file failed: {0}", e.Message)); return View(viewModel); } } diff --git a/src/Orchard.Web/Modules/Orchard.Media/Services/MediaService.cs b/src/Orchard.Web/Modules/Orchard.Media/Services/MediaService.cs index 9db6e1c92..92347836b 100644 --- a/src/Orchard.Web/Modules/Orchard.Media/Services/MediaService.cs +++ b/src/Orchard.Web/Modules/Orchard.Media/Services/MediaService.cs @@ -15,7 +15,7 @@ using Orchard.Validation; namespace Orchard.Media.Services { /// - /// The MediaService class provides the services o manipulate media entities (files / folders). + /// The MediaService class provides the services to manipulate media entities (files / folders). /// Among other things it provides filtering functionalities on file types. /// The actual manipulation of the files is, however, delegated to the IStorageProvider. /// @@ -251,8 +251,16 @@ namespace Orchard.Media.Services { // must be in the whitelist MediaSettingsPart mediaSettings = currentSite.As(); - if (mediaSettings == null || - !mediaSettings.UploadAllowedFileTypeWhitelist.ToUpperInvariant().Split(' ').Contains(extension.ToUpperInvariant())) { + + if (mediaSettings == null) { + return false; + } + + if(String.IsNullOrWhiteSpace(mediaSettings.UploadAllowedFileTypeWhitelist)) { + return true; + } + + if(!mediaSettings.UploadAllowedFileTypeWhitelist.ToUpperInvariant().Split(' ').Contains(extension.ToUpperInvariant())) { return false; } } diff --git a/src/Orchard.Web/Modules/Orchard.Media/ViewModels/MediaItemAddViewModel.cs b/src/Orchard.Web/Modules/Orchard.Media/ViewModels/MediaItemAddViewModel.cs index 441ed986f..3dbe03d04 100644 --- a/src/Orchard.Web/Modules/Orchard.Media/ViewModels/MediaItemAddViewModel.cs +++ b/src/Orchard.Web/Modules/Orchard.Media/ViewModels/MediaItemAddViewModel.cs @@ -7,5 +7,6 @@ public string FolderName { get; set; } public string MediaPath { get; set; } public bool ExtractZip { get; set; } + public string AllowedExtensions { get; set; } } } diff --git a/src/Orchard.Web/Modules/Orchard.Media/Views/Admin/Add.cshtml b/src/Orchard.Web/Modules/Orchard.Media/Views/Admin/Add.cshtml index ceab138d0..b4a081087 100644 --- a/src/Orchard.Web/Modules/Orchard.Media/Views/Admin/Add.cshtml +++ b/src/Orchard.Web/Modules/Orchard.Media/Views/Admin/Add.cshtml @@ -32,4 +32,25 @@ @Html.AntiForgeryTokenOrchard() +} + +@using(Script.Foot()) { + } \ No newline at end of file