From 1c28e78a6af413541c5616b78a13c534564df902 Mon Sep 17 00:00:00 2001 From: nuxsmin Date: Mon, 4 Aug 2014 02:49:10 +0200 Subject: [PATCH] * Change updater source to GitHub branches which gives more info about changes. --- ajax/ajax_checkUpds.php | 61 +++++++++++++------------- ajax/ajax_getContent.php | 2 +- inc/util.class.php | 92 +++++++++++++++++++++------------------- js/functions.js | 2 +- 4 files changed, 82 insertions(+), 75 deletions(-) diff --git a/ajax/ajax_checkUpds.php b/ajax/ajax_checkUpds.php index d8864939f..d1a555a77 100644 --- a/ajax/ajax_checkUpds.php +++ b/ajax/ajax_checkUpds.php @@ -1,46 +1,47 @@ . -* -*/ +/** + * sysPass + * + * @author nuxsmin + * @link http://syspass.org + * @copyright 2012-2014 Rubén Domínguez nuxsmin@syspass.org + * + * This file is part of sysPass. + * + * sysPass is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * sysPass is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with sysPass. If not, see . + * + */ define('APP_ROOT', '..'); -require_once APP_ROOT.DIRECTORY_SEPARATOR.'inc'.DIRECTORY_SEPARATOR.'init.php'; +require_once APP_ROOT . DIRECTORY_SEPARATOR . 'inc' . DIRECTORY_SEPARATOR . 'init.php'; SP_Util::checkReferer('GET'); $checkVersion = SP_Common::parseParams('s', 'UPDATED', false, true); // Una vez por sesión -if ( ! $checkVersion ){ +if (!$checkVersion) { $_SESSION["UPDATED"] = $checkVersion = SP_Util::checkUpdates(); } session_write_close(); -if ( is_array($checkVersion) ){ - echo ' '.$checkVersion['version'].''; -} elseif ( $checkVersion == true ){ - echo ''; -} elseif ( $checkVersion == false ){ +if (is_array($checkVersion)) { + $title = _('Descargar nueva versión') . ' - ' . $checkVersion['version'] . '

' . nl2br($checkVersion['description']); + echo ' ' . $checkVersion['title'] . ''; +} elseif ($checkVersion === true) { + echo ''; +} elseif ($checkVersion === false) { echo '!'; } \ No newline at end of file diff --git a/ajax/ajax_getContent.php b/ajax/ajax_getContent.php index bdb3ac07e..1e07974e4 100644 --- a/ajax/ajax_getContent.php +++ b/ajax/ajax_getContent.php @@ -401,6 +401,6 @@ // Se comprueba si hay actualizaciones. // Es necesario que se haga al final de obtener el contenido ya que la // consulta ajax detiene al resto si se ejecuta antes -if ($_SESSION['uisadminapp'] && SP_Config::getValue('checkupdates') === 1 && !SP_Common::parseParams('s', 'UPDATED', false, true)) { +if ($_SESSION['uisadminapp'] && SP_Config::getValue('checkupdates') === true && !SP_Common::parseParams('s', 'UPDATED', false, true)) { echo ''; } \ No newline at end of file diff --git a/inc/util.class.php b/inc/util.class.php index 3888ae590..0e310bfb2 100644 --- a/inc/util.class.php +++ b/inc/util.class.php @@ -174,7 +174,7 @@ public static function ldapIsAvailable() */ public static function curlIsAvailable() { - return (function_exists(curl_init)); + return (function_exists('curl_init')); } /** @@ -187,63 +187,69 @@ public static function getVersionString() } /** - * @brief Comprobar si hay actualizaciones de sysPass disponibles desde internet (sourceforge.net) + * @brief Comprobar si hay actualizaciones de sysPass disponibles desde internet (github.com) * @return array|bool * - * Esta función comprueba el feed RSS de sourceforge.net y lo parsea para verificar si la aplicación está actualizada + * Esta función hace una petición a GitHub y parsea el JSON devuelto para verificar si la aplicación está actualizada */ public static function checkUpdates() { - //if ( ! self::curlIsAvailable() || ! SP_Config::getValue('checkupdates') ){ - if (!SP_Config::getValue('checkupdates')) { + if (! self::curlIsAvailable() || !SP_Config::getValue('checkupdates')) { return false; } -// $ch = curl_init("http://sourceforge.net/api/file/index/project-id/775555/mtime/desc/limit/1/rss"); -// -// curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); -// curl_setopt($ch, CURLOPT_HEADER, 0); -// -// if ( ! $data = curl_exec($ch) ) return false; -// -// curl_close($ch); + $githubUrl = 'https://api.github.com/repos/nuxsmin/sysPass/releases'; + $ch = curl_init($githubUrl); - $feedUrl = 'https://sourceforge.net/api/file/index/project-id/1257402/mtime/desc/limit/20/rss'; - $feed = file_get_contents($feedUrl); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + curl_setopt($ch, CURLOPT_HEADER, 0); + curl_setopt($ch, CURLOPT_USERAGENT, "sysPass App Updater"); + curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); + curl_setopt($ch, CURLOPT_TIMEOUT, 60); - if ($feed) { - $xmlUpd = new SimpleXMLElement($feed, LIBXML_NOCDATA); - } else { + $data = curl_exec($ch); + + if ($data === false) { return false; + echo 'Curl error: ' . curl_error($ch); } - if ($xmlUpd->channel->item->title) { - - $pubVer = ''; - - foreach ($xmlUpd->channel->item as $item) { - $url = (string)$item->link; - $title = (string)$item->title; - $description = (string)$item->description; - - if (preg_match("/.*\/sysPass_(\d)\.(\d{1,})\.(\d{1,})(\-[a-z0-9]+)?\.(tar\.gz|zip)$/", $title, $pubVer)) { - break; - } - } - - if (is_array($pubVer) && SP_Init::isLoggedIn()) { - $appVersion = implode('', self::getVersion()); - $pubVersion = $pubVer[1] . $pubVer[2] . $pubVer[3]; - - if ($pubVersion > $appVersion) { - $version = $pubVer[1] . '.' . $pubVer[2] . '.' . $pubVer[3]; - return array('version' => $version, 'url' => $url); - } else { - return true; - } + curl_close($ch); + + $updateInfo = json_decode($data); + + // $updateInfo[0]->tag_name + // $updateInfo[0]->name + // $updateInfo[0]->body + // $updateInfo[0]->tarball_url + // $updateInfo[0]->zipball_url + // $updateInfo[0]->published_at + // $updateInfo[0]->html_url + + $version = $updateInfo[0]->tag_name; + $url = $updateInfo[0]->html_url; + $title = $updateInfo[0]->name; + $description = $updateInfo[0]->body; + $date = $updateInfo[0]->published_at; + + preg_match("/v?(\d+)\.(\d+)\.(\d+)\.(\d+)(\-[a-z0-9.]+)?$/", $version, $realVer); + + if (is_array($realVer) && SP_Init::isLoggedIn()) { + $appVersion = implode('', self::getVersion(true)); + $pubVersion = $realVer[1] . $realVer[2] . $realVer[3] . $realVer[4]; + + if ($pubVersion > $appVersion) { + return array( + 'version' => $version, + 'url' => $url, + 'title' => $title, + 'description' => $description, + 'date' => $date); } else { - return false; + return true; } + } else { + return false; } } diff --git a/js/functions.js b/js/functions.js index d21671ec7..6bd296df8 100644 --- a/js/functions.js +++ b/js/functions.js @@ -731,7 +731,7 @@ function checkUpds() { type: 'GET', dataType: 'html', url: APP_ROOT + '/ajax/ajax_checkUpds.php', - timeout: 5000, + timeout: 10000, success: function (response) { $('#updates').html(response); },