new file: src/Controllers/AuthController.php
This commit is contained in:
@@ -61,7 +61,7 @@ class Report
|
||||
{
|
||||
$columnsDefinition = self::generateColumns([
|
||||
["title" => "id", "field" => "id", "visible" => false],
|
||||
["title" => "ip", "field" => "ip", 'formatter'=> 'ipFormatter'],
|
||||
["title" => "ip", "field" => "ip", 'formatter' => 'ipFormatter'],
|
||||
["title" => "domain", "field" => "domain", "visible" => false],
|
||||
["title" => "path", "field" => "path"],
|
||||
["title" => "useragent", "field" => "useragent"],
|
||||
@@ -70,6 +70,12 @@ class Report
|
||||
]);
|
||||
|
||||
$queryParams = self::parseQueryParams($request);
|
||||
if (!isset($queryParams['limit'])) {
|
||||
return [
|
||||
"columns" => $columnsDefinition,
|
||||
"rows" => [],
|
||||
];
|
||||
}
|
||||
$sql = "
|
||||
SELECT
|
||||
req.rowid AS id, ip.data AS ip, domain.data AS domain,
|
||||
@@ -97,11 +103,17 @@ class Report
|
||||
public static function count_requests_by_ip(ServerRequestInterface $request): PromiseInterface
|
||||
{
|
||||
$columnsDefinition = self::generateColumns([
|
||||
["title" => "ip", "field" => "ip_address", 'formatter'=> 'ipFormatter'],
|
||||
["title" => "ip", "field" => "ip_address", 'formatter' => 'ipFormatter'],
|
||||
["title" => "request_count", "field" => "request_count"],
|
||||
]);
|
||||
|
||||
$queryParams = self::parseQueryParams($request);
|
||||
if (!isset($queryParams['limit'])) {
|
||||
return [
|
||||
"columns" => $columnsDefinition,
|
||||
"rows" => [],
|
||||
];
|
||||
}
|
||||
$sql = "
|
||||
SELECT
|
||||
ip.data AS ip_address,
|
||||
@@ -110,16 +122,14 @@ class Report
|
||||
request
|
||||
INNER JOIN
|
||||
ip ON request.id_ip = ip.rowid
|
||||
WHERE
|
||||
request.timestamp BETWEEN ? AND ?
|
||||
GROUP BY
|
||||
ip.data
|
||||
ORDER BY
|
||||
request_count DESC
|
||||
LIMIT ?;
|
||||
|
||||
WHERE 1=1
|
||||
";
|
||||
|
||||
$params = [$queryParams['from'], $queryParams['to'], $queryParams['limit']];
|
||||
list($filterSQL, $filterParams) = self::prepareFilterClauses($queryParams['filter']);
|
||||
$sql .= $filterSQL . " AND request.timestamp BETWEEN ? AND ? GROUP BY
|
||||
ip.data ORDER BY request_count DESC LIMIT ?;";
|
||||
$params = array_merge($filterParams, [$queryParams['from'], $queryParams['to'], $queryParams['limit']]);
|
||||
|
||||
return self::executeQuery($sql, $params, $columnsDefinition);
|
||||
}
|
||||
@@ -132,6 +142,12 @@ class Report
|
||||
]);
|
||||
|
||||
$queryParams = self::parseQueryParams($request);
|
||||
if (!isset($queryParams['limit'])) {
|
||||
return [
|
||||
"columns" => $columnsDefinition,
|
||||
"rows" => [],
|
||||
];
|
||||
}
|
||||
$sql = "
|
||||
SELECT
|
||||
useragent.data AS id_useragent,
|
||||
@@ -140,16 +156,12 @@ class Report
|
||||
request
|
||||
INNER JOIN
|
||||
useragent ON request.id_useragent = useragent.rowid
|
||||
WHERE
|
||||
request.timestamp BETWEEN ? AND ?
|
||||
GROUP BY
|
||||
useragent.data
|
||||
ORDER BY
|
||||
request_count DESC
|
||||
LIMIT ?;
|
||||
WHERE 1=1
|
||||
";
|
||||
|
||||
$params = [$queryParams['from'], $queryParams['to'], $queryParams['limit']];
|
||||
list($filterSQL, $filterParams) = self::prepareFilterClauses($queryParams['filter']);
|
||||
$sql .= $filterSQL . " AND req.timestamp BETWEEN ? AND ? GROUP BY useragent.data ORDER BY request_count DESC LIMIT ?;";
|
||||
$params = array_merge($filterParams, [$queryParams['from'], $queryParams['to'], $queryParams['limit']]);
|
||||
|
||||
return self::executeQuery($sql, $params, $columnsDefinition);
|
||||
}
|
||||
@@ -157,13 +169,19 @@ class Report
|
||||
public static function top_ip_ua_path(ServerRequestInterface $request): PromiseInterface
|
||||
{
|
||||
$columnsDefinition = self::generateColumns([
|
||||
["title" => "ip", "field" => "ip", 'formatter'=> 'ipFormatter'],
|
||||
["title" => "ip", "field" => "ip", 'formatter' => 'ipFormatter'],
|
||||
["title" => "useragent", "field" => "user_agent"],
|
||||
["title" => "path", "field" => "path"],
|
||||
["title" => "count", "field" => "count"],
|
||||
]);
|
||||
|
||||
$queryParams = self::parseQueryParams($request);
|
||||
if (!isset($queryParams['limit'])) {
|
||||
return [
|
||||
"columns" => $columnsDefinition,
|
||||
"rows" => [],
|
||||
];
|
||||
}
|
||||
$sql = "
|
||||
SELECT
|
||||
ip.data AS ip,
|
||||
@@ -175,16 +193,14 @@ class Report
|
||||
JOIN ip ON request.id_ip = ip.rowid
|
||||
JOIN useragent ON request.id_useragent = useragent.rowid
|
||||
JOIN path ON request.id_path = path.rowid
|
||||
WHERE
|
||||
request.timestamp BETWEEN ? AND ?
|
||||
GROUP BY
|
||||
ip.data, useragent.data, path.data
|
||||
ORDER BY
|
||||
count DESC
|
||||
LIMIT ?;
|
||||
|
||||
WHERE 1=1
|
||||
";
|
||||
|
||||
$params = [$queryParams['from'], $queryParams['to'], $queryParams['limit']];
|
||||
list($filterSQL, $filterParams) = self::prepareFilterClauses($queryParams['filter']);
|
||||
$sql .= $filterSQL . " AND request.timestamp BETWEEN ? AND ? GROUP BY ip.data, useragent.data, path.data ORDER BY count DESC LIMIT ?;";
|
||||
|
||||
$params = array_merge($filterParams, [$queryParams['from'], $queryParams['to'], $queryParams['limit']]);
|
||||
|
||||
return self::executeQuery($sql, $params, $columnsDefinition);
|
||||
}
|
||||
@@ -192,12 +208,18 @@ class Report
|
||||
public static function top_ip_by_load(ServerRequestInterface $request): PromiseInterface
|
||||
{
|
||||
$columnsDefinition = self::generateColumns([
|
||||
["title" => "ip", "field" => "data", 'formatter'=> 'ipFormatter'],
|
||||
["title" => "ip", "field" => "data", 'formatter' => 'ipFormatter'],
|
||||
["title" => "avg_load", "field" => "avg_load"],
|
||||
["title" => "request_count", "field" => "request_count"],
|
||||
]);
|
||||
|
||||
$queryParams = self::parseQueryParams($request);
|
||||
if (!isset($queryParams['limit'])) {
|
||||
return [
|
||||
"columns" => $columnsDefinition,
|
||||
"rows" => [],
|
||||
];
|
||||
}
|
||||
$sql = "
|
||||
SELECT
|
||||
ip.data,
|
||||
@@ -211,17 +233,13 @@ class Report
|
||||
FROM load AS load_sub
|
||||
WHERE load_sub.rowid > request.timestamp
|
||||
)
|
||||
WHERE
|
||||
load.load1 > 1
|
||||
AND request.timestamp BETWEEN ? AND ?
|
||||
GROUP BY
|
||||
ip.data
|
||||
ORDER BY
|
||||
avg_load DESC, request_count DESC
|
||||
LIMIT ?;
|
||||
WHERE load.load1 > 1
|
||||
";
|
||||
|
||||
$params = [$queryParams['from'], $queryParams['to'], $queryParams['limit']];
|
||||
list($filterSQL, $filterParams) = self::prepareFilterClauses($queryParams['filter']);
|
||||
$sql .= $filterSQL . " AND request.timestamp BETWEEN ? AND ? GROUP BY ip.data ORDER BY avg_load DESC LIMIT ?;";
|
||||
|
||||
$params = array_merge($filterParams, [$queryParams['from'], $queryParams['to'], $queryParams['limit']]);
|
||||
|
||||
return self::executeQuery($sql, $params, $columnsDefinition);
|
||||
}
|
||||
@@ -229,11 +247,17 @@ class Report
|
||||
public static function top_ip_by_rps(ServerRequestInterface $request): PromiseInterface
|
||||
{
|
||||
$columnsDefinition = self::generateColumns([
|
||||
["title" => "ip", "field" => "ip_address", 'formatter'=> 'ipFormatter'],
|
||||
["title" => "ip", "field" => "ip_address", 'formatter' => 'ipFormatter'],
|
||||
["title" => "avg_request_per_second", "field" => "avg_request_per_second"],
|
||||
]);
|
||||
|
||||
$queryParams = self::parseQueryParams($request);
|
||||
if (!isset($queryParams['limit'])) {
|
||||
return [
|
||||
"columns" => $columnsDefinition,
|
||||
"rows" => [],
|
||||
];
|
||||
}
|
||||
$sql = "
|
||||
WITH TimestampIPRequests AS (
|
||||
SELECT
|
||||
@@ -266,13 +290,13 @@ SELECT
|
||||
FROM
|
||||
IPRequestPerSecond
|
||||
JOIN ip ON IPRequestPerSecond.id_ip = ip.rowid
|
||||
ORDER BY
|
||||
avg_request_per_second DESC
|
||||
LIMIT ?;
|
||||
|
||||
WHERE 1 = 1
|
||||
";
|
||||
|
||||
$params = [$queryParams['from'], $queryParams['to'], $queryParams['limit']];
|
||||
list($filterSQL, $filterParams) = self::prepareFilterClauses($queryParams['filter']);
|
||||
$sql .= $filterSQL . " GROUP BY ip.data ORDER BY avg_request_per_second DESC LIMIT ?;";
|
||||
$params = array_merge($filterParams, [$queryParams['from'], $queryParams['to'], $queryParams['limit']]);
|
||||
|
||||
return self::executeQuery($sql, $params, $columnsDefinition);
|
||||
}
|
||||
@@ -285,6 +309,12 @@ LIMIT ?;
|
||||
]);
|
||||
|
||||
$queryParams = self::parseQueryParams($request);
|
||||
if (!isset($queryParams['limit'])) {
|
||||
return [
|
||||
"columns" => $columnsDefinition,
|
||||
"rows" => [],
|
||||
];
|
||||
}
|
||||
$sql = "
|
||||
CREATE FUNCTION cidr_to_network(cidr VARCHAR(30), prefix INT) RETURNS VARCHAR(30)
|
||||
BEGIN
|
||||
|
||||
@@ -4,8 +4,6 @@ declare(strict_types=1);
|
||||
|
||||
namespace XBotControl;
|
||||
|
||||
use MaxMind\Db\Reader;
|
||||
|
||||
class Config
|
||||
{
|
||||
|
||||
@@ -32,7 +30,7 @@ class Config
|
||||
]);
|
||||
$this->smarty->compile_check = 1;
|
||||
if (isset($_ENV['GEOIP_DB_FILE_PATH'])) {
|
||||
$this->geoipreader = new Reader($_ENV['APP_DIR'].'/'.$_ENV['GEOIP_DB_FILE']);
|
||||
$this->geoipreader = new \MaxMind\Db\Reader($_ENV['APP_DIR'].'/'.$_ENV['GEOIP_DB_FILE']);
|
||||
}
|
||||
$dnsConfig = \React\Dns\Config\Config::loadSystemConfigBlocking();
|
||||
$dnsConfig->nameservers[] = '8.8.8.8';
|
||||
|
||||
30
src/Controllers/AuthController.php
Normal file
30
src/Controllers/AuthController.php
Normal file
@@ -0,0 +1,30 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace XBotControl\Controllers;
|
||||
|
||||
|
||||
use Psr\Http\Message\ServerRequestInterface;
|
||||
use React\Http\Message\Response;
|
||||
|
||||
|
||||
class AuthController
|
||||
{
|
||||
|
||||
|
||||
public function __invoke(ServerRequestInterface $request, callable $next)
|
||||
{
|
||||
|
||||
|
||||
if (isset($_SESSION['API_KEY']) && $_SESSION['API_KEY'] === $_ENV['API_KEY']) {
|
||||
return $next($request);
|
||||
}
|
||||
return new Response(
|
||||
Response::STATUS_FOUND,
|
||||
[
|
||||
'Location' => $_ENV['BASE_URI'] . '/login'
|
||||
]
|
||||
);
|
||||
}
|
||||
}
|
||||
34
src/Controllers/LoginController.php
Normal file
34
src/Controllers/LoginController.php
Normal file
@@ -0,0 +1,34 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace XBotControl\Controllers;
|
||||
|
||||
|
||||
use Psr\Http\Message\ServerRequestInterface;
|
||||
use React\Http\Message\Response;
|
||||
|
||||
class LoginController
|
||||
{
|
||||
|
||||
|
||||
public function __invoke(ServerRequestInterface $request): \React\Http\Message\Response
|
||||
{
|
||||
|
||||
$data = $request->getParsedBody();
|
||||
if ($data['api_key'] === $_ENV['API_KEY']) {
|
||||
$_SESSION['API_KEY'] = $_ENV['API_KEY'];
|
||||
$uri = $request->getUri();
|
||||
var_dump($uri->getPath() );
|
||||
return new Response(
|
||||
Response::STATUS_FOUND,
|
||||
[
|
||||
'Location' => $_ENV['BASE_URI'] . '/'
|
||||
]
|
||||
);
|
||||
}
|
||||
return Response::html(
|
||||
\XBotControl\Config::getInstance()->smarty->fetch('login.tpl')
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user