Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
80.00% covered (warning)
80.00%
36 / 45
80.00% covered (warning)
80.00%
4 / 5
CRAP
0.00% covered (danger)
0.00%
0 / 1
SetupCheckResultService
80.00% covered (warning)
80.00%
36 / 45
80.00% covered (warning)
80.00%
4 / 5
9.65
0.00% covered (danger)
0.00%
0 / 1
 __construct
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 getFormattedChecks
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 getBinaryChecks
100.00% covered (success)
100.00%
21 / 21
100.00% covered (success)
100.00%
1 / 1
3
 getCertificateEngineChecks
30.77% covered (danger)
30.77%
4 / 13
0.00% covered (danger)
0.00%
0 / 1
5.99
 mapSeverityToStatus
100.00% covered (success)
100.00%
6 / 6
100.00% covered (success)
100.00%
1 / 1
1
1<?php
2
3declare(strict_types=1);
4/**
5 * SPDX-FileCopyrightText: 2026 LibreCode coop and contributors
6 * SPDX-License-Identifier: AGPL-3.0-or-later
7 */
8
9namespace OCA\Libresign\Service;
10
11use OCA\Libresign\AppInfo\Application;
12use OCA\Libresign\Handler\CertificateEngine\CertificateEngineFactory;
13use OCA\Libresign\Helper\ConfigureCheckHelper;
14use OCA\Libresign\Service\SetupCheck\ConfigureCheckResult;
15use OCA\Libresign\SetupCheck\ImagickSetupCheck;
16use OCA\Libresign\SetupCheck\JavaSetupCheck;
17use OCA\Libresign\SetupCheck\JSignPdfSetupCheck;
18use OCA\Libresign\SetupCheck\PDFtkSetupCheck;
19use OCA\Libresign\SetupCheck\PopplerSetupCheck;
20use OCP\IAppConfig;
21use OCP\SetupCheck\ISetupCheck;
22
23class SetupCheckResultService {
24
25    public function __construct(
26        private CertificateEngineFactory $certificateEngineFactory,
27        private IAppConfig $appConfig,
28        private JavaSetupCheck $javaSetupCheck,
29        private JSignPdfSetupCheck $jSignPdfSetupCheck,
30        private PDFtkSetupCheck $pdftkSetupCheck,
31        private PopplerSetupCheck $popplerSetupCheck,
32        private ImagickSetupCheck $imagickSetupCheck,
33    ) {
34    }
35
36    /**
37     * @return list<ConfigureCheckResult>
38     */
39    public function getFormattedChecks(): array {
40        return array_merge(
41            $this->getBinaryChecks(),
42            $this->getCertificateEngineChecks(),
43        );
44    }
45
46    /**
47     * @return list<ConfigureCheckResult>
48     */
49    private function getBinaryChecks(): array {
50        /** @var array<string, ISetupCheck> $checks */
51        $checks = [
52            'java' => $this->javaSetupCheck,
53        ];
54        if ($this->appConfig->getValueString(Application::APP_ID, 'signature_engine', 'JSignPdf') === 'JSignPdf') {
55            $checks['jsignpdf'] = $this->jSignPdfSetupCheck;
56        }
57        $checks += [
58            'pdftk' => $this->pdftkSetupCheck,
59            'poppler' => $this->popplerSetupCheck,
60            'imagick' => $this->imagickSetupCheck,
61        ];
62
63        $formatted = [];
64        foreach ($checks as $resource => $check) {
65            $result = $check->run();
66            $formatted[] = new ConfigureCheckResult(
67                $this->mapSeverityToStatus($result->getSeverity()),
68                $resource,
69                (string)$result->getDescription(),
70                $result->getLinkToDoc() ?? '',
71                $check->getCategory(),
72            );
73        }
74
75        return $formatted;
76    }
77
78    /**
79     * @return list<ConfigureCheckResult>
80     */
81    private function getCertificateEngineChecks(): array {
82        $engineChecks = $this->certificateEngineFactory->getEngine()->configureCheck();
83
84        $formatted = [];
85        foreach ($engineChecks as $check) {
86            if (!$check instanceof ConfigureCheckHelper) {
87                continue;
88            }
89            $formatted[] = new ConfigureCheckResult(
90                $check->getStatus(),
91                $check->getResource(),
92                $check->getMessage(),
93                $check->getTip(),
94                'security',
95            );
96        }
97
98        return $formatted;
99    }
100
101    /**
102     * Map SetupResult severity to legacy status string.
103     *
104     * @param string $severity (error, warning, success)
105     * @return 'error'|'info'|'success'
106     */
107    private function mapSeverityToStatus(string $severity): string {
108        return match ($severity) {
109            'error' => 'error',
110            'warning' => 'info',
111            'success' => 'success',
112            default => 'info',
113        };
114    }
115}