diff --git a/api/businesslogic/category/CategoryRetriever.php b/api/businesslogic/category/CategoryRetriever.php index 0a40bfda..fecdf8ec 100644 --- a/api/businesslogic/category/CategoryRetriever.php +++ b/api/businesslogic/category/CategoryRetriever.php @@ -12,7 +12,7 @@ use DataAccess\CategoryGateway; class CategoryRetriever { static function get_all_categories($hesk_settings) { - require_once(__DIR__ . '/../../dao/CategoryGateway.php'); + require_once(__DIR__ . '/../../dao/category/CategoryGateway.php'); return CategoryGateway::getAllCategories($hesk_settings); } diff --git a/api/businesslogic/security/BanRetriever.php b/api/businesslogic/security/BanRetriever.php new file mode 100644 index 00000000..a79aa7ff --- /dev/null +++ b/api/businesslogic/security/BanRetriever.php @@ -0,0 +1,46 @@ +email === $email) { + return true; + } + } + + return false; + } + + /** + * @param $ip int the IP address, converted beforehand using ip2long() + * @param $heskSettings + * @return bool + */ + static function isIpAddressBanned($ip, $heskSettings) { + require_once(__DIR__ . '/../../dao/security/BanGateway.php'); + + $bannedIps = BanGateway::getIpBans($heskSettings); + + foreach ($bannedIps as $bannedIp) { + if ($bannedIp->ipFrom <= $ip && $bannedIp->ipTo >= $ip) { + return true; + } + } + + return false; + } +} \ No newline at end of file diff --git a/api/businesslogic/security/BannedEmail.php b/api/businesslogic/security/BannedEmail.php new file mode 100644 index 00000000..8b612ed9 --- /dev/null +++ b/api/businesslogic/security/BannedEmail.php @@ -0,0 +1,32 @@ + $value) { - // TODO Only check categories that apply to this custom field if ($value['use'] == 1 && hesk_is_custom_field_in_category($key, intval($ticketRequest->category))) { $custom_field_value = $ticketRequest->customFields[$key]; if (empty($custom_field_value)) { diff --git a/api/dao/CategoryGateway.php b/api/dao/category/CategoryGateway.php similarity index 93% rename from api/dao/CategoryGateway.php rename to api/dao/category/CategoryGateway.php index 2ae16bee..b9e222d0 100644 --- a/api/dao/CategoryGateway.php +++ b/api/dao/category/CategoryGateway.php @@ -13,7 +13,7 @@ use Exception; class CategoryGateway { static function getAllCategories($hesk_settings) { - require_once(__DIR__ . '/../businesslogic/category/Category.php'); + require_once(__DIR__ . '/../../businesslogic/category/Category.php'); if (!function_exists('hesk_dbConnect')) { throw new Exception('Database not loaded!'); diff --git a/api/dao/security/BanGateway.php b/api/dao/security/BanGateway.php new file mode 100644 index 00000000..d1d9a829 --- /dev/null +++ b/api/dao/security/BanGateway.php @@ -0,0 +1,77 @@ +id = intval($row['id']); + $bannedEmail->email = $row['email']; + $bannedEmail->bannedById = $row['banned_by'] === null ? null : intval($row['banned_by']); + $bannedEmail->dateBanned = $row['dt']; + + $bannedEmails[$bannedEmail->id] = $bannedEmail; + } + + return $bannedEmails; + } + + /** + * @param $heskSettings + * @return BannedIp[] + */ + static function getIpBans($heskSettings) { + require_once(__DIR__ . '/../../businesslogic/security/BannedIp.php'); + + $rs = hesk_dbQuery("SELECT `bans`.`id` AS `id`, `bans`.`ip_from` AS `ip_from`, + `bans`.`ip_to` AS `ip_to`, `bans`.`ip_display` AS `ip_display`, + `users`.`id` AS `banned_by`, `bans`.`dt` AS `dt` + FROM `" . hesk_dbEscape($heskSettings['db_pfix']) . "_banned_ips` AS `bans` + LEFT JOIN `" . hesk_dbEscape($heskSettings['db_pfix']) . "_users` AS `users` + ON `bans`.`banned_by` = `users`.`id` + AND `users`.`active` = '1'"); + + $bannedIps = array(); + + while ($row = hesk_dbFetchAssoc($rs)) { + $bannedIp = new BannedIp(); + $bannedIp->id = intval($row['id']); + $bannedIp->ipFrom = intval($row['ip_from']); + $bannedIp->ipTo = intval($row['ip_to']); + $bannedIp->ipDisplay = $row['ip_display']; + $bannedIp->bannedById = $row['banned_by'] === null ? null : intval($row['banned_by']); + $bannedIp->dateBanned = $row['dt']; + + $bannedIps[$bannedIp->id] = $bannedIp; + } + + return $bannedIps; + } +} \ No newline at end of file diff --git a/api/dao/UserDao.php b/api/dao/security/UserGateway.php similarity index 88% rename from api/dao/UserDao.php rename to api/dao/security/UserGateway.php index a2e14c77..c533095a 100644 --- a/api/dao/UserDao.php +++ b/api/dao/security/UserGateway.php @@ -12,9 +12,9 @@ namespace DataAccess\Security; use BusinessLogic\Security\UserContextBuilder; use Exception; -class UserDao { +class UserGateway { static function getUserForAuthToken($hashedToken, $hesk_settings) { - require_once(__DIR__ . '/../businesslogic/security/UserContextBuilder.php'); + require_once(__DIR__ . '/../../businesslogic/security/UserContextBuilder.php'); if (!function_exists('hesk_dbConnect')) { throw new Exception('Database not loaded!');