%PDF- %PDF-
| Direktori : /www/varak.net/nextcloud.varak.net/apps/bruteforcesettings/lib/Controller/ |
| Current File : /www/varak.net/nextcloud.varak.net/apps/bruteforcesettings/lib/Controller/IPWhitelistController.php |
<?php
declare(strict_types=1);
/**
* @copyright 2016, Roeland Jago Douma <roeland@famdouma.nl>
* @author Roeland Jago Douma <roeland@famdouma.nl>
* @license GNU AGPL version 3 or any later version
*
* SPDX-FileCopyrightText: 2016 Roeland Jago Douma <roeland@famdouma.nl>
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
namespace OCA\BruteForceSettings\Controller;
use OCP\AppFramework\Controller;
use OCP\AppFramework\Http;
use OCP\AppFramework\Http\JSONResponse;
use OCP\IConfig;
use OCP\IRequest;
class IPWhitelistController extends Controller {
/** @var IConfig */
private $config;
/**
* IPWhitelistController constructor.
*
* @param string $appName
* @param IRequest $request
* @param IConfig $config
*/
public function __construct(string $appName,
IRequest $request,
IConfig $config) {
parent::__construct($appName, $request);
$this->config = $config;
}
/**
* @return JSONResponse
*/
public function getAll(): JSONResponse {
$keys = $this->config->getAppKeys('bruteForce');
$keys = array_filter($keys, function ($key) {
$regex = '/^whitelist_/S';
return preg_match($regex, $key) === 1;
});
$result = [];
foreach ($keys as $key) {
$value = $this->config->getAppValue('bruteForce', $key);
$values = explode('/', $value);
$result[] = [
'id' => (int)substr($key, 10),
'ip' => $values[0],
'mask' => $values[1],
];
}
return new JSONResponse($result);
}
/**
* @param string $ip
* @param int $mask
* @return JSONResponse
*/
public function add(string $ip, int $mask): JSONResponse {
if (!filter_var($ip, FILTER_VALIDATE_IP) ||
(filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4) && ($mask < 0 || $mask > 32)) ||
(filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6) && ($mask < 0 || $mask > 128))) {
return new JSONResponse([], Http::STATUS_BAD_REQUEST);
}
$keys = $this->config->getAppKeys('bruteForce');
$keys = array_filter($keys, function ($key) {
$regex = '/^whitelist_/S';
return preg_match($regex, $key) === 1;
});
$id = 0;
foreach ($keys as $key) {
$tmp = (int)substr($key, 10);
if ($tmp > $id) {
$id = $tmp;
}
}
$id++;
$value = $ip . '/' . $mask;
$this->config->setAppValue('bruteForce', 'whitelist_'.$id, $value);
return new JSONResponse([
'id' => $id,
'ip' => $ip,
'mask' => $mask,
]);
}
/**
* @param int $id
* @return JSONResponse
*/
public function remove(int $id): JSONResponse {
$this->config->deleteAppValue('bruteForce', 'whitelist_'.$id);
return new JSONResponse([]);
}
}