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/LinkDB.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/LinkDB.php')
-rw-r--r-- | application/LinkDB.php | 35 |
1 files changed, 26 insertions, 9 deletions
diff --git a/application/LinkDB.php b/application/LinkDB.php index 84733505..15fadbc3 100644 --- a/application/LinkDB.php +++ b/application/LinkDB.php | |||
@@ -212,11 +212,7 @@ You use the community supported version of the original Shaarli project, by Seba | |||
212 | $this->_links[$link['linkdate']] = $link; | 212 | $this->_links[$link['linkdate']] = $link; |
213 | 213 | ||
214 | // Write database to disk | 214 | // Write database to disk |
215 | // TODO: raise an exception if the file is not write-able | 215 | $this->writeDB(); |
216 | file_put_contents( | ||
217 | $this->_datastore, | ||
218 | self::$phpPrefix.base64_encode(gzdeflate(serialize($this->_links))).self::$phpSuffix | ||
219 | ); | ||
220 | } | 216 | } |
221 | 217 | ||
222 | /** | 218 | /** |
@@ -270,6 +266,28 @@ You use the community supported version of the original Shaarli project, by Seba | |||
270 | /** | 266 | /** |
271 | * Saves the database from memory to disk | 267 | * Saves the database from memory to disk |
272 | * | 268 | * |
269 | * @throws IOException the datastore is not writable | ||
270 | */ | ||
271 | private function writeDB() | ||
272 | { | ||
273 | if (is_file($this->_datastore) && !is_writeable($this->_datastore)) { | ||
274 | // The datastore exists but is not writeable | ||
275 | throw new IOException($this->_datastore); | ||
276 | } else if (!is_file($this->_datastore) && !is_writeable(dirname($this->_datastore))) { | ||
277 | // The datastore does not exist and its parent directory is not writeable | ||
278 | throw new IOException(dirname($this->_datastore)); | ||
279 | } | ||
280 | |||
281 | file_put_contents( | ||
282 | $this->_datastore, | ||
283 | self::$phpPrefix.base64_encode(gzdeflate(serialize($this->_links))).self::$phpSuffix | ||
284 | ); | ||
285 | |||
286 | } | ||
287 | |||
288 | /** | ||
289 | * Saves the database from memory to disk | ||
290 | * | ||
273 | * @param string $pageCacheDir page cache directory | 291 | * @param string $pageCacheDir page cache directory |
274 | */ | 292 | */ |
275 | public function savedb($pageCacheDir) | 293 | public function savedb($pageCacheDir) |
@@ -278,10 +296,9 @@ You use the community supported version of the original Shaarli project, by Seba | |||
278 | // TODO: raise an Exception instead | 296 | // TODO: raise an Exception instead |
279 | die('You are not authorized to change the database.'); | 297 | die('You are not authorized to change the database.'); |
280 | } | 298 | } |
281 | file_put_contents( | 299 | |
282 | $this->_datastore, | 300 | $this->writeDB(); |
283 | self::$phpPrefix.base64_encode(gzdeflate(serialize($this->_links))).self::$phpSuffix | 301 | |
284 | ); | ||
285 | invalidateCaches($pageCacheDir); | 302 | invalidateCaches($pageCacheDir); |
286 | } | 303 | } |
287 | 304 | ||