. * * @link https://www.librenms.org * * @copyright 2018 Tony Murray * @author Tony Murray */ namespace App\Http\Controllers\Table; use App\Models\PortsNac; use LibreNMS\Util\Mac; use LibreNMS\Util\Url; class PortNacController extends TableController { public function rules() { return [ 'device_id' => 'int', ]; } public function searchFields($request) { return ['username', 'ip_address', 'mac_address']; } protected function sortFields($request) { return [ 'device_id', 'port_id', 'mac_address', 'mac_oui', 'ip_address', 'vlan', 'domain', 'host_mode', 'username', 'authz_by', 'timeout', 'time_elapsed', 'time_left', 'authc_status', 'authz_status', 'method', ]; } /** * Defines the base query for this resource * * @param \Illuminate\Http\Request $request * @return \Illuminate\Database\Eloquent\Builder|\Illuminate\Database\Query\Builder */ public function baseQuery($request) { return PortsNac::select('device_id', 'port_id', 'mac_address', 'ip_address', 'vlan', 'domain', 'host_mode', 'username', 'authz_by', 'timeout', 'time_elapsed', 'time_left', 'authc_status', 'authz_status', 'method') ->when($request->device_id, fn ($q, $id) => $q->where('device_id', $id)) ->hasAccess($request->user()) ->with('port') ->with('device'); } /** * @param PortsNac $nac */ public function formatItem($nac) { $item = $nac->toArray(); $mac = Mac::parse($item['mac_address']); $item['port_id'] = Url::portLink($nac->port, $nac->port->getShortLabel()); $item['mac_oui'] = $mac->vendor(); $item['mac_address'] = $mac->readable(); $item['port'] = null; //free some unused data to be sent to the browser $item['device_id'] = Url::deviceLink($nac->device); return $item; } }