From b786c8836f0576d4feb1543471950c5d24bc7939 Mon Sep 17 00:00:00 2001 From: ArthurHoaro Date: Tue, 21 Mar 2017 20:08:40 +0100 Subject: [PATCH] Set Shaarli's version only in shaarli_version.php file --- application/ApplicationUtils.php | 32 ++++++++++++++++++++++++++-- index.php | 7 +++---- tests/ApplicationUtilsTest.php | 36 +++++++++++++++++++++++++------- 3 files changed, 62 insertions(+), 13 deletions(-) diff --git a/application/ApplicationUtils.php b/application/ApplicationUtils.php index 94c49040..85dcbeeb 100644 --- a/application/ApplicationUtils.php +++ b/application/ApplicationUtils.php @@ -4,9 +4,13 @@ */ class ApplicationUtils { + /** + * @var string File containing the current version + */ + public static $VERSION_FILE = 'shaarli_version.php'; + private static $GIT_URL = 'https://raw.githubusercontent.com/shaarli/Shaarli'; private static $GIT_BRANCHES = array('latest', 'stable'); - private static $VERSION_FILE = 'shaarli_version.php'; private static $VERSION_START_TAG = ''; @@ -29,6 +33,30 @@ class ApplicationUtils return false; } + return $data; + } + + /** + * Retrieve the version from a remote URL or a file. + * + * @param string $remote URL or file to fetch. + * @param int $timeout For URLs fetching. + * + * @return bool|string The version or false if it couldn't be retrieved. + */ + public static function getVersion($remote, $timeout = 2) + { + if (startsWith($remote, 'http')) { + if (($data = static::getLatestGitVersionCode($remote, $timeout)) === false) { + return false; + } + } else { + if (! is_file($remote)) { + return false; + } + $data = file_get_contents($remote); + } + return str_replace( array(self::$VERSION_START_TAG, self::$VERSION_END_TAG, PHP_EOL), array('', '', ''), @@ -90,7 +118,7 @@ class ApplicationUtils // Late Static Binding allows overriding within tests // See http://php.net/manual/en/language.oop5.late-static-bindings.php - $latestVersion = static::getLatestGitVersionCode( + $latestVersion = static::getVersion( self::$GIT_URL . '/' . $branch . '/' . self::$VERSION_FILE ); diff --git a/index.php b/index.php index bf35f1d4..cf85197a 100644 --- a/index.php +++ b/index.php @@ -1,8 +1,6 @@ /shaarli/ define('WEB_PATH', substr($_SERVER['REQUEST_URI'], 0, 1+strrpos($_SERVER['REQUEST_URI'], '/', 0))); @@ -90,6 +87,8 @@ try { exit; } +define('shaarli_version', ApplicationUtils::getVersion(__DIR__ .'/'. ApplicationUtils::$VERSION_FILE)); + // Force cookie path (but do not change lifetime) $cookie = session_get_cookie_params(); $cookiedir = ''; diff --git a/tests/ApplicationUtilsTest.php b/tests/ApplicationUtilsTest.php index ef4f46a8..ebdc365c 100644 --- a/tests/ApplicationUtilsTest.php +++ b/tests/ApplicationUtilsTest.php @@ -17,7 +17,7 @@ class FakeApplicationUtils extends ApplicationUtils /** * Toggle HTTP requests, allow overriding the version code */ - public static function getLatestGitVersionCode($url, $timeout=0) + public static function getVersion($url, $timeout=0) { return self::$VERSION_CODE; } @@ -44,18 +44,28 @@ class ApplicationUtilsTest extends PHPUnit_Framework_TestCase } } + /** + * Remove test version file if it exists + */ + public function tearDown() + { + if (is_file('sandbox/version.php')) { + unlink('sandbox/version.php'); + } + } + /** * Retrieve the latest version code available on Git * * Expected format: Semantic Versioning - major.minor.patch */ - public function testGetLatestGitVersionCode() + public function testGetVersionCode() { $testTimeout = 10; $this->assertEquals( '0.5.4', - ApplicationUtils::getLatestGitVersionCode( + ApplicationUtils::getVersion( 'https://raw.githubusercontent.com/shaarli/Shaarli/' .'v0.5.4/shaarli_version.php', $testTimeout @@ -63,7 +73,7 @@ class ApplicationUtilsTest extends PHPUnit_Framework_TestCase ); $this->assertRegExp( self::$versionPattern, - ApplicationUtils::getLatestGitVersionCode( + ApplicationUtils::getVersion( 'https://raw.githubusercontent.com/shaarli/Shaarli/' .'master/shaarli_version.php', $testTimeout @@ -72,14 +82,26 @@ class ApplicationUtilsTest extends PHPUnit_Framework_TestCase } /** - * Attempt to retrieve the latest version from an invalid URL + * Attempt to retrieve the latest version from an invalid File + */ + public function testGetVersionCodeFromFile() + { + file_put_contents('sandbox/version.php', ''. PHP_EOL); + $this->assertEquals( + '1.2.3', + ApplicationUtils::getVersion('sandbox/version.php', 1) + ); + } + + /** + * Attempt to retrieve the latest version from an invalid File */ - public function testGetLatestGitVersionCodeInvalidUrl() + public function testGetVersionCodeInvalidFile() { $oldlog = ini_get('error_log'); ini_set('error_log', '/dev/null'); $this->assertFalse( - ApplicationUtils::getLatestGitVersionCode('htttp://null.io', 1) + ApplicationUtils::getVersion('idontexist', 1) ); ini_set('error_log', $oldlog); } -- 2.41.0