Fix extension manager access to sites with long 404 messages
This commit is contained in:
parent
37e097e378
commit
878cb0c085
@ -10,6 +10,7 @@ class Extension_manager
|
|||||||
static var EXT_REPO = "https://ota.tasmota.com/extensions/"
|
static var EXT_REPO = "https://ota.tasmota.com/extensions/"
|
||||||
static var EXT_REPO_MANIFEST = "extensions.jsonl"
|
static var EXT_REPO_MANIFEST = "extensions.jsonl"
|
||||||
static var EXT_REPO_FOLDER = "tapp/"
|
static var EXT_REPO_FOLDER = "tapp/"
|
||||||
|
var ext_repo
|
||||||
|
|
||||||
#####################################################################################################
|
#####################################################################################################
|
||||||
# init - constructor
|
# init - constructor
|
||||||
@ -17,6 +18,7 @@ class Extension_manager
|
|||||||
# Register as driver
|
# Register as driver
|
||||||
#
|
#
|
||||||
def init()
|
def init()
|
||||||
|
self.ext_repo = ""
|
||||||
tasmota.add_driver(self)
|
tasmota.add_driver(self)
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -66,23 +68,6 @@ class Extension_manager
|
|||||||
return wd[from .. to]
|
return wd[from .. to]
|
||||||
end
|
end
|
||||||
|
|
||||||
#####################################################################################################
|
|
||||||
# ext_repo_local()
|
|
||||||
#
|
|
||||||
# Takes OtaUrl, extract the host url and adds extensions/
|
|
||||||
# Ex: 'http://otaserver/ota/tasmota/tasmota32.bin' becomes 'http://otaserver/extensions/'
|
|
||||||
#
|
|
||||||
# @return string - the url of the local extensions repository
|
|
||||||
#####################################################################################################
|
|
||||||
static def ext_repo_local()
|
|
||||||
import string
|
|
||||||
|
|
||||||
var ota_url = tasmota.cmd("_OtaUrl", true)['OtaUrl']
|
|
||||||
var url = string.split(ota_url, "/")
|
|
||||||
var result = f"{url[0]}//{url[2]}/extensions/" # http://otaserver/extensions/
|
|
||||||
return result
|
|
||||||
end
|
|
||||||
|
|
||||||
#####################################################################################################
|
#####################################################################################################
|
||||||
# General functions to get information about tapp files (installed or from store)
|
# General functions to get information about tapp files (installed or from store)
|
||||||
#####################################################################################################
|
#####################################################################################################
|
||||||
@ -311,31 +296,20 @@ class Extension_manager
|
|||||||
# sanitize
|
# sanitize
|
||||||
tapp_fname = self.tapp_name(tapp_fname) + ".tapp"
|
tapp_fname = self.tapp_name(tapp_fname) + ".tapp"
|
||||||
# full url
|
# full url
|
||||||
var ext_url = f"{self.EXT_REPO}{self.EXT_REPO_FOLDER}{tapp_fname}"
|
var ext_url = f"{self.ext_repo}{self.EXT_REPO_FOLDER}{tapp_fname}"
|
||||||
var ext_repo = self.ext_repo_local()
|
log(f"EXT: installing from '{ext_url}'", 3)
|
||||||
var ext_url_local = f"{ext_repo}{self.EXT_REPO_FOLDER}{tapp_fname}"
|
|
||||||
# load from web
|
# load from web
|
||||||
try
|
try
|
||||||
# check if directory exists
|
# check if directory exists
|
||||||
self.check_or_create_dir(self.EXT_FOLDER) # raises an exception if failed
|
self.check_or_create_dir(self.EXT_FOLDER) # raises an exception if failed
|
||||||
|
|
||||||
var local_file = f"{self.EXT_FOLDER}{tapp_fname}"
|
var local_file = f"{self.EXT_FOLDER}{tapp_fname}"
|
||||||
var cl = webclient()
|
var cl = webclient()
|
||||||
log(f"EXT: installing from '{ext_url_local}'", 3)
|
cl.begin(ext_url)
|
||||||
cl.begin(ext_url_local)
|
|
||||||
var r = cl.GET()
|
var r = cl.GET()
|
||||||
if r != 200
|
if r != 200
|
||||||
cl.close()
|
log(f"EXT: return_code={r}", 2)
|
||||||
cl = webclient()
|
return false
|
||||||
if self.EXT_REPO != ext_repo
|
|
||||||
log(f"EXT: installing from '{ext_url}'", 3)
|
|
||||||
cl.begin(ext_url)
|
|
||||||
r = cl.GET()
|
|
||||||
end
|
|
||||||
if r != 200
|
|
||||||
log(f"EXT: return_code={r}", 2)
|
|
||||||
return false
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
var ret = cl.write_file(local_file)
|
var ret = cl.write_file(local_file)
|
||||||
cl.close()
|
cl.close()
|
||||||
@ -658,24 +632,35 @@ class Extension_manager
|
|||||||
#####################################################################################################
|
#####################################################################################################
|
||||||
def load_manifest()
|
def load_manifest()
|
||||||
try
|
try
|
||||||
|
import string
|
||||||
|
|
||||||
var arch = tasmota.arch() # architecture, ex: "esp32" - not used currently but might be useful
|
var arch = tasmota.arch() # architecture, ex: "esp32" - not used currently but might be useful
|
||||||
var version = f"0x{tasmota.version():08X}"
|
var version = f"0x{tasmota.version():08X}"
|
||||||
|
|
||||||
var url = f"{self.EXT_REPO}{self.EXT_REPO_MANIFEST}?a={arch}&v={version}"
|
# if !self.ext_repo
|
||||||
var ext_repo = self.ext_repo_local()
|
var ota_url = tasmota.cmd("OtaUrl", true)['OtaUrl']
|
||||||
var url_local = f"{ext_repo}{self.EXT_REPO_MANIFEST}?a={arch}&v={version}"
|
var url_parts = string.split(ota_url, "/")
|
||||||
|
self.ext_repo = f"{url_parts[0]}//{url_parts[2]}/extensions/" # http://otaserver/extensions/
|
||||||
|
# end
|
||||||
|
var url = f"{self.ext_repo}{self.EXT_REPO_MANIFEST}?a={arch}&v={version}"
|
||||||
|
log(f"EXT: fetching extensions manifest '{url}'", 3)
|
||||||
# Add architeture and version information
|
# Add architeture and version information
|
||||||
# They are not used for now but may be interesting in the future to serve
|
# They are not used for now but may be interesting in the future to serve
|
||||||
# different content based on architecture (Ex: ESP32) and version (ex: 0x0E060001 for 14.6.0.1)
|
# different content based on architecture (Ex: ESP32) and version (ex: 0x0E060001 for 14.6.0.1)
|
||||||
# load the template
|
# load extensions manifest
|
||||||
var cl = webclient()
|
var cl = webclient()
|
||||||
log(f"EXT: fetching extensions manifest '{url_local}'", 3)
|
cl.begin(url)
|
||||||
cl.begin(url_local)
|
|
||||||
var r = cl.GET()
|
var r = cl.GET()
|
||||||
if r != 200
|
if r != 200
|
||||||
cl.close()
|
if self.EXT_REPO != self.ext_repo
|
||||||
cl = webclient()
|
if cl.get_size() < 0 # Happens on https://github.com/extensions/extensions.jsonl where 404 page is a lot of data
|
||||||
if self.EXT_REPO != ext_repo
|
cl.deinit()
|
||||||
|
cl = webclient()
|
||||||
|
else
|
||||||
|
cl.close() # Fails to close if cl.get_size() < 0
|
||||||
|
end
|
||||||
|
self.ext_repo = self.EXT_REPO
|
||||||
|
url = f"{self.ext_repo}{self.EXT_REPO_MANIFEST}?a={arch}&v={version}"
|
||||||
log(f"EXT: fetching extensions manifest '{url}'", 3)
|
log(f"EXT: fetching extensions manifest '{url}'", 3)
|
||||||
cl.begin(url)
|
cl.begin(url)
|
||||||
r = cl.GET()
|
r = cl.GET()
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user