129 lines
3.0 KiB
PHP
129 lines
3.0 KiB
PHP
<?php
|
|
|
|
/* --------------------------------------------------------------------
|
|
|
|
Chevereto
|
|
http://chevereto.com/
|
|
|
|
@author Rodolfo Berrios A. <http://rodolfoberrios.com/>
|
|
<inbox@rodolfoberrios.com>
|
|
|
|
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 {} |