mirror of
https://github.com/Ylianst/MeshCentral.git
synced 2024-09-11 08:55:32 +03:00
More work on Intel AMT One Click Recovery.
This commit is contained in:
parent
fd1248c391
commit
a8d1f32cfb
@ -866,14 +866,10 @@ module.exports.CreateAmtManager = function (parent) {
|
||||
if (status != 200) { dev.consoleMsg("Failed to get boot settings data (" + status + ")."); delete dev.ocrfile; return; }
|
||||
|
||||
// Generate the one-time URL.
|
||||
//var cookie = obj.parent.encodeCookie({ a: 'ocr', f: dev.ocrfile }, obj.parent.loginCookieEncryptionKey)
|
||||
//var url = 'https://' + parent.webserver.certificates.AmtMpsName + ':' + ((parent.args.mpsaliasport != null) ? parent.args.mpsaliasport : parent.args.mpsport) + '/ocr/' + cookie + '.iso';
|
||||
var cookie = obj.parent.encodeCookie({ a: 'f', f: dev.ocrfile }, obj.parent.loginCookieEncryptionKey)
|
||||
var url = 'https://' + parent.webserver.certificates.AmtMpsName + ':' + ((parent.args.mpsaliasport != null) ? parent.args.mpsaliasport : parent.args.mpsport) + '/c/' + cookie + '.iso';
|
||||
delete dev.ocrfile;
|
||||
|
||||
// DEBUG
|
||||
var url = 'https://' + parent.webserver.certificates.AmtMpsName + ':' + ((parent.args.mpsaliasport != null) ? parent.args.mpsaliasport : parent.args.mpsport) + '/ocr/abc.iso';
|
||||
console.log('OCR: ' + url);
|
||||
|
||||
// Generate the boot data for OCR with URL
|
||||
var r = response.Body;
|
||||
r['UefiBootParametersArray'] = Buffer.from(makeUefiBootParam(1, url) + makeUefiBootParam(20, 1, 1) + makeUefiBootParam(30, 0, 2), 'binary').toString('base64');
|
||||
|
20
mpsserver.js
20
mpsserver.js
@ -1185,6 +1185,25 @@ module.exports.CreateMpsServer = function (parent, db, args, certificates) {
|
||||
if ((directives.length != 3) || ((directives[0] != 'GET') && (directives[0] != 'HEAD'))) { this.end(); return; }
|
||||
//console.log('WebServer, request', directives[0], directives[1]);
|
||||
var responseCode = 404, responseType = 'application/octet-stream', responseData = '', r = null;
|
||||
|
||||
// Check if this is a cookie request
|
||||
if (directives[1].startsWith('/c/')) {
|
||||
var cookie = obj.parent.decodeCookie(directives[1].substring(3).split('.')[0], obj.parent.loginCookieEncryptionKey, 30); // 30 minute timeout
|
||||
if ((cookie != null) && (cookie.a == 'f') && (typeof cookie.f == 'string')) {
|
||||
// Send the file header and pipe the rest of the file
|
||||
var filestats = null;
|
||||
try { filestats = obj.fs.statSync(cookie.f); } catch (ex) { }
|
||||
if ((filestats == null) || (typeof filestats.size != 'number') || (filestats.size <= 0)) {
|
||||
responseCode = 404; responseType = 'text/html'; responseData = 'File not found';
|
||||
} else {
|
||||
this.write('HTTP/1.1 200 OK\r\n' + hostHeader + 'Content-Type: ' + responseType + '\r\nConnection: keep-alive\r\nContent-Length: ' + filestats.size + '\r\n\r\n');
|
||||
if (directives[0] == 'GET') { obj.fs.createReadStream(cookie.f, { flags: 'r' }).pipe(this); }
|
||||
delete this.xdata;
|
||||
return;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// Check if we have a preset response
|
||||
if (obj.httpResponses != null) { r = obj.httpResponses[directives[1]]; }
|
||||
if ((r != null) && (r.maxtime != null) && (r.maxtime < Date.now())) { r = null; delete obj.httpResponses[directives[1]]; } // Check if this entry is expired.
|
||||
if (r != null) {
|
||||
@ -1216,6 +1235,7 @@ module.exports.CreateMpsServer = function (parent, db, args, certificates) {
|
||||
responseType = 'text/html';
|
||||
responseData = 'Invalid request';
|
||||
}
|
||||
}
|
||||
this.write('HTTP/1.1 ' + responseCode + ' OK\r\n' + hostHeader + 'Connection: keep-alive\r\nContent-Type: ' + responseType + '\r\nContent-Length: ' + responseData.length + '\r\n\r\n');
|
||||
this.write(responseData);
|
||||
delete this.xdata;
|
||||
|
Loading…
Reference in New Issue
Block a user