diff --git a/index.html b/index.html
index 1f19e84..b6ebb6a 100644
--- a/index.html
+++ b/index.html
@@ -2072,7 +2072,8 @@
// Create a web server to serve One Client Recovery (OCR) disk image files.
webserver = CreateWebServer();
webserver.generateCertificate();
- webserver.start(function () { webserver.setupBootImage('C:\\temp\\ubuntu-18.04-desktop-amd64.iso', '127.0.0.1'); });
+ //webserver.start(function () { webserver.setupBootImage('C:\\temp\\ubuntu-18.04-desktop-amd64.iso', '127.0.0.1'); });
+ webserver.start();
webserver.onTransfers = function (webserver, transfers) {
var x = '';
for (var i in transfers) { x += '
' + transfers[i].xfilename + '
'; }
@@ -9876,6 +9877,12 @@
addOption('d5actionSelect', "Reset to PXE", 400);
addOption('d5actionSelect', "Power on to PXE", 401);
// ###BEGIN###{PowerControl-Advanced}
+ // ###BEGIN###{PowerControl-OneClick}
+ if (amtPowerBootCapabilities['ForceUEFIHTTPSBoot'] == true) {
+ addOption('d5actionSelect', "Reset to HTTPS Boot", 600);
+ addOption('d5actionSelect', "Power on to HTTPS Boot", 601);
+ }
+ // ###END###{PowerControl-OneClick}
addOption('d5actionSelect', "Custom action...", 999);
// ###END###{PowerControl-Advanced}
if (amtversion > 5) { addOption('d5actionSelect', "User consent...", 998); } // On AMT 5 and higher, offer the option of doing user consent alone.
@@ -9885,8 +9892,31 @@
}
}
+ // ###BEGIN###{PowerControl-Advanced}
+ // ###BEGIN###{PowerControl-OneClick}
+ function oneClickFileSelect() { QE('idx_dlgOkButton', Q('ocrfile').files.length == 1); }
+ // ###END###{PowerControl-OneClick}
+ // ###END###{PowerControl-Advanced}
+
function powerActionDlgCheck() {
var action = d5actionSelect.value;
+
+ // ###BEGIN###{PowerControl-Advanced}
+ // ###BEGIN###{PowerControl-OneClick}
+ if ((action == 600) || (action == 601)) {
+ var x = "Select a disk image for remote boot." + '
';
+ setDialogMode(11, "HTTPS Boot", 3, function () {
+ var files = Q('ocrfile').files;
+ if (files.length != 1) return;
+ webserver.setupBootImage(files[0].path, wsstack.comm.socket.localAddress);
+ powerActionDlg();
+ }, x);
+ QE('idx_dlgOkButton', false);
+ return;
+ }
+ // ###END###{PowerControl-OneClick}
+ // ###END###{PowerControl-Advanced}
+
if ((action == 500) || (action == 501)) {
// Perform OS wake from standby or OS sleep (Intel AMT 10+)
amtstack.RequestOSPowerStateChange((action == 501)?3:2, function (stack, name, response, status) {
@@ -10183,7 +10213,17 @@
rsepass = null;
// ###BEGIN###{PowerControl-Advanced}
}
+
+ // ###BEGIN###{PowerControl-OneClick}
+ // Add OCR TLV parameters if firmware supports OCR and Force HTTPS Boot is requested
+ if ((action == 600) || (action == 601)) { // Force UEFI HTTPS Boot
+ r['UefiBootParametersArray'] = webserver.lastBootImageArgs.args;
+ r['UefiBootNumberOfParams'] = webserver.lastBootImageArgs.argscount;
+ r['BootMediaIndex'] = 0; // Do not use boot media index for One Click Recovery (OCR)
+ }
+ // ###END###{PowerControl-OneClick}
// ###END###{PowerControl-Advanced}
+
//if (((action == 104) || (action == 105)) && !r['SecureErase']) { /*console.log("This Intel® AMT does not support Secure Erase");*/ cleanup(); return; }
console.log("Boot Action: " + action);
console.log("Setting Boot Settings: " + ObjectToString2(r));
@@ -10206,13 +10246,22 @@
var action = d5actionSelect.value, bootSource = null;
// ###BEGIN###{PowerControl-Advanced}
if (action == 999) {
+ // ###BEGIN###{!PowerControl-OneClick}
if (idx_d24ForceBootDevice.value > 0) { bootSource = ['Force CD/DVD Boot', 'Force PXE Boot', 'Force Hard-drive Boot', 'Force Diagnostic Boot'][idx_d24ForceBootDevice.value - 1]; }
+ // ###END###{!PowerControl-OneClick}
+ // ###BEGIN###{PowerControl-OneClick}
+ if (idx_d24ForceBootDevice.value > 0) { bootSource = ['Force CD/DVD Boot', 'Force PXE Boot', 'Force Hard-drive Boot', 'Force Diagnostic Boot', 'Force OCR UEFI Boot Option ' + Q('idx_d24BootMediaIndex').value, 'Force OCR UEFI HTTPS Boot'][idx_d24ForceBootDevice.value - 1]; }
+ // ###END###{PowerControl-OneClick}
} else {
// ###END###{PowerControl-Advanced}
if (action == 300 || action == 301) { bootSource = 'Force Diagnostic Boot'; }
if (action == 400 || action == 401) { bootSource = 'Force PXE Boot'; }
- // ###BEGIN###{PowerControl-Advanced}
+ // ###BEGIN###{PowerControl-Advanced}
}
+
+ // Resetting Force boot data in case it was changed so that it won't be used on the next power action
+ Q('idx_d24ForceBootDevice').value = 0;
+
// ###END###{PowerControl-Advanced}
console.log('ChangeBootOrder: ' + bootSource);
amtstack.CIM_BootConfigSetting_ChangeBootOrder((bootSource == null)?bootSource:'http://schemas.xmlsoap.org/ws/2004/08/addressinghttp://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_BootSourceSettingIntel(r) AMT: ' + bootSource + '', powerActionResponse3);
@@ -10225,8 +10274,8 @@
//console.log("Performing Power State Change...");
statusbox("Power Action", "Performing power action...");
var action = d5actionSelect.value;
- if (action == 100 || action == 201 || action == 203 || action == 300 || action == 401) action = 2; // Power up
- if (action == 101 || action == 200 || action == 202 || action == 301 || action == 400) action = 10; // Reset
+ if (action == 100 || action == 201 || action == 203 || action == 300 || action == 401 || action == 601) action = 2; // Power up
+ if (action == 101 || action == 200 || action == 202 || action == 301 || action == 400 || action == 600) action = 10; // Reset
if (action == 104) action = 2; // Power on with Remote Secure Erase
if (action == 105) action = 10; // Reset with Remote Secure Erase
// ###BEGIN###{PowerControl-Advanced}
diff --git a/webserver-0.0.1.js b/webserver-0.0.1.js
index 9e5e3f5..86c2263 100644
--- a/webserver-0.0.1.js
+++ b/webserver-0.0.1.js
@@ -22,6 +22,7 @@ var CreateWebServer = function () {
obj.transfers = []; // List of currently active file transfers.
obj.transfersTimer = null; // When file transfers are active, this is a half second timer.
obj.onTransfers = null; // Callback for transfers status.
+ obj.lastBootImageArgs = null;
// Return a random number between min and max
function random(min, max) { return Math.floor(min + Math.random() * (max - min)); }
@@ -135,7 +136,7 @@ var CreateWebServer = function () {
var name = ('' + Math.random()).substring(2);
obj.responses['/' + name] = { type: 'application/octet-stream', file: filePath };
console.log('https://' + ip + ':' + obj.port + '/' + name);
- return {
+ obj.lastBootImageArgs = {
args: btoa(
makeUefiBootParam(1, 'http' + ((obj.cert != null)?'s':'') + '://' + ip + ':' + obj.port + '/' + name) + // OCR_EFI_NETWORK_DEVICE_PATH
makeUefiBootParam(20, 0, 1) + // OCR_HTTPS_CERT_SYNC_ROOT_CA
@@ -143,6 +144,7 @@ var CreateWebServer = function () {
makeUefiBootParam(30, 60, 2)), // OCR_HTTPS_REQUEST_TIMEOUT (60 seconds)
argscount: 4
};
+ return obj.lastBootImageArgs;
}
return obj;