#86: Switched the update check from Github to Gitea
This commit is contained in:
parent
1220e87bc9
commit
4456cd5fa7
@ -15,6 +15,7 @@ use App\Http\Requests\SaveSettingsRequest;
|
|||||||
use App\Label;
|
use App\Label;
|
||||||
use App\Mail\TestMailConfig;
|
use App\Mail\TestMailConfig;
|
||||||
use App\Photo;
|
use App\Photo;
|
||||||
|
use App\Services\GiteaService;
|
||||||
use App\Services\GithubService;
|
use App\Services\GithubService;
|
||||||
use App\Services\PhotoService;
|
use App\Services\PhotoService;
|
||||||
use App\Storage;
|
use App\Storage;
|
||||||
@ -46,18 +47,18 @@ class DefaultController extends Controller
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
$githubService = new GithubService();
|
$giteaService = new GiteaService();
|
||||||
$releaseInfo = $githubService->checkForLatestRelease();
|
$releaseInfo = $giteaService->checkForLatestRelease();
|
||||||
|
|
||||||
// Convert the publish date so we can re-format it with the user's settings
|
// Convert the publish date so we can re-format it with the user's settings
|
||||||
$publishDate = \DateTime::createFromFormat('Y-m-d\TH:i:s\Z', $releaseInfo->published_at);
|
$publishDate = \DateTime::createFromFormat('Y-m-d\TH:i:sP', $releaseInfo->published_at);
|
||||||
|
|
||||||
// HTML-ify the body text
|
// HTML-ify the body text
|
||||||
$body = nl2br($releaseInfo->body);
|
$body = nl2br($releaseInfo->body);
|
||||||
$body = preg_replace('/\*\*(.+)\*\*/', '<b>$1</b>', $body);
|
$body = preg_replace('/\*\*(.+)\*\*/', '<b>$1</b>', $body);
|
||||||
|
|
||||||
// Remove the "v" from the release name
|
// Remove the "v" from the release name
|
||||||
$version = substr($releaseInfo->name, 1);
|
$version = substr($releaseInfo->tag_name, 1);
|
||||||
|
|
||||||
// Determine if we can upgrade
|
// Determine if we can upgrade
|
||||||
$canUpgrade = version_compare($version, config('app.version')) > 0;
|
$canUpgrade = version_compare($version, config('app.version')) > 0;
|
||||||
|
112
app/Services/GiteaService.php
Normal file
112
app/Services/GiteaService.php
Normal file
@ -0,0 +1,112 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Services;
|
||||||
|
|
||||||
|
class GiteaService
|
||||||
|
{
|
||||||
|
private $cacheFile = null;
|
||||||
|
private $config = [];
|
||||||
|
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
$this->config = config('services.gitea');
|
||||||
|
$this->cacheFile = storage_path('app/gitea_cache.txt');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function checkForLatestRelease()
|
||||||
|
{
|
||||||
|
$cacheData = null;
|
||||||
|
|
||||||
|
if ($this->doesCacheExist())
|
||||||
|
{
|
||||||
|
// Get the etag from the cache
|
||||||
|
$cacheData = $this->getCacheData();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Lookup and store the version information
|
||||||
|
$statusCode = -1;
|
||||||
|
$result = $this->getLatestReleaseFromGitea($statusCode);
|
||||||
|
|
||||||
|
if ($statusCode == 200)
|
||||||
|
{
|
||||||
|
$releases = json_decode($result[1]);
|
||||||
|
|
||||||
|
$latestRelease = null;
|
||||||
|
foreach ($releases as $release)
|
||||||
|
{
|
||||||
|
if (is_null($latestRelease) || version_compare($release->tag_name, $latestRelease->tag_name) > 0)
|
||||||
|
{
|
||||||
|
$latestRelease = $release;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$cacheData = $this->setCacheData($latestRelease);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// GitHub compatibility
|
||||||
|
$cacheData->html_url = sprintf($this->config['releases_url'], $this->config['repo_owner'], $this->config['repo_name']);
|
||||||
|
|
||||||
|
return $cacheData;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function doesCacheExist()
|
||||||
|
{
|
||||||
|
$exists = file_exists($this->cacheFile);
|
||||||
|
|
||||||
|
if ($exists)
|
||||||
|
{
|
||||||
|
// Check modified time on the file
|
||||||
|
$stat = stat($this->cacheFile);
|
||||||
|
|
||||||
|
$diff = time() - $stat['mtime'];
|
||||||
|
if ($diff > $this->config['cache_time_seconds'])
|
||||||
|
{
|
||||||
|
$exists = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $exists;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function getCacheData()
|
||||||
|
{
|
||||||
|
return json_decode(file_get_contents($this->cacheFile));
|
||||||
|
}
|
||||||
|
|
||||||
|
private function getLatestReleaseFromGitea(&$statusCode)
|
||||||
|
{
|
||||||
|
$httpHeaders = [
|
||||||
|
sprintf('User-Agent: aheathershaw/blue-twilight (v%s)', config('app.version'))
|
||||||
|
];
|
||||||
|
|
||||||
|
if (isset($this->config['api_key']) && !empty($this->config['api_key']))
|
||||||
|
{
|
||||||
|
$httpHeaders[] = sprintf('Authorization: %s', $this->config['api_key']);
|
||||||
|
}
|
||||||
|
|
||||||
|
$apiUrl = sprintf('%s/repos/%s/%s/releases', $this->config['api_url'], $this->config['repo_owner'], $this->config['repo_name']);
|
||||||
|
|
||||||
|
$ch = curl_init($apiUrl);
|
||||||
|
curl_setopt($ch, CURLOPT_HTTPHEADER, $httpHeaders);
|
||||||
|
curl_setopt($ch, CURLOPT_HEADER, true);
|
||||||
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
||||||
|
$result = curl_exec($ch);
|
||||||
|
|
||||||
|
if ($result === false)
|
||||||
|
{
|
||||||
|
throw new \Exception(sprintf('Error from Gitea: %s', curl_error($ch)));
|
||||||
|
}
|
||||||
|
|
||||||
|
$statusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
||||||
|
|
||||||
|
return explode("\r\n\r\n", $result, 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
private function setCacheData($data)
|
||||||
|
{
|
||||||
|
file_put_contents($this->cacheFile, json_encode(get_object_vars($data)));
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
}
|
@ -14,33 +14,15 @@ return [
|
|||||||
|
|
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
'github' => [
|
'gitea' => [
|
||||||
'latest_release_url' => 'https://api.github.com/repos/andysh-uk/blue-twilight/releases/latest'
|
'api_url' => 'https://apps.andysh.uk/api/v1',
|
||||||
|
'cache_time_seconds' => 3600,
|
||||||
|
'releases_url' => 'https://apps.andysh.uk/%s/%s/releases',
|
||||||
|
'repo_name' => 'blue-twilight',
|
||||||
|
'repo_owner' => 'aheathershaw'
|
||||||
],
|
],
|
||||||
|
|
||||||
'recaptcha' => [
|
'recaptcha' => [
|
||||||
'verify_url' => 'https://www.google.com/recaptcha/api/siteverify'
|
'verify_url' => 'https://www.google.com/recaptcha/api/siteverify'
|
||||||
]
|
]
|
||||||
|
|
||||||
/*'mailgun' => [
|
|
||||||
'domain' => env('MAILGUN_DOMAIN'),
|
|
||||||
'secret' => env('MAILGUN_SECRET'),
|
|
||||||
],
|
|
||||||
|
|
||||||
'ses' => [
|
|
||||||
'key' => env('SES_KEY'),
|
|
||||||
'secret' => env('SES_SECRET'),
|
|
||||||
'region' => 'us-east-1',
|
|
||||||
],
|
|
||||||
|
|
||||||
'sparkpost' => [
|
|
||||||
'secret' => env('SPARKPOST_SECRET'),
|
|
||||||
],
|
|
||||||
|
|
||||||
'stripe' => [
|
|
||||||
'model' => App\User::class,
|
|
||||||
'key' => env('STRIPE_KEY'),
|
|
||||||
'secret' => env('STRIPE_SECRET'),
|
|
||||||
],*/
|
|
||||||
|
|
||||||
];
|
];
|
||||||
|
Loading…
Reference in New Issue
Block a user