Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
| Total | |
100.00% |
1 / 1 |
|
100.00% |
17 / 17 |
CRAP | |
100.00% |
32 / 32 |
| SecurityTxt | |
100.00% |
1 / 1 |
|
100.00% |
17 / 17 |
25 | |
100.00% |
32 / 32 |
| __construct | |
100.00% |
1 / 1 |
6 | |
100.00% |
9 / 9 |
|||
| getParentClass | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
| getParent | |
100.00% |
1 / 1 |
2 | |
100.00% |
3 / 3 |
|||
| hasParent | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
| enableComments | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
| disableComments | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
| setComments | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
|||
| getComments | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
| enableDebug | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
| disableDebug | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
| setDebug | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
|||
| getDebug | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
| setText | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
|||
| getText | |
100.00% |
1 / 1 |
2 | |
100.00% |
1 / 1 |
|||
| execute | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
| reset | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
| overrideMissing | |
100.00% |
1 / 1 |
2 | |
100.00% |
3 / 3 |
|||
| <?php | |
| /** | |
| * src/SecurityTxt.php | |
| * | |
| * @package php-security-txt | |
| * @author Austin Heap <me@austinheap.com> | |
| * @version v0.4.0 | |
| */ | |
| declare(strict_types = 1); | |
| namespace AustinHeap\Security\Txt; | |
| use AustinHeap\Security\Txt\Directives\Acknowledgement; | |
| use AustinHeap\Security\Txt\Directives\Contact; | |
| use AustinHeap\Security\Txt\Directives\Disclosure; | |
| use AustinHeap\Security\Txt\Directives\Encryption; | |
| use Exception; | |
| /** | |
| * SecurityTxt | |
| * | |
| * @link https://github.com/austinheap/php-security-txt | |
| * @link https://packagist.org/packages/austinheap/php-security-txt | |
| * @link https://austinheap.github.io/php-security-txt/classes/AustinHeap.Security.Txt.SecurityTxt.html | |
| * @link https://securitytext.org/ | |
| */ | |
| class SecurityTxt implements SecurityTxtInterface | |
| { | |
| /** | |
| * Directive trait: Contact | |
| */ | |
| use Contact; | |
| /** | |
| * Directive trait: Encryption | |
| */ | |
| use Encryption; | |
| /** | |
| * Directive trait: Disclosure | |
| */ | |
| use Disclosure; | |
| /** | |
| * Directive trait: Acknowledgement | |
| */ | |
| use Acknowledgement; | |
| /** | |
| * Internal version number. | |
| * | |
| * @var string | |
| */ | |
| const VERSION = '0.4.0'; | |
| /** | |
| * Internal parent object. | |
| * | |
| * @var \AustinHeap\Security\Txt\Writer|\AustinHeap\Security\Txt\Reader | |
| */ | |
| private $parent = null; | |
| /** | |
| * Internal Writer object. | |
| * | |
| * @var \AustinHeap\Security\Txt\Writer | |
| */ | |
| protected $writer = null; | |
| /** | |
| * Internal Reader object. | |
| * | |
| * @var \AustinHeap\Security\Txt\Reader | |
| */ | |
| protected $reader = null; | |
| /** | |
| * Internal text cache. | |
| * | |
| * @var string | |
| */ | |
| protected $text = null; | |
| /** | |
| * Enable debug output. | |
| * | |
| * @var bool | |
| */ | |
| protected $debug = false; | |
| /** | |
| * Enable built-in comments. | |
| * | |
| * @var bool | |
| */ | |
| protected $comments = true; | |
| /** | |
| * Create a new SecurityTxt instance. | |
| * | |
| * @param Writer|Reader $parent | |
| * | |
| * @return SecurityTxt|Writer|Reader | |
| */ | |
| public function __construct(&$parent = null) | |
| { | |
| if (!defined('PHP_SECURITY_TXT_VERSION')) { | |
| define('PHP_SECURITY_TXT_VERSION', self::VERSION); | |
| } | |
| $this->parent = $parent; | |
| if (func_num_args() == 1) { | |
| if (is_null($this->parent)) { | |
| throw new Exception('Cannot create ' . __CLASS__ . ' with explicitly null $parent class.'); | |
| } elseif (!$this->parent instanceof Reader && !$this->parent instanceof Writer) { | |
| throw new Exception('Cannot create ' . __CLASS__ . ' with $parent class: ' . get_class($this->parent)); | |
| } | |
| } | |
| return $this; | |
| } | |
| /** | |
| * Returns the parent's class if it exists. | |
| * | |
| * @return string | |
| */ | |
| public function getParentClass(): string | |
| { | |
| return get_class($this->getParent()); | |
| } | |
| /** | |
| * Returns the parent object if it exists. | |
| * | |
| * @return Reader|Writer | |
| */ | |
| public function getParent() | |
| { | |
| if (!$this->hasParent()) { | |
| throw new Exception('Parent object is not set.'); | |
| } | |
| return $this->parent; | |
| } | |
| /** | |
| * Determines if the parent object was set. | |
| * | |
| * @return bool | |
| */ | |
| public function hasParent(): bool | |
| { | |
| return !is_null($this->parent); | |
| } | |
| /** | |
| * Enable the comments flag. | |
| * | |
| * @return \AustinHeap\Security\Txt\SecurityTxt | |
| */ | |
| public function enableComments(): SecurityTxt | |
| { | |
| return $this->setComments(true); | |
| } | |
| /** | |
| * Disable the comments flag. | |
| * | |
| * @return \AustinHeap\Security\Txt\SecurityTxt | |
| */ | |
| public function disableComments(): SecurityTxt | |
| { | |
| return $this->setComments(false); | |
| } | |
| /** | |
| * Set the comments flag. | |
| * | |
| * @param string $comments | |
| * | |
| * @return \AustinHeap\Security\Txt\SecurityTxt | |
| */ | |
| public function setComments(bool $comments): SecurityTxt | |
| { | |
| $this->comments = $comments; | |
| return $this; | |
| } | |
| /** | |
| * Get the comments flag. | |
| * | |
| * @return bool | |
| */ | |
| public function getComments(): bool | |
| { | |
| return $this->comments; | |
| } | |
| /** | |
| * Enable the debug flag. | |
| * | |
| * @return \AustinHeap\Security\Txt\SecurityTxt | |
| */ | |
| public function enableDebug(): SecurityTxt | |
| { | |
| return $this->setDebug(true); | |
| } | |
| /** | |
| * Disable the debug flag. | |
| * | |
| * @return \AustinHeap\Security\Txt\SecurityTxt | |
| */ | |
| public function disableDebug(): SecurityTxt | |
| { | |
| return $this->setDebug(false); | |
| } | |
| /** | |
| * Set the debug flag. | |
| * | |
| * @param bool $debug | |
| * | |
| * @return \AustinHeap\Security\Txt\SecurityTxt | |
| */ | |
| public function setDebug(bool $debug): SecurityTxt | |
| { | |
| $this->debug = $debug; | |
| return $this; | |
| } | |
| /** | |
| * Get the debug flag. | |
| * | |
| * @return bool | |
| */ | |
| public function getDebug(): bool | |
| { | |
| return $this->debug; | |
| } | |
| /** | |
| * Set the text. | |
| * | |
| * @param string $text | |
| * | |
| * @return \AustinHeap\Security\Txt\SecurityTxt | |
| */ | |
| public function setText(string $text): SecurityTxt | |
| { | |
| $this->text = $text; | |
| return $this; | |
| } | |
| /** | |
| * Get the text. | |
| * | |
| * @return string | |
| */ | |
| public function getText(): string | |
| { | |
| return $this->text === null ? '' : $this->text; | |
| } | |
| /** | |
| * Stub generate function. Must be overridden by inheriting class that implements SecurityTxtInterface. | |
| * | |
| * @param bool $test_case | |
| * | |
| * @return Reader|Writer|null | |
| * @throws Exception | |
| */ | |
| public function execute(bool $test_case = false) | |
| { | |
| return $this->overrideMissing(__FUNCTION__, $test_case); | |
| } | |
| /** | |
| * Stub reset function. Must be overridden by inheriting class that implements SecurityTxtInterface. | |
| * | |
| * @param bool $test_case | |
| * | |
| * @return Reader|Writer|null | |
| * @throws Exception | |
| */ | |
| public function reset(bool $test_case = false) | |
| { | |
| return $this->overrideMissing(__FUNCTION__, $test_case); | |
| } | |
| /** | |
| * Throws an exception when the inheriting class did not correctly implement SecurityTxtInterface. | |
| * | |
| * @param string $function | |
| * @param bool $test_case | |
| * | |
| * @return null | |
| * @throws Exception | |
| */ | |
| public function overrideMissing(string $function, bool $test_case = false) | |
| { | |
| if ($test_case) { | |
| return null; | |
| } | |
| throw new Exception('Function "' . $function . '" must be overridden by parent SecurityTxtInterface before being called.'); | |
| } | |
| } |