%PDF- %PDF-
| Direktori : /www/varak.net/dmarc.varak.net/plugins/Host/ExampleHostPlugin/ |
| Current File : //www/varak.net/dmarc.varak.net/plugins/Host/ExampleHostPlugin/ExampleHostPlugin_.php |
<?php
namespace Liuch\DmarcSrg\Plugins;
/**
* Example of the `host` group plugin.
*
* To activate the plugin, rename this file so that the file name (without extension)
* matches the name of the parent directory.
*
* The plugin must implement the `PluginInterface` interface.
* Currently `hostInformationStart`, `hostInformationFinish` events are processed.
* In this example, the `removeFields` method handles the `hostInformationStart` event,
* and the `modifyData` method handles the `hostInformationFinish` event.
* Note that in the both methods, the data array is passed by reference.
*
* The `removeFields` method can be used to filter the data being processed and displayed.
* Simply delete the fields you do not need in order to exclude them from processing.
*
* The `modifyData` method can be used to add, modify, reorder, and rename data items.
* If data elements are being replaced, such elements should be removed in the first step
* to eliminate unnecessary work.
*
* The plugin replaces two items and add new one in the Main section.
* Renames one item in the Statistics section, and adds a new section.
*
* ---------- Before -----------
*
* HOST INFORMATION
*
* IP address: 1.2.3.4
* rDNS name: host.domain.ltd
* Reverse IP: match
*
* STATISTICS
*
* Total reports: 5
* Total messages: 6
* Last report: Jan 1 2001
*
*
* ---------- After ------------
*
* HOST INFORMATION
*
* IP address: 1.2.3.4
* rDNS name: host.example.com
* Reverse IP: match
* ISP: ABC Telecom
*
* STATISTICS
*
* Total reports: 5
* Total messages: 6
* Last report date: Jan 1 2001
*
* PLUGIN INFORMATION
*
* Name: ExampleHost
* Version: 1.0
*/
class ExampleHostPlugin implements PluginInterface
{
/**
* Returns the name of the plugin. Used when displaying errors
*
* @return string Any string that identifies the plugin
*/
public function name(): string
{
return 'ExampleHostPlugin';
}
/**
* Associates events with handler method names and returns them as an array
*
* Available events are: `hostInformationStart`, `hostInformationFinish`
*
* @return array
*/
public function subscribedEvents(): array
{
return [
'hostInformationStart' => 'removeFields',
'hostInformationFinish' => 'modifyData'
];
}
/**
* Handles the `hostInformationStart` event (see the subscribedEvents method)
*
* To prevent the data item from being processed and displayed on the client,
* just remove the corresponding field from the array by the `fields` key.
*
* @param array &$data Array with the following keys:
* `ip` - Host IP address
* `event` - Event name
* `fields` - Array of strings with fields to get information for. Can be the following:
* 'main.rdns' - Reverse DNS name
* 'main.rip' - Reverse IP
* 'stats.reports' - Total reports
* 'stats.messages' - Total messages
* 'stats.last_report' - Last report date
* Note that the list of fields may vary depending on the client's needs.
*
* @return void
*/
public function removeFields(array &$data): void
{
// Note that if you remove the main.rdns item, the main.rip item will not be defined correctly
// because it relies on the value of main.rdns. So if you override the first one,
// you should override the second one as well.
$old_count = count($data['fields']);
$data['fields'] = array_filter($data['fields'], function ($fld) {
return $fld !== 'main.rdns' && $fld != 'main.rip';
});
$data['dns_removed'] = ($old_count > count($data['fields']));
}
/**
* Handles the `hostInformationFinish` event (see the subscribedEvents method)
*
* @param array &$data Array with the following keys:
* `ip` - Same as in the `removeFields` method
* `event` - Same as in the `removeFields` method
* `fields` - Same as in the `removeFields` method
* `result` - Array of [ 'field' => 'value' ] items
* The data from this array will be displayed
* in the same order as here, grouped by section name.
* The main section is displayed always displayed first.
*
* @return void
*/
public function modifyData(array &$data): void
{
// The host name, reverse IP and ISP name.
// The main section is always displayed first,
// so you can add items to the end of the array.
if ($data['dns_removed']) {
$data['result'][] = [ 'main.rdns', 'host.example.com' ];
$data['result'][] = [ 'main.rip', true ];
$data['result'][] = [ 'main.ISP', 'ABC Telecom' ];
}
// Plugin section
$data['result'][] = [ 'plugin.Name', 'ExampleHost' ];
$data['result'][] = [ 'plugin.Version', '1.0' ];
// Renaming a section
$data['dictionary']['plugin'] = 'Plugin information';
// Renaming an item
$data['dictionary']['stats.last_report'] = 'Last report date';
}
}