mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-10-14 19:04:51 +08:00
Implemented authentification for Package publishing commands
--HG-- branch : dev
This commit is contained in:
@@ -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 <moduleName> <feedUrl>\r\n\t" + "Package a module into a distributable and push it to a feed server.")]
|
||||
[CommandHelp("gallery submit module <moduleName> <feedUrl> /User:<user> /Password:<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 <filePath> <feedUrl>\r\n\t" + "Push a packaged module to a feed server.")]
|
||||
[CommandHelp("gallery submit package <filePath> <feedUrl> /User:<user> /Password:<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) {
|
||||
|
@@ -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();
|
||||
|
@@ -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);
|
||||
}
|
||||
}
|
@@ -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);
|
||||
}
|
||||
|
@@ -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; }
|
||||
}
|
||||
}
|
@@ -3,11 +3,11 @@
|
||||
<%: Html.TitleForPage(T("Browse Gallery").ToString())%></h1>
|
||||
|
||||
<div class="manage">
|
||||
<%:Html.ActionLink("Update List", "Update", new object{}, new { @class = "button primaryAction" }) %>
|
||||
<%:Html.ActionLink("Refresh", "Update", new object{}, new { @class = "button primaryAction" }) %>
|
||||
</div>
|
||||
<% using ( Html.BeginFormAntiForgeryPost(Url.Action("Modules", "Gallery")) ) {%>
|
||||
<fieldset class="bulk-actions">
|
||||
<label for="filterResults" class="bulk-filter"><%:T("Show only of feed")%></label>
|
||||
<label for="filterResults" class="bulk-filter"><%:T("Feed:")%></label>
|
||||
<select id="sourceId" name="sourceId">
|
||||
<%:Html.SelectOption("", Model.SelectedSource == null, T("Any (show all feeds)").ToString())%>
|
||||
<%
|
||||
|
@@ -3,7 +3,7 @@
|
||||
<%: Html.TitleForPage(T("Gallery Feeds").ToString())%></h1>
|
||||
|
||||
<div class="manage">
|
||||
<%:Html.ActionLink(T("Add a Feed").Text, "AddSource", new { }, new { @class = "button primaryAction" }) %>
|
||||
<%:Html.ActionLink(T("Add Feed").Text, "AddSource", new { }, new { @class = "button primaryAction" }) %>
|
||||
</div>
|
||||
|
||||
<fieldset>
|
||||
|
@@ -2,11 +2,15 @@
|
||||
using System.IO;
|
||||
using System.IO.Packaging;
|
||||
using System.Linq;
|
||||
using System.Security.Authentication;
|
||||
using System.Security.Policy;
|
||||
using System.Text;
|
||||
using System.Web.Mvc;
|
||||
using System.Web.Routing;
|
||||
using System.ServiceModel.Syndication;
|
||||
using System.Web.Security;
|
||||
using PackageIndexReferenceImplementation.Controllers.Artifacts;
|
||||
using PackageIndexReferenceImplementation.Models;
|
||||
using PackageIndexReferenceImplementation.Services;
|
||||
|
||||
namespace PackageIndexReferenceImplementation.Controllers {
|
||||
@@ -15,9 +19,12 @@ namespace PackageIndexReferenceImplementation.Controllers {
|
||||
private readonly FeedStorage _feedStorage;
|
||||
private readonly MediaStorage _mediaStorage;
|
||||
|
||||
public IMembershipService MembershipService { get; set; }
|
||||
|
||||
public AtomController() {
|
||||
_feedStorage = new FeedStorage();
|
||||
_mediaStorage = new MediaStorage();
|
||||
if ( MembershipService == null ) { MembershipService = new AccountMembershipService(); }
|
||||
}
|
||||
|
||||
public ActionResult Index() {
|
||||
@@ -34,6 +41,13 @@ namespace PackageIndexReferenceImplementation.Controllers {
|
||||
|
||||
var hostHeader = HttpContext.Request.Headers["Host"];
|
||||
var slugHeader = HttpContext.Request.Headers["Slug"];
|
||||
var user = Encoding.UTF8.GetString(Convert.FromBase64String(HttpContext.Request.Headers["User"]));
|
||||
var password = Encoding.UTF8.GetString(Convert.FromBase64String(HttpContext.Request.Headers["Password"]));
|
||||
|
||||
if ( !MembershipService.ValidateUser(user, password) ) {
|
||||
throw new AuthenticationException("This credentials are not valid fo this action.");
|
||||
}
|
||||
|
||||
var utcNowDateString = DateTimeOffset.UtcNow.ToString("yyyy-MM-dd");
|
||||
|
||||
var package = Package.Open(Request.InputStream, FileMode.Open, FileAccess.Read);
|
||||
|
Reference in New Issue
Block a user