blob: dc78f4818b9eb0b58b389f315f562f6eaa3a5e55 (
plain) (
tree)
|
|
<?php
(function() {
$type = Request::any('type', null, 'string');
if ($type === null && isset($_SERVER['HTTP_USER_AGENT'])) {
if (preg_match('/^iPXE/', $_SERVER['HTTP_USER_AGENT'])) {
$type = 'ipxe';
} elseif (preg_match('/^GRUB/', $_SERVER['HTTP_USER_AGENT'])) {
$type = 'grub';
} elseif (preg_match('/wget|curl/i', $_SERVER['HTTP_USER_AGENT'])) {
$type = 'bash';
}
}
if ($type === 'bash') {
$builder = new ScriptBuilderBash();
} elseif ($type === 'grub') {
$builder = new ScriptBuilderGrub();
} else {
$builder = new ScriptBuilderIpxe();
}
$bootEntryId = Request::get('beid', false, 'string');
if ($bootEntryId !== false) {
$bootEntryId = Util::cleanUtf8($bootEntryId);
}
$entryId = Request::get('entryid', false, 'int');
if ($bootEntryId !== false) {
$entry = BootEntry::fromDatabaseId($bootEntryId);
$data = $builder->getBootEntry($entry);
} elseif ($entryId !== false) {
$entry = MenuEntry::get($entryId);
$data = $builder->getMenuEntry($entry);
} else {
// Get bootstrap code if required...
$data = $builder->bootstrapLive();
if ($data === false) {
// ...otherwise, generate normal code
$menuId = Request::get('menuid', false, 'int');
if ($menuId !== false) {
$menu = IPxeMenu::get($menuId, true);
} else {
$menu = IPxeMenu::forClient($builder->clientIp(), $builder->uuid());
}
$data = null;
if ($menu->itemCount() === 1 && $menu->timeoutMs() === 0) {
// One entry, no timeout -- direct boot
$entry = $menu->defaultEntry();
if ($entry !== null) {
$data = $builder->getMenuEntry($entry);
}
}
if ($data === null) {
// Show menu
$data = $builder->getMenu($menu, true);
}
}
}
$builder->output($data);
})();
|