• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

LibreSign / libresign / 3717593689

pending completion
3717593689

Pull #1287

github

GitHub
Merge 42fe701e4 into ff8c1edaf
Pull Request #1287: [stable25] Bump packages

2548 of 4384 relevant lines covered (58.12%)

4.74 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

4.86
/lib/Service/ConfigureCheckService.php
1
<?php
2

3
namespace OCA\Libresign\Service;
4

5
use ImagickException;
6
use OC\SystemConfig;
7
use OCA\Libresign\AppInfo\Application;
8
use OCA\Libresign\Handler\JSignPdfHandler;
9
use OCA\Libresign\Helper\ConfigureCheckHelper;
10
use OCP\IConfig;
11

12
class ConfigureCheckService {
13
        private IConfig $config;
14
        private SystemConfig $systemConfig;
15
        private JSignPdfHandler $jSignPdfHandler;
16

17
        public function __construct(
18
                IConfig $config,
19
                SystemConfig $systemConfig,
20
                JSignPdfHandler $jSignPdfHandler
21
        ) {
22
                $this->config = $config;
3✔
23
                $this->systemConfig = $systemConfig;
3✔
24
                $this->jSignPdfHandler = $jSignPdfHandler;
3✔
25
        }
26

27
        /**
28
         * Get result of all checks
29
         *
30
         * @return ConfigureCheckHelper[]
31
         */
32
        public function checkAll(): array {
33
                $result = [];
×
34
                $result = array_merge($result, $this->checkSign());
×
35
                $result = array_merge($result, $this->canPreview());
×
36
                $result = array_merge($result, $this->checkCfssl());
×
37
                return $result;
×
38
        }
39

40
        /**
41
         * Check all requirements to sign
42
         *
43
         * @return ConfigureCheckHelper[]
44
         */
45
        public function checkSign(): array {
46
                $return = [];
×
47
                $return = array_merge($return, $this->checkJava());
×
48
                $return = array_merge($return, $this->checkJSignPdf());
×
49
                $return = array_merge($return, $this->checkLibresignCli());
×
50
                return $return;
×
51
        }
52

53
        /**
54
         * Can preview PDF Files
55
         *
56
         * @return ConfigureCheckHelper[]
57
         */
58
        public function canPreview(): array {
59
                if (!extension_loaded('imagick')) {
×
60
                        return [
×
61
                                (new ConfigureCheckHelper())
×
62
                                        ->setErrorMessage('Extension Imagick required')
×
63
                                        ->setResource('imagick')
×
64
                                        ->setTip('https://github.com/LibreSign/libresign/issues/829'),
×
65
                        ];
×
66
                }
67

68
                $imagick = new \Imagick();
×
69
                $imagick->setResolution(100, 100);
×
70
                $pdf = file_get_contents(__DIR__ . '/../../tests/fixtures/small_valid.pdf');
×
71
                try {
72
                        $imagick->readImageBlob($pdf);
×
73
                } catch (ImagickException $ie) {
×
74
                        if ($ie->getCode() === 499) {
×
75
                                return [
×
76
                                        (new ConfigureCheckHelper())
×
77
                                                ->setErrorMessage('Is necessary to configure the ImageMagick security policy to work with PDF.')
×
78
                                                ->setResource('imagick')
×
79
                                                ->setTip('https://github.com/LibreSign/libresign/issues/829'),
×
80
                                ];
×
81
                        }
82
                }
83
                return [
×
84
                        (new ConfigureCheckHelper())
×
85
                                ->setSuccessMessage('Can generate the preview')
×
86
                                ->setResource('imagick'),
×
87
                ];
×
88
        }
89

90
        /**
91
         * Check all requirements to use JSignPdf
92
         *
93
         * @return ConfigureCheckHelper[]
94
         */
95
        public function checkJSignPdf(): array {
96
                $jsignpdJarPath = $this->config->getAppValue(Application::APP_ID, 'jsignpdf_jar_path');
×
97
                if ($jsignpdJarPath) {
×
98
                        if (file_exists($jsignpdJarPath)) {
×
99
                                if (!$this->isJavaOk()) {
×
100
                                        return [
×
101
                                                (new ConfigureCheckHelper())
×
102
                                                        ->setErrorMessage('Necessary Java to run JSignPdf')
×
103
                                                        ->setResource('jsignpdf')
×
104
                                                        ->setTip('Run occ libresign:install --java'),
×
105
                                        ];
×
106
                                }
107
                                $jsignPdf = $this->jSignPdfHandler->getJSignPdf();
×
108
                                $jsignPdf->setParam($this->jSignPdfHandler->getJSignParam());
×
109
                                $currentVersion = $jsignPdf->getVersion();
×
110
                                if ($currentVersion < JSignPdfHandler::VERSION) {
×
111
                                        if (!$currentVersion) {
×
112
                                                $message = 'Necessary install the version ' . JSignPdfHandler::VERSION;
×
113
                                        } else {
114
                                                $message = 'Necessary bump JSignPdf versin from ' . $currentVersion . ' to ' . JSignPdfHandler::VERSION;
×
115
                                        }
116
                                        $return[] = (new ConfigureCheckHelper())
×
117
                                                ->setErrorMessage($message)
×
118
                                                ->setResource('jsignpdf')
×
119
                                                ->setTip('Run occ libresign:install --jsignpdf');
×
120
                                }
121
                                if ($currentVersion > JSignPdfHandler::VERSION) {
×
122
                                        $return[] = (new ConfigureCheckHelper())
×
123
                                                ->setErrorMessage('Necessary downgrade JSignPdf versin from ' . $currentVersion . ' to ' . JSignPdfHandler::VERSION)
×
124
                                                ->setResource('jsignpdf')
×
125
                                                ->setTip('Run occ libresign:install --jsignpdf');
×
126
                                }
127
                                $return[] = (new ConfigureCheckHelper())
×
128
                                                ->setSuccessMessage('JSignPdf version: ' . $currentVersion)
×
129
                                                ->setResource('jsignpdf');
×
130
                                $return[] = (new ConfigureCheckHelper())
×
131
                                                ->setSuccessMessage('JSignPdf path: ' . $jsignpdJarPath)
×
132
                                                ->setResource('jsignpdf');
×
133
                                return $return;
×
134
                        }
135
                        return [
×
136
                                (new ConfigureCheckHelper())
×
137
                                        ->setErrorMessage('JSignPdf binary not found: ' . $jsignpdJarPath)
×
138
                                        ->setResource('jsignpdf')
×
139
                                        ->setTip('Run occ libresign:install --jsignpdf'),
×
140
                        ];
×
141
                }
142
                return [
×
143
                        (new ConfigureCheckHelper())
×
144
                                ->setErrorMessage('JSignPdf not found')
×
145
                                ->setResource('jsignpdf')
×
146
                                ->setTip('Run occ libresign:install --jsignpdf'),
×
147
                ];
×
148
        }
149

150
        /**
151
         * Check all requirements to use Java
152
         *
153
         * @return ConfigureCheckHelper[]
154
         */
155
        private function checkJava(): array {
156
                $javaPath = $this->config->getAppValue(Application::APP_ID, 'java_path');
×
157
                if ($javaPath) {
×
158
                        if (file_exists($javaPath)) {
×
159
                                \exec($javaPath . " -version 2>&1", $javaVersion);
×
160
                                $javaVersion = implode(\OC::$CLI ? "\n" : "<br>", $javaVersion);
×
161
                                return [
×
162
                                        (new ConfigureCheckHelper())
×
163
                                                ->setSuccessMessage('Java version: ' . $javaVersion)
×
164
                                                ->setResource('java'),
×
165
                                        (new ConfigureCheckHelper())
×
166
                                                ->setSuccessMessage('Java binary: ' . $javaPath)
×
167
                                                ->setResource('java'),
×
168
                                ];
×
169
                        }
170
                        return [
×
171
                                (new ConfigureCheckHelper())
×
172
                                        ->setErrorMessage('Java binary not found: ' . $javaPath)
×
173
                                        ->setResource('java')
×
174
                                        ->setTip('Run occ libresign:install --java'),
×
175
                        ];
×
176
                }
177
                $javaVersion = exec("java -version 2>&1");
×
178
                $hasJavaVersion = strpos($javaVersion, 'not found') === false;
×
179
                if ($hasJavaVersion) {
×
180
                        return [
×
181
                                (new ConfigureCheckHelper())
×
182
                                        ->setSuccessMessage('Using java from operational system. Version: ' . $javaVersion)
×
183
                                        ->setResource('java')
×
184
                                        ->setTip('Run occ libresign:install --java'),
×
185
                        ];
×
186
                }
187
                return [
×
188
                        (new ConfigureCheckHelper())
×
189
                                ->setErrorMessage('Java not installed')
×
190
                                ->setResource('java')
×
191
                                ->setTip('Run occ libresign:install --java'),
×
192
                ];
×
193
        }
194

195
        private function isJavaOk() : bool {
196
                $checkJava = $this->checkJava();
×
197
                $error = array_filter(
×
198
                        $checkJava,
×
199
                        function (ConfigureCheckHelper $config) {
×
200
                                return $config->getStatus() === 'error';
×
201
                        }
×
202
                );
×
203
                return empty($error);
×
204
        }
205

206
        /**
207
         * Check all requirements to use LibreSign CLI tool
208
         *
209
         * @return ConfigureCheckHelper[]
210
         */
211
        private function checkLibresignCli(): array {
212
                $path = $this->config->getAppValue(Application::APP_ID, 'libresign_cli_path');
×
213
                if (!file_exists($path) || !is_executable($path)) {
×
214
                        return [
×
215
                                (new ConfigureCheckHelper())
×
216
                                        ->setErrorMessage('LibreSign cli tools not found or without execute permission.')
×
217
                                        ->setResource('libresign-cli')
×
218
                                        ->setTip('Run occ libresign:install --cli'),
×
219
                        ];
×
220
                }
221
                return [
×
222
                        (new ConfigureCheckHelper())
×
223
                                ->setSuccessMessage('LibreSign cli tools found in path: ' . $path)
×
224
                                ->setResource('libresign-cli'),
×
225
                ];
×
226
        }
227

228
        /**
229
         * Check all requirements to use CFSSL
230
         *
231
         * @return ConfigureCheckHelper[]
232
         */
233
        public function checkCfssl(): array {
234
                $return = [];
×
235
                $return = array_merge($return, $this->checkCfsslBinaries());
×
236
                $return = array_merge($return, $this->checkCfsslConfigure());
×
237
                return $return;
×
238
        }
239

240
        public function checkCfsslBinaries(): array {
241
                if (PHP_OS_FAMILY === 'Windows') {
×
242
                        return [
×
243
                                (new ConfigureCheckHelper())
×
244
                                        ->setErrorMessage('CFSSL is incompatible with Windows')
×
245
                                        ->setResource('cfssl'),
×
246
                        ];
×
247
                }
248
                $cfsslInstalled = $this->config->getAppValue(Application::APP_ID, 'cfssl_bin');
×
249
                if (!$cfsslInstalled) {
×
250
                        return [
×
251
                                (new ConfigureCheckHelper())
×
252
                                        ->setErrorMessage('CFSSL not installed.')
×
253
                                        ->setResource('cfssl')
×
254
                                        ->setTip('Run occ libresign:install --cfssl'),
×
255
                        ];
×
256
                }
257

258
                $instanceId = $this->systemConfig->getValue('instanceid', null);
×
259
                $binary = $this->systemConfig->getValue('datadirectory', \OC::$SERVERROOT . '/data/') . DIRECTORY_SEPARATOR .
×
260
                        'appdata_' . $instanceId . DIRECTORY_SEPARATOR .
×
261
                        Application::APP_ID . DIRECTORY_SEPARATOR .
×
262
                        'cfssl';
×
263
                if (!file_exists($binary)) {
×
264
                        return [
×
265
                                (new ConfigureCheckHelper())
×
266
                                        ->setErrorMessage('CFSSL not found.')
×
267
                                        ->setResource('cfssl')
×
268
                                        ->setTip('Run occ libresign:install --cfssl'),
×
269
                        ];
×
270
                }
271
                $return = [];
×
272
                $return[] = (new ConfigureCheckHelper())
×
273
                        ->setSuccessMessage('CFSSL binary path: ' . $binary)
×
274
                        ->setResource('cfssl');
×
275
                $version = str_replace("\n", ', ', trim(`$binary version`));
×
276
                $return[] = (new ConfigureCheckHelper())
×
277
                        ->setSuccessMessage('CFSSL: ' . $version)
×
278
                        ->setResource('cfssl');
×
279
                return $return;
×
280
        }
281

282
        public function checkCfsslConfigure(): array {
283
                $configPath = $this->config->getAppValue(Application::APP_ID, 'configPath');
1✔
284
                if (is_dir($configPath)) {
1✔
285
                        return [(new ConfigureCheckHelper())
×
286
                                ->setSuccessMessage('Root certificate config files found.')
×
287
                                ->setResource('cfssl-configure')];
×
288
                }
289
                return [(new ConfigureCheckHelper())
1✔
290
                        ->setErrorMessage('CFSSL not configured.')
1✔
291
                        ->setResource('cfssl-configure')
1✔
292
                        ->setTip('Run occ libresign:configure --cfssl')];
1✔
293
        }
294
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc