summaryrefslogtreecommitdiffstats
path: root/modules-available/serversetup-bwlp/api.inc.php
diff options
context:
space:
mode:
Diffstat (limited to 'modules-available/serversetup-bwlp/api.inc.php')
-rw-r--r--modules-available/serversetup-bwlp/api.inc.php54
1 files changed, 38 insertions, 16 deletions
diff --git a/modules-available/serversetup-bwlp/api.inc.php b/modules-available/serversetup-bwlp/api.inc.php
index bc81d35d..4ed316a7 100644
--- a/modules-available/serversetup-bwlp/api.inc.php
+++ b/modules-available/serversetup-bwlp/api.inc.php
@@ -2,23 +2,40 @@
// Menu mode
+$serverIp = Property::getServerIp();
+
// Check if required arguments are given; if not, spit out according script and chain to self
$uuid = Request::any('uuid', false, 'string');
// Get platform - EFI or PCBIOS
$platform = Request::any('platform', false, 'string');
$manuf = Request::any('manuf', false, 'string');
$product = Request::any('product', false, 'string');
+$slxExtensions = Request::any('slx-extensions', false, 'int');
-if ($platform === false || ($uuid === false && $product === false)) {
+if ($platform === false || ($uuid === false && $product === false) || $slxExtensions === false) {
+ error_log(print_r($_SERVER, true));
+ sleep(1);
$url = parse_url($_SERVER['REQUEST_URI']);
- $urlbase = $url['path'];
+ if (isset($_SERVER['SCRIPT_URI']) && preg_match('#(\w+://[^/]+)#', $_SERVER['SCRIPT_URI'], $out)) {
+ $urlbase = $out[1];
+ } elseif (isset($_SERVER['REQUEST_SCHEME']) && isset($_SERVER['SERVER_NAME'])) {
+ $urlbase = $_SERVER['REQUEST_SCHEME'] . '://' . $_SERVER['SERVER_NAME'];
+ } elseif (isset($_SERVER['REQUEST_SCHEME']) && isset($_SERVER['SERVER_ADDR'])) {
+ $urlbase = $_SERVER['REQUEST_SCHEME'] . '://' . $_SERVER['SERVER_ADDR'];
+ } else {
+ $urlbase = 'http://' . $serverIp;
+ }
+ $urlbase .= $url['path'];
if (empty($url['query'])) {
$arr = [];
} else {
parse_str($url['query'], $arr);
- $arr = array_map('urlencode', $arr);
+ foreach ($arr as &$v) {
+ $v = urlencode($v);
+ }
+ unset($v);
}
- $arr['uuid'] = '${uuid:uristring}';
+ $arr['uuid'] = '${uuid}';
$arr['mac'] = '${mac}';
$arr['manuf'] = '${manufacturer:uristring}';
$arr['product'] = '${product:uristring}';
@@ -27,11 +44,16 @@ if ($platform === false || ($uuid === false && $product === false)) {
foreach ($arr as $k => $v) {
$query .= $k . '=' . $v . '&';
}
- $query = substr($query, 0, -1);
+ //$query = substr($query, 0, -1);
echo <<<HERE
#!ipxe
+set slxtest:string something ||
+iseq \${slxtest:md5} \${} && set slxext 0 || set slxext 1 ||
+clear slxtest ||
+set self {$urlbase}{$query}slx-extensions=\${slxext}
:retry
-chain -ar $urlbase$query ||
+echo Chaining to \${self}
+chain -ar \${self} ||
echo Chaining to self failed with \${errno}, retrying in a bit...
sleep 5
goto retry
@@ -46,8 +68,6 @@ $BOOT_METHODS = [
'SANBOOT' => 'sanboot --no-describe',
];
-$serverIp = Property::getServerIp();
-
$ip = $_SERVER['REMOTE_ADDR'];
if (substr($ip, 0, 7) === '::ffff:') {
$ip = substr($ip, 7);
@@ -109,7 +129,11 @@ if (isset($BOOT_METHODS[$localboot])) {
$BOOT_METHODS = array_reverse($BOOT_METHODS);
}
-// TODO: Feature check for our own iPXE extensions, stay compatible to stock iPXE
+if ($slxExtensions) {
+ $slxConsoleUpdate = '--update';
+} else {
+ $slxConsoleUpdate = '';
+}
$output = <<<HERE
#!ipxe
@@ -172,15 +196,15 @@ cpair --foreground 7 --background 9 0
:slx_menu
-console --left 55 --top 88 --right 63 --bottom 64 --quick --keep --picture bg-menu ||
+console --left 55 --top 88 --right 63 --bottom 64 $slxConsoleUpdate --keep --picture bg-menu ||
HERE;
-$output .= $menu->getMenuDefinition('target', $platform);
+$output .= $menu->getMenuDefinition('target', $platform, $slxExtensions);
$output .= <<<HERE
-console --left 60 --top 130 --right 67 --bottom 86 --quick ||
+console --left 60 --top 130 --right 67 --bottom 86 $slxConsoleUpdate ||
goto \${target} ||
echo Could not find menu entry in script.
prompt Press any key to continue.
@@ -190,8 +214,6 @@ HERE;
$output .= $menu->getItemsCode($platform);
-// TODO: Work out memtest stuff. Needs to be put on server (install/update script) -- PCBIOS only? Chain EFI -> BIOS?
-
/*
:i5
@@ -202,8 +224,8 @@ goto init
:i8
set x:int32 0
:again
-console --left 60 --top 130 --right 67 --bottom 96 --picture bg-load --keep --quick ||
-console --left 55 --top 88 --right 63 --bottom 64 --picture bg-menu --keep --quick ||
+console --left 60 --top 130 --right 67 --bottom 96 --picture bg-load --keep ||
+console --left 55 --top 88 --right 63 --bottom 64 --picture bg-menu --keep ||
inc x
iseq \${x} 20 || goto again
prompt DONE. Press dein Knie.