Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
137 changes: 112 additions & 25 deletions Securitytxt/Model/Config/Backend/Validate.php
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@ class Validate extends Value
*
* @return Value
* @throws ValidatorException
* @SuppressWarnings(PHPMD.NPathComplexity)
* @SuppressWarnings(PHPMD.CyclomaticComplexity)
*/
public function validateBeforeSave()
{
Expand All @@ -35,26 +37,41 @@ public function validateBeforeSave()
$dataGroup = $this->getData()['groups'];
$contactInformationFields = $dataGroup['contact_information']['fields'];
$otherInformationFields = $dataGroup['other_information']['fields'];
$isExtensionEnabled = (bool)$dataGroup['general']['fields']['enabled']['value'];
$contactEmail = $contactInformationFields['email']['value'];
$contactPhone = $contactInformationFields['phone']['value'];
$contactWebPage = $contactInformationFields['contact_page']['value'];

if ($isExtensionEnabled) {
if ($contactEmail === '' && $contactPhone === '' && $contactWebPage === '') {
throw new ValidatorException(__('At least one contact information is required.'));
}
} else {
return parent::validateBeforeSave();
$isEnabledField = $dataGroup['general']['fields']['enabled'];

if ($this->isEnabledDataValue($isEnabledField)
&& $this->isEmptyContactInformationFields($contactInformationFields)) {
throw new ValidatorException(__('At least one contact information is required.'));
}

if (isset($contactInformationFields['email'])) {
$this->validateContactEmail($contactInformationFields['email']);
}

if (isset($contactInformationFields['contact_page'])) {
$this->validateContactWebPageUrl($contactInformationFields['contact_page']);
}

$this->validateContactEmail($contactEmail);
$this->validateContactWebpageUrl($contactWebPage);
$this->validateUrlField("Contact Page URL", $contactWebPage);
$this->validateUrlField("Encryption URL", $otherInformationFields['encryption']['value']);
$this->validateUrlField("Acknowledgements URL", $otherInformationFields['acknowledgements']['value']);
$this->validateUrlField("Hiring URL", $otherInformationFields['hiring']['value']);
$this->validateUrlField("Policy URL", $otherInformationFields['policy']['value']);
if (isset($otherInformationFields['acknowledgements'])) {
$this->validateUrlField(
"Acknowledgements URL",
$this->getDataValue($otherInformationFields['acknowledgements'])
);
}

if (isset($otherInformationFields['hiring'])) {
$this->validateUrlField(
"Hiring URL",
$this->getDataValue($otherInformationFields['hiring'])
);
}

if (isset($otherInformationFields['policy'])) {
$this->validateUrlField(
"Policy URL",
$this->getDataValue($otherInformationFields['policy'])
);
}

return parent::validateBeforeSave();
}
Expand All @@ -79,12 +96,17 @@ private function validateSecureUrl(string $url): bool
/**
* Validate contact email configuration field.
*
* @param string $contactEmail
* @return void
* @param array $contactEmailFieldData
* @throws ValidatorException
*/
private function validateContactEmail(string $contactEmail): void
private function validateContactEmail(array $contactEmailFieldData): void
{
if ($this->existDataValue($contactEmailFieldData)) {
$contactEmail = $this->getDataValue($contactEmailFieldData);
} else {
$contactEmail = '';
}

if ($contactEmail !== '' && !filter_var($contactEmail, FILTER_VALIDATE_EMAIL)) {
throw new ValidatorException(
__('Contact Information: Email validation failed. Please enter in correct format.')
Expand All @@ -95,13 +117,18 @@ private function validateContactEmail(string $contactEmail): void
/**
* Validate contact web page configuration field.
*
* @param string $contactWebpage
* @return void
* @param array $contactWebPageFieldData
* @throws ValidatorException
*/
private function validateContactWebpageUrl(string $contactWebpage): void
private function validateContactWebPageUrl(array $contactWebPageFieldData): void
{
if ($contactWebpage !== '' && !$this->validateSecureUrl($contactWebpage)) {
if ($this->existDataValue($contactWebPageFieldData)) {
$contactWebPage = $this->getDataValue($contactWebPageFieldData);
} else {
$contactWebPage = '';
}

if ($contactWebPage !== '' && !$this->validateSecureUrl($contactWebPage)) {
throw new ValidatorException(
__('Contact Information: Contact Page URL should be in correct format and must start with HTTPS.')
);
Expand All @@ -123,4 +150,64 @@ private function validateUrlField(string $fieldName, string $fieldValue): void
);
}
}

/**
* Get Value from form or inheriting value.
*
* @param array $fieldData
* @return string
*/
private function getDataValue(array $fieldData): string
{
return isset($fieldData['value']) ? $fieldData['value'] : '';
}

/**
* Check exists value data
*
* @param array $fieldData
* @return bool
*/
private function existDataValue(array $fieldData): bool
{
return isset($fieldData['value']) && ($fieldData['value'] !== '' || empty($fieldData['value']));
}

/**
* Check is Empty value
*
* @param string $key
* @param array $fieldData
* @return bool
*/
private function isEmptyValue(string $key, array $fieldData): bool
{
return (isset($fieldData[$key])
&& $this->existDataValue($fieldData[$key])
&& $this->getDataValue($fieldData[$key]) === '');
}

/**
* Check for Empty Contact Information fields
*
* @param array $contactInformationFields
* @return bool
*/
private function isEmptyContactInformationFields(array $contactInformationFields): bool
{
return ($this->isEmptyValue('email', $contactInformationFields)
&& $this->isEmptyValue('phone', $contactInformationFields)
&& $this->isEmptyValue('contact_page', $contactInformationFields));
}

/**
* Check if exist data value Enabled form value
*
* @param array $isEnabledField
* @return bool
*/
private function isEnabledDataValue(array $isEnabledField): bool
{
return ($this->existDataValue($isEnabledField) && $this->getDataValue($isEnabledField));
}
}