Files
Umbraco-CMS/src/Umbraco.Web/Install/InstallPackageController.cs

181 lines
4.7 KiB
C#
Raw Normal View History

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web.Mvc;
using System.Web.Script.Serialization;
using Umbraco.Core;
using umbraco;
namespace Umbraco.Web.Install
{
/// <summary>
/// An MVC controller for the installation process regarding packages
/// </summary>
/// <remarks>
/// Currently this is used for web services however we should/could eventually migrate the whole installer to MVC as it
/// is a bit of a mess currently.
/// </remarks>
[UmbracoInstallAuthorize]
public class InstallPackageController : Controller
{
private readonly ApplicationContext _applicationContext;
public InstallPackageController()
: this(ApplicationContext.Current)
{
}
public InstallPackageController(ApplicationContext applicationContext)
{
_applicationContext = applicationContext;
}
private const string RepoGuid = "65194810-1f85-11dd-bd0b-0800200c9a66";
/// <summary>
/// Empty action, useful for retrieving the base url for this controller
/// </summary>
/// <returns></returns>
public ActionResult Index()
{
throw new NotImplementedException();
}
/// <summary>
/// Connects to the repo, downloads the package and creates the manifest
/// </summary>
/// <param name="kitGuid"></param>
/// <returns></returns>
[HttpPost]
public JsonResult DownloadPackageFiles(Guid kitGuid)
{
var repo = global::umbraco.cms.businesslogic.packager.repositories.Repository.getByGuid(RepoGuid);
if (!repo.HasConnection())
{
return Json(new {success = false, error = "cannot_connect"});
}
var installer = new global::umbraco.cms.businesslogic.packager.Installer();
var tempFile = installer.Import(repo.fetch(kitGuid.ToString()));
installer.LoadConfig(tempFile);
var pId = installer.CreateManifest(tempFile, kitGuid.ToString(), RepoGuid);
return Json(new
{
success = true,
manifestId = pId,
packageFile = tempFile,
percentage = 10,
message = "Downloading starter kit files..."
});
}
/// <summary>
/// Installs the files in the package
/// </summary>
/// <returns></returns>
[HttpPost]
public JsonResult InstallPackageFiles(Guid kitGuid, int manifestId, string packageFile)
{
packageFile = Server.UrlDecode(packageFile);
var installer = new global::umbraco.cms.businesslogic.packager.Installer();
installer.LoadConfig(packageFile);
installer.InstallFiles(manifestId, packageFile);
return Json(new
{
success = true,
manifestId,
packageFile,
percentage = 20,
message = "Installing starter kit files"
});
}
/// <summary>
/// Ensures the app pool is restarted
/// </summary>
/// <returns></returns>
[HttpPost]
public JsonResult RestartAppPool()
{
_applicationContext.RestartApplicationPool(HttpContext);
return Json(new
{
success = true,
percentage = 25,
message = "Installing starter kit files"
});
}
/// <summary>
/// Checks if the app pool has completed restarted
/// </summary>
/// <returns></returns>
[HttpPost]
public JsonResult CheckAppPoolRestart()
{
if (HttpContext.Application.AllKeys.Contains("AppPoolRestarting"))
{
return Json(new
{
successs = false
});
}
return Json(new
{
success = true,
percentage = 30
});
}
/// <summary>
/// Installs the business logic portion of the package after app restart
/// </summary>
/// <returns></returns>
[HttpPost]
public JsonResult InstallBusinessLogic(Guid kitGuid, int manifestId, string packageFile)
{
packageFile = Server.UrlDecode(packageFile);
var installer = new global::umbraco.cms.businesslogic.packager.Installer();
installer.LoadConfig(packageFile);
installer.InstallBusinessLogic(manifestId, packageFile);
return Json(new
{
success = true,
manifestId,
packageFile,
percentage = 70,
message = "Installing starter kit files"
});
}
/// <summary>
/// Cleans up the package installation
/// </summary>
/// <returns></returns>
[HttpPost]
public JsonResult CleanupInstallation(Guid kitGuid, int manifestId, string packageFile)
{
packageFile = Server.UrlDecode(packageFile);
var installer = new global::umbraco.cms.businesslogic.packager.Installer();
installer.LoadConfig(packageFile);
installer.InstallCleanUp(manifestId, packageFile);
library.RefreshContent();
return Json(new
{
success = true,
manifestId,
packageFile,
percentage = 100,
message = "Starter kit has been installed"
});
}
}
}