corrected validation of idn-tld's, fixes #899

Signed-off-by: Michael Kaufmann <d00p@froxlor.org>
This commit is contained in:
Michael Kaufmann
2020-11-14 11:59:46 +01:00
parent ecd707424f
commit 455c655580
3 changed files with 30 additions and 4 deletions

View File

@@ -217,9 +217,9 @@ class Validate
public static function validateDomain($domainname, $allow_underscore = false) public static function validateDomain($domainname, $allow_underscore = false)
{ {
if (is_string($domainname)) { if (is_string($domainname)) {
$char_validation = '([a-z\d](-*[a-z\d])*)(\.?([a-z\d](-*[a-z\d])*))*\.([a-z\d])+'; $char_validation = '([a-z\d](-*[a-z\d])*)(\.?([a-z\d](-*[a-z\d])*))*\.(xn\-\-)?([a-z\d])+';
if ($allow_underscore) { if ($allow_underscore) {
$char_validation = '([a-z\d\_](-*[a-z\d\_])*)(\.([a-z\d\_](-*[a-z\d])*))*(\.?([a-z\d](-*[a-z\d])*))+\.([a-z\d])+'; $char_validation = '([a-z\d\_](-*[a-z\d\_])*)(\.([a-z\d\_](-*[a-z\d])*))*(\.?([a-z\d](-*[a-z\d])*))+\.(xn\-\-)?([a-z\d])+';
} }
// valid chars check && overall length check && length of each label // valid chars check && overall length check && length of each label

View File

@@ -64,7 +64,7 @@ class CertificatesTest extends TestCase
'ssl_key_file' => $certdata['key'] 'ssl_key_file' => $certdata['key']
))->add(); ))->add();
$result = json_decode($json_result, true)['data']; $result = json_decode($json_result, true)['data'];
$this->assertEquals(6, $result['domainid']); $this->assertEquals(7, $result['domainid']);
} }
public function testAdminCertificatesList() public function testAdminCertificatesList()
@@ -148,7 +148,7 @@ class CertificatesTest extends TestCase
'ssl_key_file' => $certdata['key'] 'ssl_key_file' => $certdata['key']
))->update(); ))->update();
$result = json_decode($json_result, true)['data']; $result = json_decode($json_result, true)['data'];
$this->assertEquals(6, $result['domainid']); $this->assertEquals(7, $result['domainid']);
$this->assertEquals(str_replace("\n", "", $certdata['cert']), str_replace("\n", "", $result['ssl_cert_file'])); $this->assertEquals(str_replace("\n", "", $certdata['cert']), str_replace("\n", "", $result['ssl_cert_file']));
} }

View File

@@ -395,4 +395,30 @@ class DomainsTest extends TestCase
'domainname' => 'täst.local' 'domainname' => 'täst.local'
])->delete(); ])->delete();
} }
/**
* @refs https://github.com/Froxlor/Froxlor/issues/899
*/
public function testAdminIdn2DomainsAdd()
{
global $admin_userdata;
// get customer
$json_result = Customers::getLocal($admin_userdata, array(
'loginname' => 'test1'
))->get();
$customer_userdata = json_decode($json_result, true)['data'];
$data = [
'domain' => 'उदाहरण.भारत',
'customerid' => $customer_userdata['customerid']
];
$json_result = Domains::getLocal($admin_userdata, $data)->add();
$result = json_decode($json_result, true)['data'];
$this->assertEquals($customer_userdata['documentroot'] . 'xn--p1b6ci4b4b3a.xn--h2brj9c/', $result['documentroot']);
$this->assertEquals('xn--p1b6ci4b4b3a.xn--h2brj9c', $result['domain']);
$this->assertEquals('उदाहरण.भारत', $result['domain_ace']);
Domains::getLocal($admin_userdata, [
'domainname' => 'उदाहरण.भारत'
])->delete();
}
} }