From: Rafał Miłecki <ra...@milecki.pl> This new ubus method provides more properly-formatted details about firmware file. Use it to check if uploaded image is valid.
The old "sysupgrade --test" method is left for now to provide stderr output. Signed-off-by: Rafał Miłecki <ra...@milecki.pl> --- .../resources/view/system/flash.js | 30 ++++++++++++------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js b/modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js index 9ad64dad4..784ec135b 100644 --- a/modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js +++ b/modules/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js @@ -2,7 +2,7 @@ 'require form'; 'require rpc'; -var callFileStat, callFileRead, callFileWrite, callFileExec, callFileRemove; +var callFileStat, callFileRead, callFileWrite, callFileExec, callFileRemove, callSystemValidateFirmwareImage; callFileStat = rpc.declare({ object: 'file', @@ -38,6 +38,12 @@ callFileRemove = rpc.declare({ params: [ 'path' ] }); +callSystemValidateFirmwareImage = rpc.declare({ + object: 'system', + method: 'validate_firmware_image', + params: [ 'path' ] +}); + function pingDevice(proto, ipaddr) { var target = '%s://%s%s?%s'.format(proto || 'http', ipaddr || window.location.host, L.resource('icons/loading.gif'), Math.random()); @@ -345,13 +351,17 @@ return L.view.extend({ E('span', { 'class': 'spinning' }, _('Verifying the uploaded image file.')) ]); + return callSystemValidateFirmwareImage('/tmp/firmware.bin') + .then(function(res) { return [ reply, res ]; }); + }, this, ev.target)) + .then(L.bind(function(btn, reply) { return callFileExec('/sbin/sysupgrade', [ '--test', '/tmp/firmware.bin' ]) - .then(function(res) { return [ reply, res ] }); + .then(function(res) { reply.push(res); return reply; }); }, this, ev.target)) .then(L.bind(function(btn, res) { var keep = document.querySelector('[data-name="keep"] input[type="checkbox"]'), force = E('input', { type: 'checkbox' }), - is_invalid = (res[1].code != 0), + is_valid = res[1].valid, is_too_big = (storage_size > 0 && res[0].size > storage_size), body = []; @@ -363,7 +373,7 @@ return L.view.extend({ E('li', {}, keep.checked ? _('Configuration files will be kept') : _('Caution: Configuration files will be erased')) ])); - if (is_invalid || is_too_big) + if (!is_valid || is_too_big) body.push(E('hr')); if (is_too_big) @@ -371,15 +381,15 @@ return L.view.extend({ _('It appears that you are trying to flash an image that does not fit into the flash memory, please verify the image file!') ])); - if (is_invalid) + if (!is_valid) body.push(E('p', { 'class': 'alert-message' }, [ - res[1].stderr ? res[1].stderr : '', - res[1].stderr ? E('br') : '', - res[1].stderr ? E('br') : '', + res[2].stderr ? res[2].stderr : '', + res[2].stderr ? E('br') : '', + res[2].stderr ? E('br') : '', _('The uploaded image file does not contain a supported format. Make sure that you choose the generic image format for your platform.') ])); - if (is_invalid || is_too_big) + if (!is_valid || is_too_big) body.push(E('p', {}, E('label', { 'class': 'btn alert-message danger' }, [ force, ' ', _('Force upgrade'), E('br'), E('br'), @@ -389,7 +399,7 @@ return L.view.extend({ var cntbtn = E('button', { 'class': 'btn cbi-button-action important', 'click': L.ui.createHandlerFn(this, 'handleSysupgradeConfirm', btn, keep.checked, force.checked), - 'disabled': (is_invalid || is_too_big) ? true : null + 'disabled': (!is_valid || is_too_big) ? true : null }, [ _('Continue') ]); body.push(E('div', { 'class': 'right' }, [ -- 2.21.0 _______________________________________________ openwrt-devel mailing list openwrt-devel@lists.openwrt.org https://lists.openwrt.org/mailman/listinfo/openwrt-devel