Exemple #1
0
        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));
        }
Exemple #2
0
 public Task <IActionResult> Put(int id, [FromBody] ExtensionPackageReferenceWithActions package) => InstallExtension(package);