Add basic check for folder permissions for quicker troubleshooting

This commit is contained in:
Timothy Warren 2018-08-16 12:10:24 -04:00
parent b3474ddff2
commit ff97cc1cb2
5 changed files with 92 additions and 25 deletions

3
.gitignore vendored
View File

@ -29,4 +29,5 @@ build/humbuglog.txt
public/images/anime/** public/images/anime/**
public/images/avatars/** public/images/avatars/**
public/images/manga/** public/images/manga/**
public/images/characters/** public/images/characters/**
public/images/people/**

View File

@ -24,6 +24,7 @@
<script defer="defer" src="<?= $urlGenerator->assetUrl('js.php/g/base') ?>"></script> <script defer="defer" src="<?= $urlGenerator->assetUrl('js.php/g/base') ?>"></script>
</head> </head>
<body class="<?= $escape->attr($url_type) ?> list"> <body class="<?= $escape->attr($url_type) ?> list">
<?php include 'setup-check.php' ?>
<header> <header>
<?php <?php
include 'main-menu.php'; include 'main-menu.php';

27
app/views/setup-check.php Normal file
View File

@ -0,0 +1,27 @@
<?php
$setupErrors = \Aviat\AnimeClient\checkFolderPermissions($container->get('config'));
?>
<?php if ( ! empty($setupErrors)): ?>
<aside class="message error">
<h1>Issues with server setup:</h1>
<?php if (array_key_exists('missing', $setupErrors)): ?>
<h3>The following folders need to be created, and writable.</h3>
<ul>
<?php foreach ($setupErrors['missing'] as $error): ?>
<li><?= $error ?></li>
<?php endforeach ?>
</ul>
<?php endif ?>
<?php if (array_key_exists('writable', $setupErrors)): ?>
<h3>The following folders are not writable by the server.</h3>
<ul>
<?php foreach($setupErrors['writable'] as $error): ?>
<li><?= $error ?></li>
<?php endforeach ?>
</ul>
<?php endif ?>
</aside>
<?php endif ?>

View File

View File

@ -16,40 +16,78 @@
namespace Aviat\AnimeClient; namespace Aviat\AnimeClient;
use Aviat\Ion\ConfigInterface;
use Yosymfony\Toml\Toml; use Yosymfony\Toml\Toml;
if ( ! \function_exists('Aviat\AnimeClient\loadToml')) /**
* Load configuration options from .toml files
*
* @param string $path - Path to load config
* @return array
*/
function loadToml(string $path): array
{ {
/** $output = [];
* Load configuration options from .toml files $files = glob("{$path}/*.toml");
*
* @param string $path - Path to load config foreach ($files as $file)
* @return array
*/
function loadToml(string $path): array
{ {
$output = []; $key = str_replace('.toml', '', basename($file));
$files = glob("{$path}/*.toml"); $config = Toml::parseFile($file);
foreach ($files as $file) if ($key === 'config')
{ {
$key = str_replace('.toml', '', basename($file)); foreach($config as $name => $value)
$toml = file_get_contents($file);
$config = Toml::parse($toml);
if ($key === 'config')
{ {
foreach($config as $name => $value) $output[$name] = $value;
{
$output[$name] = $value;
}
continue;
} }
$output[$key] = $config; continue;
} }
return $output; $output[$key] = $config;
} }
return $output;
} }
/**
* Check that folder permissions are correct for proper operation
*
* @param ConfigInterface $config
* @return array
*/
function checkFolderPermissions(ConfigInterface $config): array
{
$errors = [];
$publicDir = $config->get('asset_dir');
$pathMap = [
'app/logs' => realpath(__DIR__ . '/../app/logs'),
'public/js/cache' => "{$publicDir}/js/cache",
'public/images/avatars' => "{$publicDir}/images/avatars",
'public/images/anime' => "{$publicDir}/images/anime",
'public/images/characters' => "{$publicDir}/images/characters",
'public/images/manga' => "{$publicDir}/images/manga",
'public/images/people' => "{$publicDir}/images/people",
];
foreach ($pathMap as $pretty => $actual)
{
// Make sure the folder exists first
if ( ! is_dir($actual))
{
$errors['missing'][] = $pretty;
continue;
}
$writable = is_writable($actual) && is_executable($actual);
if ( ! $writable)
{
$errors['writable'][] = $pretty;
}
}
return $errors;
}