diff options
author | VirtualTam <virtualtam@flibidi.net> | 2015-11-11 22:49:58 +0100 |
---|---|---|
committer | VirtualTam <virtualtam@flibidi.net> | 2015-11-24 01:12:35 +0100 |
commit | 2e28269baed195d58bbe169841eed176b171db76 (patch) | |
tree | f743e785edf708454ab53efa13f38e35f10447e6 /application/ApplicationUtils.php | |
parent | c580024cfbe5f0d290b09157b9665d1b4131d7f4 (diff) | |
download | Shaarli-2e28269baed195d58bbe169841eed176b171db76.tar.gz Shaarli-2e28269baed195d58bbe169841eed176b171db76.tar.zst Shaarli-2e28269baed195d58bbe169841eed176b171db76.zip |
install: check file/directory permissions for Shaarli resources
Relates to #40
Relates to #372
Additions:
- FileUtils: IOException
- ApplicationUtils:
- check if Shaarli resources are accessible with sufficient permissions
- basic test coverage
- index.php:
- check access permissions and redirect to an error page if needed:
- before running the first installation
Modifications:
- LinkDB:
- factorize datastore write code
- check if the datastore
(exists AND is writeable) OR (doesn't exist AND its parent dir is writable)
- raise an IOException if needed
Signed-off-by: VirtualTam <virtualtam@flibidi.net>
Diffstat (limited to 'application/ApplicationUtils.php')
-rw-r--r-- | application/ApplicationUtils.php | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/application/ApplicationUtils.php b/application/ApplicationUtils.php new file mode 100644 index 00000000..6fb07f36 --- /dev/null +++ b/application/ApplicationUtils.php | |||
@@ -0,0 +1,69 @@ | |||
1 | <?php | ||
2 | /** | ||
3 | * Shaarli (application) utilities | ||
4 | */ | ||
5 | class ApplicationUtils | ||
6 | { | ||
7 | |||
8 | /** | ||
9 | * Checks Shaarli has the proper access permissions to its resources | ||
10 | * | ||
11 | * @param array $globalConfig The $GLOBALS['config'] array | ||
12 | * | ||
13 | * @return array A list of the detected configuration issues | ||
14 | */ | ||
15 | public static function checkResourcePermissions($globalConfig) | ||
16 | { | ||
17 | $errors = array(); | ||
18 | |||
19 | // Check script and template directories are readable | ||
20 | foreach (array( | ||
21 | 'application', | ||
22 | 'inc', | ||
23 | 'plugins', | ||
24 | $globalConfig['RAINTPL_TPL'] | ||
25 | ) as $path) { | ||
26 | if (! is_readable(realpath($path))) { | ||
27 | $errors[] = '"'.$path.'" directory is not readable'; | ||
28 | } | ||
29 | } | ||
30 | |||
31 | // Check cache and data directories are readable and writeable | ||
32 | foreach (array( | ||
33 | $globalConfig['CACHEDIR'], | ||
34 | $globalConfig['DATADIR'], | ||
35 | $globalConfig['PAGECACHE'], | ||
36 | $globalConfig['RAINTPL_TMP'] | ||
37 | ) as $path) { | ||
38 | if (! is_readable(realpath($path))) { | ||
39 | $errors[] = '"'.$path.'" directory is not readable'; | ||
40 | } | ||
41 | if (! is_writable(realpath($path))) { | ||
42 | $errors[] = '"'.$path.'" directory is not writable'; | ||
43 | } | ||
44 | } | ||
45 | |||
46 | // Check configuration files are readable and writeable | ||
47 | foreach (array( | ||
48 | $globalConfig['CONFIG_FILE'], | ||
49 | $globalConfig['DATASTORE'], | ||
50 | $globalConfig['IPBANS_FILENAME'], | ||
51 | $globalConfig['LOG_FILE'], | ||
52 | $globalConfig['UPDATECHECK_FILENAME'] | ||
53 | ) as $path) { | ||
54 | if (! is_file(realpath($path))) { | ||
55 | # the file may not exist yet | ||
56 | continue; | ||
57 | } | ||
58 | |||
59 | if (! is_readable(realpath($path))) { | ||
60 | $errors[] = '"'.$path.'" file is not readable'; | ||
61 | } | ||
62 | if (! is_writable(realpath($path))) { | ||
63 | $errors[] = '"'.$path.'" file is not writable'; | ||
64 | } | ||
65 | } | ||
66 | |||
67 | return $errors; | ||
68 | } | ||
69 | } | ||