Passed
Push — main ( 75e073...4062d4 )
by Nobufumi
14:07
created

FileController::pathToUrl()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 17
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 3
eloc 9
nc 3
nop 1
dl 0
loc 17
rs 9.9666
c 0
b 0
f 0
1
<?php
2
3
namespace Jidaikobo\Kontiki\Controllers;
4
5
use Psr\Http\Message\ResponseInterface as Response;
6
use Psr\Http\Message\ServerRequestInterface as Request;
7
use Slim\App;
8
use Slim\Views\PhpRenderer;
9
use Jidaikobo\Kontiki\Controllers\FileControllerTraits;
10
use Jidaikobo\Kontiki\Core\Database;
11
use Jidaikobo\Kontiki\Managers\CsrfManager;
12
use Jidaikobo\Kontiki\Managers\FlashManager;
13
use Jidaikobo\Kontiki\Models\FileModel;
14
use Jidaikobo\Kontiki\Services\RoutesService;
15
use Jidaikobo\Kontiki\Services\FileService;
16
17
class FileController extends BaseController
18
{
19
    use FileControllerTraits\CRUDTrait;
20
    use FileControllerTraits\JavaScriptTrait;
21
    use FileControllerTraits\ListTrait;
22
    use FileControllerTraits\MessagesTrait;
23
24
    private FileModel $model;
25
    private FileService $fileService;
26
27
    public function __construct(
28
        CsrfManager $csrfManager,
29
        FlashManager $flashManager,
30
        PhpRenderer $view,
31
        RoutesService $routesService,
32
        FileModel $model,
33
        FileService $fileService
34
    ) {
35
        parent::__construct(
36
            $csrfManager,
37
            $flashManager,
38
            $view,
39
            $routesService
40
        );
41
        $this->model = $model;
42
        $this->fileService = $fileService;
43
    }
44
45
    public static function registerRoutes(App $app, string $basePath = ''): void
46
    {
47
        $app->get('/get_csrf_token', FileController::class . ':callGetCsrfToken');
48
        $app->get('/filelist', FileController::class . ':callFilelist');
49
        $app->post('/upload', FileController::class . ':callHandleFileUpload');
50
        $app->post('/update', FileController::class . ':callHandleUpdate');
51
        $app->post('/delete', FileController::class . ':callHandleDelete');
52
        $app->get('/fileManager.js', FileController::class . ':callServeJs');
53
        $app->get('/fileManagerInstance.js', FileController::class . ':callServeInstanceJs');
54
    }
55
56
    public function callGetCsrfToken(Request $request, Response $response): Response
57
    {
58
        return $this->getCsrfToken($request, $response);
59
    }
60
61
    public function callFilelist(Request $request, Response $response): Response
62
    {
63
        return $this->filelist($request, $response);
64
    }
65
66
    public function callHandleFileUpload(Request $request, Response $response): Response
67
    {
68
        return $this->handleFileUpload($request, $response);
69
    }
70
71
    public function callHandleUpdate(Request $request, Response $response): Response
72
    {
73
        return $this->handleUpdate($request, $response);
74
    }
75
76
    public function callHandleDelete(Request $request, Response $response): Response
77
    {
78
        return $this->handleDelete($request, $response);
79
    }
80
81
    public function callServeJs(Request $request, Response $response): Response
82
    {
83
        return $this->serveJs($request, $response);
84
    }
85
86
    public function callServeInstanceJs(Request $request, Response $response): Response
87
    {
88
        return $this->serveInstanceJs($request, $response);
89
    }
90
91
    protected function pathToUrl(string $filePath): string
92
    {
93
        // $uploadBaseUrl included
94
        $uploadBaseUrl = rtrim(env('BASEURL'), '/') . rtrim(env('BASEURL_UPLOAD_DIR'), '/');
95
        if (strpos($filePath, $uploadBaseUrl) === 0) {
96
            return $filePath;
97
        }
98
99
        // not $uploadBaseUrl included
100
        $filePath = realpath($filePath);
101
        $uploadDir = realpath(env('PROJECT_PATH', '') . env('UPLOADDIR'));
102
103
        if (strpos($filePath, $uploadDir) === 0) {
104
            $relativePath = ltrim(str_replace($uploadDir, '', $filePath), '/');
105
            return $uploadBaseUrl . '/' . $relativePath;
106
        }
107
        throw new \InvalidArgumentException('The file path is not inside the upload directory.');
108
    }
109
}
110