// Copyright (c) Umbraco. // See LICENSE for more details. using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Umbraco.Cms.Core.Install.Models; using Umbraco.Cms.Core.Services; using Umbraco.Extensions; namespace Umbraco.Cms.Core.Install.InstallSteps { /// /// Represents a step in the installation that ensure all the required permissions on files and folders are correct. /// [InstallSetupStep( InstallationType.NewInstall | InstallationType.Upgrade, "Permissions", 0, "", PerformsAppRestart = true)] public class FilePermissionsStep : InstallSetupStep { private readonly IFilePermissionHelper _filePermissionHelper; private readonly ILocalizedTextService _localizedTextService; /// /// Initializes a new instance of the class. /// public FilePermissionsStep( IFilePermissionHelper filePermissionHelper, ILocalizedTextService localizedTextService) { _filePermissionHelper = filePermissionHelper; _localizedTextService = localizedTextService; } /// public override Task ExecuteAsync(object model) { // validate file permissions var permissionsOk = _filePermissionHelper.RunFilePermissionTestSuite(out Dictionary> report); var translatedErrors = report.ToDictionary(x => _localizedTextService.Localize("permissions", x.Key), x => x.Value); if (permissionsOk == false) { throw new InstallException("Permission check failed", "permissionsreport", new { errors = translatedErrors }); } return Task.FromResult(null); } /// public override bool RequiresExecution(object model) => true; } }