From 02616d3080af1e922fdeb747d1cb6690a52224f2 Mon Sep 17 00:00:00 2001 From: "Michael Kaufmann (d00p)" Date: Thu, 1 Mar 2018 16:46:47 +0100 Subject: [PATCH] minor fixes and first tests for Domains-ApiCommand Signed-off-by: Michael Kaufmann (d00p) --- install/scripts/config-services.php | 1 - lib/classes/api/commands/class.Domains.php | 8 -- .../function.getIpPortCombinations.php | 11 ++- tests/Domains/DomainsTest.php | 87 +++++++++++++++++++ 4 files changed, 92 insertions(+), 15 deletions(-) create mode 100644 tests/Domains/DomainsTest.php diff --git a/install/scripts/config-services.php b/install/scripts/config-services.php index 1799ec4e..c0c84aec 100755 --- a/install/scripts/config-services.php +++ b/install/scripts/config-services.php @@ -69,7 +69,6 @@ class ConfigServicesCmd extends CmdLineHandler self::println("--daemon\t\tWhen running --apply you can specify a daemon. This will be the only service that gets configured"); self::println("\t\t\tExample: --apply=/path/to/my-config.json --daemon=apache24"); self::println(""); - self::println(""); self::println("--import-settings\tImport settings from another froxlor installation. This should be done prior to running --apply or alternatively in the same command together."); self::println("\t\t\tExample: --import-settings=/path/to/Froxlor_settings-[version]-[dbversion]-[date].json"); self::println(""); diff --git a/lib/classes/api/commands/class.Domains.php b/lib/classes/api/commands/class.Domains.php index c68099eb..5db78a46 100644 --- a/lib/classes/api/commands/class.Domains.php +++ b/lib/classes/api/commands/class.Domains.php @@ -183,10 +183,6 @@ class Domains extends ApiCommand implements ResourceEntity ))->get(); $customer = json_decode($json_result, true)['data']; - if (empty($customer) || $customer['customerid'] != $customerid) { - standard_error('customerdoesntexist', '', true); - } - if ($this->getUserDetail('customers_see_all') == '1') { $admin_stmt = Database::prepare(" SELECT * FROM `" . TABLE_PANEL_ADMINS . "` @@ -194,10 +190,6 @@ class Domains extends ApiCommand implements ResourceEntity $admin = Database::pexecute_first($admin_stmt, array( 'adminid' => $adminid ), true, true); - - if (empty($admin) || $admin['adminid'] != $adminid) { - standard_error('admindoesntexist', '', true); - } } else { $adminid = $this->getUserDetail('adminid'); $admin = $this->getUserData(); diff --git a/lib/functions/froxlor/function.getIpPortCombinations.php b/lib/functions/froxlor/function.getIpPortCombinations.php index 1a0c75f6..b0a2346f 100644 --- a/lib/functions/froxlor/function.getIpPortCombinations.php +++ b/lib/functions/froxlor/function.getIpPortCombinations.php @@ -26,13 +26,12 @@ function getIpPortCombinations($ssl = false) { if ($userinfo['ip'] != '-1') { $admin_ip_stmt = Database::prepare(" - SELECT `id`, `ip`, `port` FROM `" . TABLE_PANEL_IPSANDPORTS . "` WHERE `id` = :ipid + SELECT `id`, `ip`, `port` FROM `" . TABLE_PANEL_IPSANDPORTS . "` WHERE `id` = IN (:ipid) "); - $admin_ip = Database::pexecute_first($admin_ip_stmt, array('ipid' => $userinfo['ip'])); - - $additional_conditions_array[] = "`ip` = :adminip"; - $additional_conditions_params['adminip'] = $admin_ip['ip']; - $admin_ip = null; + $myips = implode(",", json_decode($userinfo['ip'], true)); + Database::pexecute($admin_ip_stmt, array('ipid' => $myips)); + $additional_conditions_array[] = "`ip` IN (:adminips)"; + $additional_conditions_params['adminips'] = $myips; } if ($ssl !== null) { diff --git a/tests/Domains/DomainsTest.php b/tests/Domains/DomainsTest.php new file mode 100644 index 00000000..a196c7ef --- /dev/null +++ b/tests/Domains/DomainsTest.php @@ -0,0 +1,87 @@ + 'test1' + ))->get(); + $customer_userdata = json_decode($json_result, true)['data']; + $data = [ + 'domain' => 'test.local', + 'customerid' => $customer_userdata['customerid'] + ]; + $json_result = Domains::getLocal($admin_userdata, $data)->add(); + $result = json_decode($json_result, true)['data']; + $this->assertEquals($customer_userdata['documentroot'].'test.local/', $result['documentroot']); + } + + /** + * @depends testAdminDomainsAdd + */ + public function testAdminDomainsList() + { + global $admin_userdata; + $json_result = Domains::getLocal($admin_userdata)->list(); + $result = json_decode($json_result, true)['data']; + $this->assertEquals(1, $result['count']); + $this->assertEquals('test.local', $result['list'][0]['domain']); + } + + public function testAdminDomainsAddSysHostname() + { + global $admin_userdata; + $data = [ + 'domain' => 'dev.froxlor.org', + 'customerid' => 1 + ]; + $this->expectExceptionMessage('The server-hostname cannot be used as customer-domain.'); + $json_result = Domains::getLocal($admin_userdata, $data)->add(); + } + + public function testAdminDomainsAddNoPunycode() + { + global $admin_userdata; + $data = [ + 'domain' => 'xn--asdasd.tld', + 'customerid' => 1 + ]; + $this->expectExceptionMessage('You must not specify punycode (IDNA). The domain will automatically be converted'); + $json_result = Domains::getLocal($admin_userdata, $data)->add(); + } + + public function testAdminDomainsAddInvalidDomain() + { + global $admin_userdata; + $data = [ + 'domain' => 'dom?*ain.tld', + 'customerid' => 1 + ]; + $this->expectExceptionMessage("Wrong Input in Field 'Domain'"); + $json_result = Domains::getLocal($admin_userdata, $data)->add(); + } + + /** + * @depends testAdminDomainsList + */ + public function testAdminDomainsDelete() + { + global $admin_userdata; + $data = [ + 'domainname' => 'test.local', + 'delete_mainsubdomains' => 1 + ]; + $json_result = Domains::getLocal($admin_userdata, $data)->delete(); + $result = json_decode($json_result, true)['data']; + $this->assertEquals('test.local', $result['domain']); + } +}