From 89495ef6cfc36e17f181dbe1969fbf2b7d6cc093 Mon Sep 17 00:00:00 2001 From: Sebastien Ros Date: Fri, 23 Jul 2010 17:44:56 -0700 Subject: [PATCH] Implemented authentification for Package publishing commands --HG-- branch : dev --- .../Commands/GalleryCommands.cs | 36 ++++++++++++++++--- .../Controllers/GalleryController.cs | 2 +- .../Services/IPackageManager.cs | 2 +- .../Services/PackageManager.cs | 8 +++-- .../ViewModels/PackagingHarvestViewModel.cs | 2 ++ .../Views/Gallery/Modules.ascx | 4 +-- .../Views/Gallery/Sources.ascx | 2 +- .../Controllers/AtomController.cs | 14 ++++++++ 8 files changed, 59 insertions(+), 11 deletions(-) diff --git a/src/Orchard.Web/Modules/Orchard.Packaging/Commands/GalleryCommands.cs b/src/Orchard.Web/Modules/Orchard.Packaging/Commands/GalleryCommands.cs index 0ecc14be6..c06cb966b 100644 --- a/src/Orchard.Web/Modules/Orchard.Packaging/Commands/GalleryCommands.cs +++ b/src/Orchard.Web/Modules/Orchard.Packaging/Commands/GalleryCommands.cs @@ -10,6 +10,12 @@ namespace Orchard.Packaging.Commands { public class GalleryCommands : DefaultOrchardCommandHandler { private readonly IPackageManager _packageManager; + [OrchardSwitch] + public string User { get; set; } + + [OrchardSwitch] + public string Password { get; set; } + public GalleryCommands(IPackageManager packageManager) { _packageManager = packageManager; } @@ -36,13 +42,24 @@ namespace Orchard.Packaging.Commands { } #endif - [CommandHelp("gallery submit module \r\n\t" + "Package a module into a distributable and push it to a feed server.")] + [CommandHelp("gallery submit module /User: /Password:\r\n\t" + "Package a module into a distributable and push it to a feed server.")] [CommandName("gallery submit module")] + [OrchardSwitches("User,Password")] public void SubmitModule(string moduleName, string feedUrl) { var packageData = _packageManager.Harvest(moduleName); + if ( String.IsNullOrWhiteSpace(User) ) { + Context.Output.WriteLine("Missing or incorrect User"); + return; + } + + if ( String.IsNullOrWhiteSpace(Password) ) { + Context.Output.WriteLine("Missing or incorrect Password"); + return; + } + try { - _packageManager.Push(packageData, feedUrl); + _packageManager.Push(packageData, feedUrl, User, Password); Context.Output.WriteLine("Success"); } catch (WebException webException) { @@ -51,16 +68,27 @@ namespace Orchard.Packaging.Commands { } } - [CommandHelp("gallery submit package \r\n\t" + "Push a packaged module to a feed server.")] + [CommandHelp("gallery submit package /User: /Password:\r\n\t" + "Push a packaged module to a feed server.")] [CommandName("gallery submit package")] + [OrchardSwitches("User,Password")] public void SubmitPackage(string filePath, string feedUrl) { using (var stream = File.Open(filePath, FileMode.Open, FileAccess.Read)) { var packageData = new PackageData { PackageStream = stream }; + if ( String.IsNullOrWhiteSpace(User) ) { + Context.Output.WriteLine("Missing or incorrect User"); + return; + } + + if ( String.IsNullOrWhiteSpace(Password) ) { + Context.Output.WriteLine("Missing or incorrect Password"); + return; + } + try { - _packageManager.Push(packageData, feedUrl); + _packageManager.Push(packageData, feedUrl, User, Password); Context.Output.WriteLine("Success"); } catch (WebException webException) { diff --git a/src/Orchard.Web/Modules/Orchard.Packaging/Controllers/GalleryController.cs b/src/Orchard.Web/Modules/Orchard.Packaging/Controllers/GalleryController.cs index 5e4210625..ab66160b6 100644 --- a/src/Orchard.Web/Modules/Orchard.Packaging/Controllers/GalleryController.cs +++ b/src/Orchard.Web/Modules/Orchard.Packaging/Controllers/GalleryController.cs @@ -132,7 +132,7 @@ namespace Orchard.Packaging.Controllers { return View("Harvest", model); } - _packageManager.Push(packageData, model.FeedUrl); + _packageManager.Push(packageData, model.FeedUrl, model.User, model.Password); _notifier.Information(T("Harvested {0} and published onto {1}", model.ExtensionName, model.FeedUrl)); Update(); diff --git a/src/Orchard.Web/Modules/Orchard.Packaging/Services/IPackageManager.cs b/src/Orchard.Web/Modules/Orchard.Packaging/Services/IPackageManager.cs index 5538f9c30..9e0ace57a 100644 --- a/src/Orchard.Web/Modules/Orchard.Packaging/Services/IPackageManager.cs +++ b/src/Orchard.Web/Modules/Orchard.Packaging/Services/IPackageManager.cs @@ -5,7 +5,7 @@ namespace Orchard.Packaging.Services { PackageData Harvest(string extensionName); PackageData Download(string feedItemId); - void Push(PackageData packageData, string feedUrl); + void Push(PackageData packageData, string feedUrl, string login, string password); PackageInfo Install(Stream packageStream); } } \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Packaging/Services/PackageManager.cs b/src/Orchard.Web/Modules/Orchard.Packaging/Services/PackageManager.cs index 61243e77e..c6869eb8c 100644 --- a/src/Orchard.Web/Modules/Orchard.Packaging/Services/PackageManager.cs +++ b/src/Orchard.Web/Modules/Orchard.Packaging/Services/PackageManager.cs @@ -1,7 +1,9 @@ +using System; using System.IO; using System.IO.Packaging; using System.Linq; using System.Net; +using System.Text; using Orchard.Environment.Extensions; using Orchard.Environment.Extensions.Models; @@ -38,11 +40,13 @@ namespace Orchard.Packaging.Services { }; } - public void Push(PackageData packageData, string feedUrl) { + public void Push(PackageData packageData, string feedUrl, string user, string password) { WebRequest request = WebRequest.Create(feedUrl); request.Method = "POST"; request.ContentType = "application/x-package"; - using (Stream requestStream = request.GetRequestStream()) { + request.Headers.Add("user", Convert.ToBase64String(Encoding.UTF8.GetBytes(user))); + request.Headers.Add("password", Convert.ToBase64String(Encoding.UTF8.GetBytes(password))); + using ( Stream requestStream = request.GetRequestStream() ) { packageData.PackageStream.Seek(0, SeekOrigin.Begin); packageData.PackageStream.CopyTo(requestStream); } diff --git a/src/Orchard.Web/Modules/Orchard.Packaging/ViewModels/PackagingHarvestViewModel.cs b/src/Orchard.Web/Modules/Orchard.Packaging/ViewModels/PackagingHarvestViewModel.cs index 4fc9b2c26..a8c6b70aa 100644 --- a/src/Orchard.Web/Modules/Orchard.Packaging/ViewModels/PackagingHarvestViewModel.cs +++ b/src/Orchard.Web/Modules/Orchard.Packaging/ViewModels/PackagingHarvestViewModel.cs @@ -12,5 +12,7 @@ namespace Orchard.Packaging.ViewModels { public string ExtensionName { get; set; } public string FeedUrl { get; set; } + public string User { get; set; } + public string Password { get; set; } } } \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Packaging/Views/Gallery/Modules.ascx b/src/Orchard.Web/Modules/Orchard.Packaging/Views/Gallery/Modules.ascx index d2827f052..c4843f0d0 100644 --- a/src/Orchard.Web/Modules/Orchard.Packaging/Views/Gallery/Modules.ascx +++ b/src/Orchard.Web/Modules/Orchard.Packaging/Views/Gallery/Modules.ascx @@ -3,11 +3,11 @@ <%: Html.TitleForPage(T("Browse Gallery").ToString())%>
- <%:Html.ActionLink("Update List", "Update", new object{}, new { @class = "button primaryAction" }) %> + <%:Html.ActionLink("Refresh", "Update", new object{}, new { @class = "button primaryAction" }) %>
<% using ( Html.BeginFormAntiForgeryPost(Url.Action("Modules", "Gallery")) ) {%>
- +