1106 lines
28 KiB
PHP
1106 lines
28 KiB
PHP
<?php
|
|
use PHPUnit\Framework\TestCase;
|
|
|
|
use Froxlor\Settings;
|
|
use Froxlor\Api\Commands\Admins;
|
|
use Froxlor\Api\Commands\Customers;
|
|
use Froxlor\Api\Commands\DomainZones;
|
|
use Froxlor\Api\Commands\Domains;
|
|
use Froxlor\Api\Commands\SubDomains;
|
|
|
|
/**
|
|
*
|
|
* @covers \Froxlor\Api\ApiCommand
|
|
* @covers \Froxlor\Api\ApiParameter
|
|
* @covers \Froxlor\Api\Commands\SubDomains
|
|
* @covers \Froxlor\Api\Commands\DomainZones
|
|
*/
|
|
class DomainZonesTest extends TestCase
|
|
{
|
|
|
|
public function testCustomerDomainZonesGet()
|
|
{
|
|
global $admin_userdata;
|
|
|
|
Settings::Set('system.dnsenabled', 1, true);
|
|
Settings::Set('system.mxservers', 'mx.hostname.tld', true);
|
|
|
|
// get customer
|
|
$json_result = Customers::getLocal($admin_userdata, array(
|
|
'loginname' => 'test1'
|
|
))->get();
|
|
$customer_userdata = json_decode($json_result, true)['data'];
|
|
|
|
$data = [
|
|
'domainname' => 'test2.local'
|
|
];
|
|
$json_result = DomainZones::getLocal($customer_userdata, $data)->get();
|
|
$result = json_decode($json_result, true)['data'];
|
|
$this->assertTrue(count($result) > 1);
|
|
$this->assertEquals('$ORIGIN test2.local.', $result[1]);
|
|
$resstr = preg_replace('/\s+/', '', $result[count($result)-2]);
|
|
$against = preg_replace('/\s+/', '', '@ 604800 IN MX 10 mx.hostname.tld.');
|
|
$this->assertEquals($against, $resstr);
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @depends testCustomerDomainZonesGet
|
|
*/
|
|
public function testCustomerDomainZonesGetNoSubdomains()
|
|
{
|
|
global $admin_userdata;
|
|
|
|
// get customer
|
|
$json_result = Customers::getLocal($admin_userdata, array(
|
|
'loginname' => 'test1'
|
|
))->get();
|
|
$customer_userdata = json_decode($json_result, true)['data'];
|
|
|
|
$data = [
|
|
'domainname' => 'mysub2.test2.local'
|
|
];
|
|
$this->expectExceptionCode(406);
|
|
$this->expectExceptionMessage("DNS zones can only be generated for the main domain, not for subdomains");
|
|
DomainZones::getLocal($customer_userdata, $data)->get();
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @depends testCustomerDomainZonesGet
|
|
*/
|
|
public function testCustomerDomainZonesGetWithDMARC()
|
|
{
|
|
global $admin_userdata;
|
|
|
|
Settings::Set('dmarc.use_dmarc', 1, true);
|
|
|
|
// get customer
|
|
$json_result = Customers::getLocal($admin_userdata, array(
|
|
'loginname' => 'test1'
|
|
))->get();
|
|
$customer_userdata = json_decode($json_result, true)['data'];
|
|
|
|
$data = [
|
|
'domainname' => 'test2.local'
|
|
];
|
|
$json_result = DomainZones::getLocal($customer_userdata, $data)->get();
|
|
$result = json_decode($json_result, true)['data'];
|
|
$this->assertTrue(count($result) > 1);
|
|
$foundCnt = 0;
|
|
$foundStr = '';
|
|
foreach ($result as $entry) {
|
|
if (substr($entry, 0, 7) == '_dmarc ') {
|
|
$foundCnt++;
|
|
$foundStr = $entry;
|
|
}
|
|
}
|
|
$this->assertEquals(1, $foundCnt);
|
|
$resstr = preg_replace('/\s+/', '', $foundStr);
|
|
$against = preg_replace('/\s+/', '', '_dmarc 604800 IN TXT v=DMARC1;p=none;');
|
|
$this->assertEquals($against, $resstr);
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @depends testCustomerDomainZonesGetWithDMARC
|
|
*/
|
|
public function testCustomerDomainZonesGetWithDMARCSubdomain()
|
|
{
|
|
global $admin_userdata;
|
|
|
|
// enable isemaildomain for subdomain
|
|
$json_result = Admins::getLocal($admin_userdata, array(
|
|
'loginname' => 'reseller'
|
|
))->get();
|
|
$reseller_userdata = json_decode($json_result, true)['data'];
|
|
$reseller_userdata['adminsession'] = 1;
|
|
$data = [
|
|
'domainname' => 'mysub2.test2.local',
|
|
'isemaildomain' => 1,
|
|
'customerid' => 1
|
|
];
|
|
$json_result = SubDomains::getLocal($reseller_userdata, $data)->update();
|
|
|
|
// get customer
|
|
$json_result = Customers::getLocal($admin_userdata, array(
|
|
'loginname' => 'test1'
|
|
))->get();
|
|
$customer_userdata = json_decode($json_result, true)['data'];
|
|
|
|
$data = [
|
|
'domainname' => 'test2.local'
|
|
];
|
|
$json_result = DomainZones::getLocal($customer_userdata, $data)->get();
|
|
$result = json_decode($json_result, true)['data'];
|
|
$foundCnt = 0;
|
|
$foundStr = '';
|
|
$this->assertTrue(count($result) > 1);
|
|
foreach ($result as $entry) {
|
|
if (substr($entry, 0, 14) == '_dmarc.mysub2 ') {
|
|
$foundCnt++;
|
|
$foundStr = $entry;
|
|
}
|
|
}
|
|
$this->assertEquals(1, $foundCnt);
|
|
$resstr = preg_replace('/\s+/', '', $foundStr);
|
|
$against = preg_replace('/\s+/', '', '_dmarc.mysub2 604800 IN TXT v=DMARC1;p=none;');
|
|
$this->assertEquals($against, $resstr);
|
|
}
|
|
|
|
public function testAdminDomainZonesUpdate()
|
|
{
|
|
global $admin_userdata;
|
|
$this->expectExceptionCode(303);
|
|
DomainZones::getLocal($admin_userdata)->update();
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @depends testCustomerDomainZonesGet
|
|
*/
|
|
public function testCustomerDomainZonesAddA()
|
|
{
|
|
global $admin_userdata;
|
|
|
|
// get customer
|
|
$json_result = Customers::getLocal($admin_userdata, array(
|
|
'loginname' => 'test1'
|
|
))->get();
|
|
$customer_userdata = json_decode($json_result, true)['data'];
|
|
|
|
$data = [
|
|
'domainname' => 'test2.local',
|
|
'record' => 'www2',
|
|
'type' => 'A',
|
|
'content' => '127.0.0.1'
|
|
];
|
|
$json_result = DomainZones::getLocal($customer_userdata, $data)->add();
|
|
$result = json_decode($json_result, true)['data'];
|
|
$this->assertTrue(count($result) > 1);
|
|
$found = false;
|
|
foreach ($result as $entry) {
|
|
if (substr($entry, 0, 4) == 'www2') {
|
|
$found = true;
|
|
break;
|
|
}
|
|
}
|
|
$this->assertTrue($found);
|
|
$this->assertEquals('www2 18000 IN A 127.0.0.1', $entry);
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @depends testCustomerDomainZonesAddA
|
|
*/
|
|
public function testAdminDomainZonesListing()
|
|
{
|
|
global $admin_userdata;
|
|
|
|
$data = [
|
|
'domainname' => 'test2.local',
|
|
'record' => 'www2',
|
|
'type' => 'A',
|
|
'content' => '127.0.0.1'
|
|
];
|
|
$json_result = DomainZones::getLocal($admin_userdata, $data)->listing();
|
|
$result = json_decode($json_result, true)['data'];
|
|
$this->assertEquals(1, $result['count']);
|
|
$this->assertEquals('www2', $result['list'][0]['record']);
|
|
|
|
$json_result = DomainZones::getLocal($admin_userdata, $data)->listingCount();
|
|
$result = json_decode($json_result, true)['data'];
|
|
$this->assertEquals(1, $result);
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @depends testCustomerDomainZonesAddA
|
|
*/
|
|
public function testCustomerDomainZonesAddAInvalid()
|
|
{
|
|
global $admin_userdata;
|
|
|
|
// get customer
|
|
$json_result = Customers::getLocal($admin_userdata, array(
|
|
'loginname' => 'test1'
|
|
))->get();
|
|
$customer_userdata = json_decode($json_result, true)['data'];
|
|
|
|
$data = [
|
|
'domainname' => 'test2.local',
|
|
'record' => 'www3',
|
|
'type' => 'A',
|
|
'content' => 'a.b.c.d',
|
|
'ttl' => - 1
|
|
];
|
|
$this->expectExceptionMessage("No valid IP address for A-record given");
|
|
DomainZones::getLocal($customer_userdata, $data)->add();
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @depends testCustomerDomainZonesAddA
|
|
*/
|
|
public function testCustomerDomainZonesAddADuplicate()
|
|
{
|
|
global $admin_userdata;
|
|
|
|
// get customer
|
|
$json_result = Customers::getLocal($admin_userdata, array(
|
|
'loginname' => 'test1'
|
|
))->get();
|
|
$customer_userdata = json_decode($json_result, true)['data'];
|
|
|
|
$data = [
|
|
'domainname' => 'test2.local',
|
|
'record' => 'www2',
|
|
'type' => 'A',
|
|
'content' => '127.0.0.1',
|
|
'ttl' => - 1
|
|
];
|
|
$this->expectExceptionMessage("Record already exists");
|
|
DomainZones::getLocal($customer_userdata, $data)->add();
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @depends testCustomerDomainZonesGet
|
|
*/
|
|
public function testCustomerDomainZonesAddAAAA()
|
|
{
|
|
global $admin_userdata;
|
|
|
|
// get customer
|
|
$json_result = Customers::getLocal($admin_userdata, array(
|
|
'loginname' => 'test1'
|
|
))->get();
|
|
$customer_userdata = json_decode($json_result, true)['data'];
|
|
|
|
$data = [
|
|
'domainname' => 'test2.local',
|
|
'record' => 'www3',
|
|
'type' => 'AAAA',
|
|
'content' => '::1'
|
|
];
|
|
$json_result = DomainZones::getLocal($customer_userdata, $data)->add();
|
|
$result = json_decode($json_result, true)['data'];
|
|
$this->assertTrue(count($result) > 1);
|
|
$found = false;
|
|
foreach ($result as $entry) {
|
|
if (substr($entry, 0, 4) == 'www3') {
|
|
$found = true;
|
|
break;
|
|
}
|
|
}
|
|
$this->assertTrue($found);
|
|
$this->assertEquals('www3 18000 IN AAAA ::1', $entry);
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @depends testCustomerDomainZonesAddA
|
|
*/
|
|
public function testCustomerDomainZonesAddAAAAInvalid()
|
|
{
|
|
global $admin_userdata;
|
|
|
|
// get customer
|
|
$json_result = Customers::getLocal($admin_userdata, array(
|
|
'loginname' => 'test1'
|
|
))->get();
|
|
$customer_userdata = json_decode($json_result, true)['data'];
|
|
|
|
$data = [
|
|
'domainname' => 'test2.local',
|
|
'record' => 'www4',
|
|
'type' => 'AAAA',
|
|
'content' => 'z:z123.123',
|
|
'ttl' => - 1
|
|
];
|
|
$this->expectExceptionMessage("No valid IP address for AAAA-record given");
|
|
DomainZones::getLocal($customer_userdata, $data)->add();
|
|
}
|
|
|
|
public function testAdminDomainZonesAddMX()
|
|
{
|
|
global $admin_userdata;
|
|
|
|
$data = [
|
|
'domainname' => 'test2.local',
|
|
'record' => '',
|
|
'type' => 'MX',
|
|
'prio' => 10,
|
|
'content' => 'mail.example.com.'
|
|
];
|
|
$json_result = DomainZones::getLocal($admin_userdata, $data)->add();
|
|
$result = json_decode($json_result, true)['data'];
|
|
$this->assertTrue(count($result) > 1);
|
|
$found = false;
|
|
foreach ($result as $entry) {
|
|
if (substr($entry, strlen('mail.example.com.') * - 1) == 'mail.example.com.') {
|
|
$found = true;
|
|
break;
|
|
}
|
|
}
|
|
$this->assertTrue($found);
|
|
$this->assertEquals('@ 18000 IN MX 10 mail.example.com.', $entry);
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @depends testAdminDomainZonesAddMX
|
|
*/
|
|
public function testAdminDomainZonesAddMXNoPrio()
|
|
{
|
|
global $admin_userdata;
|
|
|
|
$data = [
|
|
'domainname' => 'test2.local',
|
|
'record' => '',
|
|
'type' => 'MX',
|
|
'content' => 'mail.example.com.'
|
|
];
|
|
$this->expectExceptionMessage("Invalid MX priority given");
|
|
DomainZones::getLocal($admin_userdata, $data)->add();
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @depends testAdminDomainZonesAddMX
|
|
*/
|
|
public function testAdminDomainZonesAddMXInvalid()
|
|
{
|
|
global $admin_userdata;
|
|
|
|
$data = [
|
|
'domainname' => 'test2.local',
|
|
'record' => '',
|
|
'type' => 'MX',
|
|
'prio' => 20,
|
|
'content' => 'localhost'
|
|
];
|
|
$this->expectExceptionMessage("The MX content value must be a valid domain-name");
|
|
DomainZones::getLocal($admin_userdata, $data)->add();
|
|
}
|
|
|
|
public function testAdminDomainZonesAddCAAIssue()
|
|
{
|
|
global $admin_userdata;
|
|
|
|
$content = '0 issue "letsencrypt.org"';
|
|
$data = [
|
|
'domainname' => 'test2.local',
|
|
'record' => '@',
|
|
'type' => 'CAA',
|
|
'content' => $content
|
|
];
|
|
$json_result = DomainZones::getLocal($admin_userdata, $data)->add();
|
|
$result = json_decode($json_result, true)['data'];
|
|
$this->assertTrue(count($result) > 1);
|
|
$found = false;
|
|
foreach ($result as $entry) {
|
|
if (substr($entry, - strlen($content)) == $content) {
|
|
$found = true;
|
|
break;
|
|
}
|
|
}
|
|
$this->assertTrue($found);
|
|
$this->assertEquals('@ 18000 IN CAA 0 issue "letsencrypt.org"', $entry);
|
|
}
|
|
|
|
public function testAdminDomainZonesAddCAAIssueWithParameters()
|
|
{
|
|
global $admin_userdata;
|
|
|
|
$content = '0 issue "letsencrypt.org; account=230123"';
|
|
$data = [
|
|
'domainname' => 'test2.local',
|
|
'record' => '@',
|
|
'type' => 'CAA',
|
|
'content' => $content
|
|
];
|
|
$json_result = DomainZones::getLocal($admin_userdata, $data)->add();
|
|
$result = json_decode($json_result, true)['data'];
|
|
$this->assertTrue(count($result) > 1);
|
|
$found = false;
|
|
foreach ($result as $entry) {
|
|
if (substr($entry, strlen($content) * - 1) == $content) {
|
|
$found = true;
|
|
break;
|
|
}
|
|
}
|
|
$this->assertTrue($found);
|
|
$this->assertEquals('@ 18000 IN CAA ' . $content, $entry);
|
|
}
|
|
|
|
public function testAdminDomainZonesAddCAAIssueWithTwoParameters()
|
|
{
|
|
global $admin_userdata;
|
|
|
|
$content = '0 issue "letsencrypt.org; account=230123 policy=ev"';
|
|
$data = [
|
|
'domainname' => 'test2.local',
|
|
'record' => '@',
|
|
'type' => 'CAA',
|
|
'content' => $content
|
|
];
|
|
$json_result = DomainZones::getLocal($admin_userdata, $data)->add();
|
|
$result = json_decode($json_result, true)['data'];
|
|
$this->assertTrue(count($result) > 1);
|
|
$found = false;
|
|
foreach ($result as $entry) {
|
|
if (substr($entry, strlen($content) * - 1) == $content) {
|
|
$found = true;
|
|
break;
|
|
}
|
|
}
|
|
$this->assertTrue($found);
|
|
$this->assertEquals('@ 18000 IN CAA ' . $content, $entry);
|
|
}
|
|
|
|
public function testAdminDomainZonesAddCAAInvalidIssueValue()
|
|
{
|
|
global $admin_userdata;
|
|
|
|
$content = '0 issue ""letsencrypt.org"';
|
|
$data = [
|
|
'domainname' => 'test2.local',
|
|
'record' => '@',
|
|
'type' => 'CAA',
|
|
'content' => $content
|
|
];
|
|
$this->expectExceptionMessage("DNS content invalid");
|
|
DomainZones::getLocal($admin_userdata, $data)->add();
|
|
}
|
|
|
|
public function testAdminDomainZonesAddCAAInvalidIssueDomain()
|
|
{
|
|
global $admin_userdata;
|
|
|
|
$content = '0 issue "no-valid-domain"';
|
|
$data = [
|
|
'domainname' => 'test2.local',
|
|
'record' => '@',
|
|
'type' => 'CAA',
|
|
'content' => $content
|
|
];
|
|
$this->expectExceptionMessage("DNS content invalid");
|
|
DomainZones::getLocal($admin_userdata, $data)->add();
|
|
}
|
|
|
|
public function testAdminDomainZonesAddCAAInvalidIssueTld()
|
|
{
|
|
global $admin_userdata;
|
|
|
|
$content = '0 issue "no-valid-domai.n"';
|
|
$data = [
|
|
'domainname' => 'test2.local',
|
|
'record' => '@',
|
|
'type' => 'CAA',
|
|
'content' => $content
|
|
];
|
|
$this->expectExceptionMessage("DNS content invalid");
|
|
DomainZones::getLocal($admin_userdata, $data)->add();
|
|
}
|
|
|
|
public function testAdminDomainZonesAddCAAIssueWild()
|
|
{
|
|
global $admin_userdata;
|
|
|
|
$content = '0 issuewild "letsencrypt.org"';
|
|
$data = [
|
|
'domainname' => 'test2.local',
|
|
'record' => '@',
|
|
'type' => 'CAA',
|
|
'content' => $content
|
|
];
|
|
$json_result = DomainZones::getLocal($admin_userdata, $data)->add();
|
|
$result = json_decode($json_result, true)['data'];
|
|
$this->assertTrue(count($result) > 1);
|
|
$found = false;
|
|
foreach ($result as $entry) {
|
|
if (substr($entry, strlen($content) * - 1) == $content) {
|
|
$found = true;
|
|
break;
|
|
}
|
|
}
|
|
$this->assertTrue($found);
|
|
$this->assertEquals('@ 18000 IN CAA ' . $content, $entry);
|
|
}
|
|
|
|
public function testAdminDomainZonesAddCAAIssueWildWithParameters()
|
|
{
|
|
global $admin_userdata;
|
|
|
|
$content = '0 issuewild "letsencrypt.org; account=230123"';
|
|
$data = [
|
|
'domainname' => 'test2.local',
|
|
'record' => '@',
|
|
'type' => 'CAA',
|
|
'content' => $content
|
|
];
|
|
$json_result = DomainZones::getLocal($admin_userdata, $data)->add();
|
|
$result = json_decode($json_result, true)['data'];
|
|
$this->assertTrue(count($result) > 1);
|
|
$found = false;
|
|
foreach ($result as $entry) {
|
|
if (substr($entry, strlen($content) * - 1) == $content) {
|
|
$found = true;
|
|
break;
|
|
}
|
|
}
|
|
$this->assertTrue($found);
|
|
$this->assertEquals('@ 18000 IN CAA ' . $content, $entry);
|
|
}
|
|
|
|
public function testAdminDomainZonesAddCAAIssueWildWithTwoParameters()
|
|
{
|
|
global $admin_userdata;
|
|
|
|
$content = '0 issuewild "letsencrypt.org; account=230123 policy=ev"';
|
|
$data = [
|
|
'domainname' => 'test2.local',
|
|
'record' => '@',
|
|
'type' => 'CAA',
|
|
'content' => $content
|
|
];
|
|
$json_result = DomainZones::getLocal($admin_userdata, $data)->add();
|
|
$result = json_decode($json_result, true)['data'];
|
|
$this->assertTrue(count($result) > 1);
|
|
$found = false;
|
|
foreach ($result as $entry) {
|
|
if (substr($entry, strlen($content) * - 1) == $content) {
|
|
$found = true;
|
|
break;
|
|
}
|
|
}
|
|
$this->assertTrue($found);
|
|
$this->assertEquals('@ 18000 IN CAA ' . $content, $entry);
|
|
}
|
|
|
|
public function testAdminDomainZonesAddCAAInvalidIssueWildValue()
|
|
{
|
|
global $admin_userdata;
|
|
|
|
$content = '0 issuewild ""letsencrypt.org"';
|
|
$data = [
|
|
'domainname' => 'test2.local',
|
|
'record' => '@',
|
|
'type' => 'CAA',
|
|
'content' => $content
|
|
];
|
|
$this->expectExceptionMessage("DNS content invalid");
|
|
DomainZones::getLocal($admin_userdata, $data)->add();
|
|
}
|
|
|
|
public function testAdminDomainZonesAddCAAInvalidIssueWildDomain()
|
|
{
|
|
global $admin_userdata;
|
|
|
|
$content = '0 issuewild "no-valid-domain"';
|
|
$data = [
|
|
'domainname' => 'test2.local',
|
|
'record' => '@',
|
|
'type' => 'CAA',
|
|
'content' => $content
|
|
];
|
|
$this->expectExceptionMessage("DNS content invalid");
|
|
DomainZones::getLocal($admin_userdata, $data)->add();
|
|
}
|
|
|
|
public function testAdminDomainZonesAddCAAInvalidIssueWildTld()
|
|
{
|
|
global $admin_userdata;
|
|
|
|
$content = '0 issuewild "no-valid-domai.n"';
|
|
$data = [
|
|
'domainname' => 'test2.local',
|
|
'record' => '@',
|
|
'type' => 'CAA',
|
|
'content' => $content
|
|
];
|
|
$this->expectExceptionMessage("DNS content invalid");
|
|
DomainZones::getLocal($admin_userdata, $data)->add();
|
|
}
|
|
|
|
public function testAdminDomainZonesAddCAAIodefMail()
|
|
{
|
|
global $admin_userdata;
|
|
|
|
$content = '0 iodef "mailto:security@example.com"';
|
|
$data = [
|
|
'domainname' => 'test2.local',
|
|
'record' => '@',
|
|
'type' => 'CAA',
|
|
'content' => $content
|
|
];
|
|
$json_result = DomainZones::getLocal($admin_userdata, $data)->add();
|
|
$result = json_decode($json_result, true)['data'];
|
|
$this->assertTrue(count($result) > 1);
|
|
$found = false;
|
|
foreach ($result as $entry) {
|
|
if (substr($entry, strlen($content) * - 1) == $content) {
|
|
$found = true;
|
|
break;
|
|
}
|
|
}
|
|
$this->assertTrue($found);
|
|
$this->assertEquals('@ 18000 IN CAA ' . $content, $entry);
|
|
}
|
|
|
|
public function testAdminDomainZonesAddCAAIodefMailInvalid()
|
|
{
|
|
global $admin_userdata;
|
|
|
|
$content = '0 iodef "mailtosecurity@example.com"';
|
|
$data = [
|
|
'domainname' => 'test2.local',
|
|
'record' => '@',
|
|
'type' => 'CAA',
|
|
'content' => $content
|
|
];
|
|
$this->expectExceptionMessage("DNS content invalid");
|
|
DomainZones::getLocal($admin_userdata, $data)->add();
|
|
}
|
|
|
|
public function testAdminDomainZonesAddCAAIodefHttp()
|
|
{
|
|
global $admin_userdata;
|
|
|
|
$content = '0 iodef "http://iodef.example.com/"';
|
|
$data = [
|
|
'domainname' => 'test2.local',
|
|
'record' => '@',
|
|
'type' => 'CAA',
|
|
'content' => $content
|
|
];
|
|
$json_result = DomainZones::getLocal($admin_userdata, $data)->add();
|
|
$result = json_decode($json_result, true)['data'];
|
|
$this->assertTrue(count($result) > 1);
|
|
$found = false;
|
|
foreach ($result as $entry) {
|
|
if (substr($entry, strlen($content) * - 1) == $content) {
|
|
$found = true;
|
|
break;
|
|
}
|
|
}
|
|
$this->assertTrue($found);
|
|
$this->assertEquals('@ 18000 IN CAA ' . $content, $entry);
|
|
}
|
|
|
|
public function testAdminDomainZonesAddCAAIodefHttpInvalid()
|
|
{
|
|
global $admin_userdata;
|
|
|
|
$content = '0 iodef "http:/iodef.example.com/"';
|
|
$data = [
|
|
'domainname' => 'test2.local',
|
|
'record' => '@',
|
|
'type' => 'CAA',
|
|
'content' => $content
|
|
];
|
|
$this->expectExceptionMessage("DNS content invalid");
|
|
DomainZones::getLocal($admin_userdata, $data)->add();
|
|
}
|
|
|
|
public function testAdminDomainZonesAddCAAIodefHttps()
|
|
{
|
|
global $admin_userdata;
|
|
|
|
$content = '0 iodef "https://iodef.example.com/"';
|
|
$data = [
|
|
'domainname' => 'test2.local',
|
|
'record' => '@',
|
|
'type' => 'CAA',
|
|
'content' => $content
|
|
];
|
|
$json_result = DomainZones::getLocal($admin_userdata, $data)->add();
|
|
$result = json_decode($json_result, true)['data'];
|
|
$this->assertTrue(count($result) > 1);
|
|
$found = false;
|
|
foreach ($result as $entry) {
|
|
if (substr($entry, strlen($content) * - 1) == $content) {
|
|
$found = true;
|
|
break;
|
|
}
|
|
}
|
|
$this->assertTrue($found);
|
|
$this->assertEquals('@ 18000 IN CAA ' . $content, $entry);
|
|
}
|
|
|
|
public function testAdminDomainZonesAddCAAIodefHttpsInvalid()
|
|
{
|
|
global $admin_userdata;
|
|
|
|
$content = '0 iodef "https:/iodef.example.com/"';
|
|
$data = [
|
|
'domainname' => 'test2.local',
|
|
'record' => '@',
|
|
'type' => 'CAA',
|
|
'content' => $content
|
|
];
|
|
$this->expectExceptionMessage("DNS content invalid");
|
|
DomainZones::getLocal($admin_userdata, $data)->add();
|
|
}
|
|
|
|
public function testAdminDomainZonesAddCname()
|
|
{
|
|
global $admin_userdata;
|
|
|
|
$data = [
|
|
'domainname' => 'test2.local',
|
|
'record' => 'db',
|
|
'type' => 'CNAME',
|
|
'content' => 'db.example.com.'
|
|
];
|
|
$json_result = DomainZones::getLocal($admin_userdata, $data)->add();
|
|
$result = json_decode($json_result, true)['data'];
|
|
$this->assertTrue(count($result) > 1);
|
|
$found = false;
|
|
foreach ($result as $entry) {
|
|
if (substr($entry, strlen('db.example.com.') * - 1) == 'db.example.com.') {
|
|
$found = true;
|
|
break;
|
|
}
|
|
}
|
|
$this->assertTrue($found);
|
|
$this->assertEquals('db 18000 IN CNAME db.example.com.', $entry);
|
|
}
|
|
|
|
public function testAdminDomainZonesAddCnameLocal()
|
|
{
|
|
global $admin_userdata;
|
|
|
|
$data = [
|
|
'domainname' => 'test2.local',
|
|
'record' => 'db',
|
|
'type' => 'CNAME',
|
|
'content' => 'db2'
|
|
];
|
|
$json_result = DomainZones::getLocal($admin_userdata, $data)->add();
|
|
$result = json_decode($json_result, true)['data'];
|
|
$this->assertTrue(count($result) > 1);
|
|
$found = false;
|
|
foreach ($result as $entry) {
|
|
if (substr($entry, strlen('db2.test2.local.') * - 1) == 'db2.test2.local.') {
|
|
$found = true;
|
|
break;
|
|
}
|
|
}
|
|
$this->assertTrue($found);
|
|
$this->assertEquals('db 18000 IN CNAME db2.test2.local.', $entry);
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @depends testAdminDomainZonesAddCname
|
|
*/
|
|
public function testAdminDomainZonesAddCnameInvalid()
|
|
{
|
|
global $admin_userdata;
|
|
|
|
$data = [
|
|
'domainname' => 'test2.local',
|
|
'record' => '',
|
|
'type' => 'CNAME',
|
|
'content' => 'localhost.'
|
|
];
|
|
$this->expectExceptionMessage("Invalid domain-name for CNAME record");
|
|
DomainZones::getLocal($admin_userdata, $data)->add();
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @depends testAdminDomainZonesAddCname
|
|
*/
|
|
public function testAdminDomainZonesAddCnameInvalidWwwAlias()
|
|
{
|
|
global $admin_userdata;
|
|
|
|
// set domain to www-alias
|
|
$data = [
|
|
'domainname' => 'test2.local',
|
|
'selectserveralias' => '1'
|
|
];
|
|
Domains::getLocal($admin_userdata, $data)->update();
|
|
|
|
$data = [
|
|
'domainname' => 'test2.local',
|
|
'record' => 'www',
|
|
'type' => 'CNAME',
|
|
'content' => 'testing.local'
|
|
];
|
|
$this->expectExceptionMessage('Cannot set CNAME record for "www" as domain is set to generate a www-alias. Please change settings to either "No alias" or "Wildcard alias"');
|
|
DomainZones::getLocal($admin_userdata, $data)->add();
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @depends testAdminDomainZonesAddCname
|
|
*/
|
|
public function testAdminDomainZonesAddForExistingCname()
|
|
{
|
|
global $admin_userdata;
|
|
|
|
// set domain to www-alias
|
|
$data = [
|
|
'domainname' => 'test2.local',
|
|
'selectserveralias' => '1'
|
|
];
|
|
Domains::getLocal($admin_userdata, $data)->update();
|
|
|
|
foreach ([
|
|
'A' => '127.0.0.1',
|
|
'AAAA' => '::1',
|
|
'MX' => 'mail.example.com.',
|
|
'NS' => 'ns.example.com.'
|
|
] as $type => $val) {
|
|
$data = [
|
|
'domainname' => 'test2.local',
|
|
'record' => 'db',
|
|
'type' => $type,
|
|
'content' => $val
|
|
];
|
|
$this->expectExceptionMessage('There already exists a CNAME record with the same record-name. It can not be used for another type.');
|
|
DomainZones::getLocal($admin_userdata, $data)->add();
|
|
}
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @depends testAdminDomainZonesAddCname
|
|
*/
|
|
public function testAdminDomainZonesAddCnameUnderscore()
|
|
{
|
|
global $admin_userdata;
|
|
|
|
$data = [
|
|
'domainname' => 'test2.local',
|
|
'record' => 'dkimtest',
|
|
'type' => 'CNAME',
|
|
'content' => 'test._domainkey.myhost.tld.'
|
|
];
|
|
$json_result = DomainZones::getLocal($admin_userdata, $data)->add();
|
|
$result = json_decode($json_result, true)['data'];
|
|
$this->assertTrue(count($result) > 1);
|
|
$found = false;
|
|
foreach ($result as $entry) {
|
|
if (substr($entry, strlen('test._domainkey.myhost.tld.') * - 1) == 'test._domainkey.myhost.tld.') {
|
|
$found = true;
|
|
break;
|
|
}
|
|
}
|
|
$this->assertTrue($found);
|
|
$this->assertEquals('dkimtest 18000 IN CNAME test._domainkey.myhost.tld.', $entry);
|
|
}
|
|
|
|
public function testAdminDomainZonesAddNS()
|
|
{
|
|
global $admin_userdata;
|
|
|
|
$data = [
|
|
'domainname' => 'test2.local',
|
|
'record' => '',
|
|
'type' => 'NS',
|
|
'content' => 'ns.example.com.'
|
|
];
|
|
$json_result = DomainZones::getLocal($admin_userdata, $data)->add();
|
|
$result = json_decode($json_result, true)['data'];
|
|
$this->assertTrue(count($result) > 1);
|
|
$found = false;
|
|
foreach ($result as $entry) {
|
|
if (substr($entry, strlen('ns.example.com.') * - 1) == 'ns.example.com.') {
|
|
$found = true;
|
|
break;
|
|
}
|
|
}
|
|
$this->assertTrue($found);
|
|
$this->assertEquals('@ 18000 IN NS ns.example.com.', $entry);
|
|
}
|
|
|
|
public function testAdminDomainZonesAddNsInvalid()
|
|
{
|
|
global $admin_userdata;
|
|
|
|
$data = [
|
|
'domainname' => 'test2.local',
|
|
'record' => '',
|
|
'type' => 'NS',
|
|
'content' => 'localhost.'
|
|
];
|
|
$this->expectExceptionMessage("Invalid domain-name for NS record");
|
|
DomainZones::getLocal($admin_userdata, $data)->add();
|
|
}
|
|
|
|
public function testAdminDomainZonesAddTXT()
|
|
{
|
|
global $admin_userdata;
|
|
|
|
$data = [
|
|
'domainname' => 'test2.local',
|
|
'record' => '_test1',
|
|
'type' => 'TXT',
|
|
'content' => 'aw yeah'
|
|
];
|
|
$json_result = DomainZones::getLocal($admin_userdata, $data)->add();
|
|
$result = json_decode($json_result, true)['data'];
|
|
$this->assertTrue(count($result) > 1);
|
|
$found = false;
|
|
foreach ($result as $entry) {
|
|
if (substr($entry, 0, 6) == '_test1') {
|
|
$found = true;
|
|
break;
|
|
}
|
|
}
|
|
$this->assertTrue($found);
|
|
$this->assertEquals('_test1 18000 IN TXT aw yeah', $entry);
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @depends testCustomerDomainZonesGetWithDMARC
|
|
*/
|
|
public function testAdminDomainZonesAddTXTCustomDMARC()
|
|
{
|
|
global $admin_userdata;
|
|
|
|
$data = [
|
|
'domainname' => 'test2.local',
|
|
'record' => '_dmarc',
|
|
'type' => 'TXT',
|
|
'content' => 'v=DMARC1;p=none;overwrite=TRUE'
|
|
];
|
|
$json_result = DomainZones::getLocal($admin_userdata, $data)->add();
|
|
$result = json_decode($json_result, true)['data'];
|
|
$this->assertTrue(count($result) > 1);
|
|
$foundCnt = 0;
|
|
$foundStr = '';
|
|
foreach ($result as $entry) {
|
|
if (substr($entry, 0, 7) == '_dmarc ') {
|
|
$foundCnt++;
|
|
$foundStr = $entry;
|
|
}
|
|
}
|
|
$this->assertEquals(1, $foundCnt);
|
|
$resstr = preg_replace('/\s+/', '', $foundStr);
|
|
$against = preg_replace('/\s+/', '', '_dmarc 18000 IN TXT v=DMARC1;p=none;overwrite=TRUE');
|
|
$this->assertEquals($against, $resstr);
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @depends testCustomerDomainZonesGetWithDMARCSubdomain
|
|
*/
|
|
public function testAdminDomainZonesAddTXTCustomDMARCSubdomain()
|
|
{
|
|
global $admin_userdata;
|
|
|
|
$data = [
|
|
'domainname' => 'test2.local',
|
|
'record' => '_dmarc.mysub2',
|
|
'type' => 'TXT',
|
|
'content' => 'v=DMARC1;p=none;overwrite=TRUE'
|
|
];
|
|
$json_result = DomainZones::getLocal($admin_userdata, $data)->add();
|
|
$result = json_decode($json_result, true)['data'];
|
|
$this->assertTrue(count($result) > 1);
|
|
$foundCnt = 0;
|
|
$foundStr = '';
|
|
foreach ($result as $entry) {
|
|
if (substr($entry, 0, 14) == '_dmarc.mysub2 ') {
|
|
$foundCnt++;
|
|
$foundStr = $entry;
|
|
}
|
|
}
|
|
$this->assertEquals(1, $foundCnt);
|
|
$resstr = preg_replace('/\s+/', '', $foundStr);
|
|
$against = preg_replace('/\s+/', '', '_dmarc.mysub2 18000 IN TXT v=DMARC1;p=none;overwrite=TRUE');
|
|
$this->assertEquals($against, $resstr);
|
|
}
|
|
|
|
public function testAdminDomainZonesAddSRV()
|
|
{
|
|
global $admin_userdata;
|
|
|
|
$data = [
|
|
'domainname' => 'test2.local',
|
|
'record' => '_test2',
|
|
'type' => 'SRV',
|
|
'prio' => 50,
|
|
'content' => '2 1 srv.example.com.'
|
|
];
|
|
$json_result = DomainZones::getLocal($admin_userdata, $data)->add();
|
|
$result = json_decode($json_result, true)['data'];
|
|
$this->assertTrue(count($result) > 1);
|
|
$found = false;
|
|
foreach ($result as $entry) {
|
|
if (substr($entry, 0, 6) == '_test2') {
|
|
$found = true;
|
|
break;
|
|
}
|
|
}
|
|
$this->assertTrue($found);
|
|
$this->assertEquals('_test2 18000 IN SRV 50 2 1 srv.example.com.', $entry);
|
|
}
|
|
|
|
public function testAdminDomainZonesAddSrvInvalid()
|
|
{
|
|
global $admin_userdata;
|
|
|
|
$data = [
|
|
'domainname' => 'test2.local',
|
|
'record' => '_test2',
|
|
'type' => 'SRV',
|
|
'prio' => 50,
|
|
'content' => 'srv.example.com.'
|
|
];
|
|
$this->expectExceptionMessage("Invalid SRV content, must contain of fields weight, port and target, e.g.: 5 5060 sipserver.example.com.");
|
|
DomainZones::getLocal($admin_userdata, $data)->add();
|
|
}
|
|
|
|
public function testCustomerDomainZonesDelete()
|
|
{
|
|
global $admin_userdata;
|
|
|
|
ob_start();
|
|
// get customer
|
|
$json_result = Customers::getLocal($admin_userdata, array(
|
|
'loginname' => 'test1'
|
|
))->get();
|
|
$customer_userdata = json_decode($json_result, true)['data'];
|
|
|
|
$data = [
|
|
'domainname' => 'test2.local',
|
|
'entry_id' => 1
|
|
];
|
|
$json_result = DomainZones::getLocal($customer_userdata, $data)->delete();
|
|
$result = json_decode($json_result, true);
|
|
$this->assertTrue($result['data']);
|
|
$this->assertEquals(200, http_response_code());
|
|
ob_end_clean();
|
|
}
|
|
|
|
public function testCustomerDomainZonesDeleteUnmodified()
|
|
{
|
|
global $admin_userdata;
|
|
|
|
ob_start();
|
|
// get customer
|
|
$json_result = Customers::getLocal($admin_userdata, array(
|
|
'loginname' => 'test1'
|
|
))->get();
|
|
$customer_userdata = json_decode($json_result, true)['data'];
|
|
|
|
$data = [
|
|
'domainname' => 'test2.local',
|
|
'entry_id' => 1337
|
|
];
|
|
$json_result = DomainZones::getLocal($customer_userdata, $data)->delete();
|
|
$result = json_decode($json_result, true);
|
|
$this->assertTrue($result['data']);
|
|
$this->assertEquals(304, http_response_code());
|
|
ob_end_clean();
|
|
}
|
|
}
|