deviceService = $deviceService; $this->discoveredHostRepository = $discoveredHostRepository; $this->credentialRepository = $credentialRepository; } public function index(ServerRequestInterface $request, ResponseInterface $response): ResponseInterface { ob_start(); $username = $_SESSION['username'] ?? 'User'; $devices = $this->deviceService->getAllDevices(); require dirname(__DIR__, 2) . '/templates/devices/index.php'; $body = ob_get_clean(); $response->getBody()->write($body); return $response; } public function createForm(ServerRequestInterface $request, ResponseInterface $response): ResponseInterface { ob_start(); $username = $_SESSION['username'] ?? 'User'; $device = new Device(); $types = Device::$types; $importances = Device::$importances; require dirname(__DIR__, 2) . '/templates/devices/form.php'; $body = ob_get_clean(); $response->getBody()->write($body); return $response; } public function create(ServerRequestInterface $request, ResponseInterface $response): ResponseInterface { $data = $request->getParsedBody(); $device = new Device(); $device->name = trim($data['name'] ?? ''); $device->type = $data['type'] ?? 'unknown'; $device->description = trim($data['description'] ?? '') ?: null; $device->primaryIp = trim($data['primary_ip'] ?? '') ?: null; $device->macAddress = trim($data['mac_address'] ?? '') ?: null; $device->hostname = trim($data['hostname'] ?? '') ?: null; $device->vendor = trim($data['vendor'] ?? '') ?: null; $device->osName = trim($data['os_name'] ?? '') ?: null; $device->osVersion = trim($data['os_version'] ?? '') ?: null; $device->location = trim($data['location'] ?? '') ?: null; $device->importance = $data['importance'] ?? 'normal'; $this->deviceService->updateDevice($device); return $response ->withHeader('Location', '/devices') ->withStatus(302); } public function show(ServerRequestInterface $request, ResponseInterface $response, array $args): ResponseInterface { $id = (int)$args['id']; $device = $this->deviceService->getDevice($id); if ($device === null) { return $response->withStatus(404)->write('Device not found'); } ob_start(); $username = $_SESSION['username'] ?? 'User'; $types = Device::$types; $importances = Device::$importances; $credentials = $this->credentialRepository->findByDevice($id); require dirname(__DIR__, 2) . '/templates/devices/show.php'; $body = ob_get_clean(); $response->getBody()->write($body); return $response; } public function editForm(ServerRequestInterface $request, ResponseInterface $response, array $args): ResponseInterface { $id = (int)$args['id']; $device = $this->deviceService->getDevice($id); if ($device === null) { return $response->withStatus(404)->write('Device not found'); } ob_start(); $username = $_SESSION['username'] ?? 'User'; $types = Device::$types; $importances = Device::$importances; require dirname(__DIR__, 2) . '/templates/devices/form.php'; $body = ob_get_clean(); $response->getBody()->write($body); return $response; } public function update(ServerRequestInterface $request, ResponseInterface $response, array $args): ResponseInterface { $id = (int)$args['id']; $device = $this->deviceService->getDevice($id); if ($device === null) { return $response->withStatus(404)->write('Device not found'); } $data = $request->getParsedBody(); $device->name = trim($data['name'] ?? ''); $device->type = $data['type'] ?? 'unknown'; $device->description = trim($data['description'] ?? '') ?: null; $device->primaryIp = trim($data['primary_ip'] ?? '') ?: null; $device->macAddress = trim($data['mac_address'] ?? '') ?: null; $device->hostname = trim($data['hostname'] ?? '') ?: null; $device->vendor = trim($data['vendor'] ?? '') ?: null; $device->osName = trim($data['os_name'] ?? '') ?: null; $device->osVersion = trim($data['os_version'] ?? '') ?: null; $device->location = trim($data['location'] ?? '') ?: null; $device->importance = $data['importance'] ?? 'normal'; $device->status = $data['status'] ?? 'active'; $this->deviceService->updateDevice($device); return $response ->withHeader('Location', '/devices/' . $device->id) ->withStatus(302); } public function delete(ServerRequestInterface $request, ResponseInterface $response, array $args): ResponseInterface { $id = (int)$args['id']; $this->deviceService->deleteDevice($id); return $response ->withHeader('Location', '/devices') ->withStatus(302); } public function createFromHost(ServerRequestInterface $request, ResponseInterface $response): ResponseInterface { $data = $request->getParsedBody(); $hostId = $data['host_id'] ?? null; $name = trim($data['name'] ?? ''); if ($hostId === null || $name === '') { return $response->withStatus(400)->write('Host ID and name required'); } $host = $this->discoveredHostRepository->findById((int)$hostId); if ($host === null) { return $response->withStatus(404)->write('Host not found'); } $device = $this->deviceService->createFromDiscoveredHost( $name, $host->ipAddress, $host->macAddress, $host->hostname, $host->vendor ); // Mark host as accepted $host->status = 'accepted'; $host->matchedDeviceId = (string)$device->id; $this->discoveredHostRepository->save($host); return $response ->withHeader('Location', '/devices/' . $device->id) ->withStatus(302); } }