33
0
mirror of https://github.com/joomla-extensions/patchtester.git synced 2024-11-10 15:21:01 +00:00
patchtester/administrator/components/com_patchtester/PatchTester/Controller/StartfetchController.php

129 lines
3.5 KiB
PHP
Raw Normal View History

<?php
/**
* Patch testing component for the Joomla! CMS
*
2016-02-20 16:35:10 +00:00
* @copyright Copyright (C) 2011 - 2012 Ian MacLennan, Copyright (C) 2013 - 2016 Open Source Matters, Inc. All rights reserved.
* @license GNU General Public License version 2 or later
*/
namespace PatchTester\Controller;
use PatchTester\Helper;
use PatchTester\Model\PullsModel;
use PatchTester\Model\TestsModel;
/**
* Controller class to start fetching remote data
*
* @since 2.0
*/
class StartfetchController extends AbstractController
{
/**
* Execute the controller.
*
* @return void Redirects the application
*
* @since 2.0
*/
public function execute()
{
// We don't want this request to be cached.
$this->getApplication()->setHeader('Expires', 'Mon, 1 Jan 2001 00:00:00 GMT', true);
$this->getApplication()->setHeader('Last-Modified', gmdate('D, d M Y H:i:s') . ' GMT', true);
$this->getApplication()->setHeader('Cache-Control', 'no-store, no-cache, must-revalidate, post-check=0, pre-check=0', false);
$this->getApplication()->setHeader('Pragma', 'no-cache');
2015-12-05 17:43:54 +00:00
$this->getApplication()->setHeader('Content-Type', $this->getApplication()->mimeType . '; charset=' . $this->getApplication()->charSet);
// Check for a valid token. If invalid, send a 403 with the error message.
if (!\JSession::checkToken('request'))
{
$response = new \JResponseJson(new \Exception(\JText::_('JINVALID_TOKEN'), 403));
2015-12-05 17:43:54 +00:00
$this->getApplication()->sendHeaders();
echo json_encode($response);
$this->getApplication()->close(1);
}
// Make sure we can fetch the data from GitHub - throw an error on < 10 available requests
$github = Helper::initializeGithub();
2015-05-09 16:58:58 +00:00
try
{
$rate = $github->authorization->getRateLimit();
}
catch (\Exception $e)
{
$response = new \JResponseJson(
new \Exception(
2015-06-16 19:14:41 +00:00
\JText::sprintf('COM_PATCHTESTER_COULD_NOT_CONNECT_TO_GITHUB', $e->getMessage()),
$e->getCode(),
$e
2015-05-09 16:58:58 +00:00
)
);
2015-12-05 17:43:54 +00:00
$this->getApplication()->sendHeaders();
2015-05-09 16:58:58 +00:00
echo json_encode($response);
$this->getApplication()->close(1);
}
// If over the API limit, we can't build this list
if ($rate->resources->core->remaining < 10)
{
$response = new \JResponseJson(
new \Exception(
\JText::sprintf('COM_PATCHTESTER_API_LIMIT_LIST', \JFactory::getDate($rate->resources->core->reset)),
429
)
);
2015-12-05 17:43:54 +00:00
$this->getApplication()->sendHeaders();
echo json_encode($response);
$this->getApplication()->close(1);
}
$testsModel = new TestsModel(null, \JFactory::getDbo());
try
{
// Sanity check, ensure there aren't any applied patches
if (count($testsModel->getAppliedPatches()) >= 1)
{
$response = new \JResponseJson(new \Exception(\JText::_('COM_PATCHTESTER_ERROR_APPLIED_PATCHES'), 500));
2015-12-05 17:43:54 +00:00
$this->getApplication()->sendHeaders();
echo json_encode($response);
$this->getApplication()->close(1);
}
}
catch (\Exception $e)
{
$response = new \JResponseJson($e);
2015-12-05 17:43:54 +00:00
$this->getApplication()->sendHeaders();
echo json_encode($response);
$this->getApplication()->close(1);
}
// We're able to successfully pull data, prepare our environment
\JFactory::getSession()->set('com_patchtester_fetcher_page', 1);
$response = new \JResponseJson(
array('complete' => false, 'header' => \JText::_('COM_PATCHTESTER_FETCH_PROCESSING', true)),
\JText::sprintf('COM_PATCHTESTER_FETCH_PAGE_NUMBER', 1),
false,
true
);
2015-12-05 17:43:54 +00:00
$this->getApplication()->sendHeaders();
echo json_encode($response);
$this->getApplication()->close();
}
}