Copyright (C) Rodolfo Berrios A. All rights reserved. BY USING THIS SOFTWARE YOU DECLARE TO ACCEPT THE CHEVERETO EULA http://chevereto.com/license --------------------------------------------------------------------- */ namespace CHV; use G, Exception; class Ip_ban { public static function getSingle($args=[]) { try { $args = array_merge([ 'ip' => G\get_client_ip() ], $args); $db = DB::getInstance(); $query = 'SELECT * FROM ' . DB::getTable('ip_bans') . ' WHERE '; if($args['id']) { $query .= 'ip_ban_id = :id;'; } else { $query .= ':ip LIKE ip_ban_ip AND (ip_ban_expires_gmt > :now OR ip_ban_expires_gmt IS NULL) ORDER BY ip_ban_id DESC;'; // wilcard are stored as % but displayed as * } $db->query($query); if($args['id']) { $db->bind(':id', $args['id']); } else { $db->bind(':ip', $args['ip']); $db->bind(':now', G\datetimegmt()); } $ip_ban = $db->fetchSingle(); if($ip_ban) { $ip_ban = DB::formatRow($ip_ban, 'ip_ban'); self::fill($ip_ban); return $ip_ban; } else { return false; } } catch(Exception $e) { throw new Ip_banException($e->getMessage(), 400); } } public static function getAll() { try { $ip_bans_raw = DB::get('ip_bans', 'all'); $ip_bans = []; if($ip_bans_raw) { foreach($ip_bans_raw as $ip_ban) { $idx = $ip_ban['ip_ban_id']; $ip_bans[$idx] = DB::formatRow($ip_ban, 'ip_ban'); self::fill($ip_bans[$idx]); } } return $ip_bans; } catch(Exception $e) { throw new Ip_banException($e->getMessage(), 400); } } public static function delete($args=[]) { try { return DB::delete('ip_bans', $args); } catch(Exception $e) { throw new Ip_banException($e->getMessage(), 400); } } public static function update($where=[], $values=[]) { try { if($values['ip']) { $values['ip'] = str_replace('*', '%', $values['ip']); } return DB::update('ip_bans', $values, $where); } catch(Exception $e) { throw new Ip_banException($e->getMessage(), 400); } } public static function insert($args=[]) { try { $args['ip'] = str_replace('*', '%', $args['ip']); return DB::insert('ip_bans', $args); } catch(Exception $e) { throw new Ip_banException($e->getMessage(), 400); } } public static function fill(&$ip_ban) { $ip_ban['ip'] = str_replace('%', '*', $ip_ban['ip']); } public static function validateIP($ip, $wilcards=TRUE) { $validate = TRUE; if($wilcards) { $base_ip = str_replace('*', '0', $ip); if(!G\is_valid_ip($ip) && !G\is_valid_ip($base_ip)) { $validate = FALSE; } } else { if(!G\is_valid_ip($ip)) { $validate = FALSE; } } if(!$validate) { throw new Ip_banException('Invalid IP address'); } return TRUE; } } class Ip_banException extends Exception {}