Issues (20)

Classes/System/RestlerBuilderAware.php (1 issue)

1
<?php
2
3
namespace Aoe\Restler\System;
4
5
/***************************************************************
6
 *  Copyright notice
7
 *
8
 *  (c) 2015 AOE GmbH <[email protected]>
9
 *
10
 *  All rights reserved
11
 *
12
 *  This script is part of the TYPO3 project. The TYPO3 project is
13
 *  free software; you can redistribute it and/or modify
14
 *  it under the terms of the GNU General Public License as published by
15
 *  the Free Software Foundation; either version 3 of the License, or
16
 *  (at your option) any later version.
17
 *
18
 *  The GNU General Public License can be found at
19
 *  http://www.gnu.org/copyleft/gpl.html.
20
 *
21
 *  This script is distributed in the hope that it will be useful,
22
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
23
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
24
 *  GNU General Public License for more details.
25
 *
26
 *  This copyright notice MUST APPEAR in all copies of the script!
27
 ***************************************************************/
28
29
use Aoe\Restler\Configuration\ExtensionConfiguration;
30
use Aoe\Restler\System\Restler\Builder;
31
use TYPO3\CMS\Core\Utility\GeneralUtility;
32
33
abstract class RestlerBuilderAware
34
{
35
    /**
36
     * @var string
37
     */
38
    private const API_PREFIX = '/api';
39
40
    private ?Builder $restlerBuilder = null;
41
42
    private ExtensionConfiguration $extensionConfiguration;
43
44
    public function __construct(ExtensionConfiguration $extensionConfiguration)
45
    {
46
        $this->extensionConfiguration = $extensionConfiguration;
47
    }
48
49
    /**
50
     * Get restlerBuilder on demand.
51
     */
52
    protected function getRestlerBuilder(): Builder
53
    {
54
        if ($this->restlerBuilder === null) {
55
            $this->restlerBuilder = GeneralUtility::makeInstance(Builder::class);
56
        }
57
58
        return $this->restlerBuilder;
0 ignored issues
show
Bug Best Practice introduced by
The expression return $this->restlerBuilder could return the type null which is incompatible with the type-hinted return Aoe\Restler\System\Restler\Builder. Consider adding an additional type-check to rule them out.
Loading history...
59
    }
60
61
    protected function isRestlerPrefix(string $prefixedUrlPath): bool
62
    {
63
        if ($this->isRestlerApiUrl($prefixedUrlPath)) {
64
            return true;
65
        }
66
67
        return $this->isRestlerApiExplorerUrl($prefixedUrlPath);
68
    }
69
70
    protected function isRestlerApiUrl(string $prefixedUrlPath): bool
71
    {
72
        return $prefixedUrlPath === self::API_PREFIX || str_starts_with($prefixedUrlPath, self::API_PREFIX . '/');
73
    }
74
75
    protected function isRestlerApiExplorerUrl(string $prefixedUrlPath): bool
76
    {
77
        $apiExplorerPrefix = '/' . $this->extensionConfiguration->getPathOfOnlineDocumentation();
78
        return $this->extensionConfiguration->isOnlineDocumentationEnabled() && ($prefixedUrlPath === $apiExplorerPrefix || str_starts_with(
79
            $prefixedUrlPath,
80
            $apiExplorerPrefix . '/'
81
        ));
82
    }
83
}
84