aboutsummaryrefslogtreecommitdiffhomepage
path: root/application/ApplicationUtils.php
diff options
context:
space:
mode:
authorVirtualTam <virtualtam@flibidi.net>2015-11-11 22:49:58 +0100
committerVirtualTam <virtualtam@flibidi.net>2015-11-24 01:12:35 +0100
commit2e28269baed195d58bbe169841eed176b171db76 (patch)
treef743e785edf708454ab53efa13f38e35f10447e6 /application/ApplicationUtils.php
parentc580024cfbe5f0d290b09157b9665d1b4131d7f4 (diff)
downloadShaarli-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.php69
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 */
5class 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}