2014-02-26 16:01:31 +01:00
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.IO;
|
|
|
|
|
using umbraco;
|
|
|
|
|
using Umbraco.Core;
|
|
|
|
|
using Umbraco.Core.IO;
|
|
|
|
|
using Umbraco.Web.Install.Models;
|
|
|
|
|
|
|
|
|
|
namespace Umbraco.Web.Install.InstallSteps
|
|
|
|
|
{
|
2014-03-04 19:20:36 +11:00
|
|
|
[InstallSetupStep(InstallationType.NewInstall | InstallationType.Upgrade,
|
2014-03-05 11:34:42 +11:00
|
|
|
"Permissions", 0, "Ensuring your file permissions are set correctly",
|
|
|
|
|
PerformsAppRestart = true)]
|
2014-02-26 16:01:31 +01:00
|
|
|
internal class FilePermissionsStep : InstallSetupStep<object>
|
|
|
|
|
{
|
2014-03-04 11:16:42 +11:00
|
|
|
public override InstallSetupResult Execute(object model)
|
2014-02-26 16:01:31 +01:00
|
|
|
{
|
|
|
|
|
//first validate file permissions
|
|
|
|
|
var permissionsOk = true;
|
|
|
|
|
var report = new List<string>();
|
|
|
|
|
|
|
|
|
|
// Test default dir permissions
|
|
|
|
|
foreach (var dir in FilePermissionHelper.PermissionDirs)
|
|
|
|
|
{
|
|
|
|
|
var result = SaveAndDeleteFile(IOHelper.MapPath(dir + "/configWizardPermissionTest.txt"));
|
|
|
|
|
if (!result)
|
|
|
|
|
{
|
|
|
|
|
permissionsOk = false;
|
|
|
|
|
report.Add("Directory: ./" + dir);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Test default file permissions
|
|
|
|
|
foreach (var file in FilePermissionHelper.PermissionFiles)
|
|
|
|
|
{
|
|
|
|
|
var result = OpenFileForWrite(IOHelper.MapPath(file));
|
|
|
|
|
if (!result)
|
|
|
|
|
{
|
|
|
|
|
permissionsOk = false;
|
|
|
|
|
report.Add("File: " + file);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Test package dir permissions
|
|
|
|
|
string packageResult = "";
|
|
|
|
|
foreach (var dir in FilePermissionHelper.PackagesPermissionsDirs)
|
|
|
|
|
{
|
|
|
|
|
var result =
|
|
|
|
|
SaveAndDeleteFile(IOHelper.MapPath(dir + "/configWizardPermissionTest.txt"));
|
|
|
|
|
if (!result)
|
|
|
|
|
{
|
|
|
|
|
permissionsOk = false;
|
|
|
|
|
report.Add("Directory: " + dir);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Test umbraco.xml file
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
content.Instance.PersistXmlToFile();
|
|
|
|
|
}
|
|
|
|
|
catch (Exception ee)
|
|
|
|
|
{
|
|
|
|
|
permissionsOk = false;
|
|
|
|
|
string tempFile = SystemFiles.ContentCacheXml;
|
|
|
|
|
|
|
|
|
|
if (tempFile.Substring(0, 1) == "/")
|
|
|
|
|
tempFile = tempFile.Substring(1, tempFile.Length - 1);
|
|
|
|
|
|
|
|
|
|
report.Add(string.Format("File ./{0}. Error: {1}", tempFile, ee));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Test creation of folders
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
string tempDir = IOHelper.MapPath(SystemDirectories.Media + "/testCreatedByConfigWizard");
|
|
|
|
|
Directory.CreateDirectory(tempDir);
|
|
|
|
|
Directory.Delete(tempDir);
|
|
|
|
|
}
|
|
|
|
|
catch
|
|
|
|
|
{
|
|
|
|
|
permissionsOk = false;
|
|
|
|
|
report.Add("Folder creation failed");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (permissionsOk == false)
|
|
|
|
|
{
|
2014-03-04 16:21:45 +11:00
|
|
|
throw new InstallException("Permission check failed", "permissionsReport", new { errors = report });
|
2014-02-26 16:01:31 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private bool OpenFileForWrite(string file)
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
File.AppendText(file).Close();
|
|
|
|
|
}
|
|
|
|
|
catch
|
|
|
|
|
{
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static bool SaveAndDeleteFile(string file)
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
//first check if the directory of the file exists, and if not try to create that first.
|
|
|
|
|
var fi = new FileInfo(file);
|
|
|
|
|
if (!fi.Directory.Exists)
|
|
|
|
|
{
|
|
|
|
|
fi.Directory.Create();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
File.WriteAllText(file,
|
|
|
|
|
"This file has been created by the umbraco configuration wizard. It is safe to delete it!");
|
|
|
|
|
File.Delete(file);
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
catch
|
|
|
|
|
{
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2014-03-04 11:16:42 +11:00
|
|
|
public override bool RequiresExecution()
|
|
|
|
|
{
|
|
|
|
|
return true;
|
|
|
|
|
}
|
2014-02-26 16:01:31 +01:00
|
|
|
}
|
|
|
|
|
}
|