RestlerBuilderAware   A
last analyzed

Complexity

Total Complexity 10

Size/Duplication

Total Lines 46
Duplicated Lines 0 %

Test Coverage

Coverage 0%

Importance

Changes 3
Bugs 0 Features 0
Metric Value
eloc 14
c 3
b 0
f 0
dl 0
loc 46
ccs 0
cts 17
cp 0
rs 10
wmc 10

5 Methods

Rating   Name   Duplication   Size   Complexity  
A isRestlerApiUrl() 0 3 2
A isRestlerApiExplorerUrl() 0 6 3
A getRestlerBuilder() 0 7 2
A __construct() 0 3 1
A isRestlerPrefix() 0 7 2
1
<?php
2
3
namespace Aoe\Restler\System;
4
5
/***************************************************************
6
 *  Copyright notice
7
 *
8
 *  (c) 2024 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
    public function __construct(
43
        private readonly ExtensionConfiguration $extensionConfiguration
44
    ) {
45
    }
46
47
    /**
48
     * Get restlerBuilder on demand.
49
     */
50
    protected function getRestlerBuilder(): Builder
51
    {
52
        if ($this->restlerBuilder === null) {
53
            $this->restlerBuilder = GeneralUtility::makeInstance(Builder::class);
54
        }
55
56
        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...
57
    }
58
59
    protected function isRestlerPrefix(string $prefixedUrlPath): bool
60
    {
61
        if ($this->isRestlerApiUrl($prefixedUrlPath)) {
62
            return true;
63
        }
64
65
        return $this->isRestlerApiExplorerUrl($prefixedUrlPath);
66
    }
67
68
    protected function isRestlerApiUrl(string $prefixedUrlPath): bool
69
    {
70
        return $prefixedUrlPath === self::API_PREFIX || str_starts_with($prefixedUrlPath, self::API_PREFIX . '/');
71
    }
72
73
    protected function isRestlerApiExplorerUrl(string $prefixedUrlPath): bool
74
    {
75
        $apiExplorerPrefix = '/' . $this->extensionConfiguration->getPathOfOnlineDocumentation();
76
        return $this->extensionConfiguration->isOnlineDocumentationEnabled() && ($prefixedUrlPath === $apiExplorerPrefix || str_starts_with(
77
            $prefixedUrlPath,
78
            $apiExplorerPrefix . '/'
79
        ));
80
    }
81
}
82