Exemple #1
0
        private async Task ProcessJobTaskResult(Task jobTask, string jobId, ExtensionPostInstallActions postInstallActions = ExtensionPostInstallActions.None)
        {
            ExtensionsRestoreJob job = await GetJob(jobId);

            if (job == null)
            {
                return;
            }

            if (jobTask.IsFaulted)
            {
                job.Status = ExtensionsRestoreStatus.Failed;
                job.Error  = jobTask.Exception.InnerException?.Message;
            }
            else
            {
                job.Status = ExtensionsRestoreStatus.Succeeded;
            }

            job.EndTime = DateTimeOffset.Now;

            if (postInstallActions.HasFlag(ExtensionPostInstallActions.BringAppOnline))
            {
                await FileMonitoringService.SetAppOfflineState(_applicationHostOptions.Value.ScriptPath, false);
            }

            await SaveJob(job);
        }
Exemple #2
0
        public async Task <IActionResult> InstallExtension(ExtensionPackageReference package, bool verifyConflict = true)
        {
            if (package == null)
            {
                return(BadRequest());
            }

            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;
            var    addTask = _extensionsManager.AddExtensions(package)
                             .ContinueWith(t => ProcessJobTaskResult(t, jobId));

            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 #3
0
        private async Task SaveJob(ExtensionsRestoreJob job)
        {
            string jobPath = Path.Combine(GetJobBasePath(), $"{job.Id}.json");

            Directory.CreateDirectory(Path.GetDirectoryName(jobPath));

            await FileUtility.WriteAsync(jobPath, JsonConvert.SerializeObject(job));
        }
        private async Task <ExtensionsRestoreJob> CreateJob()
        {
            var job = new ExtensionsRestoreJob();

            await SaveJob(job);

            return(job);
        }
Exemple #5
0
        public async Task <IActionResult> GetJobs(string id)
        {
            ExtensionsRestoreJob job = await GetJob(id);

            if (job == null)
            {
                return(NotFound());
            }

            var apiModel = ApiModelUtility.CreateApiModel(job, Request);

            return(Ok(apiModel));
        }
Exemple #6
0
        private async Task <ExtensionsRestoreJob> CreateJob(ExtensionPackageReference package)
        {
            var job = new ExtensionsRestoreJob()
            {
                Properties = new Dictionary <string, string>()
                {
                    { "id", package.Id },
                    { "version", package.Version }
                }
            };

            await SaveJob(job);

            return(job);
        }
Exemple #7
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 #8
0
        private async Task ProcessJobTaskResult(Task jobTask, string jobId)
        {
            ExtensionsRestoreJob job = await GetJob(jobId);

            if (job == null)
            {
                return;
            }

            if (jobTask.IsFaulted)
            {
                job.Status = ExtensionsRestoreStatus.Failed;
                job.Error  = jobTask.Exception.InnerException?.Message;
            }
            else
            {
                job.Status = ExtensionsRestoreStatus.Succeeded;
            }

            job.EndTime = DateTimeOffset.Now;

            await SaveJob(job);
        }