Skip to content

Commit

Permalink
Change spaces to tabs
Browse files Browse the repository at this point in the history
  • Loading branch information
slawkens committed Aug 26, 2024
1 parent 327dcb5 commit 35e2835
Show file tree
Hide file tree
Showing 2 changed files with 112 additions and 113 deletions.
2 changes: 1 addition & 1 deletion system/functions.php
Original file line number Diff line number Diff line change
Expand Up @@ -1041,7 +1041,7 @@ function load_config_lua($filename)
return $result;
}

function str_replace_first($search, $replace, $subject) {
function str_replace_first($search,$replace, $subject) {
$pos = strpos($subject, $search);
if ($pos !== false) {
return substr_replace($subject, $replace, $pos, strlen($search));
Expand Down
223 changes: 111 additions & 112 deletions system/src/RateLimit.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,116 +6,115 @@

class RateLimit
{

public string $key;
public int $max_attempts;
public int $ttl;
public $enabled = false;
protected array $data;

public function __construct(string $key, int $max_attempts, int $ttl)
{
$this->key = $key;
$this->max_attempts = $max_attempts;
$this->ttl = $ttl;
}

public function attempts(string $ip): int
{
if (!$this->enabled) {
return 0;
}

if (isset($this->data[$ip]['attempts'])) {
return $this->data[$ip]['attempts'];
}

return 0;
}

public function exceeded(string $ip): bool {
if (!$this->enabled) {
return false;
}

return $this->attempts($ip) > $this->max_attempts;
}

public function increment(string $ip): bool
{
global $cache;
if ($this->enabled && $cache->enabled()) {
if (isset($this->data[$ip]['attempts']) && isset($this->data[$ip]['last'])) {
$this->data[$ip]['attempts']++;
$this->data[$ip]['last'] = time();
} else {
$this->data[$ip] = [
'attempts' => 1,
'last' => time(),
];
}

$this->save();
}

return false;
}

public function reset(string $ip): void
{
if (!$this->enabled) {
return;
}

if (isset($this->data[$ip])) {
unset($this->data[$ip]);
}

$this->save();
}

public function save(): void
{
global $cache;
if (!$this->enabled) {
return;
}

$data = $this->data;
$cache->set($this->key, serialize($data), $this->ttl * 60);
}

public function load(): void
{
global $cache;
if (!$this->enabled) {
return;
}

$data = [];
if ($this->enabled && $cache->enabled()) {
$tmp = '';
if ($cache->fetch($this->key, $tmp)) {
$data = unserialize($tmp);
$to_remove = [];
foreach ($data as $ip => $t) {
if (time() - $t['last'] >= ($this->ttl * 60)) {
$to_remove[] = $ip;
}
}

if (count($to_remove)) {
foreach ($to_remove as $ip) {
unset($data[$ip]);
}

$this->save();
}
} else {
$data = [];
}
}

$this->data = $data;
}
public string $key;
public int $max_attempts;
public int $ttl;
public $enabled = false;
protected array $data;

public function __construct(string $key, int $max_attempts, int $ttl)
{
$this->key = $key;
$this->max_attempts = $max_attempts;
$this->ttl = $ttl;
}

public function attempts(string $ip): int
{
if (!$this->enabled) {
return 0;
}

if (isset($this->data[$ip]['attempts'])) {
return $this->data[$ip]['attempts'];
}

return 0;
}

public function exceeded(string $ip): bool {
if (!$this->enabled) {
return false;
}

return $this->attempts($ip) > $this->max_attempts;
}

public function increment(string $ip): bool
{
global $cache;
if ($this->enabled && $cache->enabled()) {
if (isset($this->data[$ip]['attempts']) && isset($this->data[$ip]['last'])) {
$this->data[$ip]['attempts']++;
$this->data[$ip]['last'] = time();
} else {
$this->data[$ip] = [
'attempts' => 1,
'last' => time(),
];
}

$this->save();
}

return false;
}

public function reset(string $ip): void
{
if (!$this->enabled) {
return;
}

if (isset($this->data[$ip])) {
unset($this->data[$ip]);
}

$this->save();
}

public function save(): void
{
global $cache;
if (!$this->enabled) {
return;
}

$data = $this->data;
$cache->set($this->key, serialize($data), $this->ttl * 60);
}

public function load(): void
{
global $cache;
if (!$this->enabled) {
return;
}

$data = [];
if ($this->enabled && $cache->enabled()) {
$tmp = '';
if ($cache->fetch($this->key, $tmp)) {
$data = unserialize($tmp);
$to_remove = [];
foreach ($data as $ip => $t) {
if (time() - $t['last'] >= ($this->ttl * 60)) {
$to_remove[] = $ip;
}
}

if (count($to_remove)) {
foreach ($to_remove as $ip) {
unset($data[$ip]);
}

$this->save();
}
} else {
$data = [];
}
}

$this->data = $data;
}
}

0 comments on commit 35e2835

Please sign in to comment.