$ip]); if ($c !== false) { Database::exec("INSERT INTO remoteaccess_machine (machineuuid, password) VALUES (:uuid, :passwd) ON DUPLICATE KEY UPDATE password = VALUES(password)", ['uuid' => $c['machineuuid'], 'passwd' => $password]); } exit; } $range = IpUtil::parseCidr(Property::get(RemoteAccess::PROP_ALLOWED_VNC_NET)); if ($range === false) { die('No allowed IP defined'); } $iplong = ip2long($ip); if (PHP_INT_SIZE === 4) { $iplong = sprintf('%u', $iplong); } if ($iplong < $range['start'] || $iplong > $range['end']) { die('Access denied'); } Header('Content-Type: application/json'); $remoteLocations = RemoteAccess::getEnabledLocations(); if (empty($remoteLocations)) { $rows = []; } else { // TODO fail-counter for WOL, so we can ignore machines that apparently can't be woken up // -> Reset counter in our ~poweron hook, but only if the time roughly matches a WOL attempt (within ~5 minutes) $rows = Database::queryAll("SELECT m.clientip, m.locationid, m.state, ram.password, ram.woltime FROM machine m LEFT JOIN remoteaccess_machine ram ON (ram.machineuuid = m.machineuuid AND (ram.password IS NOT NULL OR m.state <> 'IDLE')) LEFT JOIN runmode r ON (r.machineuuid = m.machineuuid) WHERE m.locationid IN (:locs) AND r.machineuuid IS NULL", ['locs' => $remoteLocations]); $wolCut = time() - 90; foreach ($rows as &$row) { if (($row['state'] === 'OFFLINE' || $row['state'] === 'STANDBY') && $row['woltime'] > $wolCut) { $row['wol_in_progress'] = true; } settype($row['locationid'], 'int'); unset($row['woltime']); } } $groups = Database::queryAll("SELECT g.groupid AS id, g.groupname AS name, GROUP_CONCAT(l.locationid) AS locationids, g.passwd AS password FROM remoteaccess_group g INNER JOIN remoteaccess_x_location l USING (groupid) WHERE g.active = 1 GROUP BY g.groupid"); foreach ($groups as &$group) { $group['locationids'] = explode(',', $group['locationids']); if (empty($group['password'])) { unset($group['password']); } settype($group['id'], 'int'); foreach ($group['locationids'] as &$lid) { settype($lid, 'int'); } } $fakeid = 100000; echo json_encode(['clients' => $rows, 'locations' => $groups]); // WTF, this makes the server return a 500 -.- //fastcgi_finish_request(); RemoteAccess::ensureMachinesRunning();