diff --git a/scripts/http_server_auth.py b/scripts/http_server_auth.py index d49afdc..99c499b 100755 --- a/scripts/http_server_auth.py +++ b/scripts/http_server_auth.py @@ -105,7 +105,93 @@ def _do_GET(self, use_auth): resp += content.encode('ascii') self.wfile.write(resp) + def handle_firmware_update(self): + resp = b'' + resp += f'HTTP/1.0 200 OK\r\n'.encode('ascii') + resp += f'Content-type: application/json\r\n'.encode('ascii') + resp += f'Cache-Control: no-store, no-cache, must-revalidate, max-age=0\r\n'.encode('ascii') + resp += f'Pragma: no-cache\r\n'.encode('ascii') + resp += f'\r\n'.encode('ascii') + content = ''' + { + "latest": { + "version": "v1.14.3", + "url": "https://fwupdate.ruuvi.com/v1.14.3", + "created_at": "2023-10-06T11:26:07Z" + } + } + ''' + resp += content.encode('ascii') + self.wfile.write(resp) + + def handle_firmware_update_beta(self): + resp = b'' + resp += f'HTTP/1.0 200 OK\r\n'.encode('ascii') + resp += f'Content-type: application/json\r\n'.encode('ascii') + resp += f'Cache-Control: no-store, no-cache, must-revalidate, max-age=0\r\n'.encode('ascii') + resp += f'Pragma: no-cache\r\n'.encode('ascii') + resp += f'\r\n'.encode('ascii') + content = ''' +{ + "latest": { + "version": "v1.14.3", + "url": "https://fwupdate.ruuvi.com/v1.14.3", + "created_at": "2023-10-06T11:26:07Z" + }, + "beta": { + "version": "v1.14.2", + "url": "https://github.com/ruuvi/ruuvi.gateway_esp.c/releases/download/v1.14.2", + "created_at": "2023-09-19T11:16:48Z" + } +} + ''' + resp += content.encode('ascii') + self.wfile.write(resp) + + def handle_firmware_update_not_exist(self): + resp = b'' + resp += f'HTTP/1.0 200 OK\r\n'.encode('ascii') + resp += f'Content-type: application/json\r\n'.encode('ascii') + resp += f'Cache-Control: no-store, no-cache, must-revalidate, max-age=0\r\n'.encode('ascii') + resp += f'Pragma: no-cache\r\n'.encode('ascii') + resp += f'\r\n'.encode('ascii') + content = ''' + { + "latest": { + "version": "v1.14.9", + "url": "https://fwupdate.ruuvi.com/v1.14.9", + "created_at": "2023-09-19T11:16:48Z" + } + } + ''' + resp += content.encode('ascii') + self.wfile.write(resp) + + def handle_firmware_update_empty(self): + resp = b'' + resp += f'HTTP/1.0 200 OK\r\n'.encode('ascii') + resp += f'Content-type: application/json\r\n'.encode('ascii') + resp += f'Cache-Control: no-store, no-cache, must-revalidate, max-age=0\r\n'.encode('ascii') + resp += f'Pragma: no-cache\r\n'.encode('ascii') + resp += f'\r\n'.encode('ascii') + content = '{ "latest": { "version": "", "url": "", "created_at": "" } }' + resp += content.encode('ascii') + self.wfile.write(resp) + def do_GET(self): + print('GET %s' % self.path) + if self.path == '/firmwareupdate': + self.handle_firmware_update() + return + if self.path == '/firmwareupdate_beta': + self.handle_firmware_update_beta() + return + if self.path == '/firmwareupdate_not_exist': + self.handle_firmware_update_not_exist() + return + if self.path == '/firmwareupdate_empty': + self.handle_firmware_update_empty() + return if self._auth is None: self._do_GET(False) else: diff --git a/scripts/ruuvi_gw_http_server.py b/scripts/ruuvi_gw_http_server.py index 2f74845..5b2c71a 100755 --- a/scripts/ruuvi_gw_http_server.py +++ b/scripts/ruuvi_gw_http_server.py @@ -205,10 +205,6 @@ "version": "v1.16.0", "url": "https://github.com/ruuvi/ruuvi.gateway_esp.c/releases/download/v1.16.0/", "created_at": "2023-03-15T14:54:34Z" - }, - "alpha": { - "version": "1031", - "url": "https://jenkins.ruuvi.com/job/ruuvi_gateway_esp-PR/1031/artifact/build/" } } ''' @@ -220,10 +216,6 @@ "url":"https://fwupdate2.ruuvi.com/v1.15.1q", "created_at":"2023-12-10T14:54:34Z" }, - "alpha":{ - "version":"1056", - "url":"https://jenkins.ruuvi.com/job/ruuvi_gateway_esp-PR/1056/artifact/build/" - }, "beta":{ "version":"v1.15.2", "url":"https://github.com/ruuvi/ruuvi.gateway_esp.c/releases/download/v1.15.2", @@ -1512,6 +1504,9 @@ def _validate_url_check_check_fw_update_url(self, url): return self._resp_200_json_validate_url_status(404, "{\\\"message\\\":\\\"Not Found\\\"}" ) elif url == 'https://network.ruuvi2.com/firmwareupdate': return self._resp_200_json_validate_url_status(502, "Failed to resolve hostname") + elif url == 'https://network.ruuvi.com/firmwareupdate_empty': + return self._resp_200_json_validate_url_status(200, json='{ "latest": { "version": "", "url": "", "created_at": "" } }' ) + return self._resp_200_json_validate_url_status(400, "Error description") def _validate_url(self, url_with_params): @@ -1695,10 +1690,28 @@ def _do_get_status_json(self, resp): self.wfile.write(resp) def _do_get_firmware_update_json(self): - content = g_content_firmware_update_json - time.sleep(GET_FIRMWARE_UPDATE_TIMEOUT) resp = b'' - resp += f'HTTP/1.0 200 OK\r\n'.encode('ascii') + fw_update_url = g_ruuvi_dict['fw_update_url'] + if fw_update_url == 'https://network.ruuvi.com/firmwareupdate': + resp += f'HTTP/1.0 200 OK\r\n'.encode('ascii') + content = g_content_firmware_update_json + elif fw_update_url == 'https://network2.ruuvi.com/firmwareupdate': + resp += f'HTTP/1.0 200 OK\r\n'.encode('ascii') + content = g_content_firmware_update_json2 + elif fw_update_url == 'https://network.ruuvi.com/firmwareupdate2': + resp += f'HTTP/1.0 404 Not Found\r\n'.encode('ascii') + content = '' + elif fw_update_url == 'https://network.ruuvi2.com/firmwareupdate': + resp += f'HTTP/1.0 502 Bad Gateway\r\n'.encode('ascii') + content = '' + elif fw_update_url == 'https://network.ruuvi.com/firmwareupdate_empty': + resp += f'HTTP/1.0 200 OK\r\n'.encode('ascii') + content = '{ "latest": { "version": "", "url": "", "created_at": "" } }' + else: + resp += f'HTTP/1.0 400 Bad Request\r\n'.encode('ascii') + content = '' + + time.sleep(GET_FIRMWARE_UPDATE_TIMEOUT) resp += f'Content-type: application/json; charset=utf-8\r\n'.encode('ascii') resp += f'Cache-Control: no-store, no-cache, must-revalidate, max-age=0\r\n'.encode('ascii') resp += f'Pragma: no-cache\r\n'.encode('ascii') diff --git a/src/page_software_update.mjs b/src/page_software_update.mjs index 4a7f800..ef154d7 100644 --- a/src/page_software_update.mjs +++ b/src/page_software_update.mjs @@ -203,17 +203,26 @@ class PageSoftwareUpdate { } #on_get_latest_release_info (data) { - const { latest = {}, beta = {}, alpha = {} } = data + const { latest = {}, beta = {} } = data if (!('version' in latest) || !('url' in latest)) { console.warn("'latest' object should have 'version' and 'url' properties") - return false + this.#input_fw_update_server_url.setInvalid() + this.#text_fw_update_status_error_desc.setVal('Firmware update info is empty') + this.#div_fw_update_status_error.show() + throw new Error("Server returned incorrect firmware update info") + } + if ((latest.version === '') || (latest.url === '')) { + console.warn("latest.version and latest.url should not be empty") + this.#input_fw_update_server_url.setInvalid() + this.#text_fw_update_status_error_desc.setVal('Firmware update URL is empty or version is empty') + this.#div_fw_update_status_error.show() + this.#sect_advanced.enable() + throw new Error("Server returned incorrect firmware update info") } this.#latest_version = latest.version this.#latest_url = latest.url const beta_version = beta?.version const beta_url = beta?.url - const alpha_version = alpha?.version - const alpha_url = alpha?.url let m = this.#latest_version.match(/v(\d+)\.(\d+)\.(\d+)/) this.#flagLatestFirmwareVersionSupported = false