Issues (1513)

lib/request/validatecert.php (1 issue)

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