Updates JS to include the current umbraco version when requesting a package's details, updates the c# to use a new endpoint on OUR to ensure that the correct file is downloaded based on the umb version passed in.

This commit is contained in:
Shannon
2017-04-24 21:31:35 +10:00
parent 72cc5ce88b
commit d295174e53
5 changed files with 169 additions and 13 deletions

View File

@@ -38,8 +38,7 @@ namespace Umbraco.Core.Configuration.UmbracoSettings
get
{
var prop = Properties["webserviceurl"];
var repoUrl = this[prop] as ConfigurationElement;
return (repoUrl != null && repoUrl.ElementInformation.IsPresent);
return (string) prop.DefaultValue != (string) this[prop];
}
}
}

View File

@@ -13,7 +13,7 @@ function ourPackageRepositoryResource($q, $http, umbDataFormatter, umbRequestHel
getDetails: function (packageId) {
return umbRequestHelper.resourcePromise(
$http.get(baseurl + "/" + packageId),
$http.get(baseurl + "/" + packageId + "?version=" + Umbraco.Sys.ServerVariables.application.version),
'Failed to get package details');
},

View File

@@ -474,7 +474,7 @@ namespace Umbraco.Web.Editors
//our repo guid
using (var our = Repository.getByGuid("65194810-1f85-11dd-bd0b-0800200c9a66"))
{
path = our.fetch(packageGuid, Security.CurrentUser.Id);
path = our.GetPackageFile(packageGuid, Security.CurrentUser.Id, UmbracoVersion.Current);
}
}

View File

@@ -141,12 +141,12 @@ namespace umbraco.cms.businesslogic.packager.repositories
return repository;
}
//shortcut method to download pack from repo and place it on the server...
public string fetch(string packageGuid)
{
return fetch(packageGuid, string.Empty);
}
public string fetch(string packageGuid, int userId)
@@ -158,6 +158,40 @@ namespace umbraco.cms.businesslogic.packager.repositories
return fetch(packageGuid);
}
/// <summary>
/// Used to get the correct package file from the repo for the current umbraco version
/// </summary>
/// <param name="packageGuid"></param>
/// <param name="userId"></param>
/// <param name="currentUmbracoVersion"></param>
/// <returns></returns>
public string GetPackageFile(string packageGuid, int userId, System.Version currentUmbracoVersion)
{
// log
Audit.Add(AuditTypes.PackagerInstall,
string.Format("Package {0} fetched from {1}", packageGuid, this.Guid),
userId, -1);
var fileByteArray = Webservice.GetPackageFile(packageGuid, currentUmbracoVersion.ToString(3));
//successfull
if (fileByteArray.Length > 0)
{
// Check for package directory
if (Directory.Exists(IOHelper.MapPath(Settings.PackagerRoot)) == false)
Directory.CreateDirectory(IOHelper.MapPath(Settings.PackagerRoot));
using (var fs1 = new FileStream(IOHelper.MapPath(Settings.PackagerRoot + Path.DirectorySeparatorChar + packageGuid + ".umb"), FileMode.Create))
{
fs1.Write(fileByteArray, 0, fileByteArray.Length);
fs1.Close();
return "packages\\" + packageGuid + ".umb";
}
}
return "";
}
public bool HasConnection()
{
@@ -199,22 +233,37 @@ namespace umbraco.cms.businesslogic.packager.repositories
}
}
/// <summary>
/// This goes and fetches the Byte array for the package from OUR, but it's pretty strange
/// </summary>
/// <param name="packageGuid">
/// The package ID for the package file to be returned
/// </param>
/// <param name="key">
/// This is a strange Umbraco version parameter - but it's not really an umbraco version, it's a special/odd version format like Version41
/// but it's actually not used for the 7.5+ package installs so it's obsolete/unused.
/// </param>
/// <returns></returns>
public string fetch(string packageGuid, string key)
{
byte[] fileByteArray = new byte[0];
if (key == string.Empty)
{
{
//SD: this is odd, not sure why it returns a different package depending on the legacy xml schema but I'll leave it for now
if (UmbracoConfig.For.UmbracoSettings().Content.UseLegacyXmlSchema)
fileByteArray = this.Webservice.fetchPackage(packageGuid);
fileByteArray = Webservice.fetchPackage(packageGuid);
else
fileByteArray = this.Webservice.fetchPackageByVersion(packageGuid, Version.Version41);
{
fileByteArray = Webservice.fetchPackageByVersion(packageGuid, Version.Version41);
}
}
else
{
fileByteArray = this.Webservice.fetchProtectedPackage(packageGuid, key);
fileByteArray = Webservice.fetchProtectedPackage(packageGuid, key);
}
//successfull

View File

@@ -36,6 +36,8 @@ namespace umbraco.cms.businesslogic.packager.repositories
private System.Threading.SendOrPostCallback authenticateOperationCompleted;
private System.Threading.SendOrPostCallback GetPackageFileOperationCompleted;
private System.Threading.SendOrPostCallback fetchPackageByVersionOperationCompleted;
private System.Threading.SendOrPostCallback fetchPackageOperationCompleted;
@@ -83,6 +85,9 @@ namespace umbraco.cms.businesslogic.packager.repositories
/// <remarks/>
public event authenticateCompletedEventHandler authenticateCompleted;
/// <remarks/>
public event GetPackageFileCompletedEventHandler GetPackageFileCompleted;
/// <remarks/>
public event fetchPackageByVersionCompletedEventHandler fetchPackageByVersionCompleted;
@@ -533,6 +538,76 @@ namespace umbraco.cms.businesslogic.packager.repositories
}
}
/// <remarks/>
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://packages.umbraco.org/webservices/GetPackageFile", RequestNamespace = "http://packages.umbraco.org/webservices/", ResponseNamespace = "http://packages.umbraco.org/webservices/", Use = System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle = System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
[return: System.Xml.Serialization.XmlElementAttribute(DataType = "base64Binary")]
public byte[] GetPackageFile(string packageGuid, string umbracoVersion)
{
object[] results = this.Invoke("GetPackageFile", new object[] {
packageGuid,
umbracoVersion});
return ((byte[])(results[0]));
}
/// <remarks/>
public System.IAsyncResult BeginfetchPackageByVersion(string packageGuid, string umbracoVersion, System.AsyncCallback callback, object asyncState)
{
return this.BeginInvoke("GetPackageFile", new object[] {
packageGuid,
umbracoVersion}, callback, asyncState);
}
/// <remarks/>
public byte[] EndGetPackageFile(System.IAsyncResult asyncResult)
{
object[] results = this.EndInvoke(asyncResult);
return ((byte[])(results[0]));
}
/// <remarks/>
public void GetPackageFileAsync(string packageGuid, string umbracoVersion)
{
this.GetPackageFileAsync(packageGuid, umbracoVersion, null);
}
/// <remarks/>
public void GetPackageFileAsync(string packageGuid, string umbracoVersion, object userState)
{
if ((this.GetPackageFileOperationCompleted == null))
{
this.GetPackageFileOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetPackageFileOperationCompleted);
}
this.InvokeAsync("GetPackageFile", new object[] {
packageGuid,
umbracoVersion}, this.GetPackageFileOperationCompleted, userState);
}
private void OnGetPackageFileOperationCompleted(object arg)
{
if ((this.GetPackageFileCompleted != null))
{
System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg));
this.GetPackageFileCompleted(this, new GetPackageFileCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState));
}
}
/// <remarks/>
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://packages.umbraco.org/webservices/fetchPackageByVersion", RequestNamespace = "http://packages.umbraco.org/webservices/", ResponseNamespace = "http://packages.umbraco.org/webservices/", Use = System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle = System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
[return: System.Xml.Serialization.XmlElementAttribute(DataType = "base64Binary")]
@@ -1382,7 +1457,9 @@ namespace umbraco.cms.businesslogic.packager.repositories
/// <remarks/>
Version4,
/// <remarks/>
/// <summary>
/// This is apparently the version number we pass in for all installs
/// </summary>
Version41,
/// <remarks/>
@@ -1682,9 +1759,40 @@ namespace umbraco.cms.businesslogic.packager.repositories
}
}
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "4.0.30319.1")]
public delegate void fetchPackageByVersionCompletedEventHandler(object sender, fetchPackageByVersionCompletedEventArgs e);
public delegate void GetPackageFileCompletedEventHandler(object sender, GetPackageFileCompletedEventArgs e);
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "4.0.30319.1")]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
public partial class GetPackageFileCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs
{
private object[] results;
internal GetPackageFileCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) :
base(exception, cancelled, userState)
{
this.results = results;
}
/// <remarks/>
public byte[] Result
{
get
{
this.RaiseExceptionIfNecessary();
return ((byte[])(this.results[0]));
}
}
}
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "4.0.30319.1")]
public delegate void fetchPackageByVersionCompletedEventHandler(object sender, fetchPackageByVersionCompletedEventArgs e);
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "4.0.30319.1")]