%PDF- %PDF-
Direktori : /www/varak.net/dmarc.varak.net/public/ |
Current File : /www/varak.net/dmarc.varak.net/public/hosts.php |
<?php /** * dmarc-srg - A php parser, viewer and summary report generator for incoming DMARC reports. * Copyright (C) 2025 Aleksey Andreev (liuch) * * Available at: * https://github.com/liuch/dmarc-srg * * This program is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation, either version 3 of the License. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along with * this program. If not, see <http://www.gnu.org/licenses/>. * * ========================= * * This script returns information about a host by its IP address * * HTTP GET query: * when the header 'Accept' is 'application/json': * It returns the host information defined by the passed parameters: * `host` string Host IP address * `fields` string Comma-separated list of fields to get information for. * Possible value are `main`, `stats`. * otherwise: * It returns an error. * Other HTTP methods: * It returns an error. * * @category Web * @package DmarcSrg * @author Aleksey Andreev (liuch) * @license https://www.gnu.org/licenses/gpl-3.0.html GNU/GPLv3 */ namespace Liuch\DmarcSrg; use Liuch\DmarcSrg\Hosts\Host; use Liuch\DmarcSrg\Users\User; use Liuch\DmarcSrg\Plugins\PluginManager; use Liuch\DmarcSrg\Exception\SoftException; use Liuch\DmarcSrg\Exception\RuntimeException; require realpath(__DIR__ . '/..') . '/init.php'; if (Core::isJson()) { try { $core = Core::instance(); if (Core::requestMethod() == 'GET') { $core->auth()->isAllowed(User::LEVEL_USER); if (isset($_GET['host']) && isset($_GET['fields'])) { $host = new Host($_GET['host']); $fields = explode(',', trim($_GET['fields'])); if (!count($fields) || count(array_diff( $fields, [ 'main.rdns', 'main.rip', 'stats.reports', 'stats.messages', 'stats.last_report' ] ))) { throw new SoftException('Incorrect field list'); } $res = []; if (count($fields)) { $data = [ 'ip' => $host, 'fields' => $fields ]; PluginManager::dispatchEvent('Host', 'hostInformationStart', $data); if (isset($data['fields'])) { $data['result'] = $host->information($data['fields']); PluginManager::dispatchEvent('Host', 'hostInformationFinish', $data); $res['data'] = $data['result'] ?? []; if (isset($data['dictionary'])) { $res['dictionary'] = $data['dictionary']; } } } Core::sendJson($res); return; } Core::sendJson([ 'error_code' => -1, 'message' => 'Bad request' ]); } } catch (RuntimeException $e) { Core::sendJson(ErrorHandler::exceptionResult($e)); } return; } Core::sendBad();