. */ declare(strict_types=1); namespace FireflyIII\Api\V1\Controllers; use Carbon\Carbon; use Carbon\Exceptions\InvalidDateException; use FireflyConfig; use FireflyIII\Exceptions\FireflyException; use Illuminate\Foundation\Auth\Access\AuthorizesRequests; use Illuminate\Foundation\Bus\DispatchesJobs; use Illuminate\Foundation\Validation\ValidatesRequests; use Illuminate\Routing\Controller as BaseController; use Symfony\Component\HttpFoundation\ParameterBag; /** * Class Controller. */ class Controller extends BaseController { use AuthorizesRequests, DispatchesJobs, ValidatesRequests; /** @var ParameterBag */ protected $parameters; /** * Controller constructor. * * @throws FireflyException */ public function __construct() { // is site a demo site? $isDemoSite = FireflyConfig::get('is_demo_site', config('firefly.configuration.is_demo_site'))->data; // do not expose API on demo site: if (true === $isDemoSite) { throw new FireflyException('The API is not available on the demo site.'); } // get global parameters $this->parameters = $this->getParameters(); } /** * @return ParameterBag */ private function getParameters(): ParameterBag { $bag = new ParameterBag; $page = (int)request()->get('page'); if ($page === 0) { $page = 1; } $bag->set('page', $page); // some date fields: $dates = ['start','end','date']; foreach($dates as $field) { $date = request()->get($field); $obj = null; if (!is_null($date)) { try { $obj= new Carbon($date); } catch (InvalidDateException $e) { // don't care } } $bag->set($field, $obj); } $type = request()->get('type') ?? 'all'; $bag->set('type', $type); return $bag; } }