Completed
Branch Version3 (22030a)
by Sam
01:45
created

Factory::SIG()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 17

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
dl 0
loc 17
ccs 0
cts 12
cp 0
rs 9.7
c 0
b 0
f 0
cc 1
nc 1
nop 9
crap 2

How to fix   Many Parameters   

Many Parameters

Methods with many parameters are not only hard to understand, but their parameters also often become inconsistent when you need more, or different data.

There are several approaches to avoid long parameter lists:

1
<?php
2
3
declare(strict_types=1);
4
5
/*
6
 * This file is part of Badcow DNS Library.
7
 *
8
 * (c) Samuel Williams <[email protected]>
9
 *
10
 * For the full copyright and license information, please view the LICENSE
11
 * file that was distributed with this source code.
12
 */
13
14
namespace Badcow\DNS\Rdata;
15
16
use PhpIP\IPBlock;
17
18
class Factory
19
{
20
    /**
21
     * Creates a new RData object from a name.
22
     *
23
     * @param string $name
24
     *
25
     * @throws UnsupportedTypeException
26
     *
27
     * @return RdataInterface
28
     */
29 1
    public static function newRdataFromName(string $name): RdataInterface
30
    {
31 1
        if (!self::isTypeImplemented($name)) {
32 1
            throw new UnsupportedTypeException($name);
33
        }
34
35 1
        $className = self::getRdataClassName($name);
36
37 1
        return new $className();
38
    }
39
40
    /**
41
     * @param int $id
42
     *
43
     * @return RdataInterface
44
     *
45
     * @throws UnsupportedTypeException
46
     */
47
    public static function newRdataFromId(int $id): RdataInterface
48
    {
49
        return self::newRdataFromName(TypeCodes::getName($id));
50
    }
51
52
    /**
53
     * @param string $name
54
     *
55
     * @return bool
56
     */
57 17
    public static function isTypeImplemented(string $name): bool
58
    {
59 17
        return class_exists(self::getRdataClassName($name));
60
    }
61
62
    /**
63
     * @param string $type
64
     * @param string $text
65
     *
66
     * @return RdataInterface
67
     */
68 16
    public static function textToRdataType(string $type, string $text): RdataInterface
69
    {
70 16
        if (!self::isTypeImplemented($type)) {
71 1
            return new PolymorphicRdata($type, $text);
72
        }
73
74
        /** @var callable $callable */
75 15
        $callable = self::getRdataClassName($type).'::fromText';
76
77 15
        return call_user_func($callable, $text);
78
    }
79
80
    /**
81
     * Get the fully qualified class name of the RData class for $type.
82
     *
83
     * @param string $type
84
     *
85
     * @return string
86
     */
87 17
    public static function getRdataClassName(string $type): string
88
    {
89 17
        return __NAMESPACE__.'\\'.strtoupper($type);
90
    }
91
92
    /**
93
     * Create a new AAAA R-Data object.
94
     *
95
     * @param string $address
96
     *
97
     * @return AAAA
98
     */
99 12
    public static function AAAA(string $address): AAAA
100
    {
101 12
        $rdata = new AAAA();
102 12
        $rdata->setAddress($address);
103
104 12
        return $rdata;
105
    }
106
107
    /**
108
     * Create a new A R-Data object.
109
     *
110
     * @param string $address
111
     *
112
     * @return A
113
     */
114 12
    public static function A(string $address): A
115
    {
116 12
        $rdata = new A();
117 12
        $rdata->setAddress($address);
118
119 12
        return $rdata;
120
    }
121
122
    /**
123
     * Create a new CNAME object.
124
     *
125
     * @param string $cname
126
     *
127
     * @return CNAME
128
     */
129 9
    public static function CNAME(string $cname): CNAME
130
    {
131 9
        $rdata = new CNAME();
132 9
        $rdata->setTarget($cname);
133
134 9
        return $rdata;
135
    }
136
137
    /**
138
     * @param string $cpu
139
     * @param string $os
140
     *
141
     * @return HINFO
142
     */
143 9
    public static function HINFO(string $cpu, string $os): HINFO
144
    {
145 9
        $rdata = new HINFO();
146 9
        $rdata->setCpu($cpu);
147 9
        $rdata->setOs($os);
148
149 9
        return $rdata;
150
    }
151
152
    /**
153
     * @param int    $preference
154
     * @param string $exchange
155
     *
156
     * @return MX
157
     */
158 11
    public static function MX(int $preference, string $exchange): MX
159
    {
160 11
        $rdata = new MX();
161 11
        $rdata->setPreference($preference);
162 11
        $rdata->setExchange($exchange);
163
164 11
        return $rdata;
165
    }
166
167
    /**
168
     * @param string $mname
169
     * @param string $rname
170
     * @param int    $serial
171
     * @param int    $refresh
172
     * @param int    $retry
173
     * @param int    $expire
174
     * @param int    $minimum
175
     *
176
     * @return SOA
177
     */
178 14
    public static function SOA(string $mname, string $rname, int $serial, int $refresh, int $retry, int $expire, int $minimum): SOA
179
    {
180 14
        $rdata = new SOA();
181 14
        $rdata->setMname($mname);
182 14
        $rdata->setRname($rname);
183 14
        $rdata->setSerial($serial);
184 14
        $rdata->setRefresh($refresh);
185 14
        $rdata->setRetry($retry);
186 14
        $rdata->setExpire($expire);
187 14
        $rdata->setMinimum($minimum);
188
189 14
        return $rdata;
190
    }
191
192
    /**
193
     * @param string $nsdname
194
     *
195
     * @return NS
196
     */
197 13
    public static function NS(string $nsdname): NS
198
    {
199 13
        $rdata = new NS();
200 13
        $rdata->setTarget($nsdname);
201
202 13
        return $rdata;
203
    }
204
205
    /**
206
     * @param string $text
207
     *
208
     * @return TXT
209
     */
210 10
    public static function TXT(string $text): TXT
211
    {
212 10
        $rdata = new TXT();
213 10
        $rdata->setText($text);
214
215 10
        return $rdata;
216
    }
217
218
    /**
219
     * @param string $target
220
     *
221
     * @return DNAME
222
     */
223 9
    public static function DNAME(string $target): DNAME
224
    {
225 9
        $rdata = new DNAME();
226 9
        $rdata->setTarget($target);
227
228 9
        return $rdata;
229
    }
230
231
    /**
232
     * @param float $lat
233
     * @param float $lon
234
     * @param float $alt
235
     * @param float $size
236
     * @param float $hp
237
     * @param float $vp
238
     *
239
     * @return LOC
240
     */
241 10
    public static function LOC(float $lat, float $lon, $alt = 0.0, $size = 1.0, $hp = 10000.0, $vp = 10.0): LOC
242
    {
243 10
        $loc = new LOC();
244 10
        $loc->setLatitude($lat);
245 10
        $loc->setLongitude($lon);
246 10
        $loc->setAltitude($alt);
247 10
        $loc->setSize($size);
248 10
        $loc->setHorizontalPrecision($hp);
249 10
        $loc->setVerticalPrecision($vp);
250
251 10
        return $loc;
252
    }
253
254
    /**
255
     * @param string $target
256
     *
257
     * @return PTR
258
     */
259 2
    public static function PTR(string $target): PTR
260
    {
261 2
        $ptr = new PTR();
262 2
        $ptr->setTarget($target);
263
264 2
        return $ptr;
265
    }
266
267
    /**
268
     * @param int    $flags
269
     * @param int    $algorithm
270
     * @param string $publicKey
271
     *
272
     * @return DNSKEY
273
     */
274 1
    public static function DNSKEY(int $flags, int $algorithm, string $publicKey): DNSKEY
275
    {
276 1
        $rdata = new DNSKEY();
277 1
        $rdata->setFlags($flags);
278 1
        $rdata->setAlgorithm($algorithm);
279 1
        $rdata->setPublicKey($publicKey);
280
281 1
        return $rdata;
282
    }
283
284
    /**
285
     * @param int    $keyTag
286
     * @param int    $algorithm
287
     * @param string $digest
288
     * @param int    $digestType
289
     *
290
     * @return DS
291
     */
292 1
    public static function DS(int $keyTag, int $algorithm, string $digest, int $digestType = DS::DIGEST_SHA1): DS
293
    {
294 1
        $rdata = new DS();
295 1
        $rdata->setKeyTag($keyTag);
296 1
        $rdata->setAlgorithm($algorithm);
297 1
        $rdata->setDigest($digest);
298 1
        $rdata->setDigestType($digestType);
299
300 1
        return $rdata;
301
    }
302
303
    /**
304
     * @param string $nextDomainName
305
     * @param array  $types
306
     *
307
     * @return NSEC
308
     */
309 1
    public static function NSEC(string $nextDomainName, array $types): NSEC
310
    {
311 1
        $rdata = new NSEC();
312 1
        $rdata->setNextDomainName($nextDomainName);
313 1
        array_map([$rdata, 'addType'], $types);
314
315 1
        return $rdata;
316
    }
317
318
    /**
319
     * @param string    $typeCovered
320
     * @param int       $algorithm
321
     * @param int       $labels
322
     * @param int       $originalTtl
323
     * @param \DateTime $signatureExpiration
324
     * @param \DateTime $signatureInception
325
     * @param int       $keyTag
326
     * @param string    $signersName
327
     * @param string    $signature
328
     *
329
     * @return RRSIG
330
     */
331 1
    public static function RRSIG(string $typeCovered, int $algorithm, int $labels, int $originalTtl,
332
                                 \DateTime $signatureExpiration, \DateTime $signatureInception, int $keyTag,
333
                                 string $signersName, string $signature): RRSIG
334
    {
335 1
        $rrsig = new RRSIG();
336 1
        $rrsig->setTypeCovered($typeCovered);
337 1
        $rrsig->setAlgorithm($algorithm);
338 1
        $rrsig->setLabels($labels);
339 1
        $rrsig->setOriginalTtl($originalTtl);
340 1
        $rrsig->setSignatureExpiration($signatureExpiration);
341 1
        $rrsig->setSignatureInception($signatureInception);
342 1
        $rrsig->setKeyTag($keyTag);
343 1
        $rrsig->setSignersName($signersName);
344 1
        $rrsig->setSignature($signature);
345
346 1
        return $rrsig;
347
    }
348
349
    /**
350
     * @param int    $priority
351
     * @param int    $weight
352
     * @param int    $port
353
     * @param string $target
354
     *
355
     * @return SRV
356
     */
357 1
    public static function SRV(int $priority, int $weight, int $port, string $target): SRV
358
    {
359 1
        $rdata = new SRV();
360 1
        $rdata->setPriority($priority);
361 1
        $rdata->setWeight($weight);
362 1
        $rdata->setPort($port);
363 1
        $rdata->setTarget($target);
364
365 1
        return $rdata;
366
    }
367
368
    /**
369
     * @param IPBlock[] $includedRanges
370
     * @param IPBlock[] $excludedRanges
371
     *
372
     * @return APL
373
     */
374 2
    public static function APL(array $includedRanges = [], array $excludedRanges = []): APL
375
    {
376 2
        $rdata = new APL();
377
378 2
        foreach ($includedRanges as $ipBlock) {
379 2
            $rdata->addAddressRange($ipBlock, true);
380
        }
381
382 2
        foreach ($excludedRanges as $ipBlock) {
383 2
            $rdata->addAddressRange($ipBlock, false);
384
        }
385
386 2
        return $rdata;
387
    }
388
389
    /**
390
     * @param int    $flag
391
     * @param string $tag
392
     * @param string $value
393
     *
394
     * @return CAA
395
     */
396 1
    public static function CAA(int $flag, string $tag, string $value): CAA
397
    {
398 1
        $rdata = new CAA();
399 1
        $rdata->setFlag($flag);
400 1
        $rdata->setTag($tag);
401 1
        $rdata->setValue($value);
402
403 1
        return $rdata;
404
    }
405
406
    /**
407
     * @param int    $subType
408
     * @param string $hostname
409
     *
410
     * @return AFSDB
411
     */
412
    public static function AFSDB(int $subType, string $hostname): AFSDB
413
    {
414
        $afsdb = new AFSDB();
415
        $afsdb->setSubType($subType);
416
        $afsdb->setHostname($hostname);
417
418
        return $afsdb;
419
    }
420
421
    /**
422
     * @param int    $flags
423
     * @param int    $algorithm
424
     * @param string $publicKey
425
     *
426
     * @return CDNSKEY
427
     */
428
    public static function CDNSKEY(int $flags, int $algorithm, string $publicKey): CDNSKEY
429
    {
430
        $cdnskey = new CDNSKEY();
431
        $cdnskey->setFlags($flags);
432
        $cdnskey->setAlgorithm($algorithm);
433
        $cdnskey->setPublicKey($publicKey);
434
435
        return $cdnskey;
436
    }
437
438
    /**
439
     * @param int    $keyTag
440
     * @param int    $algorithm
441
     * @param string $digest
442
     * @param int    $digestType
443
     *
444
     * @return CDS
445
     */
446
    public static function CDS(int $keyTag, int $algorithm, string $digest, int $digestType = DS::DIGEST_SHA1): CDS
447
    {
448
        $cds = new CDS();
449
        $cds->setKeyTag($keyTag);
450
        $cds->setAlgorithm($algorithm);
451
        $cds->setDigest($digest);
452
        $cds->setDigestType($digestType);
453
454
        return $cds;
455
    }
456
457
    /**
458
     * @param int|string $certificateType
459
     * @param int        $keyTag
460
     * @param int        $algorithm
461
     * @param string     $certificate
462
     *
463
     * @return CERT
464
     */
465 1
    public static function CERT($certificateType, int $keyTag, int $algorithm, string $certificate): CERT
466
    {
467 1
        $cert = new CERT();
468 1
        $cert->setCertificateType($certificateType);
469 1
        $cert->setKeyTag($keyTag);
470 1
        $cert->setAlgorithm($algorithm);
471 1
        $cert->setCertificate($certificate);
472
473 1
        return $cert;
474
    }
475
476 1
    public static function CSYNC(int $soaSerial, int $flags, array $types): CSYNC
477
    {
478 1
        $csync = new CSYNC();
479 1
        $csync->setSoaSerial($soaSerial);
480 1
        $csync->setFlags($flags);
481 1
        array_map([$csync, 'addType'], $types);
482
483 1
        return $csync;
484
    }
485
486
    /**
487
     * @param string|null $digest         Set to &null if the $identifier and $fqdn are known
488
     * @param int         $identifierType 16-bit integer
489
     * @param string|null $identifier     This is ignored if $digest is not &null
490
     * @param string|null $fqdn           This is ignored if $digest is not &null
491
     *
492
     * @return DHCID
493
     */
494 3
    public static function DHCID(?string $digest, int $identifierType, ?string $identifier = null, ?string $fqdn = null): DHCID
495
    {
496 3
        $dhcid = new DHCID();
497 3
        if (null !== $digest) {
498
            $dhcid->setIdentifierType($identifierType);
499
            $dhcid->setDigest($digest);
500
501
            return $dhcid;
502
        }
503
504 3
        if (null === $identifier || null === $fqdn) {
505
            throw new \InvalidArgumentException('Identifier and FQDN cannot be null if digest is null.');
506
        }
507
508 3
        $dhcid->setIdentifier($identifierType, $identifier);
509 3
        $dhcid->setFqdn($fqdn);
510
511 3
        return $dhcid;
512
    }
513
514
    /**
515
     * @param int    $keyTag
516
     * @param int    $algorithm
517
     * @param string $digest
518
     * @param int    $digestType
519
     *
520
     * @return DLV
521
     */
522
    public static function DLV(int $keyTag, int $algorithm, string $digest, int $digestType = DS::DIGEST_SHA1): DLV
523
    {
524
        $rdata = new DLV();
525
        $rdata->setKeyTag($keyTag);
526
        $rdata->setAlgorithm($algorithm);
527
        $rdata->setDigest($digest);
528
        $rdata->setDigestType($digestType);
529
530
        return $rdata;
531
    }
532
533
    public static function HIP(): HIP
534
    {
535
        // TODO: Implement HIP() method.
536
    }
537
538
    /**
539
     * @param int         $precedence an 8-bit unsigned integer
540
     * @param string|null $gateway    either &null for no gateway, a fully qualified domain name, or an IPv4 or IPv6 address
541
     * @param int         $algorithm  either IPSECKEY::ALGORITHM_NONE, IPSECKEY::ALGORITHM_DSA, IPSECKEY::ALGORITHM_RSA, or IPSECKEY::ALGORITHM_ECDSA
542
     * @param string|null $publicKey  base64 encoded public key
543
     *
544
     * @return IPSECKEY
545
     */
546 6
    public static function IPSECKEY(int $precedence, ?string $gateway, int $algorithm = 0, ?string $publicKey = null): IPSECKEY
547
    {
548 6
        $ipseckey = new IPSECKEY();
549 6
        $ipseckey->setPrecedence($precedence);
550 6
        $ipseckey->setGateway($gateway);
551 6
        $ipseckey->setPublicKey($algorithm, $publicKey);
552
553 6
        return $ipseckey;
554
    }
555
556
    /**
557
     * @param int    $flags
558
     * @param int    $protocol
559
     * @param int    $algorithm
560
     * @param string $publicKey
561
     *
562
     * @return KEY
563
     */
564
    public static function KEY(int $flags, int $protocol, int $algorithm, string $publicKey): KEY
565
    {
566
        $key = new KEY();
567
        $key->setFlags($flags);
568
        $key->setProtocol($protocol);
569
        $key->setAlgorithm($algorithm);
570
        $key->setPublicKey($publicKey);
571
572
        return $key;
573
    }
574
575
    /**
576
     * @param int    $preference
577
     * @param string $exchanger
578
     *
579
     * @return KX
580
     */
581
    public static function KX(int $preference, string $exchanger): KX
582
    {
583
        $kx = new KX();
584
        $kx->setPreference($preference);
585
        $kx->setExchanger($exchanger);
586
587
        return $kx;
588
    }
589
590
    /**
591
     * @param int    $order
592
     * @param int    $preference
593
     * @param string $flags
594
     * @param string $services
595
     * @param string $regexp
596
     * @param string $replacement
597
     *
598
     * @return NAPTR
599
     */
600 2
    public static function NAPTR(int $order, int $preference, string $flags, string $services, string $regexp, string $replacement): NAPTR
601
    {
602 2
        $naptr = new NAPTR();
603 2
        $naptr->setOrder($order);
604 2
        $naptr->setPreference($preference);
605 2
        $naptr->setFlags($flags);
606 2
        $naptr->setServices($services);
607 2
        $naptr->setRegexp($regexp);
608 2
        $naptr->setReplacement($replacement);
609
610 2
        return $naptr;
611
    }
612
613 1
    public static function NSEC3(int $hashAlgorithm, bool $unsignedDelegationsCovered, int $iterations, string $salt, string $nextHashedOwnerName, array $types): NSEC3
614
    {
615 1
        $nsec3 = new NSEC3();
616 1
        $nsec3->setHashAlgorithm($hashAlgorithm);
617 1
        $nsec3->setUnsignedDelegationsCovered($unsignedDelegationsCovered);
618 1
        $nsec3->setIterations($iterations);
619 1
        $nsec3->setSalt($salt);
620 1
        $nsec3->setNextHashedOwnerName($nextHashedOwnerName);
621 1
        array_map([$nsec3, 'addType'], $types);
622
623 1
        return $nsec3;
624
    }
625
626
    /**
627
     * @param int    $hashAlgorithm
628
     * @param int    $flags
629
     * @param int    $iterations
630
     * @param string $salt
631
     *
632
     * @return NSEC3PARAM
633
     */
634 1
    public static function NSEC3PARAM(int $hashAlgorithm, int $flags, int $iterations, string $salt): NSEC3PARAM
635
    {
636 1
        $nsec3param = new NSEC3PARAM();
637 1
        $nsec3param->setHashAlgorithm($hashAlgorithm);
638 1
        $nsec3param->setFlags($flags);
639 1
        $nsec3param->setIterations($iterations);
640 1
        $nsec3param->setSalt($salt);
641
642 1
        return $nsec3param;
643
    }
644
645
    public static function RP(string $mboxDomain, string $txtDomain): RP
646
    {
647
        $rp = new RP();
648
        $rp->setMailboxDomainName($mboxDomain);
649
        $rp->setTxtDomainName($txtDomain);
650
651
        return $rp;
652
    }
653
654
    /**
655
     * @param string    $typeCovered
656
     * @param int       $algorithm
657
     * @param int       $labels
658
     * @param int       $originalTtl
659
     * @param \DateTime $signatureExpiration
660
     * @param \DateTime $signatureInception
661
     * @param int       $keyTag
662
     * @param string    $signersName
663
     * @param string    $signature
664
     *
665
     * @return SIG
666
     */
667
    public static function SIG(string $typeCovered, int $algorithm, int $labels, int $originalTtl,
668
                                 \DateTime $signatureExpiration, \DateTime $signatureInception, int $keyTag,
669
                                 string $signersName, string $signature): SIG
670
    {
671
        $sig = new SIG();
672
        $sig->setTypeCovered($typeCovered);
673
        $sig->setAlgorithm($algorithm);
674
        $sig->setLabels($labels);
675
        $sig->setOriginalTtl($originalTtl);
676
        $sig->setSignatureExpiration($signatureExpiration);
677
        $sig->setSignatureInception($signatureInception);
678
        $sig->setKeyTag($keyTag);
679
        $sig->setSignersName($signersName);
680
        $sig->setSignature($signature);
681
682
        return $sig;
683
    }
684
685
    /**
686
     * @param int    $algorithm
687
     * @param int    $fpType
688
     * @param string $fingerprint
689
     *
690
     * @return SSHFP
691
     */
692 8
    public static function SSHFP(int $algorithm, int $fpType, string $fingerprint): SSHFP
693
    {
694 8
        $sshfp = new SSHFP();
695 8
        $sshfp->setAlgorithm($algorithm);
696 6
        $sshfp->setFingerprintType($fpType);
697 4
        $sshfp->setFingerprint($fingerprint);
698
699 3
        return $sshfp;
700
    }
701
702
    /**
703
     * @param int    $keyTag
704
     * @param int    $algorithm
705
     * @param string $digest
706
     * @param int    $digestType
707
     *
708
     * @return TA
709
     */
710
    public static function TA(int $keyTag, int $algorithm, string $digest, int $digestType = DS::DIGEST_SHA1): TA
711
    {
712
        $ta = new TA();
713
        $ta->setKeyTag($keyTag);
714
        $ta->setAlgorithm($algorithm);
715
        $ta->setDigest($digest);
716
        $ta->setDigestType($digestType);
717
718
        return $ta;
719
    }
720
721
    /**
722
     * @param string    $algorithm
723
     * @param \DateTime $inception
724
     * @param \DateTime $expiration
725
     * @param int       $mode
726
     * @param int       $error
727
     * @param string    $keyData    binary string
728
     * @param string    $otherData  binary string
729
     *
730
     * @return TKEY
731
     */
732 1
    public static function TKEY(string $algorithm, \DateTime $inception, \DateTime $expiration, int $mode, int $error, string $keyData, string $otherData = ''): TKEY
733
    {
734 1
        $tkey = new TKEY();
735 1
        $tkey->setAlgorithm($algorithm);
736 1
        $tkey->setInception($inception);
737 1
        $tkey->setExpiration($expiration);
738 1
        $tkey->setMode($mode);
739 1
        $tkey->setError($error);
740 1
        $tkey->setKeyData($keyData);
741 1
        $tkey->setOtherData($otherData);
742
743 1
        return $tkey;
744
    }
745
746
    public static function TLSA(): TLSA
747
    {
748
        // TODO: Implement TLSA() method.
749
    }
750
751
    public static function TSIG(): TSIG
752
    {
753
        // TODO: Implement TSIG() method.
754
    }
755
756
    /**
757
     * @param int    $priority
758
     * @param int    $weight
759
     * @param string $target
760
     *
761
     * @return URI
762
     */
763 6
    public static function URI(int $priority, int $weight, string $target): URI
764
    {
765 6
        $uri = new URI();
766 6
        $uri->setPriority($priority);
767 4
        $uri->setWeight($weight);
768 2
        $uri->setTarget($target);
769
770 1
        return $uri;
771
    }
772
}
773