GitHub Access Token became invalid

It seems like the GitHub access token used for retrieving details about this repository from GitHub became invalid. This might prevent certain types of inspections from being run (in particular, everything related to pull requests).
Please ask an admin of your repository to re-new the access token on this website.
Completed
Push — master ( de4288...07b53b )
by Joni
04:10
created

CertificateChain::toPEMString()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 7
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 6
CRAP Score 1

Importance

Changes 0
Metric Value
dl 0
loc 7
ccs 6
cts 6
cp 1
rs 9.4285
c 0
b 0
f 0
cc 1
eloc 6
nc 1
nop 0
crap 1
1
<?php
2
3
namespace X509\Certificate;
4
5
use CryptoUtil\PEM\PEM;
6
use CryptoUtil\PEM\PEMBundle;
7
use X509\CertificationPath\CertificationPath;
8
9
10
/**
11
 * Ordered list of certificates from the end-entity to the trust anchor.
12
 */
13
class CertificateChain implements \Countable, \IteratorAggregate
14
{
15
	/**
16
	 * List of certificates in a chain.
17
	 *
18
	 * @var Certificate[]
19
	 */
20
	protected $_certs;
21
	
22
	/**
23
	 * Constructor.
24
	 *
25
	 * @param Certificate ...$certs List of certificates, end-entity first
26
	 */
27 6
	public function __construct(Certificate ...$certs) {
28 6
		$this->_certs = $certs;
29 6
	}
30
	
31
	/**
32
	 * Initialize from a list of PEMs.
33
	 *
34
	 * @param PEM ...$pems
35
	 * @return self
36
	 */
37 2
	public static function fromPEMs(PEM ...$pems) {
38 2
		$certs = array_map(
39
			function (PEM $pem) {
40 2
				return Certificate::fromPEM($pem);
41 2
			}, $pems);
42 2
		return new self(...$certs);
43
	}
44
	
45
	/**
46
	 * Initialize from a string containing multiple PEM blocks.
47
	 *
48
	 * @param string $str
49
	 * @return self
50
	 */
51 1
	public static function fromPEMString($str) {
52 1
		$pems = PEMBundle::fromString($str)->all();
53 1
		return self::fromPEMs(...$pems);
54
	}
55
	
56
	/**
57
	 * Get all certificates in a chain ordered from the end-entity certificate
58
	 * to the trust anchor.
59
	 *
60
	 * @return Certificate[]
61
	 */
62 3
	public function certificates() {
63 3
		return $this->_certs;
64
	}
65
	
66
	/**
67
	 * Get the end-entity certificate.
68
	 *
69
	 * @throws \LogicException
70
	 * @return Certificate
71
	 */
72 2
	public function endEntityCertificate() {
73 2
		if (!count($this->_certs)) {
74 1
			throw new \LogicException("No certificates.");
75
		}
76 1
		return $this->_certs[0];
77
	}
78
	
79
	/**
80
	 * Get the trust anchor certificate.
81
	 *
82
	 * @throws \LogicException
83
	 * @return Certificate
84
	 */
85 2
	public function trustAnchorCertificate() {
86 2
		if (!count($this->_certs)) {
87 1
			throw new \LogicException("No certificates.");
88
		}
89 1
		return $this->_certs[count($this->_certs) - 1];
90
	}
91
	
92
	/**
93
	 * Convert certificate chain to certification path.
94
	 *
95
	 * @return CertificationPath
96
	 */
97 1
	public function certificationPath() {
98 1
		return CertificationPath::fromCertificateChain($this);
99
	}
100
	
101
	/**
102
	 * Convert certificate chain to string of PEM blocks.
103
	 *
104
	 * @return string
105
	 */
106 1
	public function toPEMString() {
107 1
		return implode("\n", 
108 1
			array_map(
109 1
				function (Certificate $cert) {
110 1
					return $cert->toPEM()->string();
111 1
				}, $this->_certs));
112
	}
113
	
114
	/**
115
	 *
116
	 * @see Countable::count()
117
	 * @return int
118
	 */
119 1
	public function count() {
120 1
		return count($this->_certs);
121
	}
122
	
123
	/**
124
	 * Get iterator for certificates.
125
	 *
126
	 * @see IteratorAggregate::getIterator()
127
	 * @return \ArrayIterator
128
	 */
129 2
	public function getIterator() {
130 2
		return new \ArrayIterator($this->_certs);
131
	}
132
}
133