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 ( eb5c8e...f4ded9 )
by Joni
06:39
created

DistributionPoint   A

Complexity

Total Complexity 24

Size/Duplication

Total Lines 201
Duplicated Lines 6.97 %

Coupling/Cohesion

Components 1
Dependencies 8

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
wmc 24
c 0
b 0
f 0
lcom 1
cbo 8
dl 14
loc 201
ccs 73
cts 73
cp 1
rs 10

13 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 6 1
B fromASN1() 0 25 4
A hasDistributionPointName() 0 3 1
A distributionPointName() 0 6 2
A hasFullName() 0 4 1
A fullName() 0 6 2
A hasRelativeName() 0 4 1
A relativeName() 0 6 2
A hasReasons() 0 3 1
A reasons() 0 6 2
A hasCRLIssuer() 0 3 1
A crlIssuer() 0 6 2
A toASN1() 14 14 4

How to fix   Duplicated Code   

Duplicated Code

Duplicate code is one of the most pungent code smells. A rule that is often used is to re-structure code once it is duplicated in three or more places.

Common duplication problems, and corresponding solutions are:

1
<?php
2
3
namespace X509\Certificate\Extension\DistributionPoint;
4
5
use ASN1\Element;
6
use ASN1\Type\Constructed\Sequence;
7
use ASN1\Type\Tagged\ExplicitlyTaggedType;
8
use ASN1\Type\Tagged\ImplicitlyTaggedType;
9
use X509\GeneralName\GeneralNames;
10
11
12
/**
13
 * Implements <i>DistributionPoint</i> ASN.1 type used by
14
 * 'CRL Distribution Points' certificate extension.
15
 *
16
 * @link https://tools.ietf.org/html/rfc5280#section-4.2.1.13
17
 */
18
class DistributionPoint
19
{
20
	/**
21
	 * Distribution point name.
22
	 *
23
	 * @var DistributionPointName $_distributionPoint
24
	 */
25
	protected $_distributionPoint;
26
	
27
	/**
28
	 * Revocation reason.
29
	 *
30
	 * @var ReasonFlags $_reasons
31
	 */
32
	protected $_reasons;
33
	
34
	/**
35
	 * CRL issuer.
36
	 *
37
	 * @var GeneralNames $_issuer
38
	 */
39
	protected $_issuer;
40
	
41
	/**
42
	 * Constructor
43
	 *
44
	 * @param DistributionPointName $name
45
	 * @param ReasonFlags $reasons
46
	 * @param GeneralNames $issuer
47
	 */
48 13
	public function __construct(DistributionPointName $name = null, 
49
			ReasonFlags $reasons = null, GeneralNames $issuer = null) {
50 13
		$this->_distributionPoint = $name;
51 13
		$this->_reasons = $reasons;
52 13
		$this->_issuer = $issuer;
53 13
	}
54
	
55
	/**
56
	 * Initialize from ASN.1.
57
	 *
58
	 * @param Sequence $seq
59
	 * @return self
60
	 */
61 8
	public static function fromASN1(Sequence $seq) {
62 8
		$name = null;
63 8
		$reasons = null;
64 8
		$issuer = null;
65 8
		if ($seq->hasTagged(0)) {
66
			// promoted to explicit tagging because underlying type is CHOICE
67 8
			$name = DistributionPointName::fromTaggedType(
68 8
				$seq->getTagged(0)
69 8
					->asExplicit()
70 8
					->asTagged());
71 8
		}
72 8
		if ($seq->hasTagged(1)) {
73 7
			$reasons = ReasonFlags::fromASN1(
74 7
				$seq->getTagged(1)
75 7
					->asImplicit(Element::TYPE_BIT_STRING)
76 7
					->asBitString());
77 7
		}
78 8
		if ($seq->hasTagged(2)) {
79 7
			$issuer = GeneralNames::fromASN1(
80 7
				$seq->getTagged(2)
81 7
					->asImplicit(Element::TYPE_SEQUENCE)
82 7
					->asSequence());
83 7
		}
84 8
		return new self($name, $reasons, $issuer);
85
	}
86
	
87
	/**
88
	 * Check whether distribution point name is set.
89
	 *
90
	 * @return bool
91
	 */
92 9
	public function hasDistributionPointName() {
93 9
		return isset($this->_distributionPoint);
94
	}
95
	
96
	/**
97
	 * Get distribution point name.
98
	 *
99
	 * @throws \LogicException
100
	 * @return DistributionPointName
101
	 */
102 9
	public function distributionPointName() {
103 9
		if (!$this->hasDistributionPointName()) {
104 1
			throw new \LogicException("distributionPoint not set.");
105
		}
106 8
		return $this->_distributionPoint;
107
	}
108
	
109
	/**
110
	 * Check whether distribution point name is set and it's a full name.
111
	 *
112
	 * @return bool
113
	 */
114 3
	public function hasFullName() {
115 3
		return $this->distributionPointName()->tag() ==
116 3
			 DistributionPointName::TAG_FULL_NAME;
117
	}
118
	
119
	/**
120
	 * Get full distribution point name.
121
	 *
122
	 * @throws \LogicException
123
	 * @return FullName
124
	 */
125 3
	public function fullName() {
126 3
		if (!$this->hasFullName()) {
127 1
			throw new \LogicException("fullName not set.");
128
		}
129 2
		return $this->_distributionPoint;
130
	}
131
	
132
	/**
133
	 * Check whether distribution point name is set and it's a relative name.
134
	 *
135
	 * @return bool
136
	 */
137 2
	public function hasRelativeName() {
138 2
		return $this->distributionPointName()->tag() ==
139 2
			 DistributionPointName::TAG_RDN;
140
	}
141
	
142
	/**
143
	 * Get relative distribution point name.
144
	 *
145
	 * @throws \LogicException
146
	 * @return RelativeName
147
	 */
148 2
	public function relativeName() {
149 2
		if (!$this->hasRelativeName()) {
150 1
			throw new \LogicException("nameRelativeToCRLIssuer not set.");
151
		}
152 1
		return $this->_distributionPoint;
153
	}
154
	
155
	/**
156
	 * Check whether reasons flags is set.
157
	 *
158
	 * @return bool
159
	 */
160 5
	public function hasReasons() {
161 5
		return isset($this->_reasons);
162
	}
163
	
164
	/**
165
	 * Get revocation reason flags.
166
	 *
167
	 * @throws \LogicException
168
	 * @return ReasonFlags
169
	 */
170 5
	public function reasons() {
171 5
		if (!$this->hasReasons()) {
172 1
			throw new \LogicException("reasons not set.");
173
		}
174 4
		return $this->_reasons;
175
	}
176
	
177
	/**
178
	 * Check whether cRLIssuer is set.
179
	 *
180
	 * @return bool
181
	 */
182 5
	public function hasCRLIssuer() {
183 5
		return isset($this->_issuer);
184
	}
185
	
186
	/**
187
	 * Get CRL issuer.
188
	 *
189
	 * @throws \LogicException
190
	 * @return GeneralNames
191
	 */
192 5
	public function crlIssuer() {
193 5
		if (!$this->hasCRLIssuer()) {
194 1
			throw new \LogicException("crlIssuer not set.");
195
		}
196 4
		return $this->_issuer;
197
	}
198
	
199
	/**
200
	 * Generate ASN.1 structure.
201
	 *
202
	 * @return Sequence
203
	 */
204 5 View Code Duplication
	public function toASN1() {
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
205 5
		$elements = array();
206 5
		if (isset($this->_distributionPoint)) {
207 5
			$elements[] = new ExplicitlyTaggedType(0, 
208 5
				$this->_distributionPoint->toASN1());
209 5
		}
210 5
		if (isset($this->_reasons)) {
211 4
			$elements[] = new ImplicitlyTaggedType(1, $this->_reasons->toASN1());
212 4
		}
213 5
		if (isset($this->_issuer)) {
214 4
			$elements[] = new ImplicitlyTaggedType(2, $this->_issuer->toASN1());
215 4
		}
216 5
		return new Sequence(...$elements);
217
	}
218
}
219