luci-app-attendedsysupgrade: remove outdated checks

the upgrade server used to store a md5 checksum and the image filesize,
due to complexity this was removed.

Instead a sha256sums file is created by the IB with additional
signature. The firmware filesize can be retrived by requesting
Content-Length data.sysupgrade_url.

As the deeper layers (rpcd) currently do not offer an easy way to to
perform a sha256sum check & verify a usign sig these features will be
re-added once supported.

Until then the security of the sysupgrades depend on TLS and so the
luci-app is meant as a demonstration only.

Signed-off-by: Paul Spooren <paul@spooren.de>
This commit is contained in:
Paul Spooren 2017-12-27 03:10:56 +01:00
parent 99fea16179
commit 6638e4cdd5
2 changed files with 24 additions and 32 deletions

View file

@ -120,6 +120,5 @@
origin = document.location.href.replace(location.pathname, "")
ubus_url = origin + "/ubus/"
</script>
+<script type="text/javascript" src="<%=resource%>/attendedsysupgrade.js"></script>
<script type="text/javascript" src="<%=resource%>/attendedsysupgrade.js"></script>
<%+footer%>

View file

@ -71,7 +71,6 @@ function server_request(request_dict, path, callback) {
// initial setup, get system information
function setup() {
data["ubus_rpc_session"] = "<%=luci.dispatcher.context.authsession%>"
ubus_call("rpc-sys", "packagelist", {}, "packages");
ubus_call("system", "board", {}, "release");
ubus_call("system", "board", {}, "board_name");
@ -228,10 +227,11 @@ function upgrade_request_callback(request) {
// ready to download
var request_json = JSON.parse(request);
data.sysupgrade_url = request_json.sysupgrade;
data.checksum = request_json.checksum;
data.filesize = request_json.filesize;
info_output = "Firmware created"
var filename_split = data.sysupgrade_url.split("/")
data.filename = filename_split[filename_split.length - 1]
info_output = "Firmware created</br><b>" + data.filename + "</b>"
if(data.advanced_mode == 1) {
info_output += '</br><a target="_blank" href="' + data.sysupgrade_url + '.log">Build log</a>'
}
@ -266,7 +266,7 @@ function ping_ubus() {
});
request.addEventListener('load', function(event) {
info_box("Success! Please reload web interface");
$("#upgrade_button").value = "reload page";
$("#upgrade_button").value = "Reload page";
show("#upgrade_button");
$("#upgrade_button").disabled = false;
$("#upgrade_button").onclick = function() { location.reload(); }
@ -289,11 +289,7 @@ function upload_image(blob) {
request.addEventListener('load', function(event) {
request_json = JSON.parse(request.responseText)
if(data.checksum != request_json.checksum) {
error_box("Checksum missmatch! Please retry")
} else {
flash_image();
}
});
request.addEventListener('error', function(event) {
@ -307,9 +303,6 @@ function upload_image(blob) {
function download_image() {
// Download image from server once the url was received by upgrade_request
if(data.filesize > data.memory.free) {
error_box("Not enough free memory to download firmware. Please stop unneeded services on router and retry")
} else {
hide("#keep_container");
hide("#upgrade_button");
var download_request = new XMLHttpRequest();
@ -325,7 +318,6 @@ function download_image() {
info_box("Downloading firmware", true);
download_request.send();
}
}
function server_request(request_dict, path, callback) {
request_dict.distro = data.release.distribution;
@ -355,10 +347,11 @@ function server_request(request_dict, path, callback) {
info_box("Setting up ImageBuilder", true)
console.log("Setting up imagebuilder");
} else if(imagebuilder === "building") {
info_box("Building image");
info_box("Building image", true);
console.log("building");
} else {
info_box("Processing request");
// fallback if for some reasons the headers are missing e.g. browser blocks access
info_box("Processing request", true);
console.log(imagebuilder)
}
setTimeout(function() { server_request(request_dict, path, callback) }, 5000)