public async Task <IActionResult> InstallExtension(ExtensionPackageReferenceWithActions package, bool verifyConflict = true) { if (package == null) { return(BadRequest()); } if (_extensionBundleManager.IsExtensionBundleConfigured()) { return(BadRequest(Resources.ExtensionBundleBadRequestInstall)); } if (!_environment.IsPersistentFileSystemAvailable()) { return(BadRequest(Resources.ErrorInstallingExtension)); } if (verifyConflict) { // If a different version of this extension is already installed, conflict: var extensions = await _extensionsManager.GetExtensions(); if (extensions.Any(e => e.Id.Equals(package.Id) && !e.Version.Equals(package.Version))) { return(StatusCode(StatusCodes.Status409Conflict)); } } ExtensionsRestoreJob job = await CreateJob(package); string jobId = job.Id; Enum.TryParse(package.PostInstallActions, true, out ExtensionPostInstallActions postInstallActions); var addTask = _extensionsManager.AddExtensions(package) .ContinueWith(t => ProcessJobTaskResult(t, jobId, postInstallActions)); var apiModel = ApiModelUtility.CreateApiModel(job, Request, $"jobs/{job.Id}"); string action = $"{Request.Scheme}://{Request.Host.ToUriComponent()}{Url.Action(nameof(GetJobs), "Extensions", new { id = job.Id })}{Request.QueryString}"; return(Accepted(action, apiModel)); }
public Task <IActionResult> Put(int id, [FromBody] ExtensionPackageReferenceWithActions package) => InstallExtension(package);