ValidateCert::Handle()   B
last analyzed

Complexity

Conditions 6
Paths 17

Size

Total Lines 39
Code Lines 25

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 6
eloc 25
nc 17
nop 1
dl 0
loc 39
rs 8.8977
c 0
b 0
f 0
1
<?php
2
3
/*
4
 * SPDX-License-Identifier: AGPL-3.0-only
5
 * SPDX-FileCopyrightText: Copyright 2007-2016 Zarafa Deutschland GmbH
6
 * SPDX-FileCopyrightText: Copyright 2020-2022 grommunio GmbH
7
 *
8
 * Provides the ValidateCert command
9
 */
10
11
class ValidateCert extends RequestProcessor {
12
	/**
13
	 * Handles the ValidateCert command.
14
	 *
15
	 * @param int $commandCode
16
	 *
17
	 * @return bool
18
	 */
19
	public function Handle($commandCode) {
20
		// Parse input
21
		if (!self::$decoder->getElementStartTag(SYNC_VALIDATECERT_VALIDATECERT)) {
22
			return false;
23
		}
24
25
		$validateCert = new SyncValidateCert();
26
		$validateCert->Decode(self::$decoder);
27
		$cert_der = base64_decode((string) $validateCert->certificates[0]);
28
		$cert_pem = "-----BEGIN CERTIFICATE-----\n" . chunk_split(base64_encode($cert_der), 64, "\n") . "-----END CERTIFICATE-----\n";
29
30
		$checkpurpose = (defined('CAINFO') && CAINFO) ? openssl_x509_checkpurpose($cert_pem, X509_PURPOSE_SMIME_SIGN, [CAINFO]) : openssl_x509_checkpurpose($cert_pem, X509_PURPOSE_SMIME_SIGN);
0 ignored issues
show
Bug introduced by
The constant CAINFO was not found. Maybe you did not declare it correctly or list all dependencies?
Loading history...
31
		if ($checkpurpose === true) {
32
			$status = SYNC_VALIDATECERTSTATUS_SUCCESS;
33
		}
34
		else {
35
			$status = SYNC_VALIDATECERTSTATUS_CANTVALIDATESIG;
36
		}
37
38
		if (!self::$decoder->getElementEndTag()) {
39
			return false;
40
		} // SYNC_VALIDATECERT_VALIDATECERT
41
42
		self::$encoder->startWBXML();
43
		self::$encoder->startTag(SYNC_VALIDATECERT_VALIDATECERT);
44
45
		self::$encoder->startTag(SYNC_VALIDATECERT_STATUS);
46
		self::$encoder->content($status);
47
		self::$encoder->endTag(); // SYNC_VALIDATECERT_STATUS
48
49
		self::$encoder->startTag(SYNC_VALIDATECERT_CERTIFICATE);
50
		self::$encoder->startTag(SYNC_VALIDATECERT_STATUS);
51
		self::$encoder->content($status);
52
		self::$encoder->endTag(); // SYNC_VALIDATECERT_STATUS
53
		self::$encoder->endTag(); // SYNC_VALIDATECERT_CERTIFICATE
54
55
		self::$encoder->endTag(); // SYNC_VALIDATECERT_VALIDATECERT
56
57
		return true;
58
	}
59
}
60